zerohertzLib.mlops

MLOps

MLOps에서 사용되는 class들

class zerohertzLib.mlops.BaseTritonPythonModel[source]

Bases: ABC

Triton Inference Server에서 Python backend 사용을 위한 class

Note

Abstract Base Class: Model의 추론을 수행하는 abstract method _inference 정의 후 사용

Hint

Logger의 색상 적용을 위해 아래와 같은 환경 변수 정의 필요

spec:
  template:
    spec:
      containers:
        - name: ${NAME}
          ...
          env:
            - name: "FORCE_COLOR"
            value: "1"
          ...
logger

Triton Inference Server 내 log를 출력하기 위한 instance

Type:

zerohertzLib.logging.Logger

_inference()[source]

Model 추론을 수행하는 private method (상속을 통한 재정의 필수)

Parameters:

inputs (NDArray[DTypeLike]) – Model 추론 시 사용될 입력 (config.pbtxt 의 입력에 따라 입력 결정)

Returns:

Model의 추론 결과

Return type:

Union[NDArray[DTypeLike], Tuple[NDArray[DTypeLike]]]

Examples

model.py:
class TritonPythonModel(zz.mlops.BaseTritonPythonModel):
    def initialize(self, args):
        super().initialize(args, 10)
        self.model = Model(cfg)

    def _inference(self, input_image):
        return self.model(input_image)
Normal Logs:
[04/04/24 00:00:00] INFO     [MODEL] Initialize                        triton.py:*
[04/04/24 00:00:00] INFO     [MODEL] Called                            triton.py:*
                    DEBUG    [MODEL] inputs: (3, 3, 3)                 triton.py:*
                    INFO     [MODEL] Inference start                   triton.py:*
                    DEBUG    [MODEL] outputs: (10,) (20,)              triton.py:*
                    INFO     [MODEL] Inference completed               triton.py:*
Error Logs:
[04/04/24 00:00:00] INFO     [MODEL] Called                            triton.py:*
                    INFO     [MODEL] Inference start                   triton.py:*
                    CRITICAL [MODEL] Hello, World!                     triton.py:*
                            ====================================================================================================
                            Traceback (most recent call last):
                            File "/usr/local/lib/python3.8/dist-packages/zerohertzLib/mlops/triton.py", line *, in execute
                                outputs = self._inference(*inputs)
                            File "/models/model/*/model.py", line *, in _inference
                                raise Exception("Hello, World!")
                            Exception: Hello, World!
                            ====================================================================================================
execute(requests)[source]

Triton Inference Server 호출 시 수행되는 method

Parameters:

requests (List[pb_utils.InferenceRequest]) – Client에서 전송된 model inputs

Returns:

Client에 응답할 model의 추론 결과

Return type:

List[pb_utils.InferenceResponse]

finalize()[source]

Triton Inference Server 종료 시 수행되는 method

initialize(args, level=20)[source]

Triton Inference Server 시작 시 수행되는 method

Parameters:
  • args (Dict[str, Any]) – config.pbtxt 에 포함된 model의 정보

  • level (Optional[int]) – Logger의 level

class zerohertzLib.mlops.TritonClientK8s(svc_name, namespace, port=8001, verbose=False)[source]

Bases: TritonClientURL

Kubernetes에서 실행되는 triton inference server의 호출을 위한 class

Parameters:
  • svc_name (str) – 호출할 triton inference server의 Kubernetes service의 이름

  • namespace (str) – 호출할 triton inference server의 namespace

  • port (Optional[int]) – triton inference server의 gRPC 통신 port 번호

  • verbose (Optional[bool]) – Verbose 출력 여부

__call__()[source]

Model 호출 수행

Parameters:
  • model (Union[int, str]) – 호출할 model의 이름 또는 ID

  • *args (NDArray[DTypeLike]) – Model 호출 시 사용될 입력

  • renew – (Optional[bool]): 각 모델의 상태 조회 시 갱신 여부

Returns:

호출된 model의 결과

Return type:

Dict[str, NDArray[DTypeLike]]

Examples

Kubernetes:
>>> kubectl get svc -n yolo
NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
fastapi-svc                   ClusterIP   10.106.72.126   <none>        80/TCP     90s
triton-inference-server-svc   ClusterIP   10.96.28.172    <none>        8001/TCP   90s
>>> docker exec -it ${API_CONTAINER} bash
Python:
>>> tc = zz.mlops.TritonClientK8s("triton-inference-server-svc", "yolo")
>>> tc("YOLO", np.zeros((1, 3, 640, 640)))
{'output0': array([[[3.90108061e+00, 3.51982164e+00, 7.49971962e+00, ...,
2.21481919e-03, 1.17585063e-03, 1.36753917e-03]]], dtype=float32)}
class zerohertzLib.mlops.TritonClientURL(url, port=8001, verbose=False)[source]

Bases: InferenceServerClient

외부에서 실행되는 triton inference server의 호출을 위한 class

Parameters:
  • url (str) – 호출할 triton inference server의 URL

  • port (Optional[int]) – triton inference server의 gRPC 통신 port 번호

  • verbose (Optional[bool]) – Verbose 출력 여부

__call__()[source]

Model 호출 수행

Parameters:
  • model (Union[int, str]) – 호출할 model의 이름 및 ID

  • *args (NDArray[DTypeLike]) – Model 호출 시 사용될 입력

  • renew – (Optional[bool]): 각 모델의 상태 조회 시 갱신 여부

Returns:

호출된 model의 결과

Return type:

Dict[str, NDArray[DTypeLike]]

Examples

>>> tc = zz.mlops.TritonClientURL("localhost")
>>> tc("YOLO", np.zeros((1, 3, 640, 640)))
{'output0': array([[[3.90108061e+00, 3.51982164e+00, 7.49971962e+00, ...,
2.21481919e-03, 1.17585063e-03, 1.36753917e-03]]], dtype=float32)}
load_model(model_name, headers=None, config=None, files=None, client_timeout=None)[source]

Triton Inference Server 내 model을 load하는 함수

Parameters:
  • model_name (Union[int, str]) – Load할 model의 이름 또는 ID

  • headers (Optional[Dict]) – Request 전송 시 포함할 추가 HTTP header

  • config (Optional[Dict]) – Model load 시 사용될 config

  • config – Model load 시 override model directory에서 사용할 file

  • client_timeout (Optional[float]) – 초 단위의 timeout

Examples

>>> tc.load_model(0)
>>> tc.load_model("MODEL_NAME")
status(renew=False, sortby='STATE', reverse=False)[source]

Triton Inferece Server의 상태를 확인하는 함수

Parameters:
  • renew – (Optional[bool]): 각 모델의 상태 조회 시 갱신 여부

  • sortby (Optional[str]) – 정렬 기준

  • reverse (Optional[bool]) – 정렬 역순 여부

Examples

>>> tc.status()
_images/mlops.TritonClientURL.status.gif
unload_model(model_name, headers=None, unload_dependents=False, client_timeout=None)[source]

Triton Inference Server 내 model을 unload하는 함수

Parameters:
  • model_name (Union[int, str]) – Unload할 model의 이름 또는 ID

  • headers (Optional[Dict]) – Request 전송 시 포함할 추가 HTTP header

  • unload_dependents (Optional[bool]) – Model unload 시 dependents의 unload 여부

  • client_timeout (Optional[float]) – 초 단위의 timeout

Examples

>>> tc.unload_model(0)
>>> tc.unload_model("MODEL_NAME")