两张 RTX 3080 跑 94GB 大模型:Strata + Qwen3.8-Flash-Next 实机一个月没有 4090,也没有 H100。一台 128GB 内存的旧服务器,两张 20G 显存的改卡 3080,我让它跑起了一个 94GB 的开源大模型,给我自建的 AI 助手当推理后端,出字速度每秒 60 个 token 上下。下面是完整的部署记录和使用感受。先把预期说清楚:文中的数字都来自安装和试运行期间的引擎日志,是我没有专门跑分、日常负载自然攒出来的统计。它反映的是真实体感,不是极限成绩,这两回事我分得清,也希望大家看的时候心里有数。
一、为什么要折腾这件事开源大模型这两年变了两个地方。一个是旗舰模型基本都改成了 MoE 架构:模型总参数很大,但每次推理只激活其中一小部分专家,算力要求降下来了,内存要求却一路上天。另一个是 unsloth 这些量化团队把 GGUF 量化做到了很接近原型的可用度,llama.cpp 生态也早就玩熟了"专家权重放内存、按需换进显存"这条路。
两个变化叠在一起,跑大模型的瓶颈就从显存挪到了内存容量和 PCIe 调度效率上。而内存这东西便宜。我整套方案的底气就在这。
Strata 是踩这个风口出来的新引擎,GitHub 开源,最近一个月社区里讨论很多,主打的就是针对 MoE 的内存层级推理:不活跃的专家锁在内存里,配合 MTP 推测解码,让消费级多卡也喂得动几十上百 GB 的模型。我想给它找个正经用途:我给自己搭的 AI 助手(Hermes Agent)一直缺一个私有、不限量、不看任何厂商脸色的推理后端。顺便也想验证一个具体问题:
两张 20G 显存的 3080,128G 内存,跑 94GB 的 MoE 模型,日常用起来到底卡不卡?
二、机器和模型,钱花在哪机器是台 EPYC 老服务器改的工作机,没有任何为 AI 做的专项投入:
部件
配置
对跑模型意味着什么
GPU
2 × RTX 3080 20G(改)
权重和 KV cache 常驻显存,真正的瓶颈
CPU
AMD EPYC 7502,64 线程
参与专家调度预取,够用
内存
128 GB(系统可用约 125 GiB)
锁页放 MoE 专家权重,实测占 38.7G 左右
磁盘
NVMe SSD,存 94G 模型文件
配合系统页缓存,稳态后基本不再读盘
系统
Ubuntu + Docker + NVIDIA Container Toolkit
全程容器化,宿主机不留东西
模型选的 Qwen3.8-Flash-Next 的 UD-IQ4_XS 量化版,GGUF 格式,三个分片加起来 94GB 左右。这是 unsloth 的 Unsloth Dynamic 量化,在 IQ4_XS 基础上逐层调整了比特分配,官方评测里是这个尺寸档的质量上限。同系列还有 IQ2_XS(约 66GB,换速度)和 IQ3_S(约 76GB,图个平衡),我质量优先,直接上了最大的。
Strata 官方对 UD 系列的建议是内存 48GB 起步、80GB 以上舒服,我这 128G 属于不奢侈但也不紧张。GPU 那边不用操心,Strata 自动做层拆分,两张卡按层数比例切模型,一行手动分配都不用写。
三、部署:一个容器的事部署我坚持全容器化,宿主机上除了模型文件什么都不留。流程四步:
1. 克隆 Strata 仓库,docker build 时用 --build-arg CUDA_ARCHITECTURES=86 指定 RTX 30 系架构,纯 CPU 编译,半小时左右;
2. 从 ModelScope 下载三个 GGUF 分片和 MTP 推测解码层,扔进挂载目录;
3. docker run 起容器,映射 8080 端口;
4. 起来之后对外就是标准 OpenAI 兼容 API,任何客户端改个 base_url 就能接。
启动命令的核心部分长这样,内网地址之类的敏感信息我拿掉了:
docker run -d --name strata --gpus all -p 8080:8080 \ --ulimit memlock=-1 --stop-timeout 60 \ -v /data/strata-models:/data \ -e MODEL=UD-IQ4_XS -e FAMILY=unsloth -e GGUF_DIR=/data \ -e STRATA_SOURCE=modelscope -e GPUS=all -e CONTEXT=262144 \ strata
有几个参数不能省,省了就是给自己埋雷。--ulimit memlock=-1 是必须的,Strata 要把专家权重锁页进内存,不给权限它直接起不来。--stop-timeout 60 也是,容器退出时要时间释放锁定内存,默认那 10 秒等不到,SIGKILL 伺候,连日志都来不及落盘。-e GPUS=all 这个最阴,不加它双卡只当单卡用,官方文档里藏得很深,我是实测才撞出来的。还有 -e STRATA_SOURCE=modelscope:MTP 那层默认从海外源下载,国内网络会卡死在启动阶段。缺 MTP 不是不能跑,但输出速度大概要砍一半。
最终跑起来的配置:256K 上下文,KV cache 用 int8 量化,batch 2,视觉模块开着。两张卡的显存占用:
图 1:层拆分后双卡显存占用。97% 是常态,这套方案先见底的从来不是内存,是显存。
四、实际跑起来什么感受再强调一遍,下面所有数字都是从引擎自己的日志里(strata serve 那些行)抄的,产生于安装试运行期间的真实使用,不是基准测试。看的是日常体感。
图 2:五个场景的实测吞吐,对数刻度。最右边那根,缓存命中时 444 个 token 读取耗时不到 1 毫秒。
出字速度在 47 到 68 tokens/s 之间晃,约合每分钟三四千字。多数云 API 的流式输出也就 20 到 80 这个区间,所以这台旧机器的体感不输云端,这是我当初最没底的一件事。对话历史堆到接近 20 万 token 时会掉到 47 左右,正常衰减,能接受。
冷 prefill 大概 2400 tokens/s,日志里一次 2.3 万 token 的全新提示,9.5 秒读完。Agent 类应用最吃这个指标,因为动辄整篇文档往里灌,这个速度够用。缓存命中则基本白送:有一次 444 个 token 的提示复用了 443 个,读取耗时 0 毫秒。多轮对话历史越长,边际成本越低,这个设计对聊天场景很友好。
MTP 草稿接受率 68% 到 72%,比官方文档给的 60% 到 67% 参考值还高点。解码能稳在 60 以上,推测解码功劳最大。
最有意思的是专家缓存命中率。刚启动只有 70%,也就是三成专家访问要走 PCIe 慢路径,这时候确实能感觉到慢。跑久了热专家集稳定下来,命中率一路爬到 93%:
图 3:命中率随运行时长爬升。满负载 44.6 万次路由统计下命中率 93%,PCIe 慢路径只剩 4.5%。
所以这套系统有个反直觉的地方:越用越快。日志里有行输出我特别喜欢,0 blob reads from the file,意思是稳态下那 94GB 模型文件一次盘都不用读,全靠内存页缓存兜着。SSD 快不快?冷启动搬完那一次之后就没它什么事了。
整个数据流画出来是这样:
图 4:显存放权重和 KV cache,内存锁页放专家权重,PCIe 只承担 4.5% 的换入流量。
五、四个坑,官方文档帮不上忙的部署加调优前后折腾了两周。四个坑,官方文档要么没写要么写错,挨个说。
REINSTALL=1 这个环境变量,官方文档说它重跑 setup 时会保留你手动加的配置键。我实测两次,不成立。手动加的并发数、采样内核开关、循环恢复配置,全被清空,一次不剩。后来想明白了,这玩意儿就是修引擎时才碰的一次性工具,稳定之后必须从启动脚本里删掉,不然每次开机都在悄悄重置你的调优,你还纳闷昨天明明快一些。
图片识别功能启用后一切正常,我以为这块过了。直到某天 docker rm 重建容器,直接崩溃循环。,直到某天 docker rm 重建容器,直接崩溃循环。查下去才发现,strata-vision 这个 73MB 的二进制是 setup 现场编译进容器可写层的,镜像里根本没有,容器一删它就没了,偏偏配置文件里的 vision 段还在,于是每次启动都找一个不存在的文件。解法不难:vision 验证通过后立刻 docker cp 把它救到挂载盘,配置改指挂载路径。道理我一行字写完了,代价是重建了一次容器。
下模型的时候会发现,ModelScope 的 resolve 链接不是直链。用 curl 直接下,拿回来经常是个 HTML 页面而不是 50GB 的模型文件,下载完校验哈希才会发现。要么浏览器手动下,要么让 Strata 内置下载器走 STRATA_SOURCE=modelscope。另外模型分片必须放在挂载目录根下,塞子目录里引擎按文件名模式匹配不到,报错还不明显。
还有个网络问题绕不开。容器里访问不了 GitHub,不代表宿主机能访问,bridge 网络下容器的 DNS 行为和宿主机不一样。构建镜像时从 GitHub 拉 llama.cpp 源码会静默失败,日志还被吞了,看着构建成功其实引擎是空的。所以构建完别急着跑,先进容器 ls 一下引擎目录,二进制真在里面才算数。不在,就预构建包或者 REINSTALL 补编译。
六、值不值算笔账。这套显存加内存,二手市场下来大约是中重度 API 订阅两三个月的钱,换来的是数据不出内网、不限 token、256K 上下文随便造。我的 Agent、WebUI、RAG 知识库三个应用还能共享同一个模型实例。我这种整篇整篇喂文档的用法,放云上计费早就没法看了,本地部署是唯一经济的选择。
代价这边也别装看不见。首 token 延迟比云 API 高,冷 prefill 2400 tok/s,灌一份 5 万 token 的文档要干等 20 秒,云端大集群还是快。显存 97% 是常态,别想再开第二个大模型;上下文想上 512K,先给 KV cache 腾地方去。越用越快还有另一面:冷启动后头半小时偏慢。一天就打几个请求的话,这套对你不划算。运维成本也是真的。前面那个 vision 的坑,某天重启之后模型突然看不见图,排查花了小半个晚上。
要说适合谁,我觉得首先是手里压着 100G 以上内存和双消费卡的折腾党。对数据隐私敏感、需要私有推理的小团队也算一类。至于想搞明白 MoE 推理到底在搬运什么的人,这套系统大概比任何课件都直观,每行 cache hit rate 都是活的体系结构教材。
一个月用下来,Qwen3.8-Flash-Next 这个级别的开源模型,配上 Strata 这类为新硬件形态优化的引擎,消费级显卡加一条大内存,已经是可以日常干活的选择。它毛病不少:冷启动慢,显存见底,文档有坑。但每秒 60 个 token 的稳定输出、93% 的专家缓存命中,更重要的是数据始终在自己机器上。冲最后这一条,我折腾这半个月就不算白费。
下一个UD量化版本出来,我大概率还会把这套流程再走一遍。到时候再写。