可扩缩的 TensorFlow 推理系统

Last reviewed 2023-11-02 UTC

本参考架构系列介绍如何使用 NVIDIA® T4 GPUTriton 推理服务器为深度学习模型设计和部署高性能在线推理系统。

通过此架构,您可以创建一个使用机器学习模型的系统,并可以利用 GPU 加速。Google Kubernetes Engine (GKE) 可让您根据越来越多的客户端扩缩系统。 通过应用本系列文章介绍的优化技术,您可以提高吞吐量并缩短系统的延迟时间。

本系列文章面向熟悉 Google Kubernetes Engine 和机器学习 (ML) 框架(包括 TensorFlow 和 NVIDIA TensorRT)的开发者。

本系列文章包含以下文档:

架构

下图展示了推理系统的架构。

推理系统的架构。

此架构包括以下组件:

  • Cloud Load Balancing:将请求流量发送到最靠近客户端的 GKE 集群。

  • GKE 集群:包含集群节点和监控服务器。如果客户端从多个区域发送请求,您可以将 GKE 集群部署到多个区域。在同一集群上部署 Locust 负载测试工具

  • 具有 GPU 加速器的集群节点:包含 Triton Inference Server Pod;每个节点部署一个 Pod(一个 GPU 不能与多个 Pod 共享)。

  • Triton 推理服务器:提供您创建的 ResNet-50 模型。该服务器通过 HTTP 或 gRPC 端点提供推理服务。 推理服务允许远程客户端请求由服务器管理的任何模型进行推断。

  • NVIDIA T4:提高推理性能。每个 Pod 都必须有一个 NVIDIA T4。此 GPU 具有 Tensor Cores,这是核心处理单元,支持和加速 INT8 和 FP16 计算。

  • 监控服务器:从 Triton 收集有关 GPU 利用率和内存用量的指标数据。您可以使用 Prometheus 进行事件监控和提醒。您可以使用 Grafana 直观呈现和分析存储在 Prometheus 中的性能数据。

设计考虑事项

以下指南可帮助您开发满足组织的可靠性和性能要求的架构。

可靠性

此架构使用 GKE 进行可扩缩性和灵活的资源管理。

通过在 GKE 上部署该系统,您可以根据客户端数量扩缩系统。您可以将 GKE 集群部署到多个区域,并增加集群中的节点数。

性能优化

当您调整性能时,请遵循以下一般准则:

  • 根据系统的用例定义性能指标和目标性能。
  • 在应用性能优化之前衡量基准效果。
  • 应用一项更改并观察改进情况。如果您一次应用多项更改,则无法知道哪个更改导致了改进。
  • 收集适当的指标以了解性能特征,然后确定性能优化的后续操作。

通过这些准则,您可以衡量以下因素导致的性能改进:

  • TensorRT(图优化)。TensorRT 应用针对 NVIDIA T4 的图优化。例如,它会自动修改深度学习模型,使得能够使用 Tensor Cores 处理这些模型。首先,您需要观察在不使用 TensorRT 的情况下的推断性能作为基准。然后,观察应用 TensorRT 图优化后的性能改进。

  • FP16 转换。NVIDIA T4 支持使用 FP32(32 位浮点)和 FP16 进行浮点计算。将变量的精度从默认的 FP32 转换为 FP16 可以提升推理性能。

  • INT8 量化。量化是深度学习模型的一项优化技术,可以改进 GPU 的计算性能。NVIDIA T4 支持量化的 INT8(8 位整数)变量类型。与 FP16 相比,INT8 量化可以提供更高的性能,但可能会降低准确率。但是,TensorRT 使用了一个校准过程,以在计算过程中最大限度地减少信息损失。

  • 实例组的批次大小和数量。您可以使用 Triton 调整实例组的批次大小和数量。例如,如果将批次大小设置为 16,则推理请求将存储在批处理队列中,并将 16 个请求作为单个批次进行处理。同样,如果您将实例组数量设置为 4,则系统会使用 4 个线程并行处理多个请求。在此场景中,每个批次中有 16 个请求,并且 4 个线程并行处理,这意味着在单个 GPU 上同时处理 64 个请求。

    通过增加实例组的数量,TensorRT 可以实现更高的 GPU 利用率。同时,通过调整批次大小,您可以让 Triton 优化 GPU 上的计算。例如,它可以将不同请求的多个计算组合到 Tensor Cores 上的单个计算任务中。

Deployment

如需部署此架构,请参阅部署可扩缩的 TensorFlow 推理系统

如需衡量和优化部署,请参阅衡量和优化 TensorFlow 推理系统的性能

后续步骤