Tensorflow Serving Deploy 프로세스 - penny4860/study-note GitHub Wiki
1. saved_model 파일로 저장
1.1. keras model -> saved_model : Tensorflow 1.x
# 1. load keras model
model = models.load_model(MODEL_PATH, convert=True, backbone_name='resnet50')
# 2. SavedModelBuilder
builder = saved_model.builder.SavedModelBuilder(EXPORT_PATH)
# 3. Define input/output signature
signature = predict_signature_def(
inputs={'images': model.input},
outputs={
'boxes': model.outputs[0],
'scores': model.outputs[1],
'labels': model.outputs[2]
}
)
# 4. Save
sess = K.get_session()
builder.add_meta_graph_and_variables(sess=sess,
tags=[saved_model.tag_constants.SERVING],
signature_def_map={'predict': signature})
# client 에서 요청할 때 signature name을 "predict"로 할 것.
builder.save()
2. Deploy
2.1. nvidia-docker 설치 (GPU 사용시)
https://github.com/NVIDIA/nvidia-docker#centos-7-docker-ce-rhel-7475-docker-ce-amazon-linux-12
sudo yum-config-manager --save --setopt=nvidia-docker.skip_if_unavailable=true
2.2 Docker 실행 : serving image를 deploy
Docker version 18.09.6
docker run --name tf_mm -p 9500:8500 -p 9501:8501 -v /Users/jeongjoonsup/git/saved_models:/models/mm -e MODEL_NAME=mm -e NVIDIA_VISIBLE_DEVICES=0 -t tensorflow/serving:1.12.0-gpu
- local 파일경로는 절대경로를 써야함
- local 파일경로내부에 디렉토리별로 version이 분리되어있어야 함
($local)/1/
,($local)/2/
, ....
- gpu device 를 명시하는 방법
- -e option 으로
NVIDIA_VISIBLE_DEVICES=0
를 명시 - 참고자료 : https://github.com/tensorflow/serving/issues/779
- -e option 으로
- https://github.com/penny4860/study/blob/master/docs/tfs_with_docker.MD
Docker version 19.03.1
docker run --name tf_mm -p 8500:8500 -p 8501:8501 -v /Users/jeongjoonsup/git/saved_models:/models/mm -e MODEL_NAME=mm --gpus '"device=1,2"' -t tensorflow/serving:1.12.0-gpu
-e NVIDIA_VISIBLE_DEVICES=0
대신--gpus '"device=1,2"'
를 써야 한다.
Trouble Shooting
- GPUML8에서 tensorflow-gpu 를 서빙할때 에러가 난다.
- (Docker version 19.03.1, build 74b1e89) 에서는 tfs docker 를 실행할 때
--gpus
옵션을 명시해야 된다. - https://github.com/NVIDIA/nvidia-docker#usage
- (Docker version 19.03.1, build 74b1e89) 에서는 tfs docker 를 실행할 때