-
Notifications
You must be signed in to change notification settings - Fork 1
torchserve 개요
-
Pre-Requistites
1.1. Torch Model Archiver(mar)
-
torch-model-archiver 명령어를 통해 실행
(https://github.com/pytorch/serve/tree/master/model-archiver)
- 사용자 handler 정의 (custom TorchServe inference logic)
-
자동 변환 (https://github.com/pytorch/serve/blob/master/examples/README.md)
.mar 포함 내용들
- serialized-file (.pt) : This file represents the state_dict in case of eager mode model.
- model-file (.py) : model architecture, parameter
- index_to_name.json : (default) predicted index and probability
- version
- handler
-
example: HuggingFace (https://github.com/pytorch/serve/tree/master/examples/Huggingface_Transformers)
Discussion.
-
torch.jit.trace 사용할 경우 TorchServe에 어떠한 장점이 있는가?
(Models could be a script_module (JIT saved models) or eager_mode_models)
-
onnx나 TensorRT와 달리 Network compression, Network optimization, computation을 최적화해주는 기능은 없다
-
-
Config (https://github.com/pytorch/serve)
예)
#Saving snapshot
#Tue Jul 28 05:55:26 GMT 2020
python=/home/venv/bin/python3
model_snapshot={\n "name"\: "bert.cfg",\n "modelCount"\: 1,\n "created"\: 1595915726520,\n "models"\: {\n "bert"\: {\n "1.0"\: {\n "defaultVersion"\: true,\n "marName"\: "bert.mar",\n "minWorkers"\: 8,\n "maxWorkers"\: 8,\n "batchSize"\: 1,\n "maxBatchDelay"\: 100,\n "responseTimeout"\: 120\n }\n }\n }\n}
version=0.1.1
load_models=bert\=bert.mar
snapshot_store=FS
NUM_WORKERS=8
model_store=model_store
number_of_gpu=0
Discussion.
- NUM_WORKERS, minWorkers, maxWorkers의 관계는?
- snapshot_store?
- model_store는 local 폴더외에 지원가능한가?
- Serving with Docker
- container 제공 해서 config만 잘 설정하면 serving 자체는 쉬움
-
But. MAR 파일 변경 전에 handler 동작하는 지 반드시 테스트 해야함
-
서빙 이후 디버깅 로그가 나오지만 변경이 쉽지 않음?
Discussion. 서빙 이후 코드 변경하여 MAR 다시 만들어야하는지? 핸들러만 찾아서 python script 고치면 되는지?
-
다중 서빙을 위해 static resources 위치를 고려하여 코딩해야함 (즉, 경로가 꼬일 수 있음)
- 예) config 파일로 resources 위치 관리 등
- 아니면 handler에 각종 utils.py를 다 넣어야할듯?
-
- Server ↔ Client
- Health Check 가능
- HTTP (REST) 가능
- gRPC 제공여부 모름
- streaming을 효율적으로 처리할 방법에 대한 논의 필요
- 테스트
- GPU 다중 접속 테스트 필요
- 다중 접속 시 tps 등 측정 필요
- 총평
- 사용하기 쉽다
- gunicorn + flask 조합 등 보다 신경써야할 부분이 적은 것으로 보이나 (아직 경험이 필요하다)
- tf-server, onnx server, TensorRT 보다 모형 최적화는 잘 되어 있지 않지만 벡엔드는 잘 되어있을 것으로 기대됨
How to Use)
- https://github.com/soeque1/bert_torchserve
- https://github.com/pytorch/serve/tree/master/examples/Huggingface_Transformers
문제사항: toerchserve의 dockerfile을 그대로사용하면 transformer 등 별도 패키지를 재설치해야할 수 있음 (https://github.com/pytorch/serve/blob/master/docker/Dockerfile)