🦙Llama 4:如何运行与微调
如何使用我们的动态 GGUF 在本地运行 Llama 4,从而在精度上恢复相比标准量化的表现。
Llama-4-Scout 模型有 1090 亿参数,而 Maverick 有 4020 亿参数。完整未量化版本需要 113GB 磁盘空间,而 1.78 比特版本使用 33.8GB(大小减少 75%)。 Maverick (4020 亿) 从 422GB 降到了仅 122GB(减少 70%)。
同时支持 文本 和 视觉(vision) 现在已支持!并对工具调用进行了多重改进。
Scout 的 1.78 比特可装入 24GB VRAM 的 GPU,以约 20 令牌/秒 进行快速推理。Maverick 的 1.78 比特可装入 2x48GB VRAM 的 GPU,以约 40 令牌/秒 进行快速推理。
对于我们的动态 GGUF,为了在准确性和体积之间取得最佳平衡,我们并不对所有层进行量化,而是有选择地将例如 MoE 层量化到更低比特,同时将注意力层和其他层保留在 4 或 6 比特。
我们所有的 GGUF 模型均使用校准数据进行量化(Scout 约 25 万令牌,Maverick 约 100 万令牌),这将比标准量化提高准确性。Unsloth imatrix 的量化与像 llama.cpp 和 Open WebUI 等流行推理引擎完全兼容。
Scout - Unsloth 动态 GGUF 的最佳配置:
为了获得最佳效果,请使用 2.42 比特(IQ2_XXS)或更大版本。
Maverick - Unsloth 动态 GGUF 的最佳配置:
⚙️ 官方推荐设置
根据 Meta,以下是推荐的推理设置:
温度(Temperature)为 0.6
Min_P 为 0.01(可选,但 0.01 效果良好,llama.cpp 默认值为 0.1)
Top_P 为 0.9
聊天模板/提示格式:
一个 BOS 标记为
<|begin_of_text|>会在分词时自动添加(请不要手动添加!)根据 https://www.llama.com/docs/model-cards-and-prompt-formats/llama4_omni/,有一个 建议的可选系统提示,如下所列:
📖 教程:如何在 llama.cpp 中运行 Llama-4-Scout
获取最新的
llama.cpp在 此处的 GitHub。您也可以按照下面的构建说明进行。若-DGGML_CUDA=ON更改为-DGGML_CUDA=OFF如果您没有 GPU 或仅想要在 CPU 上进行推理。 对于 Apple Mac / Metal 设备,设置-DGGML_CUDA=OFF然后照常继续 - Metal 支持默认启用。
通过以下方式下载模型(在安装
pip install huggingface_hub hf_transfer)。你可以选择 Q4_K_M,或其他量化版本(例如 BF16 全精度)。更多版本见: https://huggingface.co/unsloth/Llama-4-Scout-17B-16E-Instruct-GGUF
运行模型并尝试任意提示。
编辑
--threads 32用于设置 CPU 线程数,--ctx-size 16384用于上下文长度(Llama 4 支持 1000 万上下文长度!),--n-gpu-layers 99用于指定将多少层卸载到 GPU。若 GPU 出现内存不足,请尝试调整它。若仅使用 CPU 推理,请移除此项。
使用 -ot ".ffn_.*_exps.=CPU" 将所有 MoE 层卸载到 CPU!这实际上允许您将所有非 MoE 层放在一块 GPU 上,从而提高生成速度。如果您有更多 GPU 容量,可以自定义正则表达式以卸载更多层。
在测试方面,不幸的是我们无法让完整的 BF16 版本(即无论是否量化)正确完成 Flappy Bird 游戏或 Heptagon 测试。我们尝试了许多推理提供者,使用或不使用 imatrix,使用他人的量化版本,以及使用常规的 Hugging Face 推理,但该问题仍然存在。
我们发现通过多次运行并要求模型修复和查找 bug,可以解决大多数问题!
对于 Llama 4 Maverick —— 最好有 2 块 RTX 4090(2 x 24GB)
🕵️ 有趣的见解与问题
在对 Llama 4 Maverick(大型模型)进行量化时,我们发现第 1 层、第 3 层和第 45 层的 MoE 层无法正确校准。Maverick 对每个奇数层使用交错的 MoE 层,因此为 Dense->MoE->Dense 等交替结构。
我们尝试向校准数据集中加入更多不常见语言,并尝试使用更多令牌(100 万)相较于 Scout 的 25 万进行校准,但问题仍然存在。我们决定将这些 MoE 层保留为 3 比特和 4 比特。

对于 Llama 4 Scout,我们发现不应量化视觉层,并将 MoE 路由器和其他一些层保留为未量化 —— 我们将这些上传到 https://huggingface.co/unsloth/Llama-4-Scout-17B-16E-Instruct-unsloth-dynamic-bnb-4bit

我们还不得不转换 torch.nn.Parameter 更改为 torch.nn.Linear 以使 MoE 层能够进行 4 比特量化。这也意味着我们不得不重写并修补通用的 Hugging Face 实现。我们将量化后的版本上传到 https://huggingface.co/unsloth/Llama-4-Scout-17B-16E-Instruct-unsloth-bnb-4bit 和 https://huggingface.co/unsloth/Llama-4-Scout-17B-16E-Instruct-unsloth-bnb-8bit 用于 8 比特。

Llama 4 现在还使用分块注意力——它本质上是滑动窗口注意力,但通过在 8192 边界处不关注之前的令牌来稍微提高效率。
最后更新于
这有帮助吗?

