Một trong những cách dễ nhất để bắt đầu sử dụng TensorFlow Serve là sử dụng Docker .
# Download the TensorFlow Serving Docker image and repodocker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
# Location of demo modelsTESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# Start TensorFlow Serving container and open the REST API portdocker 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 APIcurl -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] }
Để biết thêm các điểm cuối phân phát, hãy xem Client REST API .
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 tại đây:
- Docker cho macOS
- Docker cho Windows dành cho Windows 10 Pro trở lên
- Hộp công cụ Docker dành cho các phiên bản macOS cũ hơn nhiều hoặc các phiên bản Windows trước Windows 10 Pro
Phục vụ với Docker
Kéo một hình ảnh phục vụ
Sau khi cài đặt Docker, bạn có thể lấy hình ảnh docker TensorFlow Serve mới nhất bằng cách chạy:
docker pull tensorflow/serving
Điều này sẽ kéo xuống một hình ảnh Docker tối thiểu đã được cài đặt Dịch vụ TensorFlow.
Xem kho lưu trữ tensorflow/phục vụ của Docker Hub để biết các phiên bản hình ảnh khác mà bạn có thể kéo.
Chạy một hình ảnh phục vụ
Hình ảnh phục vụ (cả CPU và GPU) có các thuộc tính sau:
- Cổng 8500 được hiển thị 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 như sau:
tensorflow_model_server --port=8500 --rest_api_port=8501 \
--model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}
Để phục vụ 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ột SavingModel để phục vụ
- 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 bộ chứa Docker , xuất bản các cổng của bộ chứa lên các cổng của máy chủ và gắn đường dẫn máy chủ của bạn tới SavingModel tới nơi bộ 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 API REST 8501 lên cổng 8501 của máy chủ 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ở mô hình mặc định ( ${MODEL_BASE_PATH}/${MODEL_NAME}
= /models/my_model
). Cuối cùng, chúng tôi đã điền my_model
vào biến môi trường MODEL_NAME
và để MODEL_BASE_PATH
về giá trị mặc định.
Điều này sẽ chạy trong container:
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ở cả hai cổng API gRPC và REST cùng lúc hoặc chọn chỉ mở một trong hai cổng này.
Truyề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 tới các vùng chứa docker phục vụ. Ví dụ: nếu chúng ta muốn truyền tệp cấu hình mô hình thay vì chỉ định tên mô hình, chúng ta có thể thực hiện 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 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 vào 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 SavingModel 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ục vụ 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ó tên <my container>
mà bạn có thể triển khai và sẽ tải mô hình của mình để phân phối khi khởi động.
Ví dụ phục vụ
Hãy xem qua một ví dụ đầy đủ trong đó chúng tôi tải SavingModel và gọi nó bằng API REST. Đầu tiên kéo hình ảnh phục vụ:
docker pull tensorflow/serving
Thao tác này sẽ lấy hình ảnh Phục vụ TensorFlow mới nhất đã cài đặt ModelServer.
Tiếp theo, chúng tôi sẽ sử dụng 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 Phục vụ TensorFlow.
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
Tiếp theo, chạy bộ chứa Dịch vụ TensorFlow trỏ nó đến mô hình này và mở cổng API REST (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 API REST 8501 và ánh xạ mô hình mong muốn của chúng ta từ máy chủ đến nơi dự kiến có các mô hình trong vùng chứa. Chúng tôi cũng chuyển tên của mô hình dưới dạng 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 API RESTful tại đây .
Phục vụ với Docker bằng GPU của bạn
Cài đặt nvidia-docker
Trước khi sử dụng GPU, ngoài việc cài đặt Docker , bạn sẽ cần:
- Trình điều khiển NVIDIA cập nhật cho hệ thống của bạn
-
nvidia-docker
: Bạn có thể làm theo hướng dẫn cài đặt tại đây
Chạy hình ảnh phục vụ GPU
Chạy hình ảnh phục vụ GPU cũng 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ân phối GPU
Hãy xem 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 quan đến GPU và gọi nó bằng API REST.
Đầu tiên cài đặt nvidia-docker
. Tiếp theo, bạn có thể lấy 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
Điều 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 GPU được cài đặt.
Tiếp theo, chúng tôi sẽ sử dụng 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 được 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 Phục vụ TensorFlow.
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
Tiếp theo, chạy bộ chứa Dịch vụ TensorFlow trỏ nó đến mô hình này và mở cổng API REST (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 API REST 8501 và ánh xạ mô hình mong muốn của chúng ta từ máy chủ đến nơi dự kiến có các mô hình trong vùng chứa. Chúng tôi cũng chuyển tên của mô hình dưới dạng 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 thông báo như sau, cho biết rằng máy chủ đã sẵn sàng nhận 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ư:
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 API RESTful 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 Tensorflow Serve, vui lòng tham khảo Hướng dẫn phát triển với Docker .