SuperAPI AI 工具集

dash-infer

DashInfer 是一个原生 LLM 推理引擎,目标是在 CUDA、x86 和 ARMv9 等多种硬件架构上提供业界领先的性能。它使用 C++ 编写,提供 C++ 和 Python 接口,便于集成到现有系统中。该引擎要求精度与 PyTorch 及 vLLM 等 GPU 引擎一致,并支持连续批处理、自研 SpanAttention 分页注意力、Prefix Cache、InstantQuant 量化、异步接口等特性。支持 Qwen、LLaMA、ChatGLM 等主流开源 LLM 以及 Qwen-VL 等多模态模型,并支持 HuggingFace 格式加载。v2.0 版本增强了 GPU (CUDA) 支持,新增前缀缓存(含 GPU/CPU 交换)、引导解码、针对 GQA 的优化注意力、无锁 reactor 引擎以及对 VLM 和 MoE 模型的支持。

访问官网

工具介绍

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)。