化:顯存與多GPU的三檔調(diào)優(yōu)路徑)
ComfyUI 性能優(yōu)化顯存與多GPU的三檔調(diào)優(yōu)路徑【免費(fèi)下載鏈接】ComfyUIThe most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI跑一個(gè) 2K 出圖工作流進(jìn)度條卡住終端里刷著 VRAM 壓力告警這就是 ComfyUI 性能優(yōu)化最典型的起點(diǎn)。多數(shù)性能問(wèn)題可以歸到兩類(lèi)一類(lèi)是顯存緊張模型和中間張量互相擠兌觸發(fā)反復(fù)換入換出甚至 OOM另一類(lèi)是算力沒(méi)喂飽GPU 利用率上不去出圖節(jié)奏被拖慢。這兩類(lèi)問(wèn)題的解法方向完全不同先把癥狀分清再動(dòng)手比照著別人的參數(shù)表逐條照搬要有效得多。先跑一次基準(zhǔn)再?zèng)Q定動(dòng)哪個(gè)參數(shù)改參數(shù)之前我們建議先花十分鐘把當(dāng)前狀態(tài)量化下來(lái)否則所有調(diào)優(yōu)都無(wú)從驗(yàn)證。用一條命令循環(huán)觀察顯存與利用率watch -n 1 nvidia-smi跑一次完整工作流重點(diǎn)看峰值顯存和 GPU 利用率兩組數(shù)字。如果顯存峰值貼著上限、利用率卻時(shí)高時(shí)低多半是顯存壓力問(wèn)題優(yōu)先處理 VRAM 狀態(tài)如果顯存只用了七八成、利用率卻穩(wěn)定在 90% 以上說(shuō)明瓶頸不在顯存應(yīng)該往精度和注意力機(jī)制方向查。再看一眼啟動(dòng)時(shí)的日志它會(huì)直接告訴你實(shí)際生效的 VRAM 模式python main.py 21 | grep -Ei vram|DynamicVRAM新版默認(rèn)走動(dòng)態(tài) VRAM日志里會(huì)有對(duì)應(yīng)的設(shè)備與緩存策略輸出。啟動(dòng)參數(shù)按用途歸類(lèi)別混著開(kāi)啟動(dòng)參數(shù)里最容易踩的坑是互斥參數(shù)疊加使用。ComfyUI 的 VRAM 模式參數(shù)--gpu-only、--highvram、--lowvram、--novram、--cpu同屬一個(gè)互斥組同時(shí)寫(xiě)兩個(gè)只會(huì)取后者日志里未必有明顯提示同理--fp16-unet、--bf16-unet、--fp8_e4m3fn-unet也彼此排斥。按用途歸類(lèi)之后參數(shù)組合就清晰了參數(shù)作用適用場(chǎng)景--reserve-vram GB給系統(tǒng)和桌面預(yù)留顯存顯存峰值貼近上限、偶發(fā) OOM--vram-headroom GB為動(dòng)態(tài) VRAM 保留額外余量多開(kāi)應(yīng)用或跑長(zhǎng)任務(wù)--fp16-unet/--fp16-vae降低推理精度換顯存16GB 以下顯存、顯存吃緊--use-quad-cross-attention等切換注意力后端長(zhǎng)序列、高分辨率工作流--cache-none/--high-ram控制節(jié)點(diǎn)結(jié)果緩存策略頻繁換模型導(dǎo)致 RAM 吃緊幾個(gè)值得留意的細(xì)節(jié)--fp16-vae的說(shuō)明里明確寫(xiě)了可能產(chǎn)生黑圖出圖異常時(shí)先查這里--cpu-vae能把 VAE 解碼挪到 CPU適合采樣卡得住、解碼就爆顯存的尷尬場(chǎng)景注意力后端里--use-split-cross-attention、--use-quad-cross-attention在啟用 xformers 時(shí)會(huì)被忽略選之前先確認(rèn)本機(jī)實(shí)際用的是哪種后端。這個(gè)參數(shù)組合在不同硬件上差異很大在 4090 上表現(xiàn)好的配置放到 3060 上未必成立實(shí)測(cè)優(yōu)先。工作流層面的三個(gè)杠桿緩存、批次與拆分參數(shù)調(diào)完之后還有一層收益藏在工作流組織方式里。第一個(gè)杠桿是緩存策略。當(dāng)前版本的節(jié)點(diǎn)結(jié)果默認(rèn)走 RAM 壓力緩存長(zhǎng)時(shí)間不重啟的服務(wù)會(huì)不斷積累緩存占著內(nèi)存和顯存。頻繁切換模型、RAM 吃緊時(shí)加--cache-lru 64限定緩存條數(shù)或者直接用--cache-none讓每次運(yùn)行都重新執(zhí)行全部節(jié)點(diǎn)用重算換占用反過(guò)來(lái)機(jī)器內(nèi)存充足、追求加載速度時(shí)--high-ram更合適。第二個(gè)杠桿是批次規(guī)模。大批量任務(wù)一次提交幾百?gòu)垐D節(jié)點(diǎn)結(jié)果和中間張量會(huì)同時(shí)駐留緩存與顯存壓力都會(huì)顯著上升拆成每批 8 到 16 張排隊(duì)執(zhí)行峰值占用明顯下降總耗時(shí)通常只多出一點(diǎn)排隊(duì)時(shí)間。第三個(gè)杠桿是長(zhǎng)工作流拆分一條鏈路串幾十上百個(gè)節(jié)點(diǎn)的提示與其整體重跑不如在關(guān)鍵節(jié)點(diǎn)處斷開(kāi)分階段出圖緩存命中率也會(huì)更穩(wěn)定。多 GPUCFG 分片與多實(shí)例兩條路多卡場(chǎng)景下現(xiàn)在有兩條思路適用條件不同。第一條是新版內(nèi)置的原生多 GPU 支持在工作流里掛上 MultiGPU 相關(guān)的 CFG Split 節(jié)點(diǎn)配合 GPU Options 節(jié)點(diǎn)設(shè)置各卡相對(duì)速度采樣階段的 CFG 工作單元會(huì)按速度比例拆到多張卡上并行計(jì)算負(fù)載均衡邏輯就寫(xiě)在 comfy/multigpu.py 里同進(jìn)程內(nèi)完成不需要額外部署。第二條是多實(shí)例方案卡與卡之間要完全隔離、跑不同模型或不同用戶時(shí)更合適CUDA_VISIBLE_DEVICES0 python main.py --port 8188 CUDA_VISIBLE_DEVICES1 python main.py --port 8189或者只寫(xiě)--cuda-device 0、--cuda-device 1也可以達(dá)到同樣效果。多個(gè)實(shí)例起來(lái)之后寫(xiě)個(gè)簡(jiǎn)單輪詢器把任務(wù)分發(fā)到不同端口參考 basic_api_example.py 的隊(duì)列接口即可for port in (8188, 8189): requests.post(fhttp://127.0.0.1:{port}/prompt, jsonprompt)說(shuō)白了就是同進(jìn)程分片和跨實(shí)例并行的取舍任務(wù)同質(zhì)、追求單任務(wù)延遲選前者任務(wù)異構(gòu)、追求吞吐選后者。收個(gè)尾把參數(shù)記成基線調(diào)完參數(shù)別急著宣布勝利把當(dāng)前完整的啟動(dòng)命令和一次出圖耗時(shí)記下來(lái)當(dāng)基線之后每改一個(gè)參數(shù)就記一次結(jié)果兩周后回看才有數(shù)據(jù)可依。最后提醒一個(gè)最常見(jiàn)的坑動(dòng)態(tài) VRAM 是默認(rèn)行為--lowvram在這種狀態(tài)下基本不生效顯存不夠時(shí)應(yīng)該優(yōu)先試--reserve-vram和--vram-headroom而不是往--lowvram上堆?!久赓M(fèi)下載鏈接】ComfyUIThe most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考