【免费下载链接】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 步:修正配置中的两处关键差异
对照原始配置,转换后做了两处必要修正:
- dtype 修正:原始 config 写的是
float32,但权重实际是 bf16。这里如实标为bfloat16(见 config.json),防止任何工具把权重上转为 fp32 白白多占内存; - 结束符修正:原始 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-bit | 4-bit |
|---|---|---|---|
| 每权重位数 | 16 | 8.5 | 6.4 |
| 磁盘占用 | 2.2 GB | 1.2 GB | 0.9 GB |
| 峰值内存 | 2.2 GB | 1.3 GB | 1.0 GB |
| WikiText-2 困惑度 | 18.654 | 18.713(+0.3%) | 19.703(+5.6%) |
| 生成速度 | 195.7 tok/s | 306.9 tok/s | 379.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 模型转换流水线:
- 锁定权重→ 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
相关推荐
MLX转换完整指南:Bernini-v2的bf16权重如何从PyTorch模型一步步诞生
MLX转换完整指南:Bernini v2的bf16权重如何从PyTorch模型一步步诞生 Bernini v2 bf16 是字节跳动开源视频生成模型 Berni
如何三步跑通K2-Horizon-0.9B-bf16:从安装mlx-lm到首次生成的快速入门教程
如何三步跑通K2 Horizon 0.9B bf16:从安装mlx lm到首次生成的快速入门教程 K2 Horizon 0.9B bf16 是面向 Apple
S1-mini-MLX-4bit的4bit仿射量化是如何炼成的?mlx-lm转换BF16权重全流程复盘
S1 mini MLX 4bit的4bit仿射量化是如何炼成的?mlx lm转换BF16权重全流程复盘 S1 mini MLX 4bit 是 Superwhis
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考