DashInfer 是一个原生大语言模型(LLM)推理引擎,用 C++ 编写运行时,旨在为各种硬件架构(包括 CUDA、x86 和 ARMv9)提供生产级、高度优化的实现,目标是在多种硬件上达到业界领先的性能。
用途与定位 DashInfer 用于在生产环境中高效地部署和运行大语言模型推理服务,强调轻量级架构、高精度与高性能。
主要能力
- 轻量级架构:第三方依赖极少,几乎所有依赖库均静态链接,提供 C++ 和 Python 接口,易于集成到现有系统。
- 高精度:经严格测试,推理精度与 PyTorch 及其他 GPU 引擎(如 vLLM)保持一致。
- 高性能推理技术:
- 连续批处理(Continuous Batching):允许立即插入新请求并支持流式输出。
- 分页注意力(Paged Attention):采用自研的 SpanAttention 技术,结合 int8 和 uint4 KV 缓存量化,基于高效 GEMM 和 GEMV 实现加速。
- 前缀缓存(Prefix Cache):支持针对提示的高效前缀缓存,可用于标准 LLM 和多模态语言模型(如 Qwen-VL),同时利用 GPU 和 CPU。
- 量化支持:通过 InstantQuant (IQ) 实现仅权重量化加速,无需微调,提升部署效率;精度评估显示 IQ 对模型精度几乎无影响。
- 异步接口:基于请求的异步接口,可单独控制每个请求的生成参数和请求状态。
- 支持的模型:
- 主流开源 LLM:Qwen、LLaMA、ChatGLM 等,支持加载 HuggingFace 格式模型。
- 多模态语言模型(MMLM):Qwen-VL、Qwen-AL、Qwen2-VL 等。
- OpenAI API Server:可与 fastChat 结合,实现 OpenAI 兼容的 API 服务器。
- 多语言 API:提供 C++ 和 Python 接口,可通过标准跨语言接口将 C++ 接口扩展到 Java、Rust 等其他语言。
支持的硬件与数据类型
- CUDA GPU:支持 CUDA 11.4 - 12.4,支持 SM70 - SM90a 等多种计算架构(T4、3090、4090、V100、A100、A10、L20、H20、H100)。数据类型:FP16、BF16、FP8、FP32、Int8(InstantQuant)、Int4(InstantQuant)。
- x86 CPU:需要 AVX2 指令集;对于 Intel 第五代 Xeon(Emerald Rapids)、第四代 Xeon(Sapphire Rapids),对应阿里云第八代 ECS 实例(如 g8i),使用 AMX 指令加速计算。数据类型:FP32、BF16。
- ARMv9 CPU:需要 SVE 指令集;支持 ARMv9 架构处理器如倚天710,对应阿里云第八代 ECS 实例(如 g8y),采用 SVE 指令加速计算。数据类型:FP32、BF16、Int8(InstantQuant)。
量化技术 DashInfer 提供多种 LLM 权重量化技术,如 int8/int4 仅权重量化、int8 激活量化,以及针对特定设备优化的自定义融合内核。支持的量化算法包括:
- InstantQuant (IQ):动态量化技术,无需微调,部署更快。
- GPTQ:经 GPTQ 微调的模型精度更好,但需要微调步骤。 量化策略分为:
- 仅权重量化(Weight Only Quantization):仅量化压缩权重,计算时使用 bf16/fp16,减少内存访问但相比 BF16 不提升计算性能。
- 激活量化(Activation Quantization):权重以 int8 存储,并在计算阶段执行低精度量化计算,可减少内存访问并提升计算性能,但精度可能略有下降,需业务数据精度测试。 量化粒度包括:
- Per-Channel(Per-Token):DashInfer 量化技术至少采用此粒度,简单且性能最优,通常可满足多数精度要求。
- Sub-Channel:将通道分为 N 组,每组计算量化参数,精度更好但实现复杂、有局限,性能可能略慢;激活量化因公式限制难以实现 Sub-Channel(DashInfer 的激活量化均为 Per-Channel)。
使用方式
- 提供文档和示例代码,涵盖 C++ 和 Python 接口。
- Python 快速开始、LLM OpenAI Server 指南、VLM OpenAI Server 支持。
- 特性介绍:引导解码(Guided Decoding)。
- 开发指南:从源码构建、环境变量。
- 示例位于 <path_to_dashinfer>/examples,文档位于 <path_to_dashinfer>/documents/EN。
- 基础 GPU Python 示例、所有 Python 示例文档、C++ 示例文档。
- 多模态模型(VLM)支持:multimodal 文件夹提供基于 DashInfer 引擎的 VLM 推理工具包,兼容 OpenAI Chat Completion API,支持文本和图像/视频输入。
适用场景 适用于需要在多种硬件(CUDA GPU、x86 CPU、ARMv9 CPU)上部署高性能 LLM 推理服务的生产环境,尤其适合对精度有要求、希望利用连续批处理、前缀缓存、量化加速等技术的场景,以及需要多模态模型(如图像/视频输入)推理的场景。
限制 资料中未明确列出限制条件,仅提及部分量化策略存在性能或实现局限(如 Sub-Channel 激活量化难以实现)。具体限制暂未提供。
版本更新
- [2024/12] v2.0 发布,增强 GPU (CUDA) 支持,包含前缀缓存(GPU 与 CPU 交换)、引导解码、针对 GQA 的优化注意力、无锁 reactor 引擎,新增 VLM 模型(Qwen-VL)和 MoE 模型支持。
- [2024/06] v1.0 发布,支持 x86 与 ARMv9 CPU 及 CPU flash attention。
许可 DashInfer 源码采用 Apache 2.0 许可证。
即将支持的特性 多模态模型支持、使用 Flash-Attention 加速注意力、扩展上下文长度至 32k 以上、支持 4-bit 量化、支持 GPTQ 微调的量化模型、支持 MoE 架构、引导输出(JSON 模式)、前缀缓存(GPU 前缀缓存与 CPU 交换)、量化(CUDA 上 FP8 A8W8 激活量化支持)、LORA(连续批处理 LORA 优化)、引擎内并行上下文阶段与生成阶段、更有效的 GPU MoE 算子、移植到 AMD (ROCm) 平台。
性能基准 文档中提供了与主流 LLM 推理引擎的性能对比,包括 Qwen-VL 与 vLLM 在不同模型规模下的对比(2B/7B 使用 A100-80Gx1,72B 使用 A100-80Gx4),以及不同前缀缓存命中率下 TTFT(首 token 时间)的降低情况(模型 Qwen2-72B-Instruct,输入 4000 tokens,输出 1 token)。还比较了引导解码(JSON 模式)在不同引擎下的输出(上下文长度 45,生成长度 63)。
相关技术:HIE-DNN(高性能 DNN 推理算子库)、SpanAttention(基于分页 KV 缓存的高性能解码阶段注意力)、MoE 算子(见论文,采用高效 top-k 算子 RadiK)。