☰
K2-Horizon-0.9B-bf16是如何诞生的:mlx_lm.convert从PyTorch权重到MLX的完整转换流程
2026/10/22 12:34:55 网站建设 项目流程

【免费下载链接】K2-Horizon-0.9B-bf16

项目地址:https://ai.gitcode.com/hf_mirrors/mlx-community/K2-Horizon-0.9B-bf16
点击查看免费下载

K2-Horizon-0.9B-bf16是 IFM 开源 0.9B 级 dense 语言模型的MLX 模型转换版:开发者用mlx_lm.convert --dtype bfloat16把原始PyTorch 权重逐张搬运为 MLX 张量,再随仓库附带 k2_horizon.py 模型代码,让它在 Apple Silicon 上以 2.2 GB 内存、195.7 tok/s 的速度直接推理。本文完整复盘这次从 PyTorch 到 MLX 的诞生过程。

一、成品速览:仓库里都有什么?📦

这个仓库就是一次「MLX 权重转换」的标准交付物,所有文件各司其职:

文件作用
model.safetensors转换后的 MLX 权重(bf16 未量化,约 2.2 GB,总参数约 10.78 亿)
model.safetensors.index.json权重索引与总大小元数据
k2_horizon.py手写的 MLX 模型代码,mlx-lm 靠它加载这个新架构
config.json模型超参:28 层、hidden 1536、131072 上下文、YaRN 配置
generation_config.json生成停止符设置
tokenizer.json / chat_template.jinja分词器与对话模板
README.md转换说明、验证报告与基准数据

一句话定位:这是一个 0.9B 级 decoder-only 模型,支持128K(131,072 token)上下文(通过 YaRN RoPE 从 8K 外推而来),未做任何量化,权重就是原始的 bf16 数值。

二、为什么必须做这次 MLX 转换?

原始模型是 PyTorch 实现的,只能跑在 CUDA 或 CPU 上;而 Mac 用户需要的是MLX 格式的权重,才能被mlx-lm调度到 Apple 的 GPU/统一内存上高效推理。

但 K2-Horizon 属于k2_horizon这种 mlx-lm 尚未原生支持的架构(社区已有官方 issue 在跟进),所以这次转换多了一步关键操作:把 MLX 版的模型实现直接放进仓库,并在 config.json 里通过model_file字段指向 k2_horizon.py。这样已发布的 mlx-lm 无需等待上游合入就能加载该模型。

三、完整转换流程六步走(核心)⚙️

第 1 步:锁定原始 PyTorch 权重

转换基于 IFM 官方模型卡IFM/K2-Horizon-0.9B的指定 revision(fa7f5de)导出 bf16 权重,确保与参考实现严格对应,避免「权重漂移」。

第 2 步:移植模型代码 k2_horizon.py

这是整个转换中最费工的一步。k2_horizon.py 文件头的注释就是一份「移植说明书」,逐条列出与 PyTorch 参考实现的 6 处差异:

  • 专家计算改用gather_mm:参考实现用 Python 循环 +index_add_累加各专家,这种原地更新在 MLX 的惰性计算图里很慢甚至不可用,于是改成单次 kernel 调用;
  • 加载时堆叠专家权重:见 k2_horizon.py#L588-L624 的sanitize方法,把每个专家独立的张量按名称映射、堆叠为[num_experts, out, in]的大张量;
  • YaRN 安全校验:k2_horizon.py#L109-L149 会检查配置中的attention_factor是否与 mlx-lm 的 YarnRoPE 完全一致(本模型为 1.27726),不一致就直接报错而不是算出错误结果。

第 3 步:一条命令完成权重转换

mlx_lm.convert --model IFM/K2-Horizon-0.9B --hf-upload-path ... --dtype bfloat16

即mlx_lm.convert --dtype bfloat16:不做量化,权重保持原始 bf16 数值,产出 model.safetensors。

第 4 步:修正配置中的两处关键差异

对照原始配置,转换后做了两处必要修正:

  1. dtype 修正:原始 config 写的是float32,但权重实际是 bf16。这里如实标为bfloat16(见 config.json),防止任何工具把权重上转为 fp32 白白多占内存;
  2. 结束符修正:原始 generation_config.json 只列了 token 1 作为 EOS,但对话模板每轮实际以<|ifm|im_end|>(id 64019)收尾。转换版把 64019 加入eos_token_id,保证生成在回答结束处干净停止,输出里不会出现<|ifm|im_end|>。

第 5 步:fp32 逐层数值对齐验证

这是最能体现「专业转换」的一步。开发者在fp32 精度、真实权重上把 MLX 实现与 IFM 的 PyTorch 参考实现逐层比对:

  • ✅28 个层逐一匹配,相对误差 ≤ 4e-6,每个位置的下一 token 预测完全一致;
  • ✅逐 token 对齐:带 KV cache 的贪心生成中,PyTorch 参考模型在每一步都选中相同 token,320/320 全对(覆盖英文、代码、数学、中文四类 prompt);
  • ✅ 带 cache 与不带 cache 的输出每一步也一致。

第 6 步:冒烟测试 + 基准跑分 🧪

转换完成后用已发布的 mlx-lm 0.31.3 做冒烟测试:17 * 23→391、「capital of Australia」→Canberra,均正常终止。在Mac Studio M4 Max 128GB上测得生成速度195.7 tok/s,短提示下峰值内存仅2.2 GB,8 GB 内存的 Mac 也能装下。

四、验收指标:bf16 / 8bit / 4bit 三版本对比 📊

同系列还有量化版本,均在 M4 Max 128GB 上以同样方式测得(WikiText-2,128×512 token,越低越好):

指标bf16(本文主角)8-bit4-bit
每权重位数168.56.4
磁盘占用2.2 GB1.2 GB0.9 GB
峰值内存2.2 GB1.3 GB1.0 GB
WikiText-2 困惑度18.65418.713(+0.3%)19.703(+5.6%)
生成速度195.7 tok/s306.9 tok/s379.8 tok/s

结论:bf16 版精度最优、速度偏慢;追求速度或省内存可换量化版。长上下文注意 KV cache:bf16 下每 token 约 56 KB(128K 全量约 7 GB),可用--max-kv-size或 KV 量化(--kv-bits 8)压缩。

五、如何在 Mac 上运行这个 bf16 模型 🍎

pip install -U mlx-lm git clone https://gitcode.com/hf_mirrors/mlx-community/K2-Horizon-0.9B-bf16

由于仓库自带模型代码,加载时需加--trust-remote-code(该文件在本机执行,介意可先读一遍 k2_horizon.py),然后:

mlx_lm.generate --model mlx-community/K2-Horizon-0.9B-bf16 --trust-remote-code \ --prompt "Explain mixture-of-experts in two sentences." --max-tokens 2048

三个使用要点:

  • 模型会「先思考再回答」:推理内容包在<ifm|think> … </ifm|think>里,max_tokens要留足余量;思考强度可通过对话模板的reasoning_effort参数设为high(默认)/medium/low;
  • 推荐采样参数(来自官方模型卡):temperature=0.6、top_p=0.95;
  • mlx-lm 服务化注意:mlx_lm.server目前会把思考文本放在content里返回,而非独立的 reasoning 字段。

六、总结

K2-Horizon-0.9B-bf16 的诞生是一条教科书级的MLX 模型转换流水线:

  1. 锁定权重→ 2.移植 MLX 模型代码(sanitize改名 + YaRN 校验)→ 3.mlx_lm.convert --dtype bfloat16转换→ 4.修正 config/EOS→ 5.fp32 逐层验证(320/320 全对)→ 6.冒烟测试与基准。

这套流程同样适用于其它「mlx-lm 暂不支持的新架构」:只要架构数学上可实现,写好模型代码 + 权重改名映射 + 逐层对齐验证,就能把 PyTorch 模型安全地搬到 Apple Silicon 上。本仓库基于 Apache-2.0 许可发布,模型本身的全部功绩归于 IFM。

【免费下载链接】K2-Horizon-0.9B-bf16

项目地址:https://ai.gitcode.com/hf_mirrors/mlx-community/K2-Horizon-0.9B-bf16
点击查看免费下载
上一篇:硬件要求与版本匹配完整清单:Llama-3.2-1B_rai_1.8.0_npu_4K支持哪些AMD锐龙AI处理器与驱动版本
下一篇:RapidOCR代码质量保障:静态分析与代码评审规范

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询