NVIDIA 提供 Perf Analyzer 和 Model Analyzer 等工具,帮助机器学习工程师测量和平衡延迟与吞吐量之间的权衡,这对于优化 ML 推理性能至关重要。领先组织如 Snap 已采用 Model Analyzer 确定可提高吞吐量并降低部署成本的最佳配置。
但是,当为生成式 AI 模型(尤其是大型语言模型(LLMs))提供服务时,性能测量变得更加专业化。
对于 LLM,我们将延迟和吞吐量指标进一步细分为令牌级指标。以下列表显示了关键指标,但跟踪请求延迟、请求吞吐量和输出令牌数量等其他指标也很重要。
- 第一个令牌的时间:从请求发送到收到其第一个响应之间的时间,在基准测试中每个请求都有一个值。
- 输出令牌吞吐量:基准测试中的输出令牌总数除以基准测试持续时间。
- 令牌间延迟:单个请求中 intermediate响应之间的时间除以后者响应生成的令牌数量,即基准测试中每个请求的一个响应值。此指标也称为每个输出令牌的时间。
在测量 LLM 时,必须快速且一致地查看用户和模型的结果。对于许多应用程序,第一个令牌的时间被赋予最高优先级,其次是输出令牌吞吐量和令牌间延迟。但是,能够报告所有这些指标的工具可以帮助定义和测量对您特定系统和用例来说最重要的内容。
实现 LLM 推理的最佳性能需要有效平衡这些指标。在输出 token 吞吐量和 token 间延迟之间存在自然的权衡:同时处理多个用户查询可以提高吞吐量,但也可能导致更高的 token 间延迟。如果没有为生成式 AI 定制的专用基准测试工具,选择适当的平衡以节省总拥有成本(TCO)可能具有挑战性。
介绍 GenAI-Perf
最新版本的 NVIDIA Triton 现在包含新的生成式 AI 性能基准测试工具 GenAI-Perf。这一解决方案旨在增强生成式 AI 性能的测量和优化。
此解决方案通过以下方式为您提供支持:
- 准确测量生成式 AI 至关重要的特定指标,以确定可提供峰值性能和成本效益的最佳配置。
- 使用 OpenOrca 和 CNN_dailymail 等行业标准数据集评估模型性能。
- 通过与OpenAI兼容的API,促进跨不同推理引擎的标准化性能评估。
GenAI-Perf 是默认的基准工具,用于评估所有 NVIDIA 生成式 AI 产品(包括 NVIDIA NIM、NVIDIA Triton 推理服务器和 NVIDIA TensorRT-LLM)的性能表现。它有助于在支持 OpenAI 兼容 API 的不同服务解决方案之间进行轻松的性能比较。
在以下部分中,我们将指导您如何使用 GenAI-Perf 来测量与 OpenAI 端点兼容的模型的性能。
当前支持的端点
NVIDIA GenAI-Perf 目前支持三个 OpenAI 端点 API:
- 聊天
- 聊天完成
- 嵌入
随着新模型类型的流行,我们将发布新的端点。GenAI-Perf 也是开源的,接受社区贡献。
运行 GenAI 性能
有关入门指南的更多信息,请参阅 GenAI-Perf GitHub 库中的安装。运行 GenAI-Perf 的最简单方法是安装最新的 Triton 推理服务器 SDK 容器。为此,您可以在 NVIDIA GPU Cloud 上运行最新的 SDK 容器版本,或使用对应年份和月份的版本 YY.MM
(例如,2024 年 7 月,即 2024.07)。
要运行容器,请运行以下命令:
docker run -it --net=host --rm --gpus=all
nvcr.io/nvidia/tritonserver:YY.MM-py3-sdk
然后,您必须让服务器运行。每个以下示例都有一个不同的命令来运行该类型的模型。
启动 vLLM OpenAI 服务器:
docker run -it --net=host --rm \
--gpus=all vllm/vllm-openai:latest \
--model gpt2 \
--dtype float16 --max-model-len 1024
模型会随着端点的变化而变化:
- 如需完成聊天和聊天,请使用gpt2.
- 对于嵌入,请使用
intfloat/e5-mistral-7b-instruct \
.
在服务器运行时,您可以使用 GenAI-Perf 命令运行 GenAI – Perf 以获取结果。您可以直观地看到结果,这些结果也另存为 CSV 和 JSON,以便轻松解析数据。它们保存在/artifacts
包含其他生成的构件的文件夹,包括可视化模型性能的图形。
分析与 OpenAI 聊天兼容的模型
运行 GenAI-Perf:
genai-perf \
-m gpt2 \
--service-kind openai \
--endpoint-type chat \
--tokenizer gpt2
查看样本结果 (表 1)。
统计 | 平均值 | 分钟 | 最大值 | P99 | P90 | P75 |
请求延迟 (毫秒) | 1679:30 | 567.31 | 2929.26 | 2919.41 | 2780.70 | 2214.89 |
输出序列长度 | 453.43 | 142.00 | 784.00 | 782.60 欧元 | 744.00 | 588.00 |
输入序列长度 | 318.48 | 124.00 | 532.00 | 527.00 | 488.00 | 417.00 |
输出显示了 LLM 性能指标,例如通过运行 GTP-2 进行聊天计算得出的请求延迟、输出序列长度和输入序列长度。
- 输出令牌吞吐量 (每秒):299.99 英镑
- 请求吞吐量 (每秒):0.60
查看生成的部分图形 (图 1)。
分析 OpenAI 聊天完成兼容的模型
运行 GenAI-Perf:
genai-perf \
-m gpt2 \
--service-kind openai \
--endpoint-type completions \
--tokenizer gpt2 \
--generate-plots
查看样本结果 (表 2)。
统计 | 平均值 | 分钟 | 最大值 | P99 | P90 | P75 |
请求延迟 (毫秒) | 74.56% | 30.08 | 96.08 | 93.43 | 82.34 | 74.81 |
输出序列长度 | 15.88 | 2.00 | 17.00 | 16.00 | 16.00 | 16.00 |
输入序列长度 | 211.62 | 29.00 | 570.00 | 538.04 | 479.40 | 413.00 |
- 输出令牌吞吐量 (每秒):218.55
- 请求吞吐量 (每秒):13.76
输出显示了 LLM 性能指标,例如请求延迟、输出序列长度和输入序列长度,这些指标是通过运行 GTP2 完成聊天而计算出的。
查看生成的图形 (图 2)。
分析与 OpenAI 嵌入兼容的模型
创建包含用于嵌入的示例文本的兼容 JSONL 文件。您可以在 Linux 命令行上使用以下命令生成此文件:
echo '{"text": "What was the first car ever driven?"}
{"text": "Who served as the 5th President of the United States of America?"}
{"text": "Is the Sydney Opera House located in Australia?"}
{"text": "In what state did they film Shrek 2?"}' > embeddings.jsonl
运行 GenAI-Perf:
genai-perf \
-m intfloat/e5-mistral-7b-instruct \
--batch-size 2 \
--service-kind openai \
--endpoint-type embeddings \
--input-file embeddings.jsonl
查看样本结果 (表 3)。
统计 | 平均值 | 分钟 | 最大值 | P99 | P90 | P75 |
请求延迟 (毫秒) | 41.96 | 28.16 | 802.19 | 55.24 | 47.46 | 42.57 |
请求吞吐量 (每秒):23.78
结束语
这就是使用 GenAI-Perf 对模型进行基准测试的全部内容。你拥有入门所需的一切。
您可以查看其他 CLIarguments了解更新推理参数会如何影响性能。例如,您可以为--request-rate
以修改每秒发送的请求数。然后,您可以看到这些更改如何影响令牌间延迟、请求延迟和吞吐量等指标。
GenAI-Perf是开源的,可在 GitHub 上获取。