【免费下载链接】Muse-Spark-Open-816B-A42B-Quark-MXFP4
项目地址:
https://ai.gitcode.com/hf_mirrors/amd/Muse-Spark-Open-816B-A42B-Quark-MXFP4
点击查看 免费下载
Muse-Spark-Open-816B-A42B-Quark-MXFP4 是 AMD 使用 AMD-Quark 框架对 Meta 的 816B 参数多模态大模型 Muse-Spark-Open 做 MXFP4 量化后产出的开源检查点。本文逐行解读官方量化脚本,带你从零复现这个检查点的生成过程,并说明如何在 AMD MI355X 上部署它。
这个检查点是什么:一张表看懂核心信息
📦 在动手之前,先搞清楚这个仓库里装的是什么。它不是源代码仓库,而是一个量化后的模型检查点,关键信息一览:
| 模型架构 | MuseSparkForConditionalGeneration(多模态:文本/图像/视频/音频输入,文本输出) |
| 基座模型 | meta-models/Muse-Spark-Open-816B-A42B(bf16 原始权重) |
| 量化工具 | AMD-Quark v0.12 |
| 量化范围 | 路由式 MoE 专家层(第 0 层和第 61 层除外,保持 bf16) |
| 权重量化 | OCP MXFP4,静态量化 |
| 激活量化 | OCP MXFP4,动态量化 |
| 目标硬件 | AMD Instinct MI350 / MI355,Linux |
| 推理引擎 | SGLang / vLLM(ROCm 版) |
几个数字帮你建立量级感:语言模型共 62 层(编号 0–61),每层 256 个本地专家,每次只激活 8 个(典型 MoE 结构);隐藏层维度 8192,词表 202048,支持滑动窗口 + 全注意力混合机制(详见 config.json)。
💡 为什么只量化 MoE 专家?因为专家权重占了 816B 总参数的绝大部分,把它们压到 4-bit 能带来最大显存收益;而注意力层、路由门控(gate)和首尾两层对精度敏感,保留 bf16 能最小化质量损失。
前置准备:硬件与软件环境
✅ 复现这个检查点需要准备:
- 硬件:AMD Instinct MI350/MI355 GPU(量化本身可在 CPU 上跑,但后续推理需要该硬件)
- 软件:Linux + ROCm,以及 AMD-Quark 0.12 版本的 Python 包
- 基座权重:meta-models/Muse-Spark-Open-816B-A42B 的 bf16 检查点(约 1.6TB 量级)
- 磁盘空间:量化输入 + 输出合计建议预留 2TB 以上
⚠️ 注意:本仓库中的 model-000XX-of-00065.safetensors 分片在部分镜像中是 Git LFS 指针文件(约 136 字节),实际权重需要通过支持 LFS 的下载工具获取。
AMD-Quark 量化脚本逐行解读
量化脚本共 44 行,完整源码见 README.md。它只有四步:导入工具 → 注册模型模板 → 获取 MXFP4 配置 → 一键量化。下面逐段拆解。
第 1 步:导入三个核心组件
from quark.torch import ModelQuantizer
from quark.torch.quantization.config.template import LLMTemplate
from quark.torch.quantization.weight_convert import SplitFusedExperts, WeightConverter
| ModelQuantizer | 量化器本体,负责执行权重与激活的量化、写出结果 |
| LLMTemplate | 模型模板系统,把"模型结构 + 量化方案"打包成可复用的配置 |
| SplitFusedExperts / WeightConverter | 权重布局转换器,用于拆分 MoE 融合权重 |
第 2 步:注册 Muse-Spark 专属模板(脚本核心)
LLMTemplate.register_template(
LLMTemplate(
model_type="muse_spark",
kv_layers_name=["*k_proj", "*v_proj"],
q_layer_name="*q_proj",
exclude_layers_name=[
"lm_head",
"*self_attn*",
"*mlp.gate",
"*pre_expert_proj",
"*post_expert_proj",
"*vision*",
"*audio*",
"*language_model.layers.0.*",
"*language_model.layers.61.*",
],
…
)
)
🔍 逐字段解读:
- model_type="muse_spark":Muse-Spark 不是 Quark 内置的通用 LLM 结构,所以要先注册一个专属模板,后续才能用名字取到它。
- kv_layers_name / q_layer_name:告诉 Quark 注意力 Q/K/V 投影的命名规则。它们被排除量化,这里声明是为了模板完整性。
- exclude_layers_name 通配符清单(哪些层不量化、保持 bf16),逐个说明:
| lm_head | 输出词表投影层,直接决定 logits,精度损失会被放大 |
| *self_attn* | 所有注意力层(Q/K/V/O 投影) |
| *mlp.gate | MoE 路由门控,选错专家比"算得糙一点"更伤 |
| *pre_expert_proj / *post_expert_proj | MoE 专家前后共享的线性层 |
| *vision* / *audio* | 视觉塔、音频塔整个编码器 |
| *language_model.layers.0.* 和 layers.61.* | 第 0 层(输入端)与第 61 层(输出端,共 62 层) |
第 3 步:拆分 MoE 融合权重
f2f_weight_converters=[
WeightConverter(
"gate_up_proj",
["gate_proj.weight", "up_proj.weight"],
operations=[SplitFusedExperts(split_axis=0)],
),
WeightConverter(
"down_proj",
["down_proj.weight"],
operations=[SplitFusedExperts(split_axis=0)],
),
],
这段是 MoE 模型量化的关键技巧:
- 基座权重中,256 个专家的 gate_proj 和 up_proj 被融合成一个大张量 gate_up_proj(沿第 0 维堆叠),down_proj 同理。
- SplitFusedExperts(split_axis=0) 会把大张量沿专家维度切开,变成"每专家独立"的 gate_proj.weight / up_proj.weight / down_proj.weight。
- 拆分后 Quark 才能对每个专家逐组做 MXFP4 量化,并在输出检查点中写出规范的分层命名——这正是你在 config.json 的 exclude 列表里看到 …experts.0.gate_proj 这类路径的原因。
第 4 步:获取配置并执行量化
template = LLMTemplate.get("muse_spark")
quant_config = template.get_config(scheme="mxfp4")
quantizer = ModelQuantizer(quant_config)
quantizer.direct_quantize_checkpoint(
pretrained_model_path="meta-models/Muse-Spark-Open-816B-A42B",
save_path="amd/Muse-Spark-Open-816B-A42B-Quark-MXFP4",
weight_converters=template.f2f_weight_converters,
)
- get_config(scheme="mxfp4"):选择 OCP MXFP4 方案——每 32 个元素为一组,组内用 4-bit 浮点值 + 一个 e8m0 共享指数(scale),这是 AMD MI350/MI355 硬件原生支持的块浮点格式。
- direct_quantize_checkpoint:直接在检查点文件上量化,不需要加载模型、不需要校准数据、不需要 GPU,本质是"读张量 → 拆专家 → 量化 → 重写"的离线流水线,这也是复现成本很低的原因。
- weight_converters 把第 3 步定义的拆分规则传入,量化时自动生效。
验证量化结果:对照 config.json 检查点
跑完脚本后,如何确认产物正确?打开产物的 config.json,重点看 quantization_config 字段(config.json):
| weight.dtype | fp4 | 权重为 4-bit |
| weight.is_dynamic | false | 权重静态量化(量化时算好 scale) |
| input_tensors.is_dynamic | true | 激活动态量化(运行时算 scale) |
| group_size | 32 | MX 块大小 32 |
| scale_format | e8m0 | OCP MXFP4 标准共享指数格式 |
| round_method | half_even | 银行家舍入,减少系统性偏差 |
| quant_method | quark | 量化方法标识 |
| version | 0.12.post1+f7d8cef | 与脚本使用的 Quark v0.12 一致 |
| export.weight_format | real_quantized | 权重以真实 4-bit 存储(非模拟) |
同时检查 exclude 列表(config.json):脚本中的通配符已被展开为具体张量名,例如 model.language_model.layers.0.mlp.experts.* 的第 0 层和第 61 层全部 256 个专家均保留 bf16,audio_tower、vision_tower、lm_head 也在列内——与脚本意图完全吻合。
权重按 65 个分片保存(model-00001-of-00065.safetensors 至 model-00065-of-00065.safetensors),张量到分片的映射见 model.safetensors.index.json。采样参数定义在 generation_config.json(temperature=1.0、top_p=1、top_k=64),对话模板见 chat_template.jinja。
MI355X 上部署 Muse-Spark MXFP4 检查点:SGLang 与 vLLM 两条路线
⚡ 量化检查点最终要跑起来才算闭环。README.md 提供了两套官方 ROCm 部署方案,关键参数对比:
| 并行策略 | TP4 + EP4(张量 + 专家并行) | TP8(张量并行) |
| 注意力后端 | AITER(统一注意力) | ROCM_AITER_FA |
| MoE 后端 | FlyDSL | AITER 内核(bf16 reduce) |
| 特色 | DFlash V2 投机解码(草稿模型 RadixArk/Muse-Spark-Open-DFlash2,每次猜 8 个 token) | chunked prefill + 全分段 CUDA Graph |
| 上下文 | 按容器配置 | –max-model-len 32768,最多 128 并发序列 |
| 服务端口 | 30000 | 8000 |
完整的 docker run 命令(含 –device=/dev/kfd、AITER 环境变量等 ROCm 特有配置)直接抄 README.md 即可。服务启动后,用一条请求验证:
curl http://localhost:30000/v1/chat/completions \\
-H 'Content-Type: application/json' \\
-d '{"model": "amd/Muse-Spark-Open-816B-A42B-Quark-MXFP4",
"messages": [{"role": "user", "content": "你好"}]}'
🔐 如果环境需要认证,把 HF_TOKEN 通过环境变量传入容器,不要硬编码在命令里。
常见问题 FAQ
❓ 为什么第 0 层和第 61 层不做 MXFP4 量化? 首层负责把 token embedding 送入网络,末层紧邻 lm_head 决定最终 logits,两者对量化误差最敏感,保留 bf16 是业界常见的"精度保护"做法。
❓ 为什么拉下来的分片文件只有 100 多字节? 这是 Git LFS 指针文件,不是真实权重。用 git lfs 或支持 LFS 的下载工具重新拉取即可。
❓ 能用 NVIDIA GPU 跑吗? 本检查点面向 AMD MI350/MI355 的 OCP MXFP4 硬件路径(官方配方均为 ROCm 镜像)。非 AMD 硬件请参考基座模型的 bf16 版本。
❓ 商用有什么限制? 遵循 Muse Model License(见 LICENSE.md),产品需展示 "Built with Muse Spark Open",年化收入超 2000 万美元的 Model-as-a-Service 场景需与 Meta 另行签约;使用限制详见 USE_POLICY.md。
总结与仓库文件清单
🎯 复现的核心链路只有一条:基座 bf16 检查点 → 注册 muse_spark 模板 → mxfp4 方案 → direct_quantize_checkpoint 离线量化 → 校验 config.json 产物。整个脚本不到 50 行,理解"哪些层量化、MoE 权重如何拆专家"这两个问题,就掌握了 90% 的知识点。
本仓库主要文件:
| README.md | 模型概览、量化脚本、SGLang/vLLM 部署配方 |
| config.json | 架构与 MXFP4 量化配置(quantization_config) |
| generation_config.json | 默认采样参数 |
| chat_template.jinja | 对话模板 |
| tokenizer.json / tokenizer_config.json / processor_config.json | 分词器与多模态处理器配置 |
| model-00001-of-00065.safetensors 等 65 个分片 | MXFP4 量化后的模型权重 |
| model.safetensors.index.json | 张量 → 分片索引 |
| LICENSE.md / USE_POLICY.md | 许可证与使用政策 |
| l4_200k_base | 仓库附带资源文件 |
掌握这套"模板 + 直量化"流程后,把 model_type、排除清单和 scheme 换成目标模型对应的值,就能用同样的方式复现其他 MXFP4 检查点。
赞
【免费下载链接】Muse-Spark-Open-816B-A42B-Quark-MXFP4
项目地址:
https://ai.gitcode.com/hf_mirrors/amd/Muse-Spark-Open-816B-A42B-Quark-MXFP4
点击查看 免费下载
相关推荐
Spotify广告太烦人?这款开源神器让你免费听歌无干扰
PalEdit存档编辑工具:释放PalWorld幻兽伙伴的无限潜能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

