大語言模型 (LLMs) 在自然語言處理 (NLP) 中表現出非凡的泛化能力。它們廣泛應用于翻譯、數字助理、推薦系統、上下文分析、代碼生成、網絡安全等。汽車應用對基于 LLMs 的自動駕駛和座艙功能解決方案的需求與日俱增。在通常資源受限的汽車平臺上部署 LLMs 和 視覺語言模型 (VLMs) 已成為一項嚴峻的挑戰。
本文將介紹 NVIDIA DriveOS LLM SDK,該庫旨在優化自動駕駛汽車 DRIVE AGX 平臺 上先進 LLM 和 VLM 的推理。它是基于 NVIDIA TensorRT 推理引擎構建的輕量級工具包。它整合了針對 LLM 的特定優化,例如自定義注意力內核和量化技術,以便在汽車平臺上部署 LLM。
該工具包提供易于使用的 C++ 庫和示例代碼,用于導出、構建 TensorRT 引擎、執行推理,以及使用完整的端到端工作流對 LLM 進行基準測試。我們將帶您了解 SDK 的關鍵組件,并介紹其支持的模型和部署工作流。
NVIDIA DriveOS SDK 的關鍵組件
DriveOS LLM SDK 包含多個專為高效 LLM 推理而設計的關鍵組件。這些組件可確保在汽車平臺上高效部署 LLM,包括:
- 插件庫 :LLMs 需要專用插件來實現高級功能和優化性能。DriveOS LLM SDK 包含這些自定義插件,以及一組用于處理上下文相關組件的內核,例如旋轉位置嵌入、multihead attention 和 KV-cache 管理。AttentionPlugin 還支持動態批量大小和動態輸入序列長度。
- 標記器/detokenizer :該 SDK 為 LLM 推理提供高效的標記器/detokenizer,遵循 Llama 式字節對編碼 (BPE) 標記器,并帶有正則表達式匹配。此模塊將多模態用戶輸入 (例如文本或圖像) 轉換為令牌流,從而實現不同數據類型之間的無縫集成。
- 采樣器 :采樣器對于文本生成、翻譯和對話等任務至關重要,因為它控制著模型在推理過程中如何生成文本和選擇標記。DriveOS LLM SDK 實現了基于 CUDA 的采樣器來優化此過程。為了平衡推理效率和輸出多樣性,采樣器使用單束采樣方法和 Top-K 選項。這種方法可提供快速且合理多樣化的輸出,而不會產生探索多個束所需的計算成本。這對于汽車應用非常重要,因為需要考慮延遲和效率。
- 解碼器 :在 LLM 推理期間,解碼器模塊根據模型的預測迭代生成 token,從而生成文本或序列。DriveOS LLM SDK 提供靈活的解碼循環,支持靜態批量大小、填充輸入序列,以及生成批量中最長的序列。
這些組件共同支持在多個 NVIDIA DRIVE 平臺上實現靈活、輕量級的高性能 LLM 部署和定制 (圖 1)。
支持的模型、精度格式和平臺
DriveOS LLM SDK 在 DRIVE 平臺上支持一系列先進的 LLM,包括 NVIDIA DRIVE AGX Orin 和 NVIDIA DRIVE AGX Thor 。作為預覽功能,該 SDK 還可以在 x86 系統上運行,這對于開發非常有用。目前支持的模型包括以下內容,未來預計還會有其他模型:
- Llama 3 8B Instruct
- Llama 3.1 8B
- Llama 3.2 3B
- Qwen2.5 7B Instruct
- Qwen2 7B Instruct
- Qwen2 VL
該 SDK 支持多種精度格式,可在不同平臺 (包括 FP16、FP8、NVFP4 和 INT4) 上解鎖大型 LLM。對于 INT4 (W4A16) 精度,使用 AWQ recipe 將模型權重量化為 INT4,并在 FP16 中執行計算。這種方法可顯著減少內存占用。該 SDK 還在 NVIDIA DRIVE AGX Thor 平臺上支持 TensorRT 版本大于 10.4 的 FP8 (W8A8) 精度,以及 TensorRT 版本大于 10.8 的 NVFP4 精度。
這些精度可以進一步減少 LLM 推理期間的內存占用,同時增強內核性能。在此配置中,權重和 GEMM 運算采用 FP8 或 NVFP4 格式,而 LayerNorm、KV 緩存、LM 頭和注意力層保留在 FP16 中。總體而言,DriveOS LLM SDK 旨在高效支持各種 LLM,包括多模態輸入和跨多個平臺的各種精度格式。
LLM 部署工作流
LLM 部署通常是一個復雜的過程,需要大量的工程工作,尤其是在邊緣設備上。DriveOS LLM SDK 為在 DRIVE 平臺上部署 LLM 提供了簡化的解決方案。所提議的 SDK 將部署工作流程簡化為兩個簡單的步驟:導出 ONNX 模型和構建引擎(圖 2)。此過程與使用 TensorRT 部署深度學習模型的標準程序十分相似。
量化在優化 LLM 部署方面發揮著至關重要的作用,尤其是對于資源受限的平臺而言。它可以顯著提高 LLM 的效率和可擴展性。DriveOS LLM SDK 通過在 ONNX 模型導出階段提供多個量化選項來滿足這一需求,您可以通過一條命令輕松調用這些量化選項:
python3 llm_export.py - - torch_dir $TORCH_DIR - - dtype [fp16|fp8|int4] - - output_dir $ONNX_DIR |
此命令可將 Hugging Face 格式的 LLM 轉換為具有指定量化精度的 ONNX 模型。建議在 x86 數據中心 GPU 上執行此步驟,以避免內存不足 (OOM) 問題。
將模型導出到 ONNX 后,可以使用 llm_build
二進制文件來創建相應的 TensorRT 引擎。構建過程與特定模型或精度無關,因為 IO 接口在所有 ONNX 模型中保持標準化。應使用以下命令在 DRIVE 平臺上構建引擎:
./build/examples/llm/llm_build --onnxPath=model.onnx --enginePath=model.engine --batchSize=B --maxInputLen=N --maxSeqLen=M |
該 SDK 還包括交叉編譯構建系統,支持在 x86 機器上編譯 AArch64 目標。此功能可加速部署并簡化邊緣計算平臺上的特征驗證。
除了其用戶友好型部署流程外,DriveOS LLM SDK 還提供各種 C++ 代碼示例,用于端到端 LLM 推理、性能基準測試和實時聊天實現。這些示例使開發者能夠使用靜態批量大小和輸入/輸出序列長度來評估 DRIVE 平臺上不同模型的準確性和性能,或自定義自己的應用程序。
要使用 SDK 提供的 C++ 代碼來啟用 LLM 聊天機器人,請使用以下示例命令:
./build/examples/llm/llm_chat --tokenizerPath=llama-v3-8b-instruct-hf/ --enginePath=llama3_fp16.engine --maxLength=64 |
此命令的整個推理工作流如圖 3 所示,其中與 DriveOS LLM SDK 相關的組件以藍色塊表示。
多模態 LLM 部署
與傳統 LLM 不同,汽車應用中使用的語言模型通常需要多模態輸入,例如攝像頭圖像、文本等。DriveOS LLM SDK 通過提供專為先進 VLM 設計的專用推理和模塊來滿足這些需求。
目前,該 SDK 基于官方的 Qwen2 VL GitHub 資源庫 ,支持 Qwen2 VL 模型,并采用 C++ 實現的圖像預處理器。此模塊可高效加載圖像、調整圖像大小、將圖像分成小分塊 (通過合并)、對像素值進行歸一化,并以與語言模型保持一致的時間格式存儲分塊。
要部署多模態 LLM,必須導出視覺編碼器和語言模型,并單獨構建引擎。為了簡化這一過程,DriveOS LLM SDK 提供了 Python 腳本和 C++ 實用程序,通過標準化步驟簡化了 TensorRT 模型引擎構建。
總結
NVIDIA DriveOS LLM SDK 簡化了 LLM 和 VLM 在 DRIVE 平臺 上的部署。通過利用強大的 NVIDIA TensorRT 推理引擎以及 LLM 特定優化技術,如量化,先進的 LLM 和 VLM 可以在 DRIVE 平臺上輕松部署。此 SDK 為在生產環境中部署強大的 LLM 奠定了基礎,最終提高了 AI 驅動的應用的性能。
詳細了解適用于自動駕駛汽車的 NVIDIA DRIVE 解決方案 。
?