文件: ~/.hermes/hermes-agent/agent/model_metadata.py
第130-131行 — 最小上下文限制(低于此拒绝)
MINIMUM_CONTEXT_LENGTH = 32_768
改配置文件没用,最小上下文限制在源码中被硬编码了,改这个就可以了。我这是改过的,没改之前是64000。
文件: ~/.hermes/hermes-agent/agent/model_metadata.py
第130-131行 — 最小上下文限制(低于此拒绝)
MINIMUM_CONTEXT_LENGTH = 32_768
改配置文件没用,最小上下文限制在源码中被硬编码了,改这个就可以了。我这是改过的,没改之前是64000。
@nami-ryuu 你可以让dsh帮你检查配置,调优有问题的话,把这个贴子丢给它,然后让它调优。
Strata 0.1.27 · ROCm 10.0 · 256K 上下文 · 1K~256K 八档实测 + hipBLASLt Prefill 调优
| 项目 | 配置 |
|---|---|
| GPU | AMD RX 7900 XTX 24GB(RDNA3 / gfx1100) |
| 后端 | ROCm 10.0,HIP 本地编译 |
| CPU | Xeon E5-2678 v3,12 核 24 线程(无 AVX-512) |
| 内存 | 64GB DDR3(X99 D3 主板) |
| 系统 | Ubuntu 24.04.4 LTS |
| 模型 | Qwen3.8-Flash-Next 125B MoE / Swift 1.5 微调 / IQ3_XXS 量化 |
| 引擎 | Strata 0.1.27(local-hip,gfx1100) |
启动脚本:
#!/bin/sh
cd "~/Strata-main"
exec ".venv/bin/python" "serve/server.py" --engine strata \
"--config" "strata-swift-iq3_xxs.json" "--port" "8080" "--open"
引擎参数(strata-swift-iq3_xxs.json):
{
"exe": "~/Strata-main/engine/strata",
"args": [
"--pack", "~/Strata-data/packs/swift-iq3_xxs",
"--native", "~/Strata-data/models/swift-IQ3_XXS/Swift-....gguf",
"--ple-gguf", "~/Strata-data/models/swift-IQ3_XXS/Swift-....gguf",
"--expert-profile", "~/Strata-main/data/expert-profile.bin",
"--expert-cache", "auto",
"--prefill", "auto",
"--spec", "4",
"--spec-min-p", "0.5",
"--mtp", "~/Strata-data/mtp/rt",
"--max-context", "262144",
"--kv", "int8"
],
"port": 8080,
"backend": "hip",
"api_key": "<你的 API key>",
"env": {
"STRATA_HIPBLASLT_TUNING": "~/Strata-main/tools/hip/gfx1100-hipblaslt-100401.txt"
}
}
| 参数 | 作用 |
|---|---|
--expert-cache auto |
热专家驻 VRAM,其余留 RAM 由 CPU 算 |
--prefill auto |
自动选 prompt 分块(本机 8192 token) |
--spec 4 + --mtp |
MTP 投机解码,每轮最多草拟 4 token |
--max-context 262144 |
256K 上下文 |
--kv int8 |
KV 用 int8,比 fp16 省一半显存 |
方法:每档用全新随机 prompt(cache_n=0,真全量 prefill),固定生成 256 token,temperature=0,顺序执行。
| 上下文 | Prefill (tok/s) | Decode (tok/s) | 草稿接受率 |
|---|---|---|---|
| 1K | 555 | 67.1 | 95% |
| 4K | 1,139 | 83.0 | 98% |
| 8K | 1,453 | 82.7 | 91% |
| 16K | 1,568 | 83.6 | 93% |
| 32K | 1,602 | 48.8 | 58% |
| 64K | 1,559 | 63.9 | 82% |
| 128K | 1,442 | 52.3 | 65% |
| 256K | 1,258 | 47.7 | 54% |
同配置跑两遍,prefill 偏差仅 ±0.2%(最大 1.9%),decode 偏差 ±1.4%。
上面的 prefill 不是开箱就有的。 官方调优表版本是 100200,本机 hipBLASLt 是 100401,版本不等 → 引擎静默回退 hipBLASEx:
prefill gemm: hipBLASLt version mismatch: file=100200 runtime=100401; using hipBLASEx
用项目自带的 tools/hip/tune_hipblaslt.cpp 重新调优,三次迭代:
| 迭代 | 做法 | Prefill | vs 基线 |
|---|---|---|---|
| 基线 | 回退 hipBLASEx | 743 tok/s | — |
| 1 | 用调优器默认形状(仅 3 个) | 835 tok/s | +12.4% |
| 2 | 提取原表全部形状(15 个) | 1,179 tok/s | +58.7% |
| 3 | VERBOSE=1 诊断真实负载,补 2 个盲区形状 |
回退率 55.1% → 0% | 表扩到 34 行 |
三个关键点:
STRATA_HIPBLASLT_VERBOSE=1 才发现仍有 55.1% 的调用在回退,根因只是 f16 N=1280 K=2560(出现 528 次)等两个盲区形状。dtype/N/K/ldy 四项必须全等(只有 token 桶做最近邻),所以差一个维度就完全回退——必须用真实负载复查覆盖率。调优表不与模型绑定,只绑「GPU 架构 + hipBLASLt 版本」,所以换模型直接沿用,不用重调。
decode 几乎不受影响(+2.8%):hipBLASLt 优化的是大 M 的 prefill,decode 瓶颈在专家路由与显存带宽。
1. Decode 在 32K 处有断崖,是因为 MTP 草稿窗口默认只有 32K
16K 时 83.6 tok/s,32K 掉到 48.8,接受率从 93% 崩到 58%。原因是草稿层默认只看最后 32,768 个 cell,超出后"看不见"开头,草拟质量下降。
加 --mtp-window 65536 复测:
| 上下文 | 默认 32K 窗口 | 64K 窗口 | 提升 |
|---|---|---|---|
| 32K | 48.8 | 64.5 | +32% |
| 128K | 52.3 | 54.3 | +4% |
| 256K | 47.7 | 50.9 | +7% |
显存代价几乎为零(MTP 层 +13 MiB,专家缓存 −10 槽位)。
2. 上下文翻倍会吃掉专家缓存
从 128K 改到 256K,KV 从 1.55 → 3.10 GiB,这部分直接从专家缓存扣:10,198 → 9,026 槽位(−11.5%)。后果是短 prompt 变慢(1K 档 prefill −25%),因为少掉的专家得让 CPU 算。
一张 24GB 消费卡 + 64GB DDR3,跑 125B MoE:短上下文 83 tok/s、256K 长上下文仍有 47–64 tok/s,读 prompt 峰值 1,602 tok/s。
两个最值得动手的优化:
--mtp-window 65536:长上下文 decode 白赚 7–32%,显存几乎零成本VERBOSE=1 复查覆盖率,否则会漏掉一半以上的回退实测环境:Ubuntu 24.04.4 / RX 7900 XTX 24GB / Xeon E5-2678 v3 / 64GB DDR3 / ROCm 10.0 / Strata 0.1.27 (HIP)
参考:Strata(MIT,github.com/Niko1221/Strata)· Qwen/Qwen3.8-Flash-Next · ISTA-DASLab GSQ-RCO GGUF