0.8MB 跑通 Qwen|第 6-3 篇:推理引擎的 4x4 asm 内核——从 llama.cpp 提取的 MIT 代码

简介: 本系列《0.8MB跑通Qwen》聚焦ARM端零依赖纯C推理引擎,适配Qwen3-VL多模态模型,在RK3588上实测部署。核心采用llama.cpp中450行MIT许可NEON汇编内核,通过机械提取实现零转录风险,并严守许可署名规范,诠释开源合规与工程严谨的统一。(239字)

系列:《0.8MB 跑通 Qwen:从零实现 ARM 零依赖纯 C 推理引擎》(30 天 × 90 篇) | 适配模型:Qwen3-VL-8B-Instruct(千问3_VL_8B_Instruct)· Qwen3-VL-2B-Instruct · Qwen3-30B-A3B | 测试设备:RK3588(4×Cortex-A76 + 4×Cortex-A55,aarch64)

系列总纲:《0.8MB 跑通 Qwen》30 天 90 篇 · 总纲(阿里云社区)

上一篇:6-2《8x8 布局重排:把取数提前到转换期》 | 下一篇:第 7 天《Q4 与混合精度》

源码精读篇:本文为源码/方法论精读,无独立实测;文中数字均引述仓库 docs 的板端实测记录

一句话导读:推理引擎的 4x4 asm 内核:讲清为何用提取脚本从 llama.cpp 原样搬运约 450 行 NEON asm 而非手写重写,并对照 MIT 许可的文件头要素与删除署名的三层后果。

关键词:手搓 Qwen 推理引擎、千问大模型推理、4x4 asm、llama.cpp、MIT 许可、NEON、Qwen3-VL、零依赖纯 C

导语:面对 llama.cpp 那约 450 行手写 NEON asm,引擎没有重写,而是写了提取脚本原样搬运——零转录风险。本篇接着讲「把别人代码搬进来」的许可边界:文件头必须带齐来源、行号、MIT 全文与版权人,并推演删掉署名的三层后果。

8x8 是引擎自己排的,可"宽 GEMM 的最优形状"llama.cpp 早就研究过,x86 侧甚至有更狠的 4x4 手写 asm。自己重写一遍?没必要——MIT 允许提取。今天讲的不只是内核,更是"把别人代码搬进来"的工程伦理与许可边界。

1. 知识点:为什么"提取一小段"比"重写一遍"更专业

llama.cpp 的 ggml_gemm_q4_0_4x4_q8_0 是一段约 450 行的手写 NEON asm(.inst sdot、16 个累加器、软件流水线预取)。这种代码有一个特性:人工重写几乎必然引入转录错误——一条 sdot 的 lane 写错、一个偏移算错,结果就全错,还极难排查(对拍只能告诉你错了,不能告诉你在哪一行)。

所以仓库的做法不是"照着写一遍",而是写了个机械提取脚本(tools/extract_llama_asm.py),把 llama.cpp 源文件里那个 __asm__ __volatile__(...) 块按行号原样抠出来。脚本头注释写明了动机:

"""Extract ggml_gemm_q4_0_4x4_q8_0 (asm kernel) verbatim from llama.cpp into a
standalone C function, so the ~480 lines of hand-written NEON sdot asm are
ported mechanically (zero transcription risk).
...
The asm block is the `__asm__ __volatile__( ... )` spanning lines 1852-2301.

"Zero transcription risk"(零转录风险)是这句话的灵魂:能用脚本原样搬的,就不该用手抄。工程上,越是"又复杂又不可读"的代码,越要机械搬运——人只负责把它正确地组装进去,不负责逐行翻译它。

2. 对应代码:许可边界长什么样

搬代码有红线:许可证要跟着走。看 tools/llama_gemm_q4_0_4x4_asm.c 的文件头(第 1–30 行):

/* llama_gemm_q4_0_4x4_asm.c - mechanically extracted from llama.cpp
 * (ggml/src/ggml-cpu/arch/arm/repack.cpp, lines 1852-2301), MIT license.
 * ...
 * This file is a verbatim (mechanically extracted) portion of llama.cpp and
 * is redistributed under the MIT License. Original upstream:
 *   https://github.com/ggerganov/llama.cpp ...
 * MIT License
 * Copyright (c) 2023-2026 The ggml authors
 * Permission is hereby granted, free of charge, ...(完整 MIT 文本)

要素齐全:来源文件与行号、上游仓库、MIT 许可全文、版权持有人、再分发声明。而在仓库根的 LICENSING.md 第三节「第三方组件」里,引擎把自己代码的双许可与"第三方段各自保留原许可"的关系交代清楚:

| 组件 | 位置 | 许可 |
| llama.cpp 派生 4x4 asm GEMM 内核 | tools/kernels/llama_gemm_q4_0_4x4_asm.c,以及
|   src/model/vllm_safetensors.c 中标注的 ggml_gemm / gemv / vec_dot 派生内核
|   | MIT License, Copyright (c) 2023–2026 The ggml authors |

同样的署名也出现在引擎内的移植注释里(vllm_safetensors.c 第 4184–4186 行:源自 llama.cpp,MIT (c) 2023-2026 The ggml authors,全文见本文件头)。每一处引入都原地署名,不搞"搬了但不说"。

3. 改动后果:删掉署名,会发生什么

把上面的文件头 MIT 文本删掉,只留内核代码——编译照过、性能照旧,代码层面"零影响"。这就是许可问题的狡猾之处:它不靠编译器拦你,靠的是合规与信任。

后果分三层:

  1. 法律:MIT 的条件只有一条——"再分发必须带上版权声明与许可文本"。删掉它,就是违约再分发;对引擎这种要商用授权(双许可)的项目,等于在自己最看重"许可合规"的地方埋雷;
  2. 工程:文件头里的"来源 + 行号 + 上游"是可追溯性资产。半年后这个 asm 出了数值问题,你要回上游 diff;没有出处,你只能对着 450 行汇编发呆;
  3. 信任:仓库 README 自称"AGPL 双许可 + 第三方成分透明",而透明清单(README「体量与依赖」表 + LICENSING.md 第三方组件)正是建立在"每个文件头都写清楚"之上。删署名 = 拆自己台。

这也是本系列"诚实基调"在代码层的体现:自己的代码可以锁,别人的代码必须还。双许可只约束引擎自研部分,第三方段永远保留上游许可。

4. 学员调试任务

  • A 档(动手读代码):
    1. 读 tools/extract_llama_asm.py 全文,说出它从上游哪一行取到哪一行、输出到哪个文件;
    2. 打开 tools/llama_gemm_q4_0_4x4_asm.c,在文件头找全五要素(来源/行号/上游链接/许可文本/版权人);
    3. 在 LICENSING.md 第三节里找到第三方组件声明,用自己的话复述"双许可 vs MIT 段"的边界。
  • B 档(纯读源码):在 vllm_safetensors.c 里 grep ggml / llama.cpp,列出所有"源自上游"的注释锚点,验证是否每处都带 MIT 与版权年份。

预期输出:你能讲清"机械提取 vs 手写重写"的取舍、MIT 的唯一硬性条件(保留声明),以及"自研锁许可 + 第三方还许可"的工程姿态。

收尾

相关文章
|
1天前
|
算法 定位技术 C语言
0.8MB 跑通 Qwen|第 16-3 篇:推理引擎的 tensor 目录与布局重排的落盘顺序
《0.8MB跑通Qwen》系列实录:30天手搓零依赖纯C推理引擎,适配Qwen3-VL多模态模型(2B/8B/30B-A3B),真机跑通RK3588(aarch64)。详解VQFTensor目录结构、64字节对齐落盘、FNV校验及mmap加载机制,含零依赖Python解析器。
|
2天前
|
JSON Java Linux
0.8MB 跑通 Qwen|第 3-3 篇:推理引擎的零依赖自研 util——"不引第三方也能活"的边界感
本文实测验证“零第三方依赖”的务实边界:OS已支持的(如Linux原生UTF-8路径)仅薄封装为宏;OS缺失且轻量关键的功能(FNV-1a校验、小端memcpy、平台工具宏)才自研。RK3588真机验证(2026-09),代码简洁、可移植、无冗余。
0.8MB 跑通 Qwen|第 3-3 篇:推理引擎的零依赖自研 util——"不引第三方也能活"的边界感
|
3天前
|
移动开发 编译器 Linux
0.8MB 跑通 Qwen|第 2-2 篇:推理引擎的平台层——一个头文件守住全部平台契约(vllm_platform.h)
本文实测于RK3588(2026-09),提出“平台层契约”设计:将NEON、mmap、绑核等平台依赖统一收口至`vllm_platform.h`,通过`ST_HAVE_NEON`等宏提供唯一真相,配合`#error`门闩实现错误前移——有守卫仅报1行错,无守卫则引发46处误导性编译失败。
0.8MB 跑通 Qwen|第 2-2 篇:推理引擎的平台层——一个头文件守住全部平台契约(vllm_platform.h)
|
1天前
|
调度 C++
0.8MB 跑通 Qwen|第 13-2 篇:草稿 + 验证——推理引擎里 spec decode 的实现
本系列《0.8MB跑通Qwen》聚焦ARM端零依赖纯C推理引擎,实测RK3588上运行Qwen3-VL多模态模型;详解speculative decode实现——基于n-gram草稿、批量验证与无损回放,确保输出位级一致,兼顾 correctness 与工程可控性。(239字)
|
3天前
|
人工智能 开发工具 开发者
首月只卖6份,半年月流水18万:他把音色玄学做成AI查询生意
21岁吉他爱好者用AI一周做出音色参数工具,首月仅售6份,半年后月流水达2.5万美元、服务15万吉他手。全程0广告,靠精准痛点定位+每日垂直内容冷启动。本质是将老师傅隐性经验结构化,验证了“一人公司=杠杆思维,非孤军奋战”。
|
7天前
|
人工智能 JSON 编解码
【2026最新版】ComfyUI本地部署教程,新手也能看懂!
ComfyUI是本地运行的AI绘画工具,采用节点式工作流设计:通过拖拽连接“加载模型”“提示词编码”“采样”“解码”等模块,实现高度可控的文生图。新手推荐使用秋叶整合包,一键启动、内置模型管理与插件安装器,轻松上手。(239字)
|
6天前
|
人工智能 运维 IDE
阿里云Qoder CN最新活动:开通专业版或高级版,首月Credits翻倍,续费加赠1000Credits
本文聚焦阿里云Qoder CN 2026年9月限时Credits加赠活动,面向个人版专业版、高级版、旗舰版月付用户,推出首月额度翻倍、续费/升级额外加赠1000 Qwen专属Credits的双重算力补贴。完整拆解活动时间窗口、适用边界、加赠额度明细与30天生命周期管理规则,帮助符合条件的用户在窗口期内完成理性订阅决策,低成本从免费体验向AI生产环境平滑迁移。
|
7天前
|
人工智能 Linux 开发者
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
Codex是OpenAI推出的AI编程智能体,可读取本地项目、理解需求并自动修改代码。支持桌面GUI、命令行(CLI)及VS Code/Cursor插件三种形态,覆盖可视化操作、终端高效开发与编辑器无缝集成场景,助开发者用自然语言驱动编码全流程。(239字)
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
|
1天前
|
缓存 算法 API
0.8MB 跑通 Qwen|第 11-3 篇:推理引擎里 KV 缓存的一生——内存、容量与淘汰
本系列《0.8MB跑通Qwen》聚焦ARM端零依赖纯C推理引擎开发,实测RK3588平台流畅运行Qwen3-VL-2B/8B等多版本。本文详解KV缓存“出生—续用/覆盖—死亡”三段式生命周期,揭示预分配、逻辑覆盖、进程级销毁本质,破除“命中即加速、淘汰即释放”认知误区。(239字)
|
1天前
|
机器学习/深度学习 区块链 C++
0.8MB 跑通 Qwen|第 10-1 篇:大模型推理的长上下文为什么必须稀疏——O(n²) 的注意力 vs O(n·k) 的"只看该看的"
本系列手搓0.8MB纯C推理引擎,零依赖跑通Qwen3-VL多模型。本文聚焦长上下文瓶颈:RK3588实测显示,注意力耗时占比从18%飙升至71%。提出块稀疏方案——将O(n²)注意力压至O(n·k),实现每词成本与上下文长度无关,为端侧大模型长文本推理提供关键路径。(239字)

热门文章

最新文章