dots.llm1 架构支持全解析:从社区讨论到 ik_llama.cpp 源码落地
dots.llm1 架构支持全解析从社区讨论到 ik_llama.cpp 源码落地【免费下载链接】ik_llama.cppllama.cpp fork with additional SOTA quants and improved performance项目地址: https://gitcode.com/GitHub_Trending/ik/ik_llama.cppdots.llm1 是 2025 年出现的混合型稀疏专家模型架构将 Qwen 的注意力机制与 DeepSeek 的 MoE 结构相结合。本文以 ik_llama.cpp 仓库中的 讨论 #543 为起点结合仓库内已合入的 PR 573 对应的源码实现完整梳理 dots.llm1 的架构特征、在 ik_llama.cpp 中的落地方式以及用户可以从哪些源码入口进一步研究该架构。讨论背景dots.llm1 在主线版本中的性能困境2025 年 6 月 20 日社区成员Iconology在 讨论 #543 中提出了一个非常实际的问题Out of curiosity, do you have any plans to add dots.llm1 support? The model seems interesting enough. I tried it out on mainline, but the speeds were atrocious for its size, making it unusable, at least for me.也就是说dots.llm1 模型本身足够有趣但在 llama.cpp 主线版本上运行时对于其模型规模而言推理速度极差导致基本不可用。这位用户因此转向 ik_llama.cpp fork看重的是两点MoE 推理加速the insane MoE speedups先进的量化方案fork 中被称为 SOTA 的量化类型。随后saood06在 2025 年 6 月 20 日回复指出从主线的移植 PR 代码看dots.llm1 的移植复杂度并不高from a quick skim of the PR code, I dont see anything that would lead to a complicated port.关键依据是 dots.llm1 的架构定义来自 transformers 仓库中的modular_dots1.pyThe model architecture is a combination of Qwen and Deepseek parts即 dots.llm1 Qwen 式注意力 DeepSeek 式 MoE的组合架构。2025 年 7 月 2 日firecoperana询问移植进度次日saood06给出明确答复#573 exists now. Testing is welcome.——即 PR #573 已提交欢迎测试。dots.llm1 架构剖析Qwen 与 DeepSeek 的混合体dots.llm1 的架构本质决定了移植难度和推理性能瓶颈。以下结合 ik_llama.cpp 的源码实现逐层拆解。架构注册与识别在 src/llama-arch.h 中LLM_ARCH_DOTS1被注册为架构枚举对应在 src/llama-arch.cpp 中映射到字符串dots1{ LLM_ARCH_DOTS1, dots1 },这意味着加载 GGUF 模型时只要模型元数据中的架构名为dots1llama.cpp 便能正确识别并路由到对应的张量创建与计算图构建路径。张量布局双分支 FFNMoE Shared Expert在 src/llama-load-tensors.cpp 的create_dots1_tensors中可以看到 dots.llm1 的完整张量布局输入输出tok_embd词嵌入、output_norm、outputlm_head每层注意力attn_norm、wq、wk、wv、wo、attn_q_norm、attn_k_norm——Q/K 各自有独立的 RMSNorm这是典型的 Qwen 风格前馈分支前n_layer_dense_lead层使用标准密集 FFNffn_gate、ffn_down、ffn_up其余层进入MoE 分支ffn_gate_inp门控输入、ffn_exp_probs_b可选 bias、每专家权重以及一组共享专家shared expert张量ffn_gate_shexp、ffn_down_shexp、ffn_up_shexp维度为n_ff_exp * n_expert_shared。这里的n_ff_exp专家 FFN 中间维度、n_expert_shared共享专家数量、n_layer_dense_lead前导密集层层数正是 DeepSeek-V3 系列引入的 MoE 结构特征。加载代码还对n_expert与n_expert_used做了非零校验保证门控参数合法。计算图Qwen 式注意力 DeepSeek 式 MoE在 src/graphs/build_dots1.cpp 的build_dots1中计算图构建流程清晰地呈现了两者融合Q/K 独立 RMSNorm 后接 RoPEbuild_dots1.cppQcur llm_build_norm(ctx0, Qcur, hparams, model.layers[il].attn_q_norm, NULL, LLM_NORM_RMS, cb, il); Qcur ggml_rope_ext(...); Kcur llm_build_norm(ctx0, Kcur, hparams, model.layers[il].attn_k_norm, NULL, LLM_NORM_RMS, cb, il); Kcur ggml_rope_ext(...);这是 Qwen 系列含 Qwen3、DeepSeek-V3 部分变体的经典做法对 Q 和 K 分别做归一化后再施加旋转位置编码保证注意力分数稳定。标准 MHA KV CacheQ/K/V 分别由独立权重投影wq/wk/wv重塑为n_head/n_head_kv头后进入llm_build_kv即标准的 Grouped/Multi-Head Attention 路径。双分支 FFN 求和build_dots1.cppggml_tensor * ffn_shexp llm_build_ffn(..., model.layers[il].ffn_up_shexp, ...); cur ggml_add(ctx0, moe_out, ffn_shexp);MoE 专家输出llm_build_moe_ffn使用 SILU 激活、可配置expert_weights_norm/expert_weights_scale/ 门控函数类型与共享专家输出逐元素相加——这正是 DeepSeek-V3 的 shared expert 设计让每个 token 都能稳定获得一部分固定专家容量。层归一化与残差每层均以attn_norm/ffn_normRMSNorm 残差连接组织符合 Transformer 标准范式。从源码结构看可以推断dots.llm1 的Qwen 部分主要体现在注意力层Q/K 独立归一化 RoPE 多头注意力DeepSeek 部分则体现在 MoE 共享专家的前馈结构。这种组合正是社区讨论中combination of Qwen and Deepseek parts的工程化印证。构建上下文与完整调用链src/llama-build-context.cpp 中LLM_ARCH_DOTS1分支将构建任务交给llm.build_dots1()case LLM_ARCH_DOTS1: result llm.build_dots1(); break;结合上述源码dots.llm1 从模型加载到前向推理的完整调用链为GGUF 元数据中架构名dots1→ llama-arch.cpp 解析为LLM_ARCH_DOTS1张量加载阶段 → llama-load-tensors.cpp 分发到create_dots1_tensors创建全部权重前向阶段 → llama-build-context.cpp 分发到build_dots1()构建计算图。这一链路与仓库 README 中记录的 dots.llm1 PR 573 完全对应印证了讨论 #543 中#573 exists now的承诺已落实为可用的架构支持。性能议题为什么 MoE 加速与量化对 dots.llm1 至关重要回到讨论的核心痛点——speeds were atrocious for its size。dots.llm1 的架构特征决定了两个性能杠杆MoE 稀疏激活每 token 仅激活n_expert_used个专家推理计算量远小于同参数量级密集模型。ik_llama.cpp 针对 MoE 的优化如专家权重预取、KV 缓存优化、批量专家调度正是用户jumped over to your fork的原因。从 build_dots1.cpp 可以看到llm_build_moe_ffn接入了expert_gating_func与专家权重缩放等可配置项说明该分支复用了 fork 中高度优化的 MoE 基础设施。量化方案fork 提供了丰富的 SOTA 量化类型。用户可以在加载时使用--quantize或直接使用预量化 GGUF配合 MoE 加速获得规模与速度的平衡。实战指引如何在 ik_llama.cpp 中运行 dots.llm1 模型基于仓库现有实现运行 dots.llm1 模型的方式与运行其他架构一致需自行准备 dots.llm1 的 GGUF 格式权重编译按 docs/install.md 使用 CMake 构建 llama-cli / llama-server 等目标确认架构支持仓库中已包含dots1架构识别与计算图构建见上文源码路径GGUF 中架构名须为dots1推理./llama-cli -m path/to/dots1.gguf -p 你的提示词 -n 256可选量化使用llama-quantize工具examples/quantize/quantize.cpp将模型转换为 fork 支持的量化类型进一步压缩显存/内存占用。需要注意dots.llm1 作为较新的架构其推理性能与量化质量高度依赖具体模型规格专家数、激活专家数、共享专家数、前导密集层数建议在目标硬件上实测对比。社区协作与测试邀请讨论 #543 体现了一个完整的开源协作闭环用户报告性能痛点 → 社区评估移植可行性 → 开发者提交实现PR #573→ 社区参与测试。saood06在讨论中的Testing is welcome表明该功能需要实际硬件验证这也是任何新架构在 llama.cpp 生态中的标准流程。对于想要深入研究的读者推荐按以下顺序阅读源码src/llama-arch.h / src/llama-arch.cpp架构枚举与字符串注册src/llama-load-tensors.cpp张量布局与加载src/graphs/build_dots1.cpp完整前向计算图src/llama-build-context.cpp构建上下文分发README.md架构支持清单与 PR 记录。结语dots.llm1 从社区讨论到 ik_llama.cpp 源码落地的过程展示了开源生态中问题驱动 架构复用的典型路径Qwen 与 DeepSeek 的组合架构意味着移植工作可以大量复用已验证的注意力与 MoE 基础设施。ik_llama.cpp 通过 PR 573 将 dots1 纳入架构支持清单为希望绕开主线性能瓶颈、尝试该模型的用户提供了可用的运行环境。若你正面临与讨论发起者相同的性能困扰不妨基于本仓库的构建与运行方式实测一番。【免费下载链接】ik_llama.cppllama.cpp fork with additional SOTA quants and improved performance项目地址: https://gitcode.com/GitHub_Trending/ik/ik_llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →