大语言模型 (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 解决方案 。