Docker와 함께 제공되는 TensorFlow

가장 쉬운 방법 중 하나는 함께 TensorFlow 서빙 사용을 시작하기 도커 .

# Download the TensorFlow Serving Docker image and repo
docker pull tensorflow/serving
git clone https://github.com/tensorflow/serving # Location of demo models TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata" # Start TensorFlow Serving container and open the REST API port docker run -t --rm -p 8501:8501 \ -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \ -e MODEL_NAME=half_plus_two \ tensorflow/serving & # Query the model using the predict API curl -d '{"instances": [1.0, 2.0, 5.0]}' \ -X POST http://localhost:8501/v1/models/half_plus_two:predict
# Returns => { "predictions": [2.5, 3.0, 4.5] }

추가로 제공하는 엔드 포인트의 경우, 참조 클라이언트 REST API를 .

도커 설치

일반 설치 지침은 도커 사이트에 ,하지만 우리는 여기에 몇 가지 빠른 링크를 제공합니다 :

Docker와 함께 제공

서빙 이미지 가져오기

Docker가 설치되면 다음을 실행하여 최신 TensorFlow Serving 도커 이미지를 가져올 수 있습니다.

docker pull tensorflow/serving

그러면 TensorFlow Serving이 설치된 최소 Docker 이미지가 풀다운됩니다.

도커 허브를 참조하십시오 tensorflow / 봉사의 repo 당길 수있는 이미지의 다른 버전을.

게재 이미지 실행

제공 이미지(CPU 및 GPU 모두)에는 다음 속성이 있습니다.

  • gRPC에 대해 노출된 포트 8500
  • REST API에 대해 노출된 포트 8501
  • 옵션 환경 변수 MODEL_NAME (기본값 model )
  • 옵션 환경 변수 MODEL_BASE_PATH (기본값 /models )

제공 이미지가 ModelServer를 실행하면 다음과 같이 실행됩니다.

tensorflow_model_server --port=8500 --rest_api_port=8501 \
  --model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}

Docker와 함께 사용하려면 다음이 필요합니다.

  • 서비스를 제공할 호스트의 열린 포트
  • 제공할 저장된 모델
  • 클라이언트가 참조할 모델의 이름

당신이 할 것입니다 부두 노동자의 실행 , 컨테이너를 게시 호스트의 포트에 컨테이너의 포트를, 컨테이너가 모델을 기대 위치로 SavedModel에 호스트의 경로를 장착.

예를 살펴보겠습니다.

docker run -p 8501:8501 \
  --mount type=bind,source=/path/to/my_model/,target=/models/my_model \
  -e MODEL_NAME=my_model -t tensorflow/serving

이 경우, 우리는 부두 노동자 컨테이너를 시작했습니다 우리의 호스트의 포트 8501에 REST API를 포트 8501을 발표, 우리라는 이름의 모델 촬영 my_model 기본 모델 기본 경로 (에 바인딩 ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). 마지막으로, 우리는 환경 변수에 충전 한 MODEL_NAMEmy_model , 왼쪽 MODEL_BASE_PATH 기본값으로.

이것은 컨테이너에서 실행됩니다:

tensorflow_model_server --port=8500 --rest_api_port=8501 \
  --model_name=my_model --model_base_path=/models/my_model

우리가 gRPC 포트를 게시하고자한다면, 우리는 사용하는 것이 -p 8500:8500 . gRPC 및 REST API 포트를 동시에 열거나 둘 중 하나만 열도록 선택할 수 있습니다.

추가 인수 전달

tensorflow_model_server 당신이 서빙 고정 표시기 용기에 전달할 수 많은 추가 인수를 지원합니다. 예를 들어 모델 이름을 지정하는 대신 모델 구성 파일을 전달하려는 경우 다음을 수행할 수 있습니다.

docker run -p 8500:8500 -p 8501:8501 \
  --mount type=bind,source=/path/to/my_model/,target=/models/my_model \
  --mount type=bind,source=/path/to/my/models.config,target=/models/models.config \
  -t tensorflow/serving --model_config_file=/models/models.config

이러한 접근 방식은 다른 명령 행 인수의 작동 tensorflow_model_server 지원합니다.

나만의 서빙 이미지 만들기

컨테이너에 빌드된 모델이 있는 제공 이미지를 원하는 경우 고유한 이미지를 만들 수 있습니다.

먼저 서빙 이미지를 데몬으로 실행합니다.

docker run -d --name serving_base tensorflow/serving

다음으로 SavedModel을 컨테이너의 모델 폴더에 복사합니다.

docker cp models/<my model> serving_base:/models/<my model>

마지막으로 변경하여 모델을 제공하는 것 컨테이너 커밋 MODEL_NAME 모델의 이름을`일치를 ':

docker commit --change "ENV MODEL_NAME <my model>" serving_base <my container>

이제 중지 할 수 있습니다 serving_base

docker kill serving_base

이것은라는 도커 이미지로 당신을 떠날 것 <my container> 배포 할 수 및 시작에 봉사 모델을로드하는 것입니다.

서빙 예

저장된 모델을 로드하고 REST API를 사용하여 호출하는 전체 예제를 실행해 보겠습니다. 먼저 서빙 이미지를 가져옵니다.

docker pull tensorflow/serving

ModelServer가 설치된 최신 TensorFlow Serving 이미지를 가져옵니다.

다음으로, 우리는라는 장난감 모델 사용 Half Plus Two 생성, 0.5 * x + 2 의 값을 x 우리가 예측을 제공합니다.

이 모델을 얻으려면 먼저 TensorFlow Serving 리포지토리를 복제하세요.

mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving

다음으로 이 모델을 가리키고 REST API 포트(8501)를 여는 TensorFlow Serving 컨테이너를 실행합니다.

docker run -p 8501:8501 \
  --mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,\
target=/models/half_plus_two \
  -e MODEL_NAME=half_plus_two -t tensorflow/serving &

이렇게 하면 도커 컨테이너를 실행하고 TensorFlow Serving Model Server를 시작하고 REST API 포트 8501을 바인딩하고 원하는 모델을 호스트에서 컨테이너에서 예상되는 위치로 매핑합니다. 또한 모델 이름을 환경 변수로 전달합니다. 이는 모델을 쿼리할 때 중요합니다.

예측 API를 사용하여 모델을 쿼리하려면 다음을 실행할 수 있습니다.

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://localhost:8501/v1/models/half_plus_two:predict

다음과 같은 값 집합을 반환해야 합니다.

{ "predictions": [2.5, 3.0, 4.5] }

평온한 API를 사용하는 방법에 대한 자세한 내용은 찾을 수 있습니다 여기에 .

GPU를 사용하여 Docker와 함께 제공

엔비디아 도커 설치

뿐만 아니라, GPU를 함께 봉사하기 전에 도커를 설치 , 당신이 필요합니다 :

GPU 제공 이미지 실행

GPU 제공 이미지를 실행하는 것은 CPU 이미지를 실행하는 것과 동일합니다. 자세한 내용은 참조 서빙 이미지를 실행 .

GPU 제공 예시

GPU 바인딩 작업으로 모델을 로드하고 REST API를 사용하여 호출하는 전체 예제를 실행해 보겠습니다.

먼저 설치 nvidia-docker . 다음을 실행하여 최신 TensorFlow Serving GPU 도커 이미지를 가져올 수 있습니다.

docker pull tensorflow/serving:latest-gpu

이렇게 하면 설치된 GPU에서 실행하도록 구축된 ModelServer가 있는 최소 Docker 이미지가 풀다운됩니다.

다음으로, 우리는라는 장난감 모델 사용 Half Plus Two 생성, 0.5 * x + 2 의 값을 x 우리가 예측을 제공합니다. 이 모델에는 GPU 장치에 바인딩된 작업이 있으며 CPU에서 실행되지 않습니다.

이 모델을 얻으려면 먼저 TensorFlow Serving 리포지토리를 복제하세요.

mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving

다음으로 이 모델을 가리키고 REST API 포트(8501)를 여는 TensorFlow Serving 컨테이너를 실행합니다.

docker run --gpus all -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\
target=/models/half_plus_two \
  -e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &

이것은 도커 컨테이너를 실행하고, TensorFlow Serving Model Server를 시작하고, REST API 포트 8501을 바인딩하고, 호스트에서 컨테이너에서 모델이 예상되는 위치로 원하는 모델을 매핑합니다. 또한 모델 이름을 환경 변수로 전달합니다. 이는 모델을 쿼리할 때 중요합니다.

팁: 모델을 쿼리하기 전에 서버가 요청을 받을 준비가 되었음을 나타내는 다음과 같은 메시지가 나타날 때까지 기다려야 합니다.

2018-07-27 00:07:20.773693: I tensorflow_serving/model_servers/main.cc:333]
Exporting HTTP/REST API at:localhost:8501 ...

예측 API를 사용하여 모델을 쿼리하려면 다음을 실행할 수 있습니다.

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://localhost:8501/v1/models/half_plus_two:predict

다음과 같은 값 집합을 반환해야 합니다.

{ "predictions": [2.5, 3.0, 4.5] }

팁: GPU가 없거나 TensorFlow Model Server의 GPU 빌드가 작동하지 않는 시스템에서 GPU 모델을 실행하려고 하면 다음과 같은 오류가 발생합니다.

Cannot assign a device for operation 'a': Operation was explicitly assigned to /device:GPU:0

평온한 API를 사용하는 방법에 대한 자세한 내용은 찾을 수 있습니다 여기에 .

도커로 개발하기

Tensorflow 서빙을 구축하고 개발하는 방법에 대한 자세한 내용을 참조하시기 바랍니다 도커 가이드와 함께 개발 .