【问题标题】:How to deploy TensorFlow Serving using Docker and DigitalOcean Spaces如何使用 Docker 和 DigitalOcean Spaces 部署 TensorFlow Serving
【发布时间】:2020-05-19 22:51:45
【问题描述】:

如何配置 TensorFlow Serving 以使用存储在 DigitalOcean Spaces 中的文件?

解决方案很重要:

  • 提供对配置模型文件的访问权限
  • 提供对数据的非公开访问

我在 DigitalOcean Spaces 中配置了一个名为 your_bucket_name 的存储桶,结构如下:

- your_bucket_name
  - config
    - batching_parameters.txt
    - monitoring_config.txt
    - models.config
  - models
    - model_1
      - version_1.1
        - variables
          - variables.data-00000-of-00001
          - variables.index
        - saved_model.pb
   - model_2
       - ...
   - model_3
       - ...

【问题讨论】:

    标签: docker amazon-s3 docker-compose digital-ocean tensorflow-serving


    【解决方案1】:

    编辑:自 TensorFlow 2.6 起,S3 支持已被弃用,Docker 映像也不再支持存储在 S3 上的模型 [reference]。 (归功于@RonaldDas。)


    历史:TensorFlow Serving 支持与 Amazon S3 存储桶集成。由于 DigitalOcean Spaces 提供了类似的接口,因此可以通过 Docker 通过搭载 S3 接口轻松地使用 DigitalOcean Spaces 运行 TensorFlow Servings。

    为了方便其他人,我在下面详细介绍了您需要了解的有关运行服务器的所有信息:

    1。环境变量(可选)

    在您的环境中定义以下变量:

    AWS_ACCESS_KEY_ID=...
    AWS_SECRET_ACCESS_KEY=...
    

    (这不是绝对必要的,但定义这些变量会使您的部署比将值硬编码到 docker-compose 文件中更安全。)

    作为配置云存储桶的一部分,您会从 DigitalOcean Spaces 收到这些变量的值。

    2。服务器

    您可以使用 Docker 或 docker-compose 启动服务器:

    2.1。使用 Docker

    这是从命令提示符启动服务器的最小 docker 命令:

    docker run \
        -p 8500:8500 \
        -p 8501:8501 \
        -e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
        -e AWS_REGION=nyc3 \
        -e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \
        -e S3_ENDPOINT=nyc3.digitaloceanspaces.com \
        tensorflow/serving \
        --model_config_file=s3://your_bucket_name/config/models.config
    

    (要在 Windows 上运行,您可能需要删除反引号换行符以使其成为单行命令。)

    2.2。使用 docker-compose

    这个 docker-compose 配置在配置服务器的方式上更详细一些,但您也可以通过简单的docker 命令使用这些选项。

    version: "3"
    services:
      tensorflow-servings:
        image: tensorflow/serving:latest
        ports:
          - 8500:8500
          - 8501:8501
        command:
          - --batching_parameters_file=s3://your_bucket_name/config/batching_parameters.txt
          - --enable_batching=true
          - --model_config_file=s3://your_bucket_name/config/only_toxic.config
          - --model_config_file_poll_wait_seconds=300
          - --monitoring_config_file=s3://your_bucket_name/config/monitoring_config.txt
          - --rest_api_timeout_in_ms=30000
        environment:
          - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
          - AWS_LOG_LEVEL=3
          - AWS_REGION=nyc3
          - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
          - S3_ENDPOINT=nyc3.digitaloceanspaces.com
    

    这里的日志级别降低了,因为有很多不是实际错误的“已释放连接”和“无响应正文”消息。 (详情请参阅GitHub Issue: AWS lib is verbose when using S3。)

    3。配置文件:

    配置文件如下所示,它们是协议缓冲区:

    3.1。模型.config

    model_config_list {
      config {
        name: 'model_1'
        base_path: 's3://your_bucket_name/models/model_1/'
          model_platform: "tensorflow"
      },
      config {
        ...
      },
      config {
        ...
      }
    }
    

    3.2。 batching_parameters.txt(可选)

    该文件定义了 TensorFlow Serving 的指南;引导它在服务器中处理批处理的方式。

        max_batch_size { value: 1024 }
        batch_timeout_micros { value: 100 }
        num_batch_threads { value: 4 }
        pad_variable_length_inputs: true
    

    3.3。 monitoring_config.txt(可选)

    此文件通过下面定义的端点提供各种统计信息。

    prometheus_config {
      enable: true,
      path: "/monitoring/metrics"
    }
    

    【讨论】:

    • 可能对某人有帮助,因为 tf 版本 2.6s3 支持已被删除,并且 docker 图像也不支持它 github.com/tensorflow/serving/issues/…
    • 谢谢,@RonaldDas。我会更新答案以明确这一点。
    猜你喜欢
    • 2019-08-31
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2020-08-16
    • 1970-01-01
    • 2021-03-31
    • 2016-07-15
    相关资源
    最近更新 更多