RTX 3060 12GB/8GB 本地跑 27B 大模型:256K 上下文、约 45 token/秒,能看图、调工具,附懒人包和源码
C++
38
49 commits
updated Oct 13, 2026
简体中文 | English
当前源码与懒人包:Swift 1.5 IQ2S / IQ3XXS 0.1.4,Bonsai2 8G / 12G 0.1.5。四款懒人包共用下方的百度、夸克网盘目录。详情见更新记录。
为 Windows 提供 Swift 1.5 和 Bonsai2 的本地推理方案,支持对话和图片输入,也支持工具调用与 KVMem 长上下文。懒人包解压后双击启动,模型在第一次运行时下载。
| 版本 | 显卡与显存 | 模型 | 入口 |
|---|---|---|---|
| Swift 1.5(默认推荐) | RTX 30 系,12 GB 以上;RTX 40 系可运行但未实测 | IQ2S MTP-Q4 约 9.46 GiB;IQ3XXS MTP-Q4 约 10.24 GiB;共用引擎源码 | 使用指南 |
| Bonsai2 12G | 按 RTX 3060 12GB 调整,面向 RTX 30 系 | Swift-Bonsai-2 三元模型,约 7.7 GiB | 12G 版说明 |
| Bonsai2 8G | 面向 RTX 30 系 8GB;测试在 12GB 卡限制显存完成 | Swift-Bonsai-2 ptq1,约 6.6 GiB | 8G 版说明 |
Swift IQ2S 默认总上下文为 200K,IQ3XXS 为 128K,两者最多可配置 256K;KVMem 会从历史中选取部分内容放入显存。容量上限与长文召回效果请一起看测试结果与已知限制。
懒人包不包含模型。请完整解压,保留 engine、launcher 和 patch 等目录。
四个包都在同一个共享目录里,打开任一网盘后按文件名选择。
| 懒人包 | 版本 | 文件名 |
|---|---|---|
| Swift 1.5 IQ2S | 0.1.4 | ninfer-3060-swift15-q2s-mtp-oneclick-0.1.4.zip |
| Swift 1.5 IQ3XXS | 0.1.4 | ninfer-3060-swift15-iq3xxs-mtp-oneclick-0.1.4.zip |
| Bonsai2 12G | 0.1.5 | ninfer-3060-12g-bonsai2-oneclick-0.1.5.zip |
| Bonsai2 8G | 0.1.5 | ninfer-3060-8g-bonsai2-oneclick-0.1.5.zip |
压缩包校验值见 PACKAGES-SHA256SUMS.txt。IQ3XXS 已提供独立懒人包,支持首次下载、SHA256 校验和 MTP-Q4 转换。四包均于 2026-10-13 重新构建,通过短请求和解压自检;验收范围见更新记录。
以下 Huihui Qwen3.8 27B Abliterated 模型已转换为 NInfer 格式,可从 Hugging Face 下载:
Abliterated 版本会削弱模型的拒答或安全过滤能力。使用前请阅读各自模型卡中的来源、许可和使用警告;Swift 版本的模型卡建议用于研究和本地受控推理,不建议用于面向公众或未成年人的服务。
当前源码 Release:Swift 0.1.4 和 Bonsai2 0.1.5,各附件只含对应引擎系列,均包含最新 BAT/容量修正。本次懒人包的启动器源码已同步到 main。
下面以 Swift 1.5 IQ2S 为例:
D:\ninfer-swift15。启动.bat,确认配置后按回车。第一次会下载、校验并转换模型;出现 listening 后即可使用。测试.bat 检查回答。连接客户端时,按启动后生成的 接入信息.txt 填写接口和输出上限。默认接口为 http://127.0.0.1:8084/v1,模型 ID 为 qwen3.8-27b。修改参数、模型准备和客户端接入见使用指南;常见使用问题见下文,已知启动错误见修复记录。
把懒人包完整解压到简单路径,例如 D:\ninfer-swift15。engine 中的 DLL 必须与 ninfer-serve.exe 保持在同一目录。
启动.bat。默认选择 rk4v4、完整 MTP 输出头、200K 总上下文和自动输出。listening。首次遇到没有校准记录的显卡还会测量运行路线,因此比后续启动慢。测试.bat 检查回答和速度。用完关闭启动窗口即可停止引擎。同一时间只运行一个引擎。菜单中回车启动、C 重新配置、R 重新读取空闲显存、Q 退出。
启动.bat last
启动.bat dryrun
last 直接使用保存的配置;dryrun 只显示参数,不启动或下载。
当前 main 源码(2026-10-06): 自动 KVMem 模式只确定驻留预算,有限的 API 申请上界随驻留容量变化;不再提前按固定 SYS、固定 36K/平分或 32K 输出封顶划分。引擎按实际 system/developer/工具前缀逐请求分配检索与输出。本引擎的 --default-max-tokens 也会限制显式请求,并非只在客户端不传参数时生效。旧 SYS/sink 配置或初始化种子不等于真实前缀。客户端压缩策略由客户端自行配置,包内不附 DSH 测试启动项。
本轮 main 启动器支持三种驻留选择:recommended 取历史推荐与当前允许上限的较小值,auto 取当前允许上限,也可手动填写范围内的 token 数。推荐值不是硬上限;读不到显存或配置越界时拒绝启动。按 C 先选 KV/输出头/Graph,再选驻留、逻辑上下文和 API 上限;菜单支持数字选项,启动前会重新检查显存。8G 始终按整卡 8GiB 扣除桌面与其他占用。校准范围与短测结果见更新记录。
启动时先按空闲显存确定总驻留容量 C;每次请求再准确计算系统提示、developer 指令和工具定义的完整开头 S。检索不包含 S,输出使用剩余容量。
| 总上下文 | 检索推荐范围 | 优先目标 | 输出预留 |
|---|---|---|---|
| 256K | 32K–36K | 36K | C − S − 检索,至少 8K |
| 128K | 16K–18K | 18K | C − S − 检索,至少 8K |
| 200K | 25K–28.125K | 28.125K | 同上 |
开头按完整渲染后的 token 数计算,Bonsai 按 64 token、Swift 按 128 token 对齐。不再固定预留 8K 开头,也不再把 KVMem 输出限制为 16K/32K。容量不足时先缩检索,低于推荐范围会提示;完整开头和 8K 输出都放不下时返回容量错误。实际生成仍受客户端请求长度、剩余总上下文、停止词以及模型结束影响;8K 是显存预留,不保证每次生成 8K。
Harness 在第一次请求前即可配置:contextWindow 填总上下文,maxTokens 使用启动器生成的数字。这是最短开头情况下的申请上限,实际请求的开头更长时,引擎会自动降低本轮输出预算。启动缩窗后重新生成接入信息;本机启动器在允许同步时同步 dsh。旧的手动 OUT/ANSWER、SYS/SINK 和 WINDOW 会迁移到自动分配。
8G 在 12GB 测试卡上也先扣除当前桌面/驱动占用,再按 8GB 预算计算。20K 是小容量测试或低空闲显存下的容量,67K 是假设整块 8GB 空闲时的理想预算;二者不能作为同一台电脑的固定上限。较小窗口可以运行,但超长历史召回可能变差。
支持的四种组合与历史解码测量如下;驻留容量以本次启动为准:
| 组合 | 总上下文 | 检索目标 | 输出 | 历史解码速度 |
|---|---|---|---|---|
| rk4v4 + 完整头 | 推荐 200K,最多 256K | 200K 时 28.125K;256K 时 36K | 剩余容量 | 约 43 token/秒 |
| rk4v4 + 精简头 | 最多 128K | 18K | 剩余容量 | 约 47 token/秒 |
| rk8v4 + 完整头 | 最多 128K | 18K | 剩余容量 | 历史测量慢 14–22% |
| rk8v4 + 精简头 | 最多 128K | 18K | 剩余容量 | — |
双击 启动.bat 后按 C,依次选择 KV 格式、MTP 输出头、看图、总上下文、单次输出、固定保留的开头和思考上限。回车保持当前值,选好后会写回 设置.ini。
也可以用记事本编辑 设置.ini 后重新启动:
| 设置项 | 作用 |
|---|---|
KV | rk4v4 / rk8v4 |
HEAD | full / lite |
CTX | 总上下文,默认 204800 |
OUT | auto,启动前生成 Harness 申请上限;实际预算随请求计算 |
SYS | auto,完整系统/developer/工具定义的实际 token 数 |
THINK | 思考上限,0 表示不限 |
POST_THINKING | 思考结束后切换正文采样参数,默认 1;设 0 关闭 |
POST_THINKING_TEMP / POST_THINKING_TOP_P / POST_THINKING_TOP_K | 正文的温度、top-p、top-k;留空使用引擎预设,温度默认为 0.2 |
POST_THINKING_SAMPLER | 正文采样组合,例如 temp=0.2,top_p=0.95 |
ADAPTIVE_MTP | 自适应 MTP 草稿长度,默认 0,使用固定 3 token |
RECOVER_INVARIANT | 内部不变量错误时尝试恢复请求,默认 1 |
VISION | 是否启用看图 |
HOST / PORT | 监听地址和端口 |
API_KEY | 访问密码,默认留空 |
MODEL_ID | 客户端使用的模型 ID |
窗口与自动输出会随空闲显存变化。开头与输出自动分配;启动后以生成的 接入信息.txt 为准。
推理控制设置已包含在当前懒人包中。RECOVER_INVARIANT 只处理引擎支持恢复的内部错误,不能保证所有错误都能恢复。
等待 listening 后,打开自动生成的 接入信息.txt。它包含当前配置和 DeepSeek Harness 的配置示例。
| 客户端字段 | 默认值或填写方式 |
|---|---|
| 接口类型 | OpenAI 兼容 / Chat Completions |
| Base URL | http://127.0.0.1:8084/v1 |
| 模型 ID | qwen3.8-27b |
| API Key | 未设置密码时可填 none,部分客户端不允许为空 |
| contextWindow / 上下文长度 | 与 CTX 一致,默认 204800 |
| maxTokens / 最大输出 | 按本次 接入信息.txt 的数值填写 |
接口也支持 Anthropic Messages 和 OpenAI Responses。思考内容在 reasoning_content 字段;请求中 enable_thinking: false 可以关闭思考。支持的思考档位为 low / medium / xhigh,加上关闭思考。
一次处理一个请求,多个请求会排队。需要局域网访问时,将 HOST 改为 0.0.0.0 并设置 API_KEY;接入信息中会列出可用地址。
修改 dsh 的配置后,完全退出程序和托盘图标,再重新打开,避免它把内存中的旧配置写回文件。
0.1.0 对客户端发送的较大输出上限按服务端配置封顶;中途压缩、编辑历史或分叉的 KVMem 请求回退到重新预填,因此可能比直接续写慢。多工具 required/any 按 Auto 处理,不能保证一定调用工具;接受 strict:true 的入口也不提供严格 JSON Schema 约束。Swift Responses 入口仍拒绝 strict:true。具体覆盖范围见三项兼容修改与限制。
模型来源:魔搭社区 Swift-1.5-Qwen3.8-27B-GSQ-RCO-NInfer。
合并后的 Qwen 3.8 27B 模型库使用上方同一组共享下载目录。
swift15_iq2s_mtp.ninfer,10,257,632,000 字节。patch 转换成 swift15_iq2_s_mtpq4.ninfer,10,155,600,640 字节。model 目录,再启动完成转换。文件 hash 和自行生成补丁的方法见编译与开发。已有转换完成的模型可继续使用,升级引擎无需重新下载模型。
| 路径 | 内容 |
|---|---|
启动.bat / 测试.bat | 启动和测试入口 |
设置.ini | 用户配置 |
engine/ | EXE 与运行所需 DLL |
launcher/ | 启动器和测试脚本 |
patch/ | 模型转换的数据补丁 |
model/ | 初始为空,下载与转换后的模型 |
版本信息.txt | 新修复包的构建识别信息 |
SHA256SUMS.txt / verify-kit-manifest.ps1 | 新版包的核心文件哈希、DLL 完整性和中文文件名检查 |
verify-arch-engine.ps1 | 新版包的引擎验收脚本,包含短提示、超窗正负对照与多轮复用 |
logs/ / 接入信息.txt | 运行时生成的日志和客户端说明 |
包里的 使用说明.txt 可离线查阅;速度与长文召回范围见测试结果与已知限制。
上述校验和验收工具已包含在当前源码和懒人包中。完整包解压后可运行:
powershell -ExecutionPolicy Bypass -File .\verify-kit-manifest.ps1
powershell -ExecutionPolicy Bypass -File .\verify-arch-engine.ps1
第一项检查文件;第二项会启动测试引擎并占用显存,运行前关闭其他模型。模型默认从包内 model 目录读取,也可用 -ModelPath 指定。SHA256SUMS.txt 和校验脚本对应指定发布构建;自行编译或修改脚本重新打包时,需要一起更新清单与脚本内的预期哈希。
这里按版本保存已有测量和验证范围。不同工具、模型格式、提示词和输出长度的速度不能直接横向比较;文档整理没有重新测量这些历史结果。256K 是可配置的总上下文,KVMem 每轮只读入选中的历史,不能据此保证所有内容都能精确召回。
IQ3XXS 于 2026-10-05 使用独立 ninfer-perplexity 评分入口测量:ninfer-ppl-1m-v1 quick 四个流,context 4096 / stride 2048,rk4v4、GDN FP16、词嵌入放内存。每个模型文件评分 261,167 token、124 个窗口;PPL 预填充及评分分块为 1024,与聊天服务的 512 不同。下表 Bonsai2/IQ2S 列保留历史参考;Bonsai2 原报告已恢复,IQ2S 对应原报告本次未找到。设置不同,不能据此单独归因权重量化差异。
| 领域 | Swift-Bonsai-2(历史 int8) | IQ2S(历史) | IQ3XXS(rk4v4) |
|---|---|---|---|
| 中文维基 | 7.89415 | 5.443 | 5.29369 |
| PG-19 | 8.65629 | 7.439 | 7.26160 |
| WikiText | 7.82674 | 6.321 | 6.21847 |
| NInfer 代码 | 1.85972 | 1.716 | 1.69572 |
| 总体 | 5.62843 | 4.587 | 4.49564 |
IQ3XXS 原始 MTP Q6 与转换后的 Q4 文件,总体均为 4.495637819904494;124 个窗口在报告精度下逐项一致。CausalScoring 只测主模型,不运行 MTP 草稿或视觉塔,不能据此声称草稿质量、接受率或多模态能力不变。Q4 原始报告、Q6 原始报告、已找到的 19 份报告。早期 custom 语料结果属于流水线/参数扫描记录,不是更多项可直接对比的质量认证。
2026-10-05,RTX 3060 12GB / Windows;完整输出头、MTP draft3、CPU 看图、prefill chunk512。文本/代码输入分别为 56/49 token,输出 256 token;每组预热 1 次、正式 3 次。生成速度是引擎 decode 中位数(token/s),不是端到端吞吐。
| 配置 | Graph | 测试驻留窗口 | 文本生成 | 代码生成 |
|---|---|---|---|---|
| Bonsai2 12G · int8 | 关 | 98K | 45.83 | 45.11 |
| Bonsai2 12G · int8 | 开 | 98K | 47.19 | 46.57 |
| Bonsai2 12G · rk8v4 | 关 | 131K | 45.09 | 45.95 |
| Bonsai2 12G · rk8v4 | 开 | 131K | 46.67 | 47.74 |
| Bonsai2 8G · rk4v4 | 关 | 48K | 32.26 | 31.03 |
| Swift IQ2S · rk4v4 | 关 | 73K | 42.21 | 44.93 |
| Swift IQ2S · rk4v4 | 开 | 73K | 43.24 | 46.12 |
| Swift IQ2S · rk8v4 | 关 | 49K | 42.19 | 47.13 |
| Swift IQ2S · rk8v4 | 开 | 49K | 43.27 | 48.33 |
| Swift IQ3XXS · rk4v4 | 关 | 37K | 44.34 | 46.03 |
无缓存预填充:实际输入为 2K / 8K / 16K,每档预热 1 次、正式 3 次,最多生成 8 token。下表是 prefill 中位速度,首 token 延迟(TTFT)单列;引擎计时和 usage 输入计数一致,缓存命中为 0。
| 配置 | Graph | 2K 预填充 | 8K 预填充 | 16K 预填充 | 16K TTFT(秒) |
|---|---|---|---|---|---|
| Bonsai2 12G · int8 | 关 | 818.60 | 813.05 | 743.93 | 22.04 |
| Bonsai2 12G · int8 | 开 | 805.78 | 791.72 | 733.67 | 22.34 |
| Bonsai2 12G · rk8v4 | 关 | 803.26 | 790.37 | 734.31 | 22.32 |
| Bonsai2 12G · rk8v4 | 开 | 805.24 | 790.50 | 735.12 | 22.30 |
| Bonsai2 8G · rk4v4 | 关 | 558.43 | 557.65 | 533.90 | 30.71 |
| Swift IQ2S · rk4v4 | 关 | 483.66 | 498.10 | 489.02 | 33.55 |
| Swift IQ2S · rk4v4 | 开 | 483.40 | 497.85 | 489.36 | 33.52 |
| Swift IQ2S · rk8v4 | 关 | 484.26 | 498.14 | 490.38 | 33.44 |
| Swift IQ2S · rk8v4 | 开 | 483.59 | 498.52 | 490.65 | 33.44 |
| Swift IQ3XXS · rk4v4 | 关 | 500.47 | 515.41 | 505.69 | 32.44 |
10 个配置共计 90 个正式 prefill 样本、30 个预热样本。不同模型驻留量不同;同模型/KV 的 Graph 对照使用相同窗口,小幅差异不构成普遍提速保证。输入均未超出驻留窗口,不代表超长历史换页速度。表中 IQ3 37K、Bonsai8 48K 是当时测试窗口,当前推荐档为 IQ3 33K、Bonsai8 36K,均不是硬上限;auto 和手动驻留受实时显存及匹配组合的校准边界限制。IQ3 首次因余量 223.68 MiB 触发旧 300 MiB 规则,重试完成,异常记录保留。原始指标与方法。
| 场景 | 结果 |
|---|---|
| 12 万 token 长文藏一句话 | 找到;多轮追问、切到别的对话再切回都正常 |
| 19 万 token 长文藏句、工具调用、多轮复用 | 单次输出 16K 时 5 次全部通过;输出调到 23K(检索区变小)时,工具那一项没过 |
| 25 万 token 长文藏一句话 | 没找到:暗号所在的那一块没被挑进显存(见本页的已知限制) |
| 6 万 token 对话,超出显存窗口以后接着问 | 每轮 2–4 秒(改之前每轮约 140 秒) |
| 项 | 配置 |
|---|---|
| 显卡 | RTX 3060 12GB(28 SM,显存带宽 360 GB/s) |
| CPU | Ryzen 7 3700X |
| 内存 | 32 GB(Host KV:200K 上下文预留 8 GB,256K 预留 10 GB) |
| 系统 | Windows 11 |
| 前端 | DeepSeek Harness 桌面版(其他 OpenAI 兼容客户端也能用) |
ninfer-perplexity。开关交替测,排除显卡过热降频的影响。测试.bat。下列性能数字对应原有测试,不表示每次更新都会再次获得同等提升。按日期发生的修复和发布状态见更新记录。
Swift 1.5 的模型格式(GGUF 量化块,IQ2_S / IQ3_XXS 等十几种)只有 ninfer-all 这条新分支能读,它的预编译包只支持 RTX 50 系。移植时:
NINFER_SLIM_3060):只保留单卡、单路要用的注意力内核,显存和编译时间都省下来;| 改动 | 省下 | 代价 |
|---|---|---|
词嵌入放内存(--embedding-host) | 约 360 MiB | 无,速度不变 |
| 视觉权重放内存(overlay) | 约 280 MiB | 第一张图约 1.7 秒 |
| MTP 草稿头压成 Q4(用补丁改模型文件) | 约 95 MiB | 无,速度和猜中率在波动范围内 |
| rk4v4 | 32K 上下文省约 260 MiB | 困惑度 +0.10% |
| 改动 | 内容 |
|---|---|
| KVMem | 移植 qzshch/ninfer-kvmem 的空洞块表、设备放置事务、稀疏工作集、滚动预填窗口、解码环形窗口和检索机制 |
| 3060 精简 | NINFER_SLIM_3060 保留单卡、单路、H24 注意力和 int8 / rk8v4 / rk4v4 内核 |
| 内存和显存 | Windows Host KV 用可分页内存;词嵌入放锁页内存;开头和输出按环境变量预留 |
| kv9 检索 | 按消息分段查询、对准换行、排除开头/保护块/最近块、CPU 打分矩阵化多线程;默认查询行数 1024 |
| 注意力和换入 | 跳过空洞页;页面换入按碎片程度自动选批量 gather |
| SM 自适应 | GDN 路线表运行时按真实 SM 数选择;rope 容量 = 6 × SM |
| Windows 显存预算 | 引擎读取 CUDA 和 NVML 空闲显存,NVML 可用时取两者较小值;NINFER_FREE_VRAM_MIB 可进一步限制预算 |
| KVMem 内容打分 | 包含单段查询和达到提示窗口边界的选择路径,日志用 kvmem_score: SELECT 标识 |
| 连接保活 | Windows TCP 保活为 10 秒 / 3 秒,HTTP 连接保活 120 秒,读写超时 300 秒 |
后三项对应 2026-10-04 同步的源码。它们的修复背景和发布状态见更新记录;原有性能表保持此前测量结果。
Swift 1.5 IQ2S 与 IQ3XXS 共用的完整引擎源码在 swift15/engine/,包含 CMake 工程和实现代码,应用、测试及第三方源码也在目录中。当前 IQ2S 懒人包的启动器和设置在 swift15/oneclick-iq2s/,构建脚本在 swift15/scripts/。目录索引见 swift15/README.md。
Bonsai2 8G 与 12G 共用的引擎源码、构建脚本和两套启动器已公开在 bonsai2/。两种显存方案使用不同模型文件和启动配置;引擎改动共用。从源码编译见 12G README 和 8G README。
git clone https://github.com/5258MF/ninfer-rtx3060-27b.git
cd ninfer-rtx3060-27b
也可以在 GitHub 上点击 Code → Download ZIP。IQ2S / IQ3XXS 共用的引擎源码位于 swift15/engine/,上游基线是 Ryan-gsq 分支 b06908b,此前的改动均已合入。
改好 swift15/scripts/build-sm86.bat 开头的 CUDA、MSVC 和依赖路径,然后在仓库根目录运行:
swift15\scripts\build-sm86.bat
脚本默认使用仓库里的 swift15/engine/,输出到 swift15/build/;源码和构建路径使用纯英文路径。产物是 swift15/build/apps/ninfer-serve.exe。把它和运行要用的 DLL(cudart、cublas、cublasLt、FFmpeg、zlib、libcurl、libssh2、libcrypto、zstd 等)放到懒人包的 engine\ 目录。
单卡 12 GB 上,--device-state-slots 0 --prefill-chunk 512 必须加,否则显存不够。完整参数由启动器生成,大致是:
ninfer-serve swift15_iq2_s_mtpq4.ninfer --model-id qwen3.8-27b
--kv-dtype rk4v4 --gdn-state-fp16 --spec mtp --draft-tokens 3
--max-context 204800 --kv-capacity auto --kvmem-window-pages <按空闲显存算>
--host-kv-mib 8192 --device-state-slots 0 --prefill-chunk 512
--cuda-graph-allowance-mib 144 --default-max-tokens <输出>
--max-private-continuations 4 --embedding-host
[--lm-head-draft] [--vision --vision-residency overlay --vision-max-merged 4096]
环境变量:NINFER_KVMEM_SINK_PAGES(开头保留页数)、NINFER_KVMEM_GEN_RESERVE_PAGES(输出预留页数)、NINFER_KVMEM_LONG_REUSE=1。Windows 上开 KVMem 时 Host KV 自动用可分页内存(NINFER_HOST_KV_PAGEABLE=0/1 可以强制)。1 页 = 64 token。这些值由启动器源码计算。
懒人包不放模型,第一次启动时从魔搭下载 swift15_iq2s_mtp.ninfer(10,257,632,000 字节,SHA256 2df7259e93cbbb972183966e40ff23392e66a8ce4fc84748d08849bc6182045e),再用补丁转成 swift15_iq2_s_mtpq4.ninfer(10,155,600,640 字节,SHA256 1941ef5f4bd4be61938521236d0e499c5e6d69ff69b4fbcfe83527f7fd9b3bdd)。
自己生成模型补丁(在 swift15/engine/ 里运行,要 pip install gguf numpy torch):
python -X utf8 -m tools.mtpq4 swift15_iq2s_mtp.ninfer swift15_iq2_s_mtpq4.ninfer
python -X utf8 -m tools.mkpatch swift15_iq2s_mtp.ninfer swift15_iq2_s_mtpq4.ninfer patch_out
两个脚本已经放在引擎的 tools/ 目录,会使用同一源码树中的 tools.artifact。
mtpq4.py 只改 MTP 的 7 个张量:注意力 query/gate(Q4)、key/value(Q8,引擎的 linear_pair 只收 Q8)、注意力 output(Q4)、MLP gate+up 和 down(Q4);input_projection 没有对应形状的 Q4 内核,保留 Q6_K。量化用项目自带的 quantize_matrix_mse。其余对象逐字节复制。
重新编译后替换包内 engine/ninfer-serve.exe,保留完整依赖 DLL。已经下载和转换的模型可以继续使用;修复所需版本见更新记录。
| 情况 | 处理 |
|---|---|
| 显存分配失败或窗口放不下 | 关闭其他占显存程序;按 R 重新读空闲显存,或按 C 调小单次输出 |
| 运行后突然很慢 | 检查是否显存被其他程序占用,释放后重新启动 |
cudaMallocHost / bad allocation | 检查主机内存和其他模型占用,可调小总上下文;缩显存窗口不能覆盖所有主机锁页失败 |
| 已有模型运行或端口占用 | 关闭原模型,或修改 设置.ini 的 PORT |
启动器只处理它识别的容量报错,不能保证所有分配失败都自动恢复。输入很长的材料时,也需要考虑长文召回范围。
.part 文件会继续下载。patch 目录;现成的转换后模型可以继续使用。接入信息.txt 填写;思考也占输出预算。cmd,再运行 启动.bat 查看具体错误。引擎日志在包内 logs 目录。分享错误信息时,去掉 API Key 等私人信息。
DLL 缺失、KV 容量曲线越界或首次显卡校准失败时,见启动错误与处理。
代码许可与模型许可分别适用。Swift 1.5 引擎代码的 Apache-2.0 文本见 swift15/LICENSE,源文件保留上游许可证和贡献者信息。
RTX 3060 12GB/8GB 本地跑 27B 大模型:256K 上下文、约 45 token/秒,能看图、调工具,附懒人包和源码
C++
38
49 commits
updated Oct 13, 2026
简体中文 | English
当前源码与懒人包:Swift 1.5 IQ2S / IQ3XXS 0.1.4,Bonsai2 8G / 12G 0.1.5。四款懒人包共用下方的百度、夸克网盘目录。详情见更新记录。
为 Windows 提供 Swift 1.5 和 Bonsai2 的本地推理方案,支持对话和图片输入,也支持工具调用与 KVMem 长上下文。懒人包解压后双击启动,模型在第一次运行时下载。
| 版本 | 显卡与显存 | 模型 | 入口 |
|---|---|---|---|
| Swift 1.5(默认推荐) | RTX 30 系,12 GB 以上;RTX 40 系可运行但未实测 | IQ2S MTP-Q4 约 9.46 GiB;IQ3XXS MTP-Q4 约 10.24 GiB;共用引擎源码 | 使用指南 |
| Bonsai2 12G | 按 RTX 3060 12GB 调整,面向 RTX 30 系 | Swift-Bonsai-2 三元模型,约 7.7 GiB | 12G 版说明 |
| Bonsai2 8G | 面向 RTX 30 系 8GB;测试在 12GB 卡限制显存完成 | Swift-Bonsai-2 ptq1,约 6.6 GiB | 8G 版说明 |
Swift IQ2S 默认总上下文为 200K,IQ3XXS 为 128K,两者最多可配置 256K;KVMem 会从历史中选取部分内容放入显存。容量上限与长文召回效果请一起看测试结果与已知限制。
懒人包不包含模型。请完整解压,保留 engine、launcher 和 patch 等目录。
四个包都在同一个共享目录里,打开任一网盘后按文件名选择。
| 懒人包 | 版本 | 文件名 |
|---|---|---|
| Swift 1.5 IQ2S | 0.1.4 | ninfer-3060-swift15-q2s-mtp-oneclick-0.1.4.zip |
| Swift 1.5 IQ3XXS | 0.1.4 | ninfer-3060-swift15-iq3xxs-mtp-oneclick-0.1.4.zip |
| Bonsai2 12G | 0.1.5 | ninfer-3060-12g-bonsai2-oneclick-0.1.5.zip |
| Bonsai2 8G | 0.1.5 | ninfer-3060-8g-bonsai2-oneclick-0.1.5.zip |
压缩包校验值见 PACKAGES-SHA256SUMS.txt。IQ3XXS 已提供独立懒人包,支持首次下载、SHA256 校验和 MTP-Q4 转换。四包均于 2026-10-13 重新构建,通过短请求和解压自检;验收范围见更新记录。
以下 Huihui Qwen3.8 27B Abliterated 模型已转换为 NInfer 格式,可从 Hugging Face 下载:
Abliterated 版本会削弱模型的拒答或安全过滤能力。使用前请阅读各自模型卡中的来源、许可和使用警告;Swift 版本的模型卡建议用于研究和本地受控推理,不建议用于面向公众或未成年人的服务。
当前源码 Release:Swift 0.1.4 和 Bonsai2 0.1.5,各附件只含对应引擎系列,均包含最新 BAT/容量修正。本次懒人包的启动器源码已同步到 main。
下面以 Swift 1.5 IQ2S 为例:
D:\ninfer-swift15。启动.bat,确认配置后按回车。第一次会下载、校验并转换模型;出现 listening 后即可使用。测试.bat 检查回答。连接客户端时,按启动后生成的 接入信息.txt 填写接口和输出上限。默认接口为 http://127.0.0.1:8084/v1,模型 ID 为 qwen3.8-27b。修改参数、模型准备和客户端接入见使用指南;常见使用问题见下文,已知启动错误见修复记录。
把懒人包完整解压到简单路径,例如 D:\ninfer-swift15。engine 中的 DLL 必须与 ninfer-serve.exe 保持在同一目录。
启动.bat。默认选择 rk4v4、完整 MTP 输出头、200K 总上下文和自动输出。listening。首次遇到没有校准记录的显卡还会测量运行路线,因此比后续启动慢。测试.bat 检查回答和速度。用完关闭启动窗口即可停止引擎。同一时间只运行一个引擎。菜单中回车启动、C 重新配置、R 重新读取空闲显存、Q 退出。
启动.bat last
启动.bat dryrun
last 直接使用保存的配置;dryrun 只显示参数,不启动或下载。
当前 main 源码(2026-10-06): 自动 KVMem 模式只确定驻留预算,有限的 API 申请上界随驻留容量变化;不再提前按固定 SYS、固定 36K/平分或 32K 输出封顶划分。引擎按实际 system/developer/工具前缀逐请求分配检索与输出。本引擎的 --default-max-tokens 也会限制显式请求,并非只在客户端不传参数时生效。旧 SYS/sink 配置或初始化种子不等于真实前缀。客户端压缩策略由客户端自行配置,包内不附 DSH 测试启动项。
本轮 main 启动器支持三种驻留选择:recommended 取历史推荐与当前允许上限的较小值,auto 取当前允许上限,也可手动填写范围内的 token 数。推荐值不是硬上限;读不到显存或配置越界时拒绝启动。按 C 先选 KV/输出头/Graph,再选驻留、逻辑上下文和 API 上限;菜单支持数字选项,启动前会重新检查显存。8G 始终按整卡 8GiB 扣除桌面与其他占用。校准范围与短测结果见更新记录。
启动时先按空闲显存确定总驻留容量 C;每次请求再准确计算系统提示、developer 指令和工具定义的完整开头 S。检索不包含 S,输出使用剩余容量。
| 总上下文 | 检索推荐范围 | 优先目标 | 输出预留 |
|---|---|---|---|
| 256K | 32K–36K | 36K | C − S − 检索,至少 8K |
| 128K | 16K–18K | 18K | C − S − 检索,至少 8K |
| 200K | 25K–28.125K | 28.125K | 同上 |
开头按完整渲染后的 token 数计算,Bonsai 按 64 token、Swift 按 128 token 对齐。不再固定预留 8K 开头,也不再把 KVMem 输出限制为 16K/32K。容量不足时先缩检索,低于推荐范围会提示;完整开头和 8K 输出都放不下时返回容量错误。实际生成仍受客户端请求长度、剩余总上下文、停止词以及模型结束影响;8K 是显存预留,不保证每次生成 8K。
Harness 在第一次请求前即可配置:contextWindow 填总上下文,maxTokens 使用启动器生成的数字。这是最短开头情况下的申请上限,实际请求的开头更长时,引擎会自动降低本轮输出预算。启动缩窗后重新生成接入信息;本机启动器在允许同步时同步 dsh。旧的手动 OUT/ANSWER、SYS/SINK 和 WINDOW 会迁移到自动分配。
8G 在 12GB 测试卡上也先扣除当前桌面/驱动占用,再按 8GB 预算计算。20K 是小容量测试或低空闲显存下的容量,67K 是假设整块 8GB 空闲时的理想预算;二者不能作为同一台电脑的固定上限。较小窗口可以运行,但超长历史召回可能变差。
支持的四种组合与历史解码测量如下;驻留容量以本次启动为准:
| 组合 | 总上下文 | 检索目标 | 输出 | 历史解码速度 |
|---|---|---|---|---|
| rk4v4 + 完整头 | 推荐 200K,最多 256K | 200K 时 28.125K;256K 时 36K | 剩余容量 | 约 43 token/秒 |
| rk4v4 + 精简头 | 最多 128K | 18K | 剩余容量 | 约 47 token/秒 |
| rk8v4 + 完整头 | 最多 128K | 18K | 剩余容量 | 历史测量慢 14–22% |
| rk8v4 + 精简头 | 最多 128K | 18K | 剩余容量 | — |
双击 启动.bat 后按 C,依次选择 KV 格式、MTP 输出头、看图、总上下文、单次输出、固定保留的开头和思考上限。回车保持当前值,选好后会写回 设置.ini。
也可以用记事本编辑 设置.ini 后重新启动:
| 设置项 | 作用 |
|---|---|
KV | rk4v4 / rk8v4 |
HEAD | full / lite |
CTX | 总上下文,默认 204800 |
OUT | auto,启动前生成 Harness 申请上限;实际预算随请求计算 |
SYS | auto,完整系统/developer/工具定义的实际 token 数 |
THINK | 思考上限,0 表示不限 |
POST_THINKING | 思考结束后切换正文采样参数,默认 1;设 0 关闭 |
POST_THINKING_TEMP / POST_THINKING_TOP_P / POST_THINKING_TOP_K | 正文的温度、top-p、top-k;留空使用引擎预设,温度默认为 0.2 |
POST_THINKING_SAMPLER | 正文采样组合,例如 temp=0.2,top_p=0.95 |
ADAPTIVE_MTP | 自适应 MTP 草稿长度,默认 0,使用固定 3 token |
RECOVER_INVARIANT | 内部不变量错误时尝试恢复请求,默认 1 |
VISION | 是否启用看图 |
HOST / PORT | 监听地址和端口 |
API_KEY | 访问密码,默认留空 |
MODEL_ID | 客户端使用的模型 ID |
窗口与自动输出会随空闲显存变化。开头与输出自动分配;启动后以生成的 接入信息.txt 为准。
推理控制设置已包含在当前懒人包中。RECOVER_INVARIANT 只处理引擎支持恢复的内部错误,不能保证所有错误都能恢复。
等待 listening 后,打开自动生成的 接入信息.txt。它包含当前配置和 DeepSeek Harness 的配置示例。
| 客户端字段 | 默认值或填写方式 |
|---|---|
| 接口类型 | OpenAI 兼容 / Chat Completions |
| Base URL | http://127.0.0.1:8084/v1 |
| 模型 ID | qwen3.8-27b |
| API Key | 未设置密码时可填 none,部分客户端不允许为空 |
| contextWindow / 上下文长度 | 与 CTX 一致,默认 204800 |
| maxTokens / 最大输出 | 按本次 接入信息.txt 的数值填写 |
接口也支持 Anthropic Messages 和 OpenAI Responses。思考内容在 reasoning_content 字段;请求中 enable_thinking: false 可以关闭思考。支持的思考档位为 low / medium / xhigh,加上关闭思考。
一次处理一个请求,多个请求会排队。需要局域网访问时,将 HOST 改为 0.0.0.0 并设置 API_KEY;接入信息中会列出可用地址。
修改 dsh 的配置后,完全退出程序和托盘图标,再重新打开,避免它把内存中的旧配置写回文件。
0.1.0 对客户端发送的较大输出上限按服务端配置封顶;中途压缩、编辑历史或分叉的 KVMem 请求回退到重新预填,因此可能比直接续写慢。多工具 required/any 按 Auto 处理,不能保证一定调用工具;接受 strict:true 的入口也不提供严格 JSON Schema 约束。Swift Responses 入口仍拒绝 strict:true。具体覆盖范围见三项兼容修改与限制。
模型来源:魔搭社区 Swift-1.5-Qwen3.8-27B-GSQ-RCO-NInfer。
合并后的 Qwen 3.8 27B 模型库使用上方同一组共享下载目录。
swift15_iq2s_mtp.ninfer,10,257,632,000 字节。patch 转换成 swift15_iq2_s_mtpq4.ninfer,10,155,600,640 字节。model 目录,再启动完成转换。文件 hash 和自行生成补丁的方法见编译与开发。已有转换完成的模型可继续使用,升级引擎无需重新下载模型。
| 路径 | 内容 |
|---|---|
启动.bat / 测试.bat | 启动和测试入口 |
设置.ini | 用户配置 |
engine/ | EXE 与运行所需 DLL |
launcher/ | 启动器和测试脚本 |
patch/ | 模型转换的数据补丁 |
model/ | 初始为空,下载与转换后的模型 |
版本信息.txt | 新修复包的构建识别信息 |
SHA256SUMS.txt / verify-kit-manifest.ps1 | 新版包的核心文件哈希、DLL 完整性和中文文件名检查 |
verify-arch-engine.ps1 | 新版包的引擎验收脚本,包含短提示、超窗正负对照与多轮复用 |
logs/ / 接入信息.txt | 运行时生成的日志和客户端说明 |
包里的 使用说明.txt 可离线查阅;速度与长文召回范围见测试结果与已知限制。
上述校验和验收工具已包含在当前源码和懒人包中。完整包解压后可运行:
powershell -ExecutionPolicy Bypass -File .\verify-kit-manifest.ps1
powershell -ExecutionPolicy Bypass -File .\verify-arch-engine.ps1
第一项检查文件;第二项会启动测试引擎并占用显存,运行前关闭其他模型。模型默认从包内 model 目录读取,也可用 -ModelPath 指定。SHA256SUMS.txt 和校验脚本对应指定发布构建;自行编译或修改脚本重新打包时,需要一起更新清单与脚本内的预期哈希。
这里按版本保存已有测量和验证范围。不同工具、模型格式、提示词和输出长度的速度不能直接横向比较;文档整理没有重新测量这些历史结果。256K 是可配置的总上下文,KVMem 每轮只读入选中的历史,不能据此保证所有内容都能精确召回。
IQ3XXS 于 2026-10-05 使用独立 ninfer-perplexity 评分入口测量:ninfer-ppl-1m-v1 quick 四个流,context 4096 / stride 2048,rk4v4、GDN FP16、词嵌入放内存。每个模型文件评分 261,167 token、124 个窗口;PPL 预填充及评分分块为 1024,与聊天服务的 512 不同。下表 Bonsai2/IQ2S 列保留历史参考;Bonsai2 原报告已恢复,IQ2S 对应原报告本次未找到。设置不同,不能据此单独归因权重量化差异。
| 领域 | Swift-Bonsai-2(历史 int8) | IQ2S(历史) | IQ3XXS(rk4v4) |
|---|---|---|---|
| 中文维基 | 7.89415 | 5.443 | 5.29369 |
| PG-19 | 8.65629 | 7.439 | 7.26160 |
| WikiText | 7.82674 | 6.321 | 6.21847 |
| NInfer 代码 | 1.85972 | 1.716 | 1.69572 |
| 总体 | 5.62843 | 4.587 | 4.49564 |
IQ3XXS 原始 MTP Q6 与转换后的 Q4 文件,总体均为 4.495637819904494;124 个窗口在报告精度下逐项一致。CausalScoring 只测主模型,不运行 MTP 草稿或视觉塔,不能据此声称草稿质量、接受率或多模态能力不变。Q4 原始报告、Q6 原始报告、已找到的 19 份报告。早期 custom 语料结果属于流水线/参数扫描记录,不是更多项可直接对比的质量认证。
2026-10-05,RTX 3060 12GB / Windows;完整输出头、MTP draft3、CPU 看图、prefill chunk512。文本/代码输入分别为 56/49 token,输出 256 token;每组预热 1 次、正式 3 次。生成速度是引擎 decode 中位数(token/s),不是端到端吞吐。
| 配置 | Graph | 测试驻留窗口 | 文本生成 | 代码生成 |
|---|---|---|---|---|
| Bonsai2 12G · int8 | 关 | 98K | 45.83 | 45.11 |
| Bonsai2 12G · int8 | 开 | 98K | 47.19 | 46.57 |
| Bonsai2 12G · rk8v4 | 关 | 131K | 45.09 | 45.95 |
| Bonsai2 12G · rk8v4 | 开 | 131K | 46.67 | 47.74 |
| Bonsai2 8G · rk4v4 | 关 | 48K | 32.26 | 31.03 |
| Swift IQ2S · rk4v4 | 关 | 73K | 42.21 | 44.93 |
| Swift IQ2S · rk4v4 | 开 | 73K | 43.24 | 46.12 |
| Swift IQ2S · rk8v4 | 关 | 49K | 42.19 | 47.13 |
| Swift IQ2S · rk8v4 | 开 | 49K | 43.27 | 48.33 |
| Swift IQ3XXS · rk4v4 | 关 | 37K | 44.34 | 46.03 |
无缓存预填充:实际输入为 2K / 8K / 16K,每档预热 1 次、正式 3 次,最多生成 8 token。下表是 prefill 中位速度,首 token 延迟(TTFT)单列;引擎计时和 usage 输入计数一致,缓存命中为 0。
| 配置 | Graph | 2K 预填充 | 8K 预填充 | 16K 预填充 | 16K TTFT(秒) |
|---|---|---|---|---|---|
| Bonsai2 12G · int8 | 关 | 818.60 | 813.05 | 743.93 | 22.04 |
| Bonsai2 12G · int8 | 开 | 805.78 | 791.72 | 733.67 | 22.34 |
| Bonsai2 12G · rk8v4 | 关 | 803.26 | 790.37 | 734.31 | 22.32 |
| Bonsai2 12G · rk8v4 | 开 | 805.24 | 790.50 | 735.12 | 22.30 |
| Bonsai2 8G · rk4v4 | 关 | 558.43 | 557.65 | 533.90 | 30.71 |
| Swift IQ2S · rk4v4 | 关 | 483.66 | 498.10 | 489.02 | 33.55 |
| Swift IQ2S · rk4v4 | 开 | 483.40 | 497.85 | 489.36 | 33.52 |
| Swift IQ2S · rk8v4 | 关 | 484.26 | 498.14 | 490.38 | 33.44 |
| Swift IQ2S · rk8v4 | 开 | 483.59 | 498.52 | 490.65 | 33.44 |
| Swift IQ3XXS · rk4v4 | 关 | 500.47 | 515.41 | 505.69 | 32.44 |
10 个配置共计 90 个正式 prefill 样本、30 个预热样本。不同模型驻留量不同;同模型/KV 的 Graph 对照使用相同窗口,小幅差异不构成普遍提速保证。输入均未超出驻留窗口,不代表超长历史换页速度。表中 IQ3 37K、Bonsai8 48K 是当时测试窗口,当前推荐档为 IQ3 33K、Bonsai8 36K,均不是硬上限;auto 和手动驻留受实时显存及匹配组合的校准边界限制。IQ3 首次因余量 223.68 MiB 触发旧 300 MiB 规则,重试完成,异常记录保留。原始指标与方法。
| 场景 | 结果 |
|---|---|
| 12 万 token 长文藏一句话 | 找到;多轮追问、切到别的对话再切回都正常 |
| 19 万 token 长文藏句、工具调用、多轮复用 | 单次输出 16K 时 5 次全部通过;输出调到 23K(检索区变小)时,工具那一项没过 |
| 25 万 token 长文藏一句话 | 没找到:暗号所在的那一块没被挑进显存(见本页的已知限制) |
| 6 万 token 对话,超出显存窗口以后接着问 | 每轮 2–4 秒(改之前每轮约 140 秒) |
| 项 | 配置 |
|---|---|
| 显卡 | RTX 3060 12GB(28 SM,显存带宽 360 GB/s) |
| CPU | Ryzen 7 3700X |
| 内存 | 32 GB(Host KV:200K 上下文预留 8 GB,256K 预留 10 GB) |
| 系统 | Windows 11 |
| 前端 | DeepSeek Harness 桌面版(其他 OpenAI 兼容客户端也能用) |
ninfer-perplexity。开关交替测,排除显卡过热降频的影响。测试.bat。下列性能数字对应原有测试,不表示每次更新都会再次获得同等提升。按日期发生的修复和发布状态见更新记录。
Swift 1.5 的模型格式(GGUF 量化块,IQ2_S / IQ3_XXS 等十几种)只有 ninfer-all 这条新分支能读,它的预编译包只支持 RTX 50 系。移植时:
NINFER_SLIM_3060):只保留单卡、单路要用的注意力内核,显存和编译时间都省下来;| 改动 | 省下 | 代价 |
|---|---|---|
词嵌入放内存(--embedding-host) | 约 360 MiB | 无,速度不变 |
| 视觉权重放内存(overlay) | 约 280 MiB | 第一张图约 1.7 秒 |
| MTP 草稿头压成 Q4(用补丁改模型文件) | 约 95 MiB | 无,速度和猜中率在波动范围内 |
| rk4v4 | 32K 上下文省约 260 MiB | 困惑度 +0.10% |
| 改动 | 内容 |
|---|---|
| KVMem | 移植 qzshch/ninfer-kvmem 的空洞块表、设备放置事务、稀疏工作集、滚动预填窗口、解码环形窗口和检索机制 |
| 3060 精简 | NINFER_SLIM_3060 保留单卡、单路、H24 注意力和 int8 / rk8v4 / rk4v4 内核 |
| 内存和显存 | Windows Host KV 用可分页内存;词嵌入放锁页内存;开头和输出按环境变量预留 |
| kv9 检索 | 按消息分段查询、对准换行、排除开头/保护块/最近块、CPU 打分矩阵化多线程;默认查询行数 1024 |
| 注意力和换入 | 跳过空洞页;页面换入按碎片程度自动选批量 gather |
| SM 自适应 | GDN 路线表运行时按真实 SM 数选择;rope 容量 = 6 × SM |
| Windows 显存预算 | 引擎读取 CUDA 和 NVML 空闲显存,NVML 可用时取两者较小值;NINFER_FREE_VRAM_MIB 可进一步限制预算 |
| KVMem 内容打分 | 包含单段查询和达到提示窗口边界的选择路径,日志用 kvmem_score: SELECT 标识 |
| 连接保活 | Windows TCP 保活为 10 秒 / 3 秒,HTTP 连接保活 120 秒,读写超时 300 秒 |
后三项对应 2026-10-04 同步的源码。它们的修复背景和发布状态见更新记录;原有性能表保持此前测量结果。
Swift 1.5 IQ2S 与 IQ3XXS 共用的完整引擎源码在 swift15/engine/,包含 CMake 工程和实现代码,应用、测试及第三方源码也在目录中。当前 IQ2S 懒人包的启动器和设置在 swift15/oneclick-iq2s/,构建脚本在 swift15/scripts/。目录索引见 swift15/README.md。
Bonsai2 8G 与 12G 共用的引擎源码、构建脚本和两套启动器已公开在 bonsai2/。两种显存方案使用不同模型文件和启动配置;引擎改动共用。从源码编译见 12G README 和 8G README。
git clone https://github.com/5258MF/ninfer-rtx3060-27b.git
cd ninfer-rtx3060-27b
也可以在 GitHub 上点击 Code → Download ZIP。IQ2S / IQ3XXS 共用的引擎源码位于 swift15/engine/,上游基线是 Ryan-gsq 分支 b06908b,此前的改动均已合入。
改好 swift15/scripts/build-sm86.bat 开头的 CUDA、MSVC 和依赖路径,然后在仓库根目录运行:
swift15\scripts\build-sm86.bat
脚本默认使用仓库里的 swift15/engine/,输出到 swift15/build/;源码和构建路径使用纯英文路径。产物是 swift15/build/apps/ninfer-serve.exe。把它和运行要用的 DLL(cudart、cublas、cublasLt、FFmpeg、zlib、libcurl、libssh2、libcrypto、zstd 等)放到懒人包的 engine\ 目录。
单卡 12 GB 上,--device-state-slots 0 --prefill-chunk 512 必须加,否则显存不够。完整参数由启动器生成,大致是:
ninfer-serve swift15_iq2_s_mtpq4.ninfer --model-id qwen3.8-27b
--kv-dtype rk4v4 --gdn-state-fp16 --spec mtp --draft-tokens 3
--max-context 204800 --kv-capacity auto --kvmem-window-pages <按空闲显存算>
--host-kv-mib 8192 --device-state-slots 0 --prefill-chunk 512
--cuda-graph-allowance-mib 144 --default-max-tokens <输出>
--max-private-continuations 4 --embedding-host
[--lm-head-draft] [--vision --vision-residency overlay --vision-max-merged 4096]
环境变量:NINFER_KVMEM_SINK_PAGES(开头保留页数)、NINFER_KVMEM_GEN_RESERVE_PAGES(输出预留页数)、NINFER_KVMEM_LONG_REUSE=1。Windows 上开 KVMem 时 Host KV 自动用可分页内存(NINFER_HOST_KV_PAGEABLE=0/1 可以强制)。1 页 = 64 token。这些值由启动器源码计算。
懒人包不放模型,第一次启动时从魔搭下载 swift15_iq2s_mtp.ninfer(10,257,632,000 字节,SHA256 2df7259e93cbbb972183966e40ff23392e66a8ce4fc84748d08849bc6182045e),再用补丁转成 swift15_iq2_s_mtpq4.ninfer(10,155,600,640 字节,SHA256 1941ef5f4bd4be61938521236d0e499c5e6d69ff69b4fbcfe83527f7fd9b3bdd)。
自己生成模型补丁(在 swift15/engine/ 里运行,要 pip install gguf numpy torch):
python -X utf8 -m tools.mtpq4 swift15_iq2s_mtp.ninfer swift15_iq2_s_mtpq4.ninfer
python -X utf8 -m tools.mkpatch swift15_iq2s_mtp.ninfer swift15_iq2_s_mtpq4.ninfer patch_out
两个脚本已经放在引擎的 tools/ 目录,会使用同一源码树中的 tools.artifact。
mtpq4.py 只改 MTP 的 7 个张量:注意力 query/gate(Q4)、key/value(Q8,引擎的 linear_pair 只收 Q8)、注意力 output(Q4)、MLP gate+up 和 down(Q4);input_projection 没有对应形状的 Q4 内核,保留 Q6_K。量化用项目自带的 quantize_matrix_mse。其余对象逐字节复制。
重新编译后替换包内 engine/ninfer-serve.exe,保留完整依赖 DLL。已经下载和转换的模型可以继续使用;修复所需版本见更新记录。
| 情况 | 处理 |
|---|---|
| 显存分配失败或窗口放不下 | 关闭其他占显存程序;按 R 重新读空闲显存,或按 C 调小单次输出 |
| 运行后突然很慢 | 检查是否显存被其他程序占用,释放后重新启动 |
cudaMallocHost / bad allocation | 检查主机内存和其他模型占用,可调小总上下文;缩显存窗口不能覆盖所有主机锁页失败 |
| 已有模型运行或端口占用 | 关闭原模型,或修改 设置.ini 的 PORT |
启动器只处理它识别的容量报错,不能保证所有分配失败都自动恢复。输入很长的材料时,也需要考虑长文召回范围。
.part 文件会继续下载。patch 目录;现成的转换后模型可以继续使用。接入信息.txt 填写;思考也占输出预算。cmd,再运行 启动.bat 查看具体错误。引擎日志在包内 logs 目录。分享错误信息时,去掉 API Key 等私人信息。
DLL 缺失、KV 容量曲线越界或首次显卡校准失败时,见启动错误与处理。
代码许可与模型许可分别适用。Swift 1.5 引擎代码的 Apache-2.0 文本见 swift15/LICENSE,源文件保留上游许可证和贡献者信息。