TensorFlow Serving | GPU & Batch

2020-11-25  本文已影响0人  Anoyi

概述

为了更快的响应用户请求,可以在 GPU 服务器上部署 Serving,也可以通过配置 Batching 相关参数来调优。

TensorFlow Serving With GPUs

1、安装 nvidia-docker

使用 GPU 部署 Serving 之前,除了安装 Docker,还需如下操作

2、Docker 运行示例

docker run -d \
  --runtime nvidia \
  -p 8501:8501 \
  -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/model" \
  tensorflow/serving:latest-gpu

3、指定 GPU & 限制内存

在多块 GPU 的服务器上,指定使用某块或某几块 GPU,可以通过系统环境变量 CUDA_VISIBLE_DEVICES 来设置;若需使用单块 GPU 的部分内存,则可以用过 serving 的配置参数 --per_process_gpu_memory_fraction 来设置。

假设服务器上有 4 块 32GB 的 GPU,要使用第 1 和第 2 块 GPU,每块限制使用 16GB,示例:

docker run -d \
  --runtime nvidia \
  -p 8501:8501 \
  -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/model" \
  -e CUDA_VISIBLE_DEVICES="0,1" \
  tensorflow/serving:latest-gpu \
  --per_process_gpu_memory_fraction=0.5

--per_process_gpu_memory_fraction 设置每个进程占用 GPU 内存空间的百分比,取值范围是 0.0 ~ 1.0,默认值 0.0。若设置为 1.0,则会为 serving 分配所有 GPU 内存;若设置为 0.0,则会为 serving 自动分配一个值。

Batch Scheduling Parameters and Tuning

控制 Batch Scheduling 的参数如下:

最佳的参数设置取决于系统、模型、系统、环境以及吞吐量、延迟等,最好通过实验测试来选择其值。下面的一些准则可能会帮助您选择更优解。

基本准则

首先,在进行实验时,应将 max_enqueued_batches 临时设置为非常高的值。然后,对于生产环境,请考虑将 max_enqueued_batches 设置为等于 num_batch_threads,以便最大程度地减少服务器上的排队延迟,使服务器始终保持忙碌状态。对于 Batch 作业,请将 max_enqueued_batches 设置为足够大的值,但也应该理性设置,避免内存不足导致系统崩溃。

其次,如果出于系统架构的原因,需要限制 Batch Size(例如:设置为 100、200 或 400,而不是介于 1 ~ 400 之间的任何值):如果使用 BatchingSession,则可以设置 allowed_batch_sizes 参数;否则,可以在回调代码中使用虚拟元素填充 Batch。

CPU 服务器

请考虑以下配置:num_batch_threads 等于 CPU 内核数; max_batch_size 值很高; batch_timeout_micros 设置为 0,然后使用 1 - 10 毫秒范围内的 batch_timeout_micros 值进行实验,0 可能是最佳值。

GPU 服务器

参考文档

上一篇下一篇

猜你喜欢

热点阅读