marlin

GitHub
1k 87 中等 2 次阅读 2天前Apache-2.0开发框架语言模型
AI 解读 由 AI 自动生成,仅供参考

Marlin 是一款专为大语言模型(LLM)推理打造的开源计算内核,专注于 FP16 与 INT4 的混合精度矩阵乘法运算。它的核心目标是突破现有量化方案的瓶颈,在保持高精度的同时显著提升推理速度。

以往的大多数 4 位量化内核在处理较大批量数据时,往往因显存带宽或计算单元利用率不足而导致加速比下降,通常仅支持 1 到 2 个 token 的批量。Marlin 解决了这一问题,能够在 16 到 32 个 token 的中等批量下,实现接近理论极限的 4 倍加速。这得益于其精妙的底层优化:通过智能管理 L2 缓存与共享内存,采用异步加载和双缓冲机制重叠数据传输与计算,并精细调度反量化与张量核心指令,确保 GPU 资源被全方位饱和利用。

Marlin 特别适合需要高效部署 LLM 的开发者、从事模型压缩研究的科研人员,以及致力于降低推理成本的技术团队。无论是大规模在线服务、推测解码还是复杂的思维链推理,Marlin 都能提供卓越的性能表现,帮助你在有限硬件上释放最大算力。

使用场景

某金融科技公司正在构建实时风控对话系统,需在高并发下快速分析大量交易数据并生成合规报告。

没有 marlin 时

  • 推理延迟过高,单用户生成回复需数秒,严重影响客户体验与业务流转。
  • 批量处理受限,现有内核仅支持极小批量,导致昂贵的 GPU 计算资源大量闲置。
  • 硬件成本压力大,为支撑高并发量必须采购大量高端 A100 显卡,运维负担重。
  • 复杂逻辑推理困难,长上下文或思维链任务容易触发显存带宽瓶颈,生成中断。

使用 marlin 后

  • marlin 实现近 4 倍加速,首字生成时间缩短至毫秒级,交互体验接近人类语速。
  • 支持 16-32 token 的中大型批量,GPU 利用率显著提升,单位时间吞吐量翻倍。
  • 显存与计算效率优化,同等算力下可承载更多并发会话,直接节省一半硬件开支。
  • 稳定支持思维链等高级推理方案,复杂风控报告的生成质量与速度双双获得提升。

marlin 凭借高效的 INT4 量化内核,让企业在有限预算下也能跑通大规模大模型服务。

运行环境要求

操作系统
  • 未说明
GPU

需要 NVIDIA GPU,计算能力 >= 8.0 (Ampere 或 Ada),不支持 Hopper,CUDA 版本 >= 11.8

内存

未说明

依赖
notes1. nvcc 编译器版本需与 torch 匹配;2. 运行量化脚本需额外安装 transformers/datasets/sentencepiece;3. 基准测试建议锁定 GPU 频率并关闭 ECC;4. 主要面向 LLM 推理,支持 FP16xINT4 混合精度。
python未说明
torch>=2.0.0
numpy
transformers
datasets
sentencepiece
marlin hero image

快速开始

Marlin

这是 Marlin,一个混合自回归线性Mixed Auto-Regressive Linear)内核(也是地球上速度最快的鱼类之一的名字),这是一个针对大语言模型(LLM)推理的极度优化的 FP16xINT4 矩阵乘法(matmul)内核,能够在批量大小达到 16-32 个 token 时,提供接近理想值(4 倍)的加速比(相比之下,具有可比加速比的前期工作仅支持 1-2 个 token)。这使得 Marlin 非常适合大规模服务、推测性解码或高级多推理方案,例如思维链多数投票(CoT-Majority)。

技术细节:

大多数现代 GPU(图形处理器)的浮点运算次数(FLOP)与字节数的比率约为 100-200。 因此,只要每个 4 位量化权重执行的乘累加操作少于 25-50 次(张量核心),理论上就应该能够保持相对于 FP16 权重的近理想 4 倍加速比。 这意味着,原则上,仅权重量化的全部性能优势应扩展到比现有内核当前实现的批量大小大 4-8 倍的规模。 然而,在实践中实现这一点非常具有挑战性,因为我们本质上需要同时充分利用所有可用的 GPU 资源(全局内存、L2 缓存、共享内存、张量核心、向量核心)。 Marlin 通过多种技术和优化实现了这一点,简要概述如下:

  • 我们组织计算的方式使得所有激活值基本上总是从 L2 缓存获取,并在寄存器中多次重用,以确保重复从共享内存加载也不会成为瓶颈。
  • 我们以异步方式执行全局权重加载,针对所有计算操作以及激活值加载,采用允许立即驱逐的缓存策略,以免用永远不会重用的值不必要地污染 L2 缓存。
  • 我们通过双缓冲技术执行共享内存加载(由于激活值相对较大,其占用空间相当显著),以使其与计算和全局加载重叠。
  • 我们仔细排序反量化和张量核心指令,以确保两个 GPU 流水线都得到充分饱和且不会相互成为瓶颈。
  • 通常,量化权重和组缩放因子都会离线重新排列成一种布局,以便在执行期间提供理想的访问模式,例如允许直接将权重反量化为张量核心组织形式。
  • 我们在一个线程块中使用多个 warp(线程束)来计算同一输出瓦片的局部结果,以实现更高的 warp 数量,最大化计算和延迟隐藏,而不增加输出瓦片的大小(否则会使现实矩阵的良好分区变得困难)。
  • 所有加载使用最大向量长度以达到峰值效率,我们还执行几种布局转换,以确保所有共享内存读写无冲突,特别是对于矩阵加载指令,并且全局归约以最小的内存开销发生。
  • 我们设置并展开循环,使得大部分内存偏移量是静态的,从而最小化运行时索引计算。
  • 我们实现了一种“条纹”分区方案,其中每个 SM(流式多处理器)处理的瓦片段可能(部分)跨越多个列“切片”。这导致在大多数矩阵形状上具有良好的 SM 利用率,同时最小化所需的全局归约步骤。
  • 全局归约直接在输出缓冲区中发生(暂时将 FP32 累加器降维到 FP16),该缓冲区保留在 L2 缓存中;归约操作通常也经过优化以避免任何不必要的读写。
  • 总体而言,内核的 PTX(并行线程执行)汇编代码在 NSight-Compute 中进行了广泛分析,CUDA 代码包含几个更多冗余或稍次优的结构,但它们编译后能生成更快的 PTX。

基准测试:

我们首先在 NVIDIA A10 GPU 上可以理想分区的大矩阵上,比较 Marlin 与其他流行的 4 位推理内核的性能。 这使得所有内核都能达到几乎最佳的潜在性能。 所有内核均在组大小(groupsize)128 下执行(不过,我们注意到缩放格式并不完全相同)。

虽然现有内核在批量大小为 1 时能达到接近最优的 3.87 倍加速比(注意组缩放的 0.125 位存储开销),但随着输入数量的增加,其性能迅速下降。 相比之下,Marlin 在所有批量大小下都能提供近乎理想的加速比,使得在批量大小约为 16-32 时仍能实现最大可能的 3.87 倍加速比。

由于其条纹分区方案,Marlin 在实际(较小)矩阵和各种 GPU 上也带来了强劲的性能。 以下结果证明了这一点,我们在批量大小为 16 的情况下,对流行开源模型的 Transformer 块中所有线性层的整体运行时间进行了基准测试。

最后,我们还研究了在锁定的基础 GPU 时钟下,长时间运行能维持何种性能。 有趣的是,我们发现降低时钟速度会显著损害前期内核的相对加速比,但对 Marlin 的近乎最优性能(相对于较低的时钟设置)没有影响。

要求:

  • CUDA >= 11.8(特别是 nvcc 编译器,其版本应与 torch 匹配)
  • 计算能力 >= 8.0 的 NVIDIA GPU(Ampere 或 Ada 架构,Marlin 尚未针对 Hopper 架构进行优化)
  • torch>=2.0.0
  • numpy 运行量化脚本还需要:
  • transformers
  • datasets
  • sentencepiece

用法:

如果满足所有要求,可以通过调用以下命令在该仓库的根文件夹中安装 Marlin:

pip install .

此后,使用 Marlin 内核(Marlin kernel)最简单的方式是通过 marlin.Layer,这是一个代表 Marlin 量化层(quantized layer)的 torch-module (torch 模块)。它允许通过 marlin.Layer.pack(linear, scales) 将“伪量化”(以 FP16 存储的去量化值)的 torch.Linear 层转换为压缩的 Marlin 格式。或者,如果权重和缩放系数已经过适当的预处理(参见 marlin.Layer.pack(...)),也可以直接通过 marlin.mul(..) 调用该内核。内核本身位于自包含的 marlin/marlin_cuda_kernel.cu 文件中,除了 base-CUDA (基础 CUDA) 之外不包含任何依赖项,因此应易于集成到其他底层框架中。

正确性测试可通过 python test.py 执行,基准测试(benchmarks)可通过 python bench.py 执行。请注意,为了复现我们的“可持续性能”基准测试,需要使用以下命令将 GPU 时钟(GPU clocks)锁定到各自的基准值:

sudo nvidia-smi --lock-gpu-clocks=BASE_GPU_CLOCK --lock-memory-clocks=BASE_MEM_CLOCK

此外,如果启用了 ECC (错误检查和纠正)(例如在 A10 上),则由于每个内存请求都将包含校验和开销(checksum overheads),实际可达到的最大内存带宽(memory bandwidth)将比官方规格表低 10-15%。这可以通过以下方式禁用:

sudo nvidia-smi -e 0

我们在 A10 基准测试中就是这样做的。

GPTQ 示例:

gptq 子文件夹中,我们还提供了一个略微改进的 GPTQ 算法版本,具有更好的组网格裁剪和非均匀校准样本长度,可以生成与 Marlin 兼容的 Llama2 模型的 4 位版本。此外,还有一个脚本可以在流行的 LLM eval harness 中评估此类压缩模型(使用 Marlin 内核)。下面的脚本是在 lm-eval-harness==0.4.0 下测试的,可能不适用于更新或更旧的版本。以下是相应的示例命令(必须安装 marlintransformersdatasets 包):

% Compress Llama2 model and export model in Marlin format.
python llama2.py LLAMA2_CHECKPOINT --wbits 4 --save checkpoint.pt
% Perform perplexity evaluation of uncompressed model.
python llama2.py LLAMA2_CHECKPOINT
% Evaluate compressed model (with Marlin kernels) in the eval harness.
python eval.py --model hf --model_args pretrained=LLAMA2_CHECKPOINT --tasks mmlu \
  --marlin_checkpoint checkpoint.marlin.g128
% Evaluate full precision baseline.
python eval.py --model hf --model_args pretrained=LLAMA2_CHECKPOINT --tasks mmlu 

我们测量了 4 位(group=128)Marlin 模型的以下 WikiText 和 Red-Pajama 困惑度(perplexities),以及 MMLU 零样本准确率(zero-shot accuracy):

Llama2 Wiki2 (FP16) Wiki2 (INT4) RedPaj (FP16) RedPaj (INT4) MMLU (FP16) MMLU (INT4)
7B 5.12 5.27 6.14 6.30 41.80 40.07
13B 4.57 4.67 5.67 5.79 52.10 51.13
70B 3.12 3.21 4.74 4.81 65.43 64.81

我们注意到,此 GPTQ 示例目前主要旨在演示如何生成准确的 Marlin 模型,并作为内核正确性的端到端验证(而不是作为一个灵活的压缩工具)。

引用:

如果您觉得这项工作有用,请考虑引用:

@article{frantar2024marlin,
  title={MARLIN: Mixed-Precision Auto-Regressive Parallel Inference on Large Language Models},
  author={Frantar, Elias and Castro, Roberto L and Chen, Jiale and Hoefler, Torsten and Alistarh, Dan},
  journal={arXiv preprint arXiv:2408.11743},
  year={2024}
}

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架