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 정의 후 사용

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:
2024-01-12 01:47:19,123 | INFO     | MODEL | Called
2024-01-12 01:47:19,124 | DEBUG    | MODEL | inputs: (2259, 1663, 3)
2024-01-12 01:47:19,124 | INFO     | MODEL | Inference start
2024-01-12 01:47:19,254 | DEBUG    | MODEL | outputs: (3, 4, 2) (3,)
2024-01-12 01:47:19,254 | INFO     | MODEL | Inference completed
Error Logs:
2024-01-12 02:03:24,288 | CRITICAL | MODEL | name 'test' is not defined
====================================================================================================
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
    return self.model(input_image)
File "/models/model/*/*.py", line *, in *
    test
NameError: name 'test' is not defined
====================================================================================================
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, model_name, port=8001)[source]

Bases: TritonClientURL

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

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

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

  • model_name (str) – 호출할 triton inference server 내 model의 이름

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

inputs

지정된 model의 입력

Type:

List[Dict[str, Any]]

outputs

지정된 model의 출력

Type:

List[Dict[str, Any]]

__call__()[source]

Model 호출 수행

Parameters:

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

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", "YOLO")
>>> tc.inputs
[{'name': 'images', 'data_type': 'TYPE_FP32', 'dims': ['1', '3', '640', '640']}]
>>> tc.outputs
[{'name': 'output0', 'data_type': 'TYPE_FP32', 'dims': ['1', '25200', '85']}]
>>> tc(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, model_name, port=8001)[source]

Bases: object

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

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

  • model_name (str) – 호출할 triton inference server 내 model의 이름

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

inputs

지정된 model의 입력

Type:

List[Dict[str, Any]]

outputs

지정된 model의 출력

Type:

List[Dict[str, Any]]

__call__()[source]

Model 호출 수행

Parameters:

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

Returns:

호출된 model의 결과

Return type:

Dict[str, NDArray[DTypeLike]]

Examples

>>> tc = zz.mlops.TritonClientURL("localhost", "YOLO")
>>> tc.inputs
[{'name': 'images', 'data_type': 'TYPE_FP32', 'dims': ['1', '3', '640', '640']}]
>>> tc.outputs
[{'name': 'output0', 'data_type': 'TYPE_FP32', 'dims': ['1', '25200', '85']}]
>>> tc(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)}