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 上獲取。
?