RustingStrata

3天前发布 17 00

RustingStrata 是一款纯 Rust 编写的 GGUF 推理引擎,主打适配 Qwen 新一代混合专家模型家族,包括 Qwen3.5/3.6 MoE、Qwen3-Next、Qwen3.8-Flash-Next、Qwen3 稠密与MoE版本,不依赖 ggml、没有C++编译链路,CUDA内核依靠 cudarc + NVRTC 运行时...

所在地:
RustingStudio
收录时间:
2026-11-07
RustingStrataRustingStrata

RustingStrata 是一款纯 Rust 编写的 GGUF 推理引擎,主打适配 Qwen 新一代混合专家模型家族,包括 Qwen3.5/3.6 MoE、Qwen3-Next、Qwen3.8-Flash-Next、Qwen3 稠密与MoE版本,不依赖 ggml、没有C++编译链路,CUDA内核依靠 cudarc + NVRTC 运行时编译并缓存cubin;同时支持Vulkan后端,GLSL编译为SPIR-V执行。

核心特色:MoE专家动态放置,放不下显存的专家自动放到CPU,和GPU专家并行协同推理,根据推理路径实时调整专家分配。当前版本 v1.2.0,M0~M6里程碑全部完成,内置聊天、校准、基准测试、服务化能力。

性能对比(参考平台:RTX3060 12G + R5 7600X,Qwen3.6-35B-A3B-UD-Q2_K_XL)

  • 预填充:CUDA 2216 tok/s,Vulkan 2154 tok/s,和llama.cpp接近;
  • 解码是亮点:4K上下文后解码 CUDA/Vulkan 约113 tok/s,对比llama.cpp仅66.5 tok/s;短提示解码可达118 tok/s;
  • 开启MTP推测解码(–mtp 1),短提示最高到160 tok/s,4K后152 tok/s;
  • 32K上下文:CUDA预填充1800 tok/s、解码91.9 tok/s;
  • Token一致性:和llama.cpp贪婪输出98%~99%匹配,差异来自浮点计算顺序、CPU/GPU内核舍入差异;
  • 低显存模拟:8GB显存下仍有约116/110 tok/s(短/4K后),6GB显存约105/97 tok/s。

同时支持大量量化格式:F32/F16/BF16、Q8_0、Q2_K~Q6_K、IQ1_S/M、IQ2/3/4系列等,覆盖Qwen各尺寸稠密、MoE模型。

构建与环境依赖

  • 语言:Rust 2024 edition;
  • CUDA路径:NVIDIA驱动带CUDA 13 NVRTC,内核首次运行编译(约15s)并缓存;
  • Vulkan路径:Vulkan1.3,要求shaderFloat64、int8/16/64、子组大小32;老AMD、Intel Arc不满足;
  • Windows额外需要VS C++生成工具;
  • 编译命令:cargo build --release

使用方式

  1. 一键启动服务

直接运行二进制,默认拉起 WebUI 聊天页 http://127.0.0.1:8080,内置模型下载、显存/内存监控、对话缓存;
同时兼容两套API:

  • OpenAI 兼容 /v1/chat/completions,可对接 Open WebUI、SillyTavern、各类代码编辑器;
  • Anthropic Messages API,适配 Claude Code;
    支持工具调用、上下文缓存、多请求并发(--parallel N)。
  1. 终端子命令
  • calibrate:自动校准模型最优预填充块、MTP参数,结果缓存json;
  • generate:单次生成;
  • chat:交互式对话;
  • bench:基准测速;
  • serve:后台API服务,支持API密钥、反向代理部署。

关键特性

  • MTP推测解码:复用模型自带草稿头,提升吞吐,贪婪模式下保证token不变;
  • KV缓存优化:--kv q8 将KV缓存占用减半,小幅牺牲速度;
  • 多卡支持:--device 0,1,按剩余显存比例分配层,优先把更多专家留在显存;
  • 上下文缓存:--cache-ram 缓存会话状态,长智能体对话避免重复预填充;支持保留思考块,适配Qwen3.6思考模板;
  • 专家加载:显存放不下的专家走系统页面缓存读取GGUF;ZFS等不缓存页面的文件系统会严重拖慢速度。

局限

  • Vulkan硬件门槛高,AMD老卡、英特尔Arc不支持;
  • 多卡模式下MTP草稿自动关闭;AMD多卡存在时钟降频问题,需要手动拉高性能档位;
  • 无内置模型分片校验,超大双文件模型需要手动指定分片;
  • 目前一次请求流内专家调度是动态自适应,不同运行的浮点舍入会造成极少数token分歧。

相关导航