Triton은 이전에 TensorRT Inference Server로 알려져 있습니다.
이번에는 모델을 직접 생성하지 않고, 기존에 만들어진 모델을 사용하겠습니다.
TensorRT을 사용하는 InferenceService 로 예측 하기
InferenceService 생성
InferenceService 매니페스트를 작성합니다. predictor로 tensorrt 를 사용합니다. storageUri
필드로 모델 저장 위치를 지정해 줍니다.
tensorrt.yaml
apiVersion: "serving.kubeflow.org/v1alpha2" kind: "InferenceService" metadata: name: "tensorrt-simple-string" spec: default: predictor: tensorrt: storageUri: "gs://kfserving-samples/models/tensorrt"
InferenceService 를 생성합니다.
다음은 admin 네임스페이스 InferenceService 를 생성하는 예제입니다.
kubectl -n admin apply -f tensorrt.yaml
생성한 InferenceService를 조회해 보겠습니다.
kubectl -n admin get inferenceservice
InferenceService 가 정상적으로 생성되면 다음과 같은 응답 결과를 확인할 수 있습니다.
NAME URL READY DEFAULT TRAFFIC CANARY TRAFFIC AGE tensorrt-simple-string <http://tensorrt-simple-string.admin.example.com/v1/models/tensorrt-simple-string> True 100 33s
예측 실행하기
예측을 요청하기 위해서는 모델 서버에 접근해야 합니다. 모델 서버는 ingressgateway 를 통해서 접근할 수 있습니다. ingressgateway 는 모델 서버들을 구분하기 위해서 호스트 이름을 사용합니다. ingressgateway에 접근하 기 위한 주소는 앞서 정의한 CLUSTER_IP 를 사용하겠습니다.
https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-guide/docs/client.html#section-client-api 에 나와 있는 클라이언트를 사용해서 요청을 하겠습니다. tensorrtserver_client 컨테이너를 실행시킨 후, 컨테이너 안에서 클라이언트는 사용합니다. 그래서 컨테이너 안에서 CLUSTER_IP 로 접근이 가능해야 합니다.
/etc/hosts 파일을 편집해서 CLUSTER_IP 를 tensorrt-simple-string.admin.example.com 과 맵핑시킵니다.
클라이언트를 사용하기 위해서, 컨테이너를 실행시킵니다.
docker run -it --rm --net=host kcorer/tensorrtserver_client:19.05
컨테이너 안에서 다음 명령어를 실행시킵니다.
root@trantor:/workspace# ./build/simple_string_client -u tensorrt-simple-string.admin.example.com
정상적으로 실행되면 다음과 같은 응답 결과를 확인 할 수 있습니다.
0 + 1 = 1 0 - 1 = -1 1 + 1 = 2 1 - 1 = 0 2 + 1 = 3 2 - 1 = 1 3 + 1 = 4 3 - 1 = 2 4 + 1 = 5 4 - 1 = 3 5 + 1 = 6 5 - 1 = 4 6 + 1 = 7 6 - 1 = 5 7 + 1 = 8 7 - 1 = 6 8 + 1 = 9 8 - 1 = 7 9 + 1 = 10 9 - 1 = 8