2026-04-17 AI扫盲系列——3080 20G魔改卡本地大模型的“甜点”之选

2026-04-17 AI扫盲系列——3080 20G魔改卡本地大模型的“甜点”之选

硬件介绍

总结:3020 20G单卡运行大模型甜点之选,功能多样可大模型、AI绘画、玩游戏,榨干它的性能,后续目标是升级3090 24G后进行对比测试,在往后边际成本剧增,边际性能递减,本地娱乐就不做尝试了

想要本地运行大模型,首先显卡是必须的,经过一番搜寻,发现市场上3080 20G(魔改)性价比最高,同时也关注了2080ti 22G(魔改)、V100、3090 24G等显卡,基本对比如下

特性RTX 2080 Ti 22G (魔改版)Tesla V100 16GB/32GB (PCIe版)RTX 3080 20G (魔改版)RTX 3090 24G
架构Turing (TU102)Volta (GV100)Ampere (GA102-200)Ampere (GA102)
制程工艺12nm12nm8nm (三星)8nm
CUDA 核心数43525120870410496
Tensor 核心数544640272 (估算)328
显存规格22 GB GDDR616⁄32 GB HBM220 GB GDDR6X24 GB GDDR6X
显存位宽352-bit4096-bit320-bit384-bit
显存带宽~616 GB/s900 GB/s~760 GB/s936 GB/s
单精度 (FP32)~13.4 TFLOPS14 TFLOPS~29.8 TFLOPS35.6 TFLOPS
双精度 (FP64)~0.42 TFLOPS (1⁄32)7 TFLOPS~0.93 TFLOPS (1⁄32)约 1.11 TFLOPS (1⁄32)
AI算力 (FP16)约 108 TFLOPS112 TFLOPS (Tensor Core)约 119 TFLOPS (Tensor Core)约 142 TFLOPS (Tensor Core)
Flash Attention❌ 不支持❌ 不支持✅ 支持✅ 支持
bf16 支持❌ 不支持❌ 不支持✅ 支持✅ 支持
典型功耗 (TDP)~250-300W250W (PCIe版)320W350W
市场定位魔改消费级数据中心/专业计算魔改消费级消费级旗舰
显存ECC不支持支持 (16/32GB版)不支持不支持
NVLink支持支持不支持支持
  • 2080 Ti 22G 魔改卡,市场价约2200元。采用较老的 Turing 架构,不支持 Flash Attention 和 bf16 精度。相比3080 20G 仅多出2GB显存,但因缺乏显存优化技术,实际大模型表现反而不如后者,多出的2GB意义有限,但是如果是nvlink组装多卡,凭借大显存低成本也有一席之地
  • V100 16G 裸卡二手约700元,但需额外购买专用改装散热、显卡坞及电源,或者购买全套组装好的(1400~1600元),。显存带宽三者最高(900GB/s),支持NVLink。买两套可组32G显存的双卡系统(需主板支持PCIe Switch或NVLink)。缺点是:Volta架构老旧,不支持Flash Attention和bf16;待机功耗高达40-50W/卡,双卡待机近100W;整套改装套件为V100定制,一旦损坏无法通用,且占用空间大。看似性价比高,但隐性成本和风险不容忽视。
  • 3080 20G 魔改卡,市场价3000-3200元。Ampere架构,支持Flash Attention和bf16精度,待机功耗仅8-18W。缺点是显存容量较小(20GB)
  • 3090 24G 消费级旗舰,市场价5000~6000元,和3080一样,Ampere架构,支持Flash Attention和bf16精度,可以组NVlink,多卡必须,缺点是比3080性能高出20%,但是价格增加近50%,边际成本太高,

单卡情况下,3080性价比最高,因此本篇重点测试3080 20G的情况

多卡情况下,要么选择2080ti或V100(不支持Flash Attention,算力有限,功耗高,占空间),要么选择3090 24G(边际成本进一步倍增)

可见老黄刀法精准,既要又要还要,加钱可达


Flash Attention介绍:解决注意力机制的“内存墙”与速度瓶颈

Transformer 模型的核心是注意力(Attention)机制,但它有一个著名的“平方级复杂度”(O(n²))问题,当处理长序列时,会消耗海量内存和计算时间。而Flash Attention 的出现,就是为了解决这个根本性的瓶颈。把复杂度从O(n²)变成O(n)

核心思想是减少对GPU显存中较慢部分(HBM)的读写次数,让计算在更快的片上缓存(SRAM)中完成。

  • 分块处理 (Tiling) :它将庞大的注意力矩阵分解成能放入高速SRAM的小块进行计算。
  • 算子融合 (Kernel Fusion) :它将后续的“归一化”操作融合进一个计算核心,省去了读写中间结果的步骤,大幅减少数据搬运。
  • 重计算 (Recomputation) :在反向传播时,它不保存巨大的中间矩阵,而是用计算力换空间,在需要时重新计算必要的数据。

它能带来什么好处?

  • 巨大的性能提升:相比标准注意力,Flash Attention 可实现 2-4 倍的加速和 10-20 倍的显存节省。
  • 支持超长上下文:它能使模型高效处理数万乃至数十万个token的序列,这是处理大型文档或长视频的关键。
  • 社区广泛采用:它已成为PyTorch等主流框架和LLaMA、GPT-NeoX等主流模型的标配优化组件。

Flash Attention 依赖新一代GPU的指令集和计算能力。它需要 Ampere架构(如A100、RTX 30系列)或更新的Hopper、Ada架构来获得最佳性能。

3080 20G使用评测

直接上结论与实际使用体验,非完整专业测试,仅供参考

LLM大语言模型评测

概念介绍

“pp512”和“tg128”确实是 llama-bench 的默认设置。这个选择不是随意的,而是业界为了方便对比,在速度与实用性之间找到的一个平衡点。这个标准很大程度上源于早期经典的 Llama 2 7B Q4_0 模型。在它流行时,社区普遍将其作为性能测试的“校准器”,512128 这两个长度也由此成为社区事实上的标准。llama.cpp 选择这个“标准”作为默认值,能确保新设备、新优化得到与大量历史数据一致的评估,便于社区比较。

| 缩写 | 全称 | 含义 | | | | PP | Prompt Processing | 模型读取并理解输入提示(Prompt)所花费的工作量。这个阶段可以并行处理,速度通常很快。 | | |

TGText Generation模型逐个生成回复 Token 的过程。这个阶段是串行的,速度相对较慢,直接影响用户感知到的“打字速度”。

这两个值在速度和实用性之间取得了良好的平衡,具体对应如下:

pp512:轻量至中等的提示长度

  • 真实场景:512个token(约350-400个英文单词),足够覆盖大部分日常对话、简单问题或短篇文档摘要的上下文。这对于重新处理整个对话历史(Conversation replay)成本较高的场景是一个很好的性能参考点。
  • 性能参考:在处理这种长度的提示时,内存带宽是关键限制因素。一个参考值是,在消费级CPU上,pp512 的速度通常在 15-60 token/s 之间。

tg128:简练的回复长度

  • 真实场景:128个token约等于一句话到两句话的回复。这个长度的回复生成非常快,能够很好地衡量模型在理想条件下的“峰值”生成能力。
  • 性能参考:这个指标直接反映了硬件内存带宽的上限。一个参考值是,在消费级CPU上,tg128 的速度通常在 2-10 token/s 之间。

测试了主流的Q4_K_M或者Q5_K_M量化版本,测试主流的开源LLM模型,如Qwen、Mistral、Gemma等,采用llama-bench进行benchmark测试,提梯度降低功耗分别进行bechmark

不限制功耗 (最高320W)

模型文件名参数量权重大小PP512 (tok/s)TG128 (tok/s)显存占用显卡功耗显卡温度
capybarahermes-2.5-mistral-7b.Q5_K_M.gguf7B4.8G39621115.3G319W47°C
Mistral-7B-Instruct-v0.3-Q5_K_M.gguf7B4.8G39591115.3G319W47°C
Qwen3-8B-Q4_K_M.gguf8B4.7G38651134.8G319W45°C
qwen2.5-coder-14b-instruct-q5_0.gguf14B9.6G2169609.8G319W46°C
Mistral-Small-22B-ArliAI-RPMax-v1.1-Q4_K_M.gguf22B13G14094413G319W47°C
supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf26B16G337914216.7G314W45°C
Qwen3.5-27B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf27B16G11293415.6G318W46°C
Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf30B18G278117017.9G318W46°C
GLM-4.7-Flash-Q4_K_M.gguf30B18G268712217G317W47°C
gemma-4-31B-it-Q4_K_M.gguf31B18G10443118G319W49°C

功耗锁定 200W

模型文件名参数量权重大小PP512 (tok/s)TG128 (tok/s)显存占用显卡功耗显卡温度
capybarahermes-2.5-mistral-7b.Q5_K_M.gguf7B4.8G3008825.3G199W41°C
Mistral-7B-Instruct-v0.3-Q5_K_M.gguf7B4.8G3004825.3G199W40°C
Qwen3-8B-Q4_K_M.gguf8B4.7G3013854.8G199W41°C
qwen2.5-coder-14b-instruct-q5_0.gguf14B9.6G1633449.8G199W42°C
Mistral-Small-22B-ArliAI-RPMax-v1.1-Q4_K_M.gguf22B13G10463013G199W42°C
supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf26B16G275712216.7G199W41°C
Qwen3.5-27B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf27B16G8562515.6G199W42°C
Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf30B18G231714817.9G199W42°C
GLM-4.7-Flash-Q4_K_M.gguf30B18G220610617G199W42°C
gemma-4-31B-it-Q4_K_M.gguf31B18G7612218G199W43°C

功耗锁定 240W

模型文件名参数量权重大小PP512 (tok/s)TG128 (tok/s)显存占用显卡功耗显卡温度
capybarahermes-2.5-mistral-7b.Q5_K_M.gguf7B4.8G35231055.3G239W42°C
Mistral-7B-Instruct-v0.3-Q5_K_M.gguf7B4.8G35171055.3G239W42°C
Qwen3-8B-Q4_K_M.gguf8B4.7G34621054.8G239W42°C
qwen2.5-coder-14b-instruct-q5_0.gguf14B9.6G1910579.8G239W43°C
Mistral-Small-22B-ArliAI-RPMax-v1.1-Q4_K_M.gguf22B13G12354113G239W43°C
supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf26B16G306913216.7G239W44°C
Qwen3.5-27B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf27B16G9943215.6G239W44°C
Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf30B18G254615917.9G239W43°C
GLM-4.7-Flash-Q4_K_M.gguf30B18G244911417G239W44°C
gemma-4-31B-it-Q4_K_M.gguf31B18G9123018G239W44°C

功耗锁定 290W

模型文件名参数量权重大小PP512 (tok/s)TG128 (tok/s)显存占用显卡功耗显卡温度
capybarahermes-2.5-mistral-7b.Q5_K_M.gguf7B4.8G38481105.3G289W44°C
Mistral-7B-Instruct-v0.3-Q5_K_M.gguf7B4.8G38361105.3G289W45°C
Qwen3-8B-Q4_K_M.gguf8B4.7G37391114.8G289W46°C
qwen2.5-coder-14b-instruct-q5_0.gguf14B9.6G2092599.8G289W48°C
Mistral-Small-22B-ArliAI-RPMax-v1.1-Q4_K_M.gguf22B13G13604413G289W44°C
supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf26B16G329313916.7G289W47°C
Qwen3.5-27B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf27B16G10883415.6G289W48°C
Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf30B18G271316817.9G289W48°C
GLM-4.7-Flash-Q4_K_M.gguf30B18G262412017G289W48°C
gemma-4-31B-it-Q4_K_M.gguf31B18G10073118G289W49°C

大模型使用体验

  • capybarahermes-2.5-mistral-7b.Q5_K_M.gguf:7B里面性价比的选择,认准mistral 7B就行,量化可以选择Q4 或 Q5(显存稍微宽松一点情况下),差别不大,mistral 7B和别家14B的体验相当,能正常回答问题,聊天也比较顺畅,不会出现一直循环输出相同内容的情况(其他7B模型可能会,使用体验类似一个智障)而且输出速度非常快,100+ tok/s,默认不带思考模式,适合聊天,总结,续写小说,思维比较发散,智力一般,不适合推理
  • Mistral-7B-Instruct-v0.3-Q5_K_M.gguf:同上
  • Qwen3-8B-Q4_K_M.gguf:默认带思考模式,表现中规中矩,是一个合格的7B模型,推理较mistral 7B强,数学能力比mistral 7B,输出速度非常快
  • qwen2.5-coder-14b-instruct-q5_0.gguf:比7B、8B智力高,适合简单的编码任务,输出50+ tok/s,较快
  • Mistral-Small-22B-ArliAI-RPMax-v1.1-Q4_K_M.gguf:Mistral 7B的升级版本,实际体验不太行,智力不如7B,在智力测试问题中全是在乱回答,例如问9.11 和 9.9 哪个大,它说9.11大,问1公斤棉花和1公斤铁谁更重,它说棉花重,妥妥的智障,mistral系列不太适合编码或逻辑推理类,适合写作、总结、续写等
  • supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf:gemma系列,google出品,非常顶,智力很高,能达到生产力水平,uncensored不带审查能回答任何问题,fast表示输出速度快,日常主力模型,如果问题比较复杂会自动进入思考模式,并且是多模态模型,七八轮对话后内存可以使用到12G~17G,猜测可能是KVCache,但是不影响模型的输出速度,总之非常顶
  • Qwen3.5-27B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf:思考链会很长,能力不错,但是输出速度较慢,另外还有一个适用于代码场景蒸馏了Claude的版本Jackrong_Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-v2-GGUF,这个版本很轻松的在Cline上安装好了git的MCPServer(我试了很多其他模型,7B、8B、14B都有,安装失败或要反复思考后才能安装),这个模型一次性就安装好了,具备生产力
  • Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf:主要受限于硬件限制,能装载到20G显存里面,虽然输出速度非常快,但是上下文很短,可用性不足
  • GLM-4.7-Flash-Q4_K_M.gguf:体验不太行,输出速度倒是挺快,但是思考或回答问题的过程中经常循环输出相同的内容,抽风了似的
  • gemma-4-31B-it-Q4_K_M.gguf:和Qwen3 Coder 30B类似,主要受限于硬件限制,能装载到20G显存里面,但是上下文很短,使用llama.cpp上下文指定2048左右,上下文太短,输出速度较慢,几乎不可用状态

基本测试方法论:

  • 载入一个模型后,首先让他介绍一下自己,一般来讲回答的越丰富越好
  • 文字能力基本测试,例如写一首五言绝句,写一首七言律诗,看模型如何表现,或者比较发散的问题“请模仿鲁迅先生冷峻、讽刺的笔调,写一段100字左右的文字,描写一个‘精致的利己主义者’在公共汽车上抢座位的场景。”
  • 简单代码测试,例如下面的问题,看模型输出的代码知识简单把命令包装了一下,还是会自定义一些变量便于指定,还是会给出多个方案供选择,另外会不会解释一下命令中具体参数的含义和给出详细的参考值,如果都没有,代码能力一般
llamarun() {  
   llama-server -m "$1" --host 0.0.0.0 --port 8080 -ngl 999 -b 512 --batch-size 512 --threads 16 --threads-batch 8 --rope-scaling none --mlock --no-mmap --temp 0.5 --repeat-penalty 1.1 --top-k 40 --top-p 0.95 -c 20480  
}
封装一下
  • 智力测试,给模型输入如下问题
你将参加一个逻辑与推理能力测试。

规则:

1. 一共有20题
2. 每题只需要给出最终答案
3. 不需要解释过程
4. 按题号依次回答
5. 每个答案单独一行
6. 不要输出任何额外内容

例如:

1. xxx
2. xxx

开始测试:

1. 9.11 和 9.9 哪个大
2. 一只蜗牛每天爬3米,晚上掉2米,10米深井需要几天爬出来
3. A比B高,B比C高,谁最高
4. 鸡兔同笼,头10个,脚28只,鸡多少只
5. 1公斤棉花和1公斤铁谁更重
6. A有3个苹果,B拿走1个,C又给A2个,现在A有多少
7. 5个人5分钟做5个零件,100个人100分钟做多少个零件
8. 如果昨天是明天的前一天,今天星期几
9. 有3个开关控制3个灯泡,只能进入房间一次,如何确定哪个开关控制哪个灯
10. 一个桶装满盐水10kg,倒掉一半再装满清水,重复三次,盐的浓度是多少
11. 美国总统能否同时担任加拿大总统
12. 如果一辆电动车向北行驶,风向南,烟往哪边飘
13. 一个人星期五去城里,住了三天,星期五回来,为什么
14. 3只猫3分钟抓3只老鼠,100只猫100分钟抓多少只老鼠
15. 一个医生给自己做手术合理吗
16. 一个房间有4个角,每个角一只猫,每只猫看到3只猫,房间里共有多少只猫
17. 10个人互相握手,每两个人握一次手,一共握多少次
18. 1+3+5+7+...+99 等于多少
19. 一张纸连续对折40次,大约有多厚
20. 有100层楼,只有2个鸡蛋,最少需要多少次测试能找到临界楼层

对照标准答案

1  9.9
2  8
3  A
4  6
5  一样重
6  4
7  2000
8  星期三
9  灯泡温度法
10  12.5%
11  不能
12  没有烟
13  马叫Friday
14  100
15  合理
16  4
17  45
18  2500
19  约10万公里
20  14

智力程度评测:

  • 15+ 很强
  • 12-15 合格
  • 8-12 一般
  • 很弱

功耗结论

通过对比以上四个功耗档位的数据,可以得出:核心结论:功耗甜点位于 240W - 290W 区间,这个区间是在性能、功耗、温度三者之间取得的最佳平衡点

240W是最佳甜点功耗,290W是性能上限,320W纯属浪费

对比项200W240W290W320W (默认)
性能表现基准 (100%)约 113-118%约 122-128%约 125-132%
显卡温度41-43°C42-44°C44-49°C45-49°C
功耗节省节省 120W节省 80W节省 30W基准
  1. 200W → 240W (+40W):性能提升最显著
  • PP512 (处理速度) :平均提升约 13-18% (例如7B模型从3000ms提升到3500ms左右)。
  • TG128 (生成速度) :平均提升约 20-28% (例如7B模型从82ms提升到105ms)。
  • 温度:仅上升约 1-2°C,影响极小。
  • 结论:这40W的投入回报率极高,强烈建议至少将功耗解锁到240W。


  1. 240W → 290W (+50W):性能提升边际递减
  • PP512:平均提升约 8-10%
  • TG128:平均提升约 4-8%
  • 温度:上升约 2-5°C,部分模型在290W时温度已接近49°C。
  • 结论:性能有提升,但不如上一个阶段明显,且温度开始攀升。如果追求更高的性能且散热条件不错,可以接受。


  1. 290W → 320W (+30W):性能提升微乎其微
  • PP512:平均提升仅 2-5%
  • TG128:提升几乎可以忽略不计 (例如22B模型的TG值仅从44ms降到44ms,30B模型从168ms降到170ms甚至出现波动)。
  • 温度:基本持平或略高1°C。
  • 结论:最后这30W功耗几乎完全转化成了热量,对实际推理速度的提升毫无帮助。不推荐跑在320W,这是能效比最差的区域。


  • 日常使用/追求静音凉爽:锁定 240W。这是最理想的甜点,性能释放充分(约95%的性能),同时温度能控制在45°C以下,功耗相比默认降低了25%。
  • 追求极致性能/跑分:可以解锁到 290W。能榨出最后约5%的性能,但需要接受更高的温度和风扇噪音。
  • 避免使用200W320W。前者性能损失过大,后者徒增功耗和热量,收益为零甚至为负(部分模型性能出现倒挂)。

AI绘画基本使用体验

整体体验如下,非本篇重点,后续会单独介绍

  • ComfyUI已是事实标准,足够方便,而且流程生图控制力更好
  • 3080 20G内存足够大,可以生成更大分辨率的图片,对比以前的4070TI 12G提升巨大,以前经常爆显
  • 支持中文了
  • 文字和手生成的问题得到了很好的优化

运行ComfyUI

# 一键运行
sudo docker run -d \
  --gpus all \
  -p 8188:8188 \
  -v /share/AI/ComfyUI/models:/comfyui/models \
  -v /share/AI/ComfyUI/output:/comfyui/output \
  --name comfyui-ext \
  ghcr.io/radiatingreverberations/comfyui-extensions:latest

找一个文生图模版,按照说明吧对应的模型文件下载好放入到指定目录

ComfyUI/
├── 📂 models/
│   ├── 📂 text_encoders/
│   │      └── qwen_3_4b.safetensors
│   ├── 📂 loras/
│   │      └── pixel_art_style_z_image_turbo.safetensors
│   ├── 📂 diffusion_models/
│   │      └── z_image_turbo_bf16.safetensors
│   └── 📂 vae/
│          └── ae.safetensors

提示词参考

**Role (角色设定)**
你是一位顶尖的动画电影与角色概念美术设计大师,尤其擅长为经典IP角色创作兼具官方设定严谨性与生活化细节的深度概念图。你拥有“生态化拆解”能力,能从一个核心场景(如合影)还原出角色的完整状态,包括着装细节、动态表情、随身物品,并想象出符合角色背景的私密物件与生活切片,让虚拟角色充满呼吸感。

**Task (任务目标)**
根据用户提供的“在电影院与《疯狂动物城2》朱迪警官合影”这一核心场景,生成一张 **“电影角色沉浸式体验概念分解图”** 。该图需以合影瞬间为视觉锚点,并环绕拆解出朱迪在此次影院宣传活动中的全套造型细节、不同互动表情、宣传专属道具,以及基于其兔子警官与都市生活者身份脑补出的私密与随身物品。

**Visual Guidelines (视觉规范)**

**1. 构图布局 (Layout):**
   - **中心位 (Center):** **影院合影动态场景**。绘制朱迪与粉丝(可简化为一束兴奋的闪光灯光效或模糊人影)在电影《疯狂动物城2》海报背板前的合影瞬间。朱迪身着本集新宣传制服,呈现友善、专业的合影姿态。
   - **环绕位 (Surroundings):** 在中心场景四周,有序排列从该场景中拆解出的朱迪个人元素。
   - **视觉引导 (Connectors):** 使用虚线箭头或胶片风格的引导线,将周边拆解物品与中心朱迪的对应部位连接(如连接口红到嘴部,连接包袋到手臂)。

**2. 拆解内容 (Deconstruction Details) —— 《疯狂动物城城2》宣传期特别版:**

   **服装分层 (Clothing Layers) [宣传制服特辑]:**
   - **外层:** 展示《疯狂动物城2》限量版宣传夹克,带有反光材质的“ZPD”徽标和电影logo绣章。拆解展示夹克的剪裁与防水面料细节。
   - **内层:** 脱下夹克后,展示更适合室内宣传活动的修身POLO衫或高领战术衫,领口有细小徽章。
   - **私密舒适层 (Intimate Apparel - 动物城适配版):** 鉴于角色是毛茸茸的兔子,展示为**特制透气内衬护毛紧身衣**(用于保持毛发整齐)和**符合脚型的柔性运动袜**,重点描绘其透气网眼结构和足底缓冲设计。

   **表情集 (Expression Sheet) [互动情绪四连]:**
   - 在角落绘制4个朱迪头部特写,展示其在影院活动中的情绪变化:
     1. **招牌露齿笑:** 面对镜头时的标准警官式灿烂笑容。
     2. **专注倾听:** 微微侧头,长耳竖起,聆听粉丝说话时的认真表情。
     3. **俏皮眨眼:** 与粉丝互动时,单眼眨动的瞬间,充满亲和力。
     4. **短暂疲惫:** 活动间隙,趁无人注意时悄悄呼一口气、耳朵稍稍耷拉的放松瞬间。

   **材质与部位特写 (Texture & Zoom) [毛绒与科技感]:**
   - **皮毛特写:** 放大肩部或脸颊部位,展示朱迪紫色与灰色相间毛发的细腻质感与光泽。
   - **道具特写:** 放大其佩戴的**《疯狂动物城2》主题智能手表**,表盘显示电影动态海报,强调玻璃屏的反射与金属表壳质感。
   - **物品特写:** 其使用的**胡萝卜造型迷你润唇膏**,特写膏体的滋润质感与管身的磨砂工艺。

   **关联物品 (Related Items) [警官的宣传活动背包]:**
   - **宣传专用随身包袋与内容物:** 绘制一个**多功能战术收纳腰包**,并将其“打开”,展示内部物品:
     - **官方物料:** 迷你电影海报、签名笔(特写笔尖磨损)、限量版爪爪形状纪念贴纸。
     - **个人护理:** 便携式毛发整理刷、上述胡萝卜润唇膏、小瓶爪子专用清洁湿巾。
     - **能量补给:** 独立包装的“胡萝卜能量棒”(包装印有ZPD标志)、便携水壶。
     - **私密生活物件 (Lifestyle & Intimate Items):**
       - **“护耳”静音耳塞:** 用于在嘈杂影院后台短暂休息,设计成小胡萝卜形状。
       - **便携式迷你执法记录仪(个人模式):** 用于记录温馨粉丝互动时刻,旁边注释“珍贵回忆存档”。
       - **翻开的日程本:** 展示当日页面,手写备注“《动物城2》首映 - 城南影院 - 合影环节 - 记得给尼克留纪念品”,旁边贴着一张与狐狸尼克的小合照。

**3. 风格与注释 (Style & Annotations):**
   - **画风:** 采用高精度、线条清晰的2D动画电影概念设计风格,色彩明快,角色比例严格遵循电影官方设定。
   - **背景:** 使用暖灰色或仿电影胶片边缘的纹理背景,营造影院与设计手稿结合的氛围。
   - **文字说明:** 在每个拆解元素旁模拟手写字体注释,说明材质、用途或小故事。例如:
     - 宣传夹克旁:“轻量防水面料,反光徽章确保夜间活动安全。”
     - 内衬护毛衣旁:“保持仪容整洁的秘密武器,莱卡材质,极佳延展性。”
     - 润唇膏旁:“独家定制胡萝卜香味,持久保湿,防止演讲时唇部干燥。”
     - 日程本旁:“今日重点:分享勇气与梦想。P.S. 尼克那份纪念品别忘!”

**Workflow (执行逻辑)**

1.  **分析核心场景:** 理解“影院合影”是《疯狂动物城2》宣传期的一环,朱迪处于公开、友好但可能疲惫的“明星警官”状态。
2.  **提取一级元素:** 确定中心图为宣传制服、合影姿态。提取可直接观察的元素:新款夹克、笑容、智能手表、腰包。
3.  **脑补二级深度元素:** 结合其兔子生理特征(需要理毛、长耳敏感)和警官的职业需求,设计内部护毛衣、静音耳塞。根据其积极、细腻的性格,想象其会携带粉丝礼物、日程本和私人回忆物品(与尼克的照片)。
4.  **生成组合图:** 将中心动态场景与所有拆解元素有机组合,确保所有物品的光影与色调符合影院环境光,引导线清晰不杂乱。
5.  **最终输出:** 呈现一张充满细节、故事性与专业感的电影角色概念分解图,并附上所有中文注释。

生成效果



硬件配置

基于已有硬件,不是最合适硬件,仅供参考,整体CPU差一点,但是在AI场景中影响不大

  • CPU:i5 8500
  • 主板:微星 B360M MORTAR
  • 内存:8GB * 4 共32GB DDR4 2400MHz
  • 电源:1050W (750W 、850W均可, 考虑战未来,所以选择1050W电源)
  • 显卡:3080 20G
  • 存储:NVME SSD 2T + 256GB

使用场景与操作系统安装

为了充分榨干硬件,鉴于有两块硬盘,使用场景我分为两种

1、256GB SSD安装Windows,用于游戏或日常应急使用,非Windows主力机

2、2T硬盘用于AI服务器,安装ubuntu系统,驱动完善,少折腾,另外可在2T中分出300G给Windows使用,例如安装游戏等

安装步骤:注意先安装Windows,在安装Ubuntu,这样Ubuntu的GRUB会自动识别到Windows的启动项并进行纳管,实现的效果就是开机会给出启动选项,选择Windows则进入Windows,否则超市后默认进Ubuntu

1、先安装Windows11

2、安装Ubuntu 24.04.4,注意分区的时候自定义分区,留一个物理分区不要格式化给Windows使用

AI服务器基本环境配置

以Ubuntu 24.04.4配置AI服务器的场景进行配置

静态IP配置

配置静态IP,便于管理

sudo vim /etc/netplan/50-cloud-init.yaml


network:
  version: 2
  ethernets:
    eno1:
      dhcp4: false
      addresses:
        - 10.0.0.28/24
      routes:
        - to: default
          via: 10.0.0.1
      nameservers:
        addresses: [10.0.0.1]



sudo netplan try 
sudo netplan apply



sudo nano /etc/sysctl.d/99-disable-ipv6.conf

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

sudo sysctl -p /etc/sysctl.d/99-disable-ipv6.conf
ip a

安装英伟达显卡驱动

# 时区 与 时间调整
sudo timedatectl set-timezone Asia/Shanghai

# 默认的时间服务器连接不上,调整为aliyun的
sudo nano /etc/systemd/timesyncd.conf

[Time]
NTP=ntp.aliyun.com ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.aliyun.com ntp5.aliyun.com ntp6.aliyun.com ntp7.aliyun.com
FallbackNTP=ntp.ubuntu.com

sudo systemctl restart systemd-timesyncd


date -R
Fri, 17 Apr 2026 13:40:47 +0800
wx@ai:~$ 



# 确保系统最新
sudo apt update && sudo apt upgrade -y

# 查看推荐驱动版本 可选
ubuntu-drivers devices

# 自动安装
sudo ubuntu-drivers autoinstall

sudo  reboot 

# 重启后执行
nvidia-smi

如果能看到下面的输出说明显卡驱动安装成功,并且正确识别到了20GB的显存

nvidia-smi 
Fri Apr 17 13:55:16 2026       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.126.09             Driver Version: 580.126.09     CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3080        Off |   00000000:01:00.0 Off |                  N/A |
| 50%   31C    P8             35W /  320W |       1MiB /  20480MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

编译安装llama.cpp

由于llama.cpp默认编译的版本不带GPU加速,最好是编译安装

# 安装nvcc,编译llama.cpp需要
sudo apt install nvidia-cuda-toolkit

nvcc  --version 
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0


# 安装基础编译工具和git
sudo apt install -y build-essential cmake git


# 可选但推荐的依赖项
# libcurl: 用于支持从Hugging Face等源自动下载模型[reference:0][reference:1]
# libopenblas: 用于加速CPU上的线性代数运算[reference:2]
sudo apt install -y libcurl4-openssl-dev libopenblas-dev



# 克隆代码仓库
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp


# 创建build目录并进入
mkdir build && cd build

# 使用CMake配置项目,开启CUDA和统一内存支持
# -DGGML_CUDA=ON:启用NVIDIA GPU加速[reference:5]
# -DGGML_CUDA_ENABLE_UNIFIED_MEMORY=1:启用统一内存,简化显存管理[reference:6]
cmake .. -DGGML_CUDA=ON -DGGML_CUDA_ENABLE_UNIFIED_MEMORY=1

# 开始编译,-j16表示使用16个核心并行编译,你可以改为自己的CPU核心数
cmake --build . --config Release -j$(nproc)

编译完成后将编译后的二进制文件放到指定目录并添加环境变量

# 1. 创建目标目录(比如 /opt/llama/bin)
sudo mkdir -p /opt/llama/bin

# 2. 复制整个 bin 目录内容
sudo cp -r /home/wx/llama.cpp/build/bin/* /opt/llama/bin/

# 删除不要的test文件
sudo rm /opt/llama/bin/test-*

# 3. 将该目录添加到 PATH
echo 'export PATH=/opt/llama/bin:$PATH' | sudo tee /etc/profile.d/llama.sh
# 或者只对当前用户
echo 'export PATH=/opt/llama/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

配置samba(可选)

一些场景下需要在其他Windows电脑中访问AI服务器的磁盘,例如使用迅雷下载大模型,迅雷从huggingface中下载大模型速度非常快,但是浏览器自带的或者通过命令行速度较慢

# Debian/Ubuntu
sudo apt update
sudo apt install samba



sudo mkdir -p /share


# 将目录属主改为 wx (后续所有wx替换成你的用户名)
sudo chown -R wx:wx /share

# 设置目录权限(wx 可读写,其他人只读,可根据需要调整)
sudo chmod 755 /share

# 如果希望任何人都能读写(不安全),可以用 777
sudo chmod 777 /share



sudo vim /etc/samba/smb.conf


# 注意这个文件不要在配置后面写注释,不支持,例如`read only = no # 只读配置` 不要在该行配置的末尾写注释,不支持的
[share]
   path = /share
   browseable = yes
   read only = no
   valid users = wx
   force user = wx
   force group = wx
   create mask = 0777
   directory mask = 0777


sudo smbpasswd -a wx


sudo systemctl restart smbd
sudo systemctl enable smbd   # 开机自启


sudo ufw allow samba

功耗限制

限制显卡的功耗,240W为甜点值,根据自身情况调整

sudo nano /etc/systemd/system/gpu-power-limit.service



[Unit]
Description=Set NVIDIA GPU Power Limit
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c '/usr/bin/nvidia-smi -pm 1 && /usr/bin/nvidia-smi -pl 240'

[Install]
WantedBy=multi-user.target

sudo systemctl enable gpu-power-limit.service


# 手动测试 240  260  280 均可
/usr/bin/nvidia-smi -pm 1 && /usr/bin/nvidia-smi -pl 240

# 查看测试的效果
nvidia-smi

安装docker(配置容器中调用显卡)

一些场景下需要在容器中调用显卡,可参考配置

# 安装docker
curl -fsSL https://get.docker.com | sh



# 安装nvidia-container-toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list


# 2. 更新软件源并安装 toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 3. 为 Docker 配置 NVIDIA 运行时
sudo nvidia-ctk runtime configure --runtime=docker

# 4. 重启 Docker 服务使配置生效
sudo systemctl restart docker



# 运行一个AI绘画的镜像测试,注意该镜像很大(6G左右),拉取较慢,  --gpus all配置即容器中调用显卡配置
sudo docker run -d \
  --gpus all \
  -p 8188:8188 \
  -v /share/AI/ComfyUI/models:/comfyui/models \
  -v /share/AI/ComfyUI/output:/comfyui/output \
  --name comfyui-ext \
  ghcr.io/radiatingreverberations/comfyui-extensions:latest

运行大模型llama.cpp

定义一个函数方便运行,放到bashrc中方便运行,其中关键参数均针对3080 20G进行了优化

touch  ~/.default_fun.sh

在里面添加相关函数

llamasrv() {
    local model_path="$1"
    if [[ -z "$model_path" ]]; then
        echo "用法: llamasrv <模型路径> [额外参数...]"
        echo "示例: llamasrv ./models/llama-7b.gguf --port 8081 --temp 0.7"
        return 1
    fi
    shift

    local host="${LLAMA_HOST:-0.0.0.0}"
    local port="${LLAMA_PORT:-8080}"

    # ⭐ 核心调整
    local n_gpu_layers="${LLAMA_NGL:-all}"
    local ctx_size="${LLAMA_CTX:-8192}"
    local n_cpu_moe="${LLAMA_N_CPU_MOE:-0}"
    
    # ⭐ 显存控制核心
    local batch_size="${LLAMA_BATCH:-128}"
    local ubatch_size="${LLAMA_UBATCH:-64}"
    local np="${LLAMA_NP:-1}"
    local cache_type_k="${LLAMA_CACHE_TYPE_K:-q8_0}"    # TURBOQUANT 开启后可以设置为turbo3
    local cache_type_v="${LLAMA_CACHE_TYPE_V:-q8_0}"    # TURBOQUANT 开启后可以设置为turbo3
    
    # ⭐ CPU优化
    local threads="${LLAMA_THREADS:-$(($(nproc)/2))}"
    local threads_batch="${LLAMA_THREADS_BATCH:-8}"
    local rope_scaling="${LLAMA_ROPE_SCALING:-linear}"

    # ⭐ 采样
    local temp="${LLAMA_TEMP:-0.5}"
    local repeat_penalty="${LLAMA_REPEAT_PENALTY:-1.1}"
    local top_k="${LLAMA_TOP_K:-40}"
    local top_p="${LLAMA_TOP_P:-0.95}"

    # ⭐ 日志控制:通过环境变量 LLAMA_LOG_DISABLE 控制是否禁用日志
    local log_disable=""
    if [[ "${LLAMA_LOG_DISABLE}" == "1" || "${LLAMA_LOG_DISABLE}" == "true" ]]; then
        log_disable="--log-disable"
    fi

    local cmd=(
        llama-server
        -m "$model_path"
        --host "$host"
        --port "$port"
        -ngl "$n_gpu_layers"
        --batch-size "$batch_size"
        --ubatch-size "$ubatch_size"
        --threads "$threads"
        --threads-batch "$threads_batch"
        -c "$ctx_size"
        --rope-scaling "$rope_scaling"
        --temp "$temp"
        --repeat-penalty "$repeat_penalty"
        --top-k "$top_k"
        --top-p "$top_p"
        -np "$np"
        --n-cpu-moe "$n_cpu_moe"
        --cache-type-k "$cache_type_k"
        --cache-type-v "$cache_type_V"
        --kv-offload
        --flash-attn auto
        --no-warmup
    )

    # 如果 log_disable 非空,则添加到命令中
    if [[ -n "$log_disable" ]]; then
        cmd+=("$log_disable")
    fi

    if [[ $# -gt 0 ]]; then
        cmd+=("$@")
    fi

    echo "执行: ${cmd[*]}"
    "${cmd[@]}"
}
  • 另外在定义一个强制关闭的函数,有时候停止服务的时候会卡住,特别是KV Cache太多的时候。这个时候需要强制关闭
llamakill(){
    kill -9 $(ps aux |grep llama-server | grep -v grep  |awk '{print $2}')
}
find /share/AI/LLM/ -type f -exec ls -lht {} +

...
-rwxrw-r-- 1 wx wx  18G Apr 19 10:10 /share/AI/LLM/DavidAU/GLM-4.7-Flash-Uncen-Hrt-NEO-CODE-MAX-imat-D_AU-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx  18G Apr 19 10:06 /share/AI/LLM/unsloth/GLM-4.7-Flash-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx  18G Apr 19 10:04 /share/AI/LLM/unsloth/gemma-4-31B-it-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx  18G Apr 19 10:02 /share/AI/LLM/unsloth/Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx  17G Apr 13 16:13 /share/AI/LLM/HauhauCS/GLM-4.7-Flash-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx 5.0G Apr 13 16:02 /share/AI/LLM/HauhauCS/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx 945M Apr 13 16:02 /share/AI/LLM/HauhauCS/mmproj-Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-f16.gguf
-rwxrw-r-- 1 wx wx  16G Apr 12 16:10 /share/AI/LLM/Jackrong/Jackrong_Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-v2-GGUF
-rwxrw-r-- 1 wx wx  16G Apr 12 16:00 /share/AI/LLM/HauhauCS/Qwen3.5-27B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx  16G Apr 12 15:58 /share/AI/LLM/Jiunsong/supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx  13G Apr 12 15:47 /share/AI/LLM/bartowski/Mistral-Small-22B-ArliAI-RPMax-v1.1-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx  16G Apr 12 15:40 /share/AI/LLM/unsloth/Qwen3.5-27B-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx  16G Apr 12 12:01 /share/AI/LLM/unsloth/gemma-4-26B-A4B-it-UD-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx 4.8G Apr 12 11:18 /share/AI/LLM/capybarahermes-2.5-mistral-7b.Q5_K_M.gguf
-rwxrw-r-- 1 wx wx 4.8G Apr 12 10:56 /share/AI/LLM/bartowski/Mistral-7B-Instruct-v0.3-Q5_K_M.gguf
-rwxrw-r-- 1 wx wx 4.7G Apr 12 10:49 /share/AI/LLM/unsloth/Qwen3-8B-Q4_K_M.gguf
-rwxrw-r-- 1 wx wx 9.6G Apr 12 10:32 /share/AI/LLM/qwen/qwen2.5-coder-14b-instruct-q5_0.gguf
  • 启动大模型,示例如下,如果日志太多可开启关闭日志选项--log-disable
llamasrv /share/AI/LLM/Jiunsong/supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf
...
llama_model_loader: - kv   0:                       general.architecture str              = gemma4
llama_model_loader: - kv   1:                               general.type str              = model
llama_model_loader: - kv   2:                     general.sampling.top_k i32              = 64
llama_model_loader: - kv   3:                     general.sampling.top_p f32              = 0.950000
llama_model_loader: - kv   4:                      general.sampling.temp f32              = 1.000000
llama_model_loader: - kv   5:                               general.name str              = supergemma4-26b-uncensored-fast-v2
...
llama_model_loader: - kv  48:                          general.file_type u32              = 15
llama_model_loader: - type  f32:  392 tensors
llama_model_loader: - type q5_0:   32 tensors
llama_model_loader: - type q8_0:   28 tensors
llama_model_loader: - type q4_K:  192 tensors
llama_model_loader: - type q6_K:   14 tensors
print_info: file format = GGUF V3 (latest)
print_info: file type   = Q4_K - Medium
print_info: file size   = 15.63 GiB (5.32 BPW) 
...
main: model loaded
main: server is listening on http://0.0.0.0:8080
main: starting the main loop...
srv  update_slots: all slots are idle
  • 检查是否开启Flash Attention,检查启动日志中是否有如下输出
Flash Attention was auto, set to enabled
  • -c参数表示一次会话的上下文长度(不是一轮对话,是一次会话中的所有轮对话都算一次会话),如果模型运行爆显存可以调整小一点试试
  • -np参数决定并发, 默认不加是4,可以手动指定为1(如果只有一个用户),在显存逼近极限的时候,可以手动指定 -np 1避免爆显存,对比

不加-np 1参数,注意4/1 seqs这个日志

llama_kv_cache_iswa: creating non-SWA KV cache, size = 10240 cells
llama_kv_cache:      CUDA0 KV buffer size =   800.00 MiB
llama_kv_cache: size =  800.00 MiB ( 10240 cells,  10 layers,  4/1 seqs), K (f16):  400.00 MiB, V (f16):  400.00 MiB
llama_kv_cache: attn_rot_k = 0, n_embd_head_k_all = 512
llama_kv_cache: attn_rot_v = 0, n_embd_head_k_all = 512
llama_kv_cache_iswa: creating     SWA KV cache, size = 4352 cells
加了`-np 1`参数,注意`1/1 seqs`这个日志
llama_kv_cache_iswa: creating non-SWA KV cache, size = 10240 cells
llama_kv_cache:      CUDA0 KV buffer size =   800.00 MiB
llama_kv_cache: size =  800.00 MiB ( 10240 cells,  10 layers,  1/1 seqs), K (f16):  400.00 MiB, V (f16):  400.00 MiB
llama_kv_cache: attn_rot_k = 0, n_embd_head_k_all = 512
llama_kv_cache: attn_rot_v = 0, n_embd_head_k_all = 512
llama_kv_cache_iswa: creating     SWA KV cache, size = 1280 cells
llama_kv_cache:      CUDA0 KV buffer size =  1000.00 MiB
llama_kv_cache: size = 1000.00 MiB (  1280 cells,  50 layers,  1/1 seqs), K (f16):  500.00 MiB, V (f16):  500.00 MiB
llama_kv_cache: attn_rot_k = 0, n_embd_head_k_all = 256
llama_kv_cache: attn_rot_v = 0, n_embd_head_k_all = 256
  • n_cpu_moe:放几个专家到CPU,如果显存不够,可以尝试放1个专家到CPU,这样可以减少GPU和显存的压力,显存不够时可以尝试开启,只有MoE模型才有意义,稠密模型用不到这个参数,例如Qwen3.6-35B-A3B-UD-Q4_K_S.gguf这个模型,文件大小刚好20G,非常极限了,如果不加这个参数,上下文只能开不到4K
llama-server \
-m  /share/AI/LLM/unsloth/Qwen3.6-35B-A3B-UD-Q4_K_S.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-b 128 \
-ub 64 \
--ctx-size 4096 \
--kv-offload \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
--direct-io \
--fit off \
--threads 6 \
--threads-batch 6 \
--threads-http 2 \
--temperature 1 \
--top-p 0.95 \
--top-k 64 \
--port 8080 \
--host 0.0.0.0

但是如果开启这个参数,上下文可以开到30K,差距非常大(这个时候CPU几乎会满载)

llama-server \
-m  /share/AI/LLM/unsloth/Qwen3.6-35B-A3B-UD-Q4_K_S.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-b 128 \
-ub 64 \
--ctx-size 30000 \
--kv-offload \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
--direct-io \
--fit off \
--threads 6 \
--threads-batch 6 \
--threads-http 2 \
--temperature 1 \
--top-p 0.95 \
--top-k 64 \
--port 8080 \
--host 0.0.0.0 \
--n-cpu-moe 1
  • --cache-type-k q8_0 --cache-type-v q8_0:参数,默认为f16,虽然性能最好,但是kv cache占用显存巨大,q8_0显存占用中等,性能几乎无损,q4_0显存减半但是影响性能和质量,q8_0做到了很好的平衡,因此默认建议使用q8_0,另外如果开启了TurboQuant可以使用turbo3类型,相当于是kv cache的量化
  • --kv-offload:kv cache优先放GPU显存,超过了会放到内存

运行后只是在后台监听服务,可使用OpenWEBUI等工具连接使用,后续文章中会详细说明OpenWEBUI的基本使用

4070 Ti 12G显存测试效果

最近对手头的4070 Ti进行测试,因为显存较小,所以思路是

  • 选择更小量化的模型,比如Q2或者IQ2量化,权重文件需要小于12G,并且留一些显存给上下文使用
  • kvcache选择最小q4_0或使用turboquant量化节省显存
  • 必要的时候卸载专家到CPU,能节省一下显存给上下文,速度影响尚可

在以上思路下,12G显存也能跑35B大模型,以下是一些命令参考和测试效果参考,如下命令

  • 卸载一个专家到CPU
  • 权重文件11G,IQ2量化
  • kvcache选择q4_0

这样上下文能开到80k,总体q4_0和IQ2的组合也没有想象的那么差,输出token质量还能接受没有明显变差

llama-server \
-m /share/AI/LLM/HauhauCS/Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-b 128 \
-ub 64 \
--ctx-size 81920   \
--kv-offload \
--cache-type-k q4_0 \
--cache-type-v q4_0 \
--direct-io \
--fit off \
--threads 6 \
--threads-batch 6 \
--threads-http 2 \
--temperature 1 \
--top-p 0.95 \
--top-k 64 \
--port 8080 \
--host 0.0.0.0 \
--n-cpu-moe 1

以下是一些模型的测试结果供参考

10k上下文 卸载一个专家到CPU kv类型 q8只能对话一轮   q4能对话多轮  token速度 110   q4才能用  必须卸载至少一个专家到CPU 否则炸显存
-rwxrw-r-- 1 wx wx  11G May  1 13:53 /share/AI/LLM/mradermacher/gemma-4-26B-A4B-it-ultra-uncensored-heretic.i1-IQ3_XS.gguf


10k上下文 kv类型 q8只能对话一轮   q4能对话多轮  token速度 85   q4才能用  必须卸载至少二个专家到CPU  卸载到CPU严重拖慢速度
-rwxrw-r-- 1 wx wx  12G May  1 13:52 /share/AI/LLM/mradermacher/gemma-4-26B-A4B-it-ultra-uncensored-heretic.i1-IQ3_M.gguf

不卸载专家 kv类型q4  上下文能开到40K,速度 92~110 tos/s ,卸载一个专家上下文能开到80K,速度几乎没变化
-rwxrw-r-- 1 wx wx  11G May  1 13:50 /share/AI/LLM/HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf

不卸载专家 kv类型q4  上下文能开到40K,速度 120~140 tos/s ,卸载一个专家上下文能开到80K,速度几乎没变化
-rwxrw-r-- 1 wx wx  11G May  1 14:23 /share/AI/LLM/unsloth/Qwen3.6-35B-A3B-UD-IQ2_M.gguf

上下文80K 至少卸载3个专家 速度 100~110 tos/s 
-rwxrw-r-- 1 wx wx  12G May  1 14:22 /share/AI/LLM/unsloth/Qwen3.6-35B-A3B-UD-Q2_K_XL.gguf

卸载一个专家  上下文开80k
-rwxrw-r-- 1 wx wx  11G May  1 13:29 /share/AI/LLM/HauhauCS/Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf

通过合理的配置还能使用mmproj开启多模态能力

  • 开启多模态
  • 上下文开40k
  • kvcache 类型q4_0
  • 卸载CPU
  • IQ2量化

使用场景:图片识别、图片反推提示词等

llama-server \
-m /share/AI/LLM/HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf \
--mmproj /share/AI/LLM/HauhauCS/mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-b 128 \
--ctx-size 40960  \
--kv-offload \
--cache-type-k q4_0 --cache-type-v q4_0 \
--direct-io \
--fit off \
--threads 6 \
--threads-batch 6 \
--threads-http 2 \
--temperature 1 \
--top-p 0.95 \
--top-k 64 \
--port 8080 \
--host 0.0.0.0 \
--n-cpu-moe 3

能使用的模型组合,mmproj + 模型本地小于12G显存

-rwxrw-r-- 1 wx wx 861M May  1 14:44 /share/AI/LLM/unsloth/mmproj-BF16.gguf
-rwxrw-r-- 1 wx wx  11G May  1 14:26 /share/AI/LLM/unsloth/Qwen3.6-35B-A3B-UD-IQ2_XXS.gguf


-rwxrw-r-- 1 wx wx  11G May  1 13:50 /share/AI/LLM/HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf
-rwxrw-r-- 1 wx wx 858M May  1 14:54 /share/AI/LLM/HauhauCS/mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf

/share/AI/LLM/HauhauCS/Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf
 /share/AI/LLM/HauhauCS/mmproj-Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-f16.gguf


-rwxrw-r-- 1 wx wx 5.0G May  1 13:20 /share/AI/LLM/HauhauCS/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf
-rwxrw-r-- 1 wx   wx   945M May  1 15:10 /share/AI/LLM/HauhauCS/mmproj-Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-f16.gguf

单双卡组合

在我的硬件(微星 B360M MORTAR)下,3080 20G插在第一个PCIe卡槽,4070 Ti 12G插到了第二个残血卡槽,进行双卡流水线并行测试,测试结论如下:

  • 一般家用主板PCIe通道分配: 一般家用主板只有两条PCIe插槽,第一条为满速x16,第二条为残速x4,双显卡通信必须经过PCIe桥(即通过CPU)。
  • 卡间通信方式: 数据搬运依赖CPU,两块GPU之间并非直接通信,需由CPU中转
  • 推理时的计算模式: 大模型推理时,权重会被拆分到两张显卡上分别计算,但属于张量流水线计算流水线,不是真正的张量并行
  • 性能瓶颈分析: 理论上,残血的x4通道或CPU本身可能成为通信瓶颈,但实际使用中速度影响并不大。
  • 实际效果: 家用双卡跑大模型不能加速吐字(甚至可能因流水线机制而稍慢),但能大幅增加显存,从而支撑更高的上下文长度。
  • 真正加速的方案: 若需要推理加速,必须实现两张GPU直连,并使用张量并行推理框架(如vLLM)。这要求更高规格的主板,或使用PCIe Switch、NVLink,且显卡本身需支持NVLink

总而言之,非张量并行的情况下,双卡并不能加速,只是堆显存,收益是能运行单卡不能运行的更大的模型,强行vLLM张量并行则会因为PCIe带宽限制速度下降,速度不如张量流水线并行

Sat Apr 25 08:36:11 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.126.09             Driver Version: 580.126.09     CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3080        On  |   00000000:01:00.0  On |                  N/A |
|  0%   35C    P8              9W /  240W |      33MiB /  20480MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA GeForce RTX 4070 Ti     On  |   00000000:02:00.0 Off |                  N/A |
|  0%   37C    P8              4W /  240W |       1MiB /  12282MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

卡之间的拓扑状态为PHB,即卡之间通信走CPU

nvidia-smi topo -m
	GPU0	GPU1	CPU Affinity	NUMA Affinity	GPU NUMA ID
GPU0	 X 	PHB	0-5	0		N/A
GPU1	PHB	 X 	0-5	0		N/A

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

一些测试截图

在双卡下需要单独运行的时候可以通过指定环境变量实现,如

# 单独使用第一张卡
CUDA_VISIBLE_DEVICES=0 llama-server ....

# 单独使用第二张卡
CUDA_VISIBLE_DEVICES=1 llama-server ....

后续我将主板换成了能支持通道拆分的华硕X570 WS ACE + AMD 5600 CPU,在CPU下x8 x8进行通道拆分,PCIe Root直接挂再CPU下,不走南桥,这样的不仅没有加成,反而会使得双卡推理时候直接死锁,因为3080 也没有NVLINK,x8带宽拉跨,张量并行效果并不好,都在等数据甚至死锁,现象就是整个推理卡住,必须重启llama进程,处于不可用状态。

该主板上有三条PCIe插槽,前面两条可以通到拆分,第三条是x4走南桥,如果把显卡插到第三条插槽上,卡死的现象消失,更加确定是拆分导致的,更强的主板+更好的CPU ,推理速度从110~120,收效甚微

原硬件:MSI B360 + INTEL I5 8500

新硬件:华硕X570 WS ACE + AMD 5600 CPU

在原硬件配置下开启双卡张量并行,使用vllm,没有p2p与nvlink的加持,整体速度不如llama.cpp

# 使用awq量化模型,非gguf
ls -lh /share/AI/LLM/cyankiwi 
total 23G
-rwxrw-r-- 1 wx wx 7.6K May  3 13:19 chat_template.jinja
-rwxrw-r-- 1 wx wx  35K May  3 13:18 config.json
-rwxrw-r-- 1 wx wx  202 May  3 13:18 generation_config.json
-rwxrw-r-- 1 wx wx 3.2M May  3 13:19 merges.txt
-rwxrw-r-- 1 wx wx 5.1G May  3 13:18 model-00001-of-00005.safetensors
-rwxrw-r-- 1 wx wx 5.1G May  3 13:18 model-00002-of-00005.safetensors
-rwxrw-r-- 1 wx wx 5.1G May  3 13:19 model-00003-of-00005.safetensors
-rwxrw-r-- 1 wx wx 5.0G May  3 13:19 model-00004-of-00005.safetensors
-rwxrw-r-- 1 wx wx 2.8G May  3 13:19 model-00005-of-00005.safetensors
-rwxrw-r-- 1 wx wx  11M May  3 13:18 model.safetensors.index.json
-rwxrw-r-- 1 wx wx  17K May  3 13:19 tokenizer_config.json
-rwxrw-r-- 1 wx wx  13M May  3 13:18 tokenizer.json
-rwxrw-r-- 1 wx wx 6.5M May  3 13:18 vocab.json



# vllm
docker run --gpus all -d --name vllm \
    -v /share/AI/LLM:/models \
    -p 8080:8000 \
    --ipc=host \
    vllm/vllm-openai:latest \
    --model /models/cyankiwi \
    --tensor-parallel-size 2 \
    --gpu-memory-utilization 0.8


# 启动比较慢
# 每张卡占用显存19.6  几乎占满
# 速度 85~91 
# 功耗204  196 ,两张显卡都是240w功耗墙 没有使用满
sudo docker run --rm --gpus all --name vllm \
  -v /share/AI/LLM:/models \
  -p 8080:8000 \
  --ipc=host \
  vllm/vllm-openai:latest \
  --model /models/cyankiwi \
  --tensor-parallel-size 2 \
  --limit-mm-per-prompt '{"image": 0, "video": 0}'


# 显存占用18G (双卡)
# 速度 80~150
sudo docker run --rm --gpus all --name vllm \
  -v /share/AI/LLM:/models \
  -p 8080:8000 \
  --ipc=host \
  vllm/vllm-openai:latest \
  --model /models/cyankiwi \
  --tensor-parallel-size 2 \
  --limit-mm-per-prompt '{"image": 0, "video": 0}' \
  --gpu-memory-utilization 0.85 \
  --enable-expert-parallel


# 显存占用16G (双卡)
# 速度85~198 token /s 波动比较大
sudo docker run --rm --gpus all --name vllm \
  -v /share/AI/LLM:/models \
  -p 8080:8000 \
  --ipc=host \
  vllm/vllm-openai:latest \
  --model /models/cyankiwi \
  --tensor-parallel-size 2 \
  --enable-expert-parallel \
  --gpu-memory-utilization 0.80 \
  --block-size 32 \
  --enable-prefix-caching \
  --max-num-seqs 1 \
  --dtype auto \
  --limit-mm-per-prompt '{"image": 0, "video": 0}'

TurboQuant

TurboQuant 是 Google 提出的在线量化算法,通过“随机旋转+双引擎量化”对推理缓存(KV Cache)进行几乎无损的 6 倍压缩,从而以极小精度代价换取长文本推理的显存大幅降低与速度提升

目前在llama.cpp中使用需要手动编译,还未合并进主分支,此事的进展相对缓慢,主要受以下三个因素影响:

  • 唯一的PR状态不佳:相关实现以大段由AI生成的代码为主,代码质量和维护性较差,因此被项目维护者明确拒绝
  • 存在替代方案llama.cpp 自身已拥有成熟的8-bit (q8) KV缓存压缩方案,开发者更倾向于使用这个更稳定的内置功能-。
  • 维护成本高:TurboQuant 的算法逻辑与 llama.cpp 现有架构差异较大,合并后维护成本过高,因此项目原作者也曾表示暂时没有合并计划
git clone https://github.com/TheTom/llama-cpp-turboquant.git
cd llama-cpp-turboquant

cmake -B build -DGGML_CUDA=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)

编译过程完成输出

[ 98%] Built target llama-fit-params
[ 99%] Linking CXX executable ../../bin/llama-cvector-generator
[ 99%] Built target llama-cvector-generator
...
[ 99%] Linking CXX static library libserver-context.a
[ 99%] Built target server-context
[100%] Generating index.html.hpp
[100%] Generating loading.html.hpp
[100%] Generating bundle.js.hpp
[100%] Generating bundle.css.hpp
[100%] Building CXX object tools/cli/CMakeFiles/llama-cli.dir/cli.cpp.o
[100%] Linking CXX executable ../../bin/llama-cli
[100%] Built target llama-cli
[100%] Building CXX object tools/server/CMakeFiles/llama-server.dir/server.cpp.o
[100%] Building CXX object tools/server/CMakeFiles/llama-server.dir/server-http.cpp.o
[100%] Building CXX object tools/server/CMakeFiles/llama-server.dir/server-models.cpp.o
[100%] Linking CXX executable ../../bin/llama-server
[100%] Built target llama-server

使用编译好的llama-server就能使用turbo3 类型

./llama-server \
-m /share/AI/LLM/mradermacher/gemma-4-26B-A4B-it-ultra-uncensored-heretic.i1-IQ3_XS.gguf \
...
--cache-type-k turbo3 \
--cache-type-v turbo3 \
...

MTP

2026年5月底,MTP合并进了llama.cpp的主分支,MTP通过空间换时间的方法可显著加速稠密模型,MoE模型实测加速效果不明显,需要下载支持MTP的模型,如unsloth的Qwen3.6-27B-MTP-Q6_K.gguf,通过文件名称就能看出来支持MTP

MTP 和 TurboQuant(TQ目前还未合并进入主分支) 可以一起开启(在TQ的分支上直接git pull后重新编译),量化上下文的同时进行加速生成,通过这套组合拳,实测本地小模型(如35B以内)可以实现小型项目的AI agent编码开发,当然,如果是中大型项目不太建议,本地模型上下文太小,及时Qwen3.6系列上下文256k已经拉满,在面对中型项目(代码总量3~8W行)仍然难以完全考虑周全,bug较多,并且随着项目越来越大,本地模型效果会越差,这个时候目前只能更换成在线模型,如deepseek flash v4(上下文1m)

以上是我深度使用本地模型开发项目的实际体验,以下是常使用的一些参数组合,仅供参考

针对3080 20G双卡

  • 27B MTP + TQ + 视觉 + Q6
llama-server \
-m /share/AI/LLM/unsloth/Qwen3.6-27B-MTP-Q6_K.gguf \
--mmproj /share/AI/LLM/unsloth/Qwen3.6-27B-mmproj-BF16.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-ts 24,20 \
-b 1024 \
-ub 512 \
-np 1 \
--ctx-size 262144 \
--kv-offload \
--cache-type-k turbo3 \
--cache-type-v turbo3 \
--fit off \
--threads 8 \
--threads-batch 8 \
--threads-http 2 \
--temperature 0.3 \
--top-p 0.9 \
--top-k 40 \
--spec-type draft-mtp \
--spec-draft-n-max 2 \
--port 8080 \
--host 0.0.0.0
  • 35B A3B + TQ + 视觉 + Q6
llama-server \
-m /share/AI/LLM/unsloth/Qwen3.6-35B-A3B-UD-Q6_K_XL.gguf \
--mmproj /share/AI/LLM/unsloth/Qwen3.6-35B-A3B-UD-mmproj-BF16.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-ts 20,24 \
-b 1024 \
-ub 512 \
-np 1 \
--ctx-size 262144 \
--cache-type-k turbo3 \
--cache-type-v turbo3 \
--fit off \
--threads 8 \
--threads-batch 8 \
--threads-http 2 \
--temperature 0.3 \
--top-p 0.9 \
--top-k 40 \
--port 8080 \
--host 0.0.0.0

针对4070 12G显存显卡

  • 35B A3B + TQ + IQ2 + offload cpu 2
llama-server \
-m /share/AI/LLM/unsloth/Qwen3.6-35B-A3B-UD-IQ2_M.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-b 128 \
-ub 64 \
--ctx-size 40960   \
--kv-offload \
--cache-type-k turbo3  \
--cache-type-v turbo3  \
--fit off \
--threads 6 \
--threads-batch 6 \
--threads-http 2 \
--temperature 0.1 \
--top-p 0.95 \
--top-k 64 \
--port 8080 \
--host 0.0.0.0 \
--n-cpu-moe 2
  • 35B A3B + TQ + IQ2 + 视觉 + offload cpu 20
llama-server \
-m /share/AI/LLM/HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf \
--mmproj /share/AI/LLM/HauhauCS/mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-np 1 \
-b 128 \
--ctx-size 160920  \
--kv-offload \
--cache-type-k turbo3 \
--cache-type-v turbo3 \
--direct-io \
--fit off \
--threads 6 \
--threads-batch 6 \
--threads-http 2 \
--temperature 1 \
--top-p 0.95 \
--top-k 64 \
--port 8080 \
--host 0.0.0.0 \
--n-cpu-moe 20

针对5070 16G显存显卡

  • 27B IQ3(12G) + MTP + 视觉 + 64k上下文 效果:加了MTP 70+ tok/s ,不加MTP 50+ tos/s
./llama-server \
-m /share/AI/LLM/unsloth/Qwen3.6-27B-UD-IQ3_XXS.gguf \
--mmproj /share/AI/LLM/unsloth/Qwen3.6-27B-UD-MTP-mmproj-BF16.gguf \
--n-gpu-layers all \
--flash-attn enabled \
-ts 24,20 \
-b 1024 \
-ub 512 \
-np 1 \
--ctx-size 64000 \
--kv-offload \
--cache-type-k turbo3 \
--cache-type-v turbo3 \
--fit off \
--threads 8 \
--threads-batch 8 \
--threads-http 2 \
--temperature 0.3 \
--top-p 0.9 \
--top-k 40 \
--spec-type draft-mtp \
--spec-draft-n-max 2 \
--port 8080 \
--host 0.0.0.0
编辑于 2026-07-11 · 著作权归作者所有