在 NVIDIA GPU 上使用 TorchServe 了解 AI 语音生成推断

您可以在 NVIDIA GPU 上使用 TorchServe 设计文本到语音服务,以在 Oracle Cloud Infrastructure Kubernetes Engine 上运行。此技术还可以应用于其他推断工作负载,例如图像分类、对象检测、自然语言处理和推荐系统。

推断服务器是一个专门的系统,它托管经过训练的机器学习模型,并使用 API 提供预测(推断)。它解决了扩展、批处理和监视的关键生产挑战:将静态模型转换为可靠、高性能的 Web 服务。

TorchServe 是 PyTorch 的官方模型服务框架。

其任务是从 RESTful API 或 gRPC 端点获取经过训练的 .mar 文件(打包的模型文件)。您可以打包模型并将其交给 TorchServe,而不是编写定制 Web 服务器和逻辑。它立即为您提供:

  • 可扩展性:自动管理员工来处理大量流量。
  • 低延迟性能:使用多模型批处理等高级功能对请求进行分组以实现高效处理。
  • 模型管理:允许您注册、版本控制和回滚模型,而不会停机。
  • 内置监视:实时跟踪推断延迟和每秒请求等指标。

从本质上讲,TorchServe 弥合了 PyTorch 实验与生产部署之间的差距,以最少的努力将强大的模型转变为强大的预测服务。这是将 PyTorch 从研究实验室带到现实世界的重要工具。

注意:

TorchServe 当前处于有限维护模式。虽然它仍然可以免费使用,并且仍然被一些现有客户用于特定用例或测试方便性,但我们建议评估其长期适合生产部署。有关当前状态和注意事项,请查看官方 PyTorch TorchServe 文档,网址为 https://docs.pytorch.org/serve/

以下是市场上的一些推理服务器:

Server 开发人员 主要功能 最好 框架支持
NVIDIA Triton NVIDIA
  • 多框架支持(PyTorch、TensorFlow、ONNX 等)
  • 动态批处理,模型并行性
  • 针对 GPU 进行了优化 (TensorRT)
高性能、多模型部署 PyTorch、TF、ONNX、TensorRT
TorchServe PyTorch(以前称为 Meta)
  • 本机 PyTorch 集成
  • 简单的 Python API
  • 基本动态批处理
以 PyTorch 为中心的部署 仅限 PyTorch
TensorFlow 服务 Google
  • 针对 TensorFlow 模型进行了优化
  • 支持模型版本控制
TensorFlow 生态系统 TensorFlow

体系结构

此体系结构显示了 AI 语音生成推断部署的示例。



transperfect-oke-arch-oracle.zip

基于基本 Hugging Face 模型的经过训练和定制的语音模型部署在 TorchServe 上进行推断。TorchServe 充当服务层,可高效托管模型并管理传入用户请求。

当用户发送文本输入时,TorchServe 会处理请求、调用模型并将输出呈现为高质量的合成语音。

对于文本到语音段,每个文档可以包含多个,每个块由组成。例如:

Document  (chapter)
 └── Block (paragraph)
      └── Segment (sentence)

此体系结构支持以下组件:

  • OCI 地区

    OCI 区域是一个本地化的地理区域,其中包含一个或多个托管可用性域的数据中心。区域独立于其他区域,并且很远的距离可以将它们分开(跨越国家甚至大洲)。

  • OCI 虚拟云网络和子网

    虚拟云网络 (VCN) 是您可以在 OCI 区域中设置的可定制软件定义网络。与传统数据中心网络一样,VCN 允许您控制网络环境。一个 VCN 可以具有多个不重叠的无类域间路由 (classless inter-domain routing,CIDR) 块,在创建 VCN 后可以更改这些块。您可以将 VCN 细分为多个子网,这些子网可以限定为某个区域或某个可用性域。每个子网由一系列不与 VCN 中的其他子网重叠的连续地址组成。您可以在创建子网后更改子网的大小。子网可以是公共子网,也可以是专用子网。

  • OCI 注册表

    Oracle Cloud Infrastructure Registry 是一项由 Oracle 管理的服务,可帮助您简化从开发到生产的工作流。通过注册表,您可以轻松存储、共享和管理开发对象,例如 Docker 映像。

  • OCI 对象存储

    OCI Object Storage 可访问任意内容类型的大量结构化和非结构化数据,包括数据库备份、分析数据以及图像和视频等丰富内容。您可以安全地直接从应用或云平台内存储数据。您可以扩展存储,而不会出现性能或服务可靠性下降的情况。

    将标准存储用于您需要快速、立即和频繁访问的“热”存储。将归档存储用于长期保留且很少或很少访问的“冷”存储。

  • OCI 文件存储

    Oracle Cloud Infrastructure File Storage 提供持久、可扩展、安全的企业级网络文件系统。您可以从 VCN 中的任何裸金属、虚拟机或容器实例连接到 OCI 文件存储。您还可以使用 Oracle Cloud Infrastructure FastConnect 和 IPSec VPN 从 VCN 外部访问 OCI 文件存储

  • OCI 块存储卷

    借助 Oracle Cloud Infrastructure Block Volumes ,您可以创建、附加、连接和移动存储卷,并更改卷性能,以满足存储、性能和应用需求。连接卷并将其连接到实例后,您可以像常规硬盘驱动器那样使用该卷。您还可以断开卷的连接并将其附加到另一个实例,而不会丢失数据。

  • 负载平衡器

    Oracle Cloud Infrastructure Load Balancing 提供从单个入口点到多个服务器的自动流量分配。

  • OCI Kubernetes 引擎

    Oracle Cloud Infrastructure Kubernetes EngineOCI Kubernetes EngineOKE )是一项完全托管、可扩展且高度可用的服务,可用于将容器化应用部署到云端。您可以指定应用所需的计算资源, OKE 可在现有租户的 OCI 上预配这些资源。OKE 使用 Kubernetes 跨主机集群自动部署、扩展和管理容器化应用。

  • 服务网关

    通过服务网关,您可以从 VCN 访问其他服务,例如 Oracle Cloud Infrastructure Object Storage 。从 VCN 到 Oracle 服务的流量将通过 Oracle 网络结构传输,不会通过互联网。

  • Internet 网关

    互联网网关允许 VCN 中的公共子网与公共互联网之间的流量。

  • OCI 日志记录
    Oracle Cloud Infrastructure Logging 是一项高度可扩展且完全托管的服务,支持您从云端资源访问以下类型的日志:
    • 审计日志:与 OCI Audit 生成的事件相关的日志。
    • 服务日志:各个服务(例如 OCI API GatewayOCI EventsOCI FunctionsOCI Load BalancingOCI Object Storage 和 VCN 流日志)发布的日志。
    • 定制日志:包含来自定制应用程序、其他云提供商或内部部署环境的诊断信息的日志。
  • OCI 监视

    Oracle Cloud Infrastructure Monitoring 主动和被动地监视您的云资源,并使用预警在指标满足指定触发器时通知您。

  • 策略

    Oracle Cloud Infrastructure Identity and Access Management 策略指定谁可以访问哪些资源以及如何访问。在组和区间级别授予访问权限,这意味着您可以编写策略来为组授予特定区间或租户中特定类型的访问权限。

  • OCI Vault

    借助 Oracle Cloud Infrastructure Vault ,您可以创建并集中管理加密密钥,以保护您的数据和用于保护云中资源访问安全的密钥凭证。默认密钥管理是 Oracle 管理的密钥。您还可以使用客户管理的密钥,这些密钥使用 OCI VaultOCI Vault 提供一组丰富的 REST API 来管理 Vault 和密钥。

  • Hugging Face

    拥抱面是机器学习的协作平台和中心,为 AI 应用提供预训练的 AI 模型、开发工具和托管基础设施,可帮助全球开发人员访问高级机器学习。

关于解决方案设计工作流

此语音生成解决方案实现了以下设计工作流。

  1. 用户启动项目转换。
  2. 对于项目中的每个转换任务,应用程序会向 RabbitMQ 队列中添加一条消息。
  3. 每个 Worker 从队列中检索一条消息。
  4. Worker 处理消息并将请求发送到 TorchServe。
  5. TorchServe 执行推断并将结果返回给 worker。
  6. Worker 处理结果并将消息放回队列。
  7. 应用程序从队列中检索结果消息并将其存储在数据库中。
  8. 用户将收到 UI 中结果的通知。

注意:

对于轻量级模型,工作进程将推断请求发送到 CPU 节点。