84GB 的模型跑在 16GB 显存上:两组「显存不够内存凑」的实验
作者:陈一帆
同一位博主连发两帖:12GB 的 RTX 3060 跑 Qwen3.8-35B-A3B,自述生成约 50 tok/s;另一张 16GB 的 RTX 5060 Ti 托起约 84GB 的 Qwen3.8-Flash-Next。MoE 省的是算力不是显存,真正让模型装下的是量化加 CPU/GPU 混合推理——老显卡确实多了一条路,但数字都还只是自述。
书桌放不下的书,先搁旁边的架子,要用时起身去取——慢一点,但每本都用得上。最近一位博主连着发了两帖 ,把这套生活经验搬到了本地大模型上:一张 12GB 显存的 RTX 3060 跑起了 35B 参数级的模型;二十来分钟后,他又用一张 16GB 显存的 RTX 5060 Ti,托住了一个约 84GB 的模型。
先把配置摊开。第一帖是 RTX 3060 12GB 加 16GB 系统内存,模型写作 Qwen3.8-35B-A3B,Q4_K_M 四比特 GGUF 量化,llama.cpp 运行,把 26 个 MoE 层交给 CPU,同时开 Flash Attention 和 Q8 KV cache。博主自述生成约 50 tok/s、读提示约 550 tok/s,上下文配到 262K 。
这两个数字得拆开看,不然容易高估体验。550 tok/s 是 prefill,模型「读」你输入的那段文字有多快;50 tok/s 是 decode,它一个字一个字往外「写」有多快。读书快不等于写字快,聊天时真正影响手感的是后者。
35B 怎么挤进 12GB?靠 MoE 的稀疏激活。模型总参数约 35B,但每处理一个 token 只激活约 3B。像一个三十多人的专家组,每来一个需求只点名三五个人上手,活儿出得快,可整套人马都得在编、随时能叫到。所以稀疏激活省的是算力,不是显存——全部权重仍然得能被访问到 。
显存里放不下的部分,靠另外三样东西腾地方:四比特量化把权重从「逐字抄写」压成「摘要笔记」;Flash Attention 少搬中间结果;KV cache 用 8 比特存放对话记忆。这样还剩 26 层装不下,就整层下放到 CPU,用系统内存兜着 。
这算一种粗颗粒的分工:按层切,切在哪儿是启动配置里定死的。第二帖换了个做法:模型 Qwen3.8-Flash-Next,IQ3_S 三比特量化,约 84GB;卡是 RTX 5060 Ti 16GB,系统内存 64GB,引擎是 Strata v0.1.41。权重分成两拨,一拨常驻显存,另一拨留在内存,算到哪块调哪块 。博主称生成期间没观察到 SSD 读取——也就是没退回到「每次现去仓库取货」的最慢一条路。
注意「没读盘」不等于「没搬数据」。权重仍要在内存和显存之间来回走,通常走 PCIe。内存的带宽和延迟都比显存本地访问差一截,搬运本身还占时间。所以混合推理像是绕开了一道墙,同时迎面撞上另一道:装得下了,但每一步都可能被这条走廊卡住。速度最终取决于内存带宽、PCIe 世代、上下文长度、KV cache 占用和引擎自身开销 。
两帖的差别也有意思:第一帖是「按层分包」,靠 16GB 内存硬扛,属于 llama.cpp 里比较成熟的 offload 玩法;第二帖是「按权重块调度」,内存给到 64GB,宽裕得多。共同点更值得记住——显存不再是模型体量的绝对上限。
对普通玩家来说,这件事的实际意义挺直接。一张几年前的 12GB 卡,加上够用的内存条,就能摸到过去得几张卡才碰得到的模型;GGUF、llama.cpp 这类工具链是公开的,配置也有人贴出来,自己动手能复现。这是已经实现的部分,不用等发布会。
但边界得说清楚,而且不算小。两个帖子出自同一位博主,前后隔二十来分钟,本质是一组连续实验,不是两个互相独立的来源;也还没有第三方复现,所以那些速度数字目前只能当自述看。模型名称是否对应官方权重、量化文件由谁制作、Strata v0.1.41 是什么来路,帖子里都没交代。三比特量化对回答质量的影响,只有「有取舍」这类定性说法,缺代码和推理任务的评测。262K 上下文在 12GB 加 16GB 这个组合下实际能吃多少,KV cache 占多少显存和内存,没有给数;「没观察到 SSD 读取」用的什么监测手段,也没写。
想自己试,三个动作比较实在:先算权重的实际体积,跟显存加内存的总和比一比,给 KV cache、激活值和运行时留出余量;选一个明确支持 CPU/GPU offload 的引擎;跑起来时盯着磁盘活动,别让它在后台悄悄从盘上读权重。
显存这堵墙上确实开了道缝。缝里能塞多大的模型、用起来顺不顺手,取决于你的内存容量、主板通道,以及愿不愿意等那几秒。我对此是乐观的,但结论最好自己跑一遍再下。
转载说明
本文根据以下公开资料整理,原文及配图出处见下方。
评论 0
还没有评论,来抢沙发。