TensorFlow Phục vụ với Docker

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Một trong những cách dễ nhất để bắt đầu sử dụng TensorFlow Phục vụ là với Docker .

# 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] }

Đối với thiết bị đầu cuối phục vụ bổ sung, xem các ứng dụng khách API REST của .

Cài đặt Docker

Hướng dẫn cài đặt chung là trên trang web Docker , nhưng chúng tôi đưa ra một số các liên kết nhanh ở đây:

Phục vụ với Docker

Kéo một hình ảnh phục vụ

Khi bạn đã cài đặt Docker, bạn có thể kéo hình ảnh docker phục vụ TensorFlow mới nhất bằng cách chạy:

docker pull tensorflow/serving

Thao tác này sẽ kéo xuống một hình ảnh Docker tối thiểu đã cài đặt TensorFlow Serving.

Xem Docker Hub tensorflow / phục vụ repo cho các phiên bản khác của hình ảnh mà bạn có thể kéo.

Chạy một hình ảnh phục vụ

Hình ảnh cung cấp (cả CPU và GPU) có các thuộc tính sau:

  • Cổng 8500 được tiếp xúc cho gRPC
  • Cổng 8501 được hiển thị cho API REST
  • Môi trường không bắt buộc biến MODEL_NAME (mặc định là model )
  • Biến môi trường không bắt buộc MODEL_BASE_PATH (mặc định là /models )

Khi hình ảnh phục vụ chạy ModelServer, nó sẽ chạy nó như sau:

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

Để phân phối với Docker, bạn sẽ cần:

  • Một cổng mở trên máy chủ của bạn để phục vụ
  • Mô hình đã lưu để phân phát
  • Tên cho mô hình của bạn mà khách hàng của bạn sẽ tham khảo

Những gì bạn sẽ làm là chạy Docker container, xuất bản các cảng của container đến các cảng của máy chủ của bạn, và gắn con đường của máy chủ của bạn đến SavedModel đến nơi chứa hy vọng mô hình.

Hãy xem một ví dụ:

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

Trong trường hợp này, chúng tôi đã bắt đầu một container Docker, công bố cảng REST API 8501 đến cổng máy chủ của chúng tôi 8501, và thực hiện một mô hình chúng tôi đặt tên my_model và ràng buộc nó vào con đường người mẫu mặc định cơ sở ( ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). Cuối cùng, chúng tôi đã điền trong biến môi trường MODEL_NAME với my_model , và trái MODEL_BASE_PATH để giá trị mặc định của nó.

Điều này sẽ chạy trong vùng chứa:

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

Nếu chúng ta muốn công bố cảng gRPC, chúng tôi sẽ sử dụng -p 8500:8500 . Bạn có thể mở đồng thời cả cổng gRPC và REST API hoặc chọn chỉ mở một trong hai cổng.

Chuyển các đối số bổ sung

tensorflow_model_server hỗ trợ nhiều đối số bổ sung mà bạn có thể vượt qua để các container Docker phục vụ. Ví dụ: nếu chúng tôi muốn chuyển tệp cấu hình mô hình thay vì chỉ định tên mô hình, chúng tôi có thể làm như sau:

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

Cách tiếp cận này làm việc cho bất kỳ đối số dòng lệnh khác mà tensorflow_model_server hỗ trợ.

Tạo hình ảnh phục vụ của riêng bạn

Nếu bạn muốn một hình ảnh phục vụ có mô hình của bạn được tích hợp trong vùng chứa, bạn có thể tạo hình ảnh của riêng mình.

Đầu tiên hãy chạy một hình ảnh phục vụ dưới dạng daemon:

docker run -d --name serving_base tensorflow/serving

Tiếp theo, sao chép SavedModel của bạn vào thư mục mô hình của vùng chứa:

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

Cuối cùng, commit container đó là phục vụ mô hình của bạn bằng cách thay đổi MODEL_NAME để phù hợp với tên của mô hình của bạn ' ':

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

Bây giờ bạn có thể ngăn chặn serving_base

docker kill serving_base

Điều này sẽ để lại cho bạn với một hình ảnh Docker gọi <my container> mà bạn có thể triển khai và sẽ được tải mô hình của bạn để phục vụ khi khởi động.

Phục vụ ví dụ

Hãy chạy qua một ví dụ đầy đủ trong đó chúng tôi tải SavedModel và gọi nó bằng API REST. Đầu tiên hãy kéo hình ảnh phục vụ:

docker pull tensorflow/serving

Thao tác này sẽ kéo hình ảnh Cung cấp TensorFlow mới nhất có cài đặt ModelServer.

Tiếp theo, chúng ta sẽ sử dụng một mô hình đồ chơi gọi là Half Plus Two , mà tạo ra 0.5 * x + 2 cho các giá trị của x chúng tôi cung cấp cho dự đoán.

Để có được mô hình này, trước tiên hãy sao chép repo Cung cấp TensorFlow.

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

Tiếp theo, chạy vùng chứa TensorFlow Serving trỏ nó đến mô hình này và mở cổng REST API (8501):

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 &

Thao tác này sẽ chạy vùng chứa docker và khởi chạy Máy chủ mô hình phục vụ TensorFlow, liên kết cổng REST API 8501 và ánh xạ mô hình mong muốn của chúng tôi từ máy chủ của chúng tôi đến nơi các mô hình được mong đợi trong vùng chứa. Chúng tôi cũng chuyển tên của mô hình dưới dạng một biến môi trường, điều này sẽ rất quan trọng khi chúng tôi truy vấn mô hình.

Để truy vấn mô hình bằng cách sử dụng API dự đoán, bạn có thể chạy

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

Điều này sẽ trả về một tập hợp các giá trị:

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

Xem thêm thông tin về cách sử dụng API RESTful có thể tìm thấy ở đây .

Phục vụ với Docker bằng GPU của bạn

Cài đặt nvidia-docker

Trước khi phục vụ với một GPU, ngoài việc cài đặt Docker , bạn sẽ cần:

Chạy hình ảnh phân phối GPU

Chạy hình ảnh phân phối GPU giống như chạy hình ảnh CPU. Để biết thêm chi tiết, xem chạy một hình ảnh phục vụ .

Ví dụ về Phục vụ GPU

Hãy chạy qua một ví dụ đầy đủ trong đó chúng tôi tải một mô hình với các hoạt động liên kết với GPU và gọi nó bằng cách sử dụng API REST.

Đầu tiên cài đặt nvidia-docker . Tiếp theo, bạn có thể kéo hình ảnh docker GPU phục vụ TensorFlow mới nhất bằng cách chạy:

docker pull tensorflow/serving:latest-gpu

Thao tác này sẽ kéo xuống một hình ảnh Docker tối thiểu với ModelServer được xây dựng để chạy trên các GPU được cài đặt.

Tiếp theo, chúng ta sẽ sử dụng một mô hình đồ chơi gọi là Half Plus Two , mà tạo ra 0.5 * x + 2 cho các giá trị của x chúng tôi cung cấp cho dự đoán. Mô hình này sẽ có các hoạt động liên kết với thiết bị GPU và sẽ không chạy trên CPU.

Để có được mô hình này, trước tiên hãy sao chép repo Cung cấp TensorFlow.

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

Tiếp theo, chạy vùng chứa TensorFlow Serving trỏ nó đến mô hình này và mở cổng REST API (8501):

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 &

Thao tác này sẽ chạy vùng chứa docker, khởi chạy Máy chủ mô hình phục vụ TensorFlow, liên kết cổng REST API 8501 và ánh xạ mô hình mong muốn của chúng tôi từ máy chủ của chúng tôi đến nơi các mô hình được mong đợi trong vùng chứa. Chúng tôi cũng chuyển tên của mô hình dưới dạng một biến môi trường, điều này sẽ rất quan trọng khi chúng tôi truy vấn mô hình.

MẸO: Trước khi truy vấn mô hình, hãy nhớ đợi cho đến khi bạn thấy một thông báo như sau, cho biết rằng máy chủ đã sẵn sàng nhận các yêu cầu:

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

Để truy vấn mô hình bằng cách sử dụng API dự đoán, bạn có thể chạy

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

Điều này sẽ trả về một tập hợp các giá trị:

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

MẸO: Việc cố gắng chạy mô hình GPU trên máy không có GPU hoặc không có bản dựng GPU đang hoạt động của Máy chủ mô hình TensorFlow sẽ dẫn đến lỗi giống như sau:

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

Xem thêm thông tin về cách sử dụng API RESTful có thể tìm thấy ở đây .

Phát triển với Docker

Để được hướng dẫn về cách xây dựng và phát triển Tensorflow Phục vụ, vui lòng tham khảo Phát triển với Docker dẫn .