6GB 顯存的 GTX 1060 能不能跑 35B 級別的大模型?
如果照傳統理解,第一反應多半是「不太現實」。35B 參數量太大,顯存只有 6GB,就算模型已經量化,也很容易遇到速度慢、記憶體爆掉、上下文拉不上去、跑一段時間就不穩定等問題。
但如果模型是 MoE 架構,再配合 llama.cpp 的分層卸載、CPU 記憶體承接和參數調校,情況就會變得有意思:它不一定能變成高階顯卡的體驗,但可以從「勉強能跑」優化到「日常測試可用」。
這篇按實作思路整理:目的不是神化 GTX 1060,而是講清楚低顯存顯卡跑 Qwen 35B 這類模型時,應該先看哪裡、調哪裡、怎麼判斷瓶頸。
先說結論
低顯存顯卡跑 35B 模型,關鍵不是把所有東西都塞進顯存,而是讓 GPU 只承擔最值得加速的部分。
大致思路是:
|
|
如果一開始就盯著「顯存不夠怎麼辦」,很容易走偏。更實際的目標應該是:讓顯存、記憶體、CPU、磁碟和上下文快取配合起來,而不是只看顯卡型號。
準備環境
這種玩法建議先準備好幾個條件:
- 一張 6GB 顯存左右的 NVIDIA 顯卡,例如 GTX 1060 6GB;
- 足夠的系統記憶體,越低越容易卡在 swap 或 OOM;
- 已經編譯好 CUDA 版本的
llama.cpp; - 一個適合低顯存嘗試的量化模型檔;
- 能接受速度不是雲端 API 等級;
- 會查看顯存、記憶體和程序占用。
可以先用下面這些命令確認環境:
|
|
如果 nvidia-smi 看不到顯卡,或者 llama.cpp 沒有 CUDA 支援,後面再怎麼調參數都不會有理想效果。
第一步:先讓模型跑起來
不要一上來就追求 17 tok/s。第一步只看一件事:模型能不能正常載入並輸出。
一個基礎命令通常長這樣:
|
|
如果這一步都失敗,先不要急著加 GPU 參數,優先檢查:
- 模型檔路徑是否正確;
- 模型量化格式是否被目前的
llama.cpp支援; - 系統記憶體是否足夠;
- 是否下載了錯誤版本的模型;
- 目前二進位檔是否支援對應模型架構。
能跑起來以後,再開始優化速度。
為什麼預設速度可能只有 3 tok/s
低顯存環境下,預設參數慢通常不是單一原因造成的。
常見瓶頸有這幾類:
| 瓶頸 | 表現 | 處理方向 |
|---|---|---|
| GPU 卸載太少 | 顯卡很閒,CPU 很忙 | 增加可承受的 GPU offload |
| 卸載太激進 | 顯存爆掉或頻繁報錯 | 降低卸載層數 |
| 記憶體頻寬不夠 | CPU 占用高但 token 慢 | 減少無效開銷,換更合適量化 |
| 上下文太大 | 一開始就很慢或記憶體暴漲 | 先用小上下文測試 |
| swap 介入 | 系統卡頓明顯 | 增加記憶體或降低參數 |
| 批次參數不合適 | prompt 處理慢 | 調整 batch 相關參數 |
所以調校時不要只看 tok/s 數字。建議同時開著:
|
|
觀察 GPU 顯存、GPU 利用率、CPU 占用和系統記憶體是否同步變化。
第二步:調整 GPU 卸載
llama.cpp 裡最常見的加速思路,是把部分層卸載到 GPU。
常用參數是:
|
|
或者完整一點:
|
|
這裡的 20 不是固定答案。低顯存顯卡要一點點試:
|
|
每次調整後看三件事:
- 是否能正常啟動;
- 顯存是否接近打滿;
- tok/s 是否真的提升。
如果顯存已經頂滿,再繼續加 -ngl 只會讓程式更不穩定,不一定更快。
第三步:理解 MoE 為什麼重要
MoE 模型和普通 dense 模型不太一樣。
MoE 的核心特點是:模型參數總量很大,但每次推理不一定啟用全部專家。也就是說,標稱 35B 不代表每個 token 都要完整跑一遍 35B 的全部計算。
這也是低顯存顯卡有機會嘗試的關鍵原因。
但要注意兩點:
- MoE 不是免費魔法,模型檔仍然很大;
- 顯存不夠時,仍然需要 CPU 記憶體承擔大量資料。
所以優化 MoE 模型時,重點是把真正高頻、值得加速的部分交給 GPU,把顯存用在刀口上。
第四步:處理記憶體瓶頸
很多人以為低顯存跑不動,只是顯存問題。實際上更常見的是顯存、記憶體、快取一起卡。
如果執行時系統記憶體接近耗盡,或者 swap 開始大量使用,速度會明顯下降。可以用:
|
|
或者:
|
|
觀察是否出現頻繁 swap。
優化方向包括:
- 換更小的量化版本;
- 降低上下文長度;
- 降低 batch;
- 減少並行任務;
- 關閉不必要的背景程式;
- 確保模型放在速度較快的 SSD 上;
- 給系統留足記憶體餘量。
如果系統記憶體本身太小,6GB 顯卡再怎麼調也很難舒服。
第五步:上下文長度不要一開始拉滿
很多模型預設宣傳支援很長上下文,但低顯存機器不要一開始就拉滿。
建議先從較小上下文開始:
|
|
確認穩定後再嘗試:
|
|
再往上加時,要觀察記憶體和速度變化。
上下文越長,KV cache 壓力越大。低顯存設備上,長上下文通常比單純生成短回答更容易暴露問題。
如果你的目標只是本地問答、程式碼片段解釋、短文本摘要,沒必要一開始追求特別大的上下文。
第六步:關注 batch 參數
llama.cpp 的 batch 參數會影響 prompt 處理和生成表現。不同版本參數名稱可能略有變化,可以先看說明:
|
|
常見思路是:
- prompt 很長時,適當調 batch 可能改善處理速度;
- 顯存緊張時,batch 太大可能導致不穩定;
- 不要照抄別人的數值,按自己機器測試。
調參時建議一次只改一個參數。
比如先固定模型、上下文和 -ngl,再嘗試 batch。否則你很難判斷到底是哪一個參數帶來了變化。
第七步:記錄自己的五個關鍵參數
低顯存本地推理最怕「今天能跑,明天忘了怎麼配」。
建議每次測試都記錄這幾個參數:
| 參數 | 記錄什麼 |
|---|---|
| 模型檔 | 模型名稱、量化版本、檔案大小 |
| GPU 卸載 | -ngl 或相關卸載參數 |
| 上下文長度 | -c 數值 |
| batch | batch / ubatch 等相關設定 |
| 結果 | tok/s、顯存、記憶體、是否穩定 |
可以簡單寫成:
|
|
這樣下次換模型或換機器時,就能快速對比。
一個更穩的測試流程
推薦按這個順序做:
- 不加 GPU 卸載,確認模型能載入;
- 加較低
-ngl,確認能輸出; - 逐步提高
-ngl,找到顯存臨界點; - 固定
-ngl,調整上下文長度; - 固定上下文,再測試 batch;
- 用同一段 prompt 對比 tok/s;
- 跑 10 到 20 分鐘,觀察是否穩定;
- 記錄最終參數。
不要每次換一個 prompt 測速度。prompt 不同,結果沒有可比性。
可以準備一個固定測試提示詞:
|
|
每輪都用同一個提示詞,才方便判斷優化是否真的有效。
常見失敗嘗試
低顯存調大模型時,這幾類操作很容易浪費時間:
1. 盲目拉高 GPU 卸載層數
看到 -ngl 提升速度,就一直往上加。
問題是 GTX 1060 只有 6GB 顯存,越過臨界點後,程式可能直接報錯,或者看似啟動了但執行不穩定。
2. 一開始就拉超長上下文
長上下文對記憶體和 KV cache 壓力很大。先用短上下文把模型跑穩,再擴上下文更實際。
3. 只看平均 tok/s
tok/s 是重要指標,但不是唯一指標。
你還要看:
- 首 token 延遲;
- prompt 處理速度;
- 顯存是否溢出;
- 長時間執行是否穩定;
- 系統是否卡到影響其他操作。
4. 不記錄參數
本地推理調校經常需要反覆試。沒有記錄,很容易陷入「剛才那個能跑的參數是多少來著」的循環。
適合 GTX 1060 的預期
GTX 1060 這類老顯卡適合做什麼?
適合:
- 學習
llama.cpp; - 測試 GGUF 模型;
- 跑短文本問答;
- 做本地模型參數實驗;
- 體驗 MoE 模型的低資源執行方式;
- 驗證某個模型是否值得換更好硬體部署。
不太適合:
- 高併發服務;
- 超長上下文重度使用;
- 多使用者同時推理;
- 大規模 RAG 生產環境;
- 對延遲非常敏感的即時應用。
把 GTX 1060 當成實驗機器,它很有價值。把它當成生產級大模型伺服器,就容易失望。
一句話總結
6GB 顯存跑 Qwen 35B 這類模型,真正的重點不是「硬塞進顯卡」,而是用 llama.cpp 把 GPU 卸載、MoE 特性、系統記憶體、上下文長度和 batch 參數協調起來。
如果你手裡剛好有 GTX 1060 這種老顯卡,可以按這個順序試:
|
|
從 3 tok/s 到 17 tok/s,不靠玄學,靠的是一步步把瓶頸拆開。