Phát triển với Docker

Kéo hình ảnh phát triển

Đối với môi trường phát triển nơi bạn có thể xây dựng Dịch vụ TensorFlow, bạn có thể thử:

docker pull tensorflow/serving:latest-devel

Đối với môi trường phát triển nơi bạn có thể xây dựng Dịch vụ TensorFlow có hỗ trợ GPU, hãy sử dụng:

docker pull tensorflow/serving:latest-devel-gpu

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.

Ví dụ phát triển

Sau khi lấy một trong các hình ảnh Docker phát triển, bạn có thể chạy nó trong khi mở cổng gRPC (8500):

docker run -it -p 8500:8500 --gpus all tensorflow/serving:latest-devel

Kiểm tra môi trường phát triển

Để kiểm tra một mô hình, từ bên trong vùng chứa, hãy thử:

# train the mnist model
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
# serve the model
tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &
# test the client
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500

Dockerfiles

Chúng tôi hiện đang duy trì các Dockerfiles sau:

  • Dockerfile , đây là một máy ảo tối thiểu đã được cài đặt Dịch vụ TensorFlow.

  • Dockerfile.gpu , là một VM tối thiểu có TensorFlow Phục vụ với sự hỗ trợ GPU để sử dụng với nvidia-docker .

  • Dockerfile.devel , là một máy ảo tối thiểu có tất cả các phần phụ thuộc cần thiết để xây dựng Dịch vụ TensorFlow.

  • Dockerfile.devel-gpu , là một máy ảo tối thiểu có tất cả các phần phụ thuộc cần thiết để xây dựng Dịch vụ TensorFlow có hỗ trợ GPU.

Xây dựng vùng chứa từ Dockerfile

Nếu bạn muốn xây dựng hình ảnh Docker của riêng mình từ Dockerfile, bạn có thể làm như vậy bằng cách chạy lệnh Docker build:

Dockerfile :

docker build --pull -t $USER/tensorflow-serving .

Dockerfile.gpu :

docker build --pull -t $USER/tensorflow-serving-gpu -f Dockerfile.gpu .

Dockerfile.devel :

docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel .

Dockerfile.devel-gpu :

docker build --pull -t $USER/tensorflow-serving-devel-gpu -f Dockerfile.devel-gpu .

MẸO: Trước khi cố gắng tạo hình ảnh, hãy kiểm tra kho lưu trữ tensorflow/phục vụ của Docker Hub để đảm bảo hình ảnh đáp ứng nhu cầu của bạn chưa tồn tại.

Việc xây dựng từ các nguồn tiêu tốn rất nhiều RAM. Nếu RAM là một vấn đề trên hệ thống của bạn, bạn có thể hạn chế việc sử dụng RAM bằng cách chỉ định --local_ram_resources=2048 trong khi gọi Bazel. Xem tài liệu Bazel để biết thêm thông tin. Bạn có thể sử dụng cơ chế tương tự này để điều chỉnh các hoạt động tối ưu hóa mà bạn đang xây dựng Dịch vụ TensorFlow. Ví dụ:

docker build --pull --build-arg TF_SERVING_BUILD_OPTIONS="--copt=-mavx \
  --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --local_ram_resources=2048" -t \
  $USER/tensorflow-serving-devel -f Dockerfile.devel .

Chạy container

Điều này giả định rằng bạn đã xây dựng vùng chứa Dockerfile.devel .

Để chạy container mở cổng gRPC (8500):

docker run -it -p 8500:8500 $USER/tensorflow-serving-devel

MẸO: Nếu bạn đang chạy hình ảnh GPU, hãy đảm bảo chạy bằng thời gian chạy NVIDIA --runtime=nvidia .

Từ đây, bạn có thể làm theo hướng dẫn để thử nghiệm môi trường phát triển .

Xây dựng hệ nhị phân phân phát được tối ưu hóa

Khi chạy ModelServer của TensorFlow Serve, bạn có thể nhận thấy thông báo tường trình giống như sau:

I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:141]
Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX2 FMA

Điều này cho thấy rằng nhị phân ModelServer của bạn không được tối ưu hóa hoàn toàn cho CPU đang chạy. Tùy thuộc vào mô hình bạn đang phục vụ, việc tối ưu hóa thêm có thể không cần thiết. Tuy nhiên, việc xây dựng một hệ nhị phân được tối ưu hóa rất đơn giản.

Khi xây dựng hình ảnh Docker từ các tệp Dockerfile.devel hoặc Dockerfile.devel-gpu được cung cấp, tệp nhị phân ModelServer sẽ được xây dựng với cờ -march=native . Điều này sẽ khiến Bazel xây dựng một tệp nhị phân ModelServer với tất cả các tối ưu hóa CPU mà máy chủ mà bạn đang xây dựng hình ảnh Docker hỗ trợ.

Để tạo hình ảnh phục vụ được tối ưu hóa hoàn toàn cho máy chủ của bạn, bạn chỉ cần:

  1. Sao chép dự án Phục vụ TensorFlow

    git clone https://github.com/tensorflow/serving
    cd serving
    
  2. Xây dựng hình ảnh với ModelServer được tối ưu hóa

    • Đối với CPU:

      docker build --pull -t $USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile.devel .
      
    • Đối với GPU: `

      docker build --pull -t $USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
      
  3. Xây dựng hình ảnh phục vụ với hình ảnh phát triển làm cơ sở

    • Đối với CPU:

      docker build -t $USER/tensorflow-serving \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile .
      

      Hình ảnh Docker được tối ưu hóa mới của bạn bây giờ là $USER/tensorflow-serving , bạn có thể sử dụng giống như hình ảnh tensorflow/serving:latest chuẩn.

    • Đối với GPU:

      docker build -t $USER/tensorflow-serving-gpu \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.gpu .
      

      Hình ảnh Docker được tối ưu hóa mới của bạn bây giờ là $USER/tensorflow-serving-gpu , bạn có thể sử dụng giống như hình ảnh tensorflow/serving:latest-gpu tiêu chuẩn.