news 2026/9/30 3:20:15

Edge0-35B-A3B Preview 技术解析:如何在 3 GiB 活跃内存下以 4-bit 量化运行 35B 稀疏 MoE

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Edge0-35B-A3B Preview 技术解析:如何在 3 GiB 活跃内存下以 4-bit 量化运行 35B 稀疏 MoE
  • 人工智能
  • 大模型
  • 模型量化
  • LoRA
  • 本地部署

【免费下载链接】Edge0-35B-A3B-preview

项目地址:https://ai.gitcode.com/hf_mirrors/Edge0/Edge0-35B-A3B-preview
点击查看免费下载

本文以 Edge0-35B-A3B Preview(Edge0-35b-a3b,下称 Edge0-35B)模型仓库为对象,系统讲解其"SSD 专家卸载(SSD expert offload)+ 前置路由预测(Prerouter)+ Recover-LoRA 蒸馏恢复"三大机制如何协同工作,并给出从仓库结构、量化细节到快速部署运行的完整实操指南。读完本文,你将理解 edge0 流式推理框架在这份模型仓库中的落点、4-bit 模型各分片与适配器的组织方式,以及如何在 Apple Silicon 上把该模型跑起来或通过 OpenAI 兼容 API 对外服务。

项目定位:为"内存受限"场景设计的 35B 稀疏 MoE

Edge0-35B 是一个基于 Qwen3.6-35B-A3B 的 35B 级稀疏 MoE(Mixture-of-Experts)大语言模型,其核心卖点非常明确:在低于 3 GiB 的活跃内存(active memory)内,以可交互的速度运行完整模型。它由 edge0 流式推理框架驱动,采用 MLX 后端。

需要强调的是,这一仓库当前处于Preview(早期预览)状态:checkpoint 以 int4 量化 + LoRA 适配器 + Prerouter 适配器的形式发布,均为该框架专门训练。模型的主要特征(来自 README.md)包括:

  • 手机级内存运行:完整的 4-bit checkpoint 常驻存储(storage),专家权重按需流式加载,只有活跃权重进入 RAM——低于 3 GiB,无需分片(sharding),也无需将权重预先整体载入内存;
  • 可交互的推理速度:解码约 15 tok/s,长提示词的 prefill 填充速度约 140 tok/s;
  • 量化后质量保持:Recover-LoRA 蒸馏使 int4 模型与 fp16 基座的平均差距控制在3.9 分以内;
  • 开箱即用:基础权重、LoRA 与 Prerouter 适配器随仓库一起发布,由edge0自动加载。

三大核心机制:Edge0 的"三板斧"

README 明确指出,这一切由三个机制共同支撑。理解这三者是理解整个仓库的前提。

1. SSD 专家卸载(SSD expert offload):内存有界而非参数有界

MoE 模型的特点是参数量巨大但每次前向只激活一小部分专家。Edge0-35B 共 40 层、256 个专家(详见 config.json 中num_experts: 256),而每 token 只路由少量专家。SSD 专家卸载正是利用这一点:

  • 专家权重从存储(NVMe SSD、内置闪存等)按需流式读取,只有被路由到的专家才会被取出;
  • RAM 中仅保留活跃权重(active weights);
  • 因此峰值内存由"活跃集合"决定,而不是由"参数量"决定——这是"3 GiB 跑 35B"的根本原因。

从 model.safetensors.index.json 可以看到,权重被组织为switch_mlp.gate_proj / up_proj / down_proj的专家三投影结构,并附带biases与scales字段(量化仿射参数),这些正是按层、按专家可独立流式取用的最小单元。

2. Prerouter:用"提前一步的路由预测"掩盖存储延迟

如果专家是实时从 SSD 拉的,那么等待 I/O 就会卡住前向计算。Prerouter 解决的是这个问题:

  • 它是一个经过训练的前置路由头(trained head),负责提前一步预测下一时刻(下一个 token / 下一层)的专家路由结果;
  • 预测结果使专家加载与前向传播**重叠(overlap)**进行——在计算当前步的同时预取下一步所需的专家,而不是让前向传播干等存储;
  • 官方给出的收益为解码吞吐最高 +59%,且增益随存储延迟、模型规模与路由宽度 K 的增大而增大。

仓库中的 prerouter_edge0_35b.safetensors 正是这份预训练路由头的权重文件,与基础 checkpoint 同仓发布、自动加载。

3. Recover-LoRA:蒸馏恢复 4-bit 量化损失

量化到 4-bit 必然带来精度损失,Recover-LoRA 用于补偿:

  • int4 基础模型被冻结(frozen);
  • LoRA 适配器通过从 FP 教师(fp16 基座)蒸馏的方式训练,目标是把量化损失"找回来";
  • 适配器**保持未合并(unmerged)**状态:一个只读的基础模型可以同时服务多套适配器,这正是"批量多租户服务"的关键。

仓库中的 lora_edge0_35b.safetensors 就是这套 LoRA 适配器权重。

模型规格与仓库构成

网络结构与关键超参数(依据 config.json)

config.json中记录了完整的模型结构(text_config),关键项如下:

配置项值说明
model_typeqwen3_5_moe架构Qwen3_5MoeForConditionalGeneration
num_hidden_layers4040 层
hidden_size2048隐藏维度
num_attention_heads/num_key_value_heads16 / 2多头注意力(GQA)
head_dim256注意力头维度
num_experts256专家总数
num_experts_per_tok8transformers 侧每 token 路由数(见下文说明)
moe_intermediate_size512单个专家中间维度
shared_expert_intermediate_size512共享专家中间维度
max_position_embeddings262144最大上下文长度
vocab_size248320词表大小
router_aux_loss_coef0.001路由辅助损失系数
mtp_num_hidden_layers1多 token 预测(MTP)层数

值得注意的架构特征(可从配置文件直接确认):

  • 混合注意力结构:layer_types显示 40 层中每 4 层插入一层full_attention,其余为linear_attention(线性注意力,携带conv1d、A_log、dt_bias等参数,从 model.safetensors.index.json 的linear_attn权重命名可印证其包含 in_proj_a/b/qkv/z、out_proj、SSM 式状态参数)。这种"稀疏全注意力 + 线性注意力"的组合显著降低长上下文下的 KV 开销。
  • 共享专家:每层除 256 路 switch MLP 外,还有shared_expert与shared_expert_gate(路由门),保证每个 token 都有稳定的共享计算底座。
  • 关于 K 值的口径说明:README 声称"每 token 激活 4 个专家(K=4)",而config.json的text_config.num_experts_per_tok记录为 8。两者差异可能与 edge0 框架与 transformers 配置字段的口径不同有关(例如是否计入共享专家或是否由 Prerouter 缩减实际激活数)。此处以 README 官方口径(K=4、256/4)为准,配置字段值如实引用,供读者交叉核对。
  • 量化实现:仓库权重为仿射(affine)4-bit 量化,group_size = 64,且所有路由门(mlp.gate与mlp.shared_expert_gate)单独提升到8-bit精度——路由头对数值精度更敏感,这是合理的工程取舍。

仓库文件清单与权重组织

仓库根目录直接是一个"完整可运行的 edge0 模型目录"(依据 README.md 与文件列表):

文件作用
model-00001-of-00004.safetensors~model-00004-of-00004.safetensors4 个基础 checkpoint 分片(含biases/scales量化参数)
model.safetensors.index.json权重分片索引(total_size约 20.4 GB,含视觉编码器与语言模型全部权重)
lora_edge0_35b.safetensorsRecover-LoRA 适配器(蒸馏恢复量化损失)
prerouter_edge0_35b.safetensorsPrerouter 前置路由预测头
config.json模型结构 + 量化配置
generation_config.json生成采样参数
tokenizer.json/vocab.json/tokenizer_config.json分词器
chat_template.jinja对话模板(含 thinking 模式、工具调用、多模态占位)
preprocessor_config.json/processor_config.json图像/视频预处理配置

值得留意的是,config.json中还包含vision_config(27 层视觉编码器、hidden_size 1152、patch_size 16、temporal_patch_size 2)与image_token_id/video_token_id,说明该模型基于 Qwen3 的多模态底座,但本次 preview 发布的核心焦点是语言侧推理。processor_config.json与preprocessor_config.json配置了Qwen3VLProcessor的图像/视频处理管线,tokenizer_config.json中model_max_length为 262144,与max_position_embeddings一致。

生成参数(依据 generation_config.json)

仓库内置的默认生成配置为:do_sample: true、temperature: 1.0、top_k: 20、top_p: 0.95,eos_token_id为[248046, 248044](含思考结束标记),pad_token_id为 248044。这意味着不额外传参时模型即按采样方式输出。

对话模板与 thinking 模式(依据 chat_template.jinja)

仓库自带的 jinja 对话模板支持:

  • thinking 模式:生成时默认以<think>开头,支持enable_thinking=false关闭思考、preserve_thinking保留历史思考内容;
  • 工具调用(function calling):以<tool_call>/<function>/<parameter>XML 格式输出,支持多步工具链(multi-step tool)与<tool_response>回传;
  • 多模态占位:支持<|vision_start|><|image_pad|><|vision_end|>与视频占位符。

该模板是 edge0 推理时自动应用的,无需手动拼 prompt。

质量评估:量化 + 适配器后的精度损失

README 声明所有基准由作者使用 OpenCompass 在相同设置与参数下对两个模型(edge0 int4 管线 vs Qwen3.6-35B-A3B fp16 基座)进行评测,结果如下:

基准edge0-35b(int4)Qwen3.6-35B-A3B(fp16)
AIME 202686.692.7
HumanEval90.995.1
GPQA-Diamond79.881.8
MMLU-Pro81.084.6
IFBench57.961.7
平均79.283.2

即 edge0 管线相对 fp16 基座平均损失3.9 分。这是"Recover-LoRA 把 4-bit 量化损失压到很小"的直接证据——尤其在数学推理(AIME 2026 仅差 6.1)、代码(HumanEval 差 4.2)与知识类任务上表现接近基座。

性能实测数据

README 给出的官方性能数据由examples/bench.py在Mac mini M4 Pro(24 GB)上测得:

解码速度Prefill 吞吐(冷 / 热)峰值活跃内存*
14.9–17.7 tok/s113 / 140 tok/s2.9 GiB

注:*短上下文下的测量值;长上下文会增加 KV cache 占用。专家权重从 SSD 按需流式加载、不常驻内存。需要强调的是,以上数据仅为该项目自测结果,适用前提是 Apple Silicon + MLX 后端 + 快速存储(NVMe/内置闪存),不同硬件与上下文长度下会有明显差异。

快速开始:安装、下载与运行

以下命令来自 README.md 的 Quick start 部分,为完整可复现流程:

# 1. 安装 edge0 框架(含 fetch 下载依赖) pip install -e 'git+https://github.com/Edge0-AI/edge0.git#egg=edge0[fetch]' # 2. 将本模型仓库下载到本地目录 huggingface-cli download Edge0/Edge0-35b-a3b-preview --local-dir ./Edge0-35b-a3b-preview # 3. 指定模型目录并启动命令行聊天 export EDGE0_35B_MODEL=$PWD/Edge0-35b-a3b-preview edge0 chat --name edge0-35b --prompt "Introduce yourself" # 4. 或启动 OpenAI 兼容的 HTTP API 服务 edge0 serve --name edge0-35b --port 8085

关键点解读:

  • --name edge0-35b是 edge0 侧注册的模型名;EDGE0_35B_MODEL环境变量用于指向本地模型目录;
  • 由于本仓库本身就是一个完整的模型目录(基础权重 + LoRA + Prerouter 同仓发布),下载完成后无需任何额外拼接即可直接运行——这正是 README 强调的"开箱即用";
  • edge0 serve --port 8085提供 OpenAI 兼容接口,方便接入既有应用;
  • 环境前提:edge0 的 MLX 后端目前面向Apple Silicon(见下文局限),且建议使用快速存储以获得 Prerouter 的理想收益。

更完整的用法(Python API、流式选项、Prerouter 细节)请参考 edge0 框架文档(README 中已给出指引)。

使用场景

依据 README 的 Use cases 部分,该模型面向三类典型场景:

  1. 边缘 / 端侧推理:GPU VRAM 稀缺但存储很快(NVMe、内置闪存)的设备上运行 35B 级模型;
  2. 单机批量服务:一个只读基础模型同时服务多套 LoRA 适配器,无需重新量化即可切换不同适配;
  3. 多语言聊天与推理:通过内置 chat template 启用 thinking 模式获得推理增强。

局限性说明

README 明确列出的限制,使用时需注意:

  • 预览版本:覆盖度与质量仍在扩展中,主要针对基础模型的语言进行调优;
  • Agent 能力未优化:工具使用、多步规划、长周期自主性目前较弱,完整版将显著强化;
  • 后端平台限制:MLX 后端当前仅面向 Apple Silicon,其他后端在 edge0 路线图中;
  • 长上下文代价:长上下文会显著增长 KV cache,想保持 3 GiB 峰值内存请使用较短的上下文。

相关文件索引

以下仓库文件可作为进一步深入研究的入口:

  • README.md:官方文档,包含全部机制说明、基准与命令;
  • config.json:模型结构、混合注意力层序、4-bit/8-bit 混合量化配置;
  • generation_config.json:默认采样参数;
  • chat_template.jinja:thinking 与工具调用模板;
  • model.safetensors.index.json:权重分片与总量索引;
  • lora_edge0_35b.safetensors:Recover-LoRA 适配器;
  • prerouter_edge0_35b.safetensors:Prerouter 路由预测头;
  • tokenizer_config.json 与 processor_config.json:分词与多模态预处理配置。

如果需要在研究中引用该工作,README 提供如下 BibTeX 条目(论文主题为"从 SSD 服务 35B MoE 的受训路由预测"):

@misc{lin2026halfmemorywallserving, title={The Other Half of the Memory Wall: Serving 35B MoEs from SSD with Trained Routing Prediction}, author={Yu Lin and Yiming Wang and Runyuan Cai and Hanze Liu and Xiaodong Zeng}, year={2026}, eprint={2609.18063}, archivePrefix={arXiv}, primaryClass={cs.AI}, }

许可证为 Apache 2.0。总体而言,Edge0-35B Preview 以"SSD 卸载换内存、Prerouter 换吞吐、LoRA 蒸馏换精度"的组合,为内存受限的端侧与单机推理提供了一条可复现的工程路径,本仓库即是这套管线完整、可直接运行的模型载体。

  • 人工智能
  • 大模型
  • 模型量化
  • LoRA
  • 本地部署

【免费下载链接】Edge0-35B-A3B-preview

项目地址:https://ai.gitcode.com/hf_mirrors/Edge0/Edge0-35B-A3B-preview
点击查看免费下载

相关推荐

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 3:19:56

Linux命令创意组合:用管道与xargs打造高效终端工作流

你有没有过这种经历&#xff1a;坐在终端前&#xff0c;想干一件小事&#xff0c;比如找出当前目录里最大的5个文件&#xff0c;或者看看access.log里哪个IP访问最频繁&#xff0c;结果发现自己只会ls、cd、cat三板斧&#xff0c;剩下的要么打开文件管理器手动点&#xff0c;要…

作者头像 李华
网站建设 2026/9/30 3:19:53

STM32F103 入门实战:流水灯、蜂鸣器与传感器代码的结构化理解

TL;DR&#xff08;太长不看版&#xff09;&#xff1a;本文面向刚接触 STM32F103 的开发者&#xff0c;用流水灯、蜂鸣器和传感器三个经典实验&#xff0c;帮你建立一套可复用的嵌入式代码理解框架。核心观点是&#xff1a;所有外设初始化都遵循"时钟 → 模式 → 初始状态…

作者头像 李华
网站建设 2026/9/30 3:19:41

Vue项目VSCode配置指南:Volar、ESLint与Prettier协同原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 3:19:37

Python pygame飞机大战:游戏循环与碰撞检测实战

1. 从一条弹幕说起&#xff1a;为什么我劝你先用 Python 写个飞机大战说个真事儿。前段时间帮一个学弟看简历&#xff0c;他说自己"精通 Python"&#xff0c;结果面试官让他现场写个对象在屏幕上动起来&#xff0c;他憋了二十分钟没写出来。问题出在哪&#xff1f;不…

作者头像 李华
网站建设 2026/9/30 3:19:21

分布式事务实战:从2PC到TCC、SAGA与本地消息表的选型与落地

分布式事务这个话题&#xff0c;只要做过订单、库存、支付这类交易链路的人&#xff0c;迟早都会撞上。我最早接触它是在一单“订单创建减库存”的业务改造里&#xff0c;单体应用拆成订单服务和库存服务&#xff0c;数据库一拆&#xff0c;原本一个本地事务能搞定的事情&#…

作者头像 李华
网站建设 2026/9/30 3:19:17

Qt配置OpenCV保姆级教程:从环境搭建到图像显示

很多人把Qt和OpenCV配在一起&#xff0c;是想快速做一个带界面的图像处理小工具。思路没问题&#xff0c;但真正动手的时候&#xff0c;光一个版本匹配问题就能劝退一半人。我见过不少朋友卡在“OpenCV下载好了、Qt也装完了&#xff0c;但在.pro里一写路径就报错”这一步&#…

作者头像 李华