Tham gia cộng đồng SIG TFX-Addons và giúp cải thiện TFX hơn nữa!
Trang này được dịch bởi Cloud Translation API.
Switch to English

TensorFlow Phục vụ với Docker

Một trong những cách dễ nhất để bắt đầu sử dụng TensorFlow Serving 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 các điểm cuối phục vụ bổ sung, hãy xem API REST máy khách .

Cài đặt Docker

Hướng dẫn cài đặt chung có trên trang Docker , nhưng chúng tôi cung cấp một số 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 kho lưu lượng / phân phối của Docker Hub để biết các phiên bản hình ảnh khác mà bạn có thể lấy.

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 tiếp xúc cho gRPC
  • Cổng 8501 được hiển thị cho API REST
  • Biến môi trường tùy chọn MODEL_NAME (mặc định là model )
  • Biến môi trường tùy chọn 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 vùng chứa Docker , xuất bản các cổng của vùng chứa tới các cổng của máy chủ của bạn và gắn đường dẫn của máy chủ lưu trữ của bạn đến SavedModel đến nơi vùng chứa mong đợi các 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 đã khởi động vùng chứa Docker, xuất bản cổng REST API 8501 tới cổng 8501 của máy chủ của chúng tôi và lấy một mô hình mà chúng tôi đặt tên là my_model và liên kết nó với đường dẫn cơ sở của mô hình mặc định ( ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). Cuối cùng, chúng tôi đã điền vào biến môi trường MODEL_NAME với my_model và để MODEL_BASE_PATH về 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 tôi muốn xuất bản 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 hoặc cổng kia.

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

tensorflow_model_server hỗ trợ nhiều đối số bổ sung mà bạn có thể chuyển đến các vùng chứa tensorflow_model_server 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 hoạt động đối với bất kỳ đối số dòng lệnh nào 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, cam kết vùng chứa đang phân phát mô hình của bạn bằng cách thay đổi MODEL_NAME để khớp với tên 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ừng serving_base

docker kill serving_base

Điều này sẽ để lại cho bạn một hình ảnh Docker được gọi là <my container> mà bạn có thể triển khai và sẽ 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 tôi sẽ sử dụng một mô hình đồ chơi có tên Half Plus Two , tạo ra 0.5 * x + 2 cho các giá trị của x mà chúng tôi cung cấp để 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 dự kiến ​​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 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] }

Bạn có thể tìm thêm thông tin về cách sử dụng RESTful API tại đây .

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

Cài đặt nvidia-docker

Trước khi phân phối với 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, hãy xem chạy 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 hãy 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 tôi sẽ sử dụng một mô hình đồ chơi có tên Half Plus Two , tạo ra 0.5 * x + 2 cho các giá trị của x mà chúng tôi cung cấp để 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 --runtime=nvidia -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 với thời gian chạy nvidia-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 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: 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

Bạn có thể tìm thêm thông tin về cách sử dụng RESTful API tại đây .

Phát triển với Docker

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