ComfyUI on AMD Strix Halo (gfx1151) - ROCm 7.1.1 完整建置與測試指南
前言
AMD Strix Halo (gfx1151) 是 AMD 最新的 APU 架構,搭載 RDNA 3.5 GPU。本文記錄了在此平台上建置 ComfyUI 進行 AI 圖像生成的完整步驟與測試結果。
經過多次(大概就是幾個晚上,幾十種組合)嘗試後,發現 ROCm 7.1.1 官方 PyTorch 映像已原生支援 gfx1151,無需任何自訂 wheels 或環境變數覆蓋就能正常運作。作個紀錄來避雷,而且這可用性在兩個月前是無法想像的…。
硬體環境
| 項目 | 規格 |
|---|---|
| CPU/APU | AMD Ryzen AI Max+ 395 (Strix Halo) |
| GPU 架構 | gfx1151 (RDNA 3.5) |
| GPU 名稱 | AMD Radeon 8060S |
| 記憶體 | 96GB 統一記憶體(PyTorch 可見 128GB) |
| 作業系統 | Ubuntu 25.10 |
軟體環境
| 項目 | 版本 |
|---|---|
| 基礎映像 | rocm/pytorch:rocm7.1.1_ubuntu24.04_py3.12_pytorch_release_2.9.1 |
| Python | 3.12.3 |
| PyTorch | 2.9.1+rocm7.1.1 |
| ROCm | 7.1.1 |
| ComfyUI | 0.4.0 |
測試過的主要組合
| 方案 | 結果 | 問題 |
|---|---|---|
| pccr10001 wheels + ROCm 7.0/7.1/7.2 | ❌ 失敗 | NCCL symbol 不相容 |
| AMD gfx1151 nightly | ❌ 失敗 | Segfault / invalid device function |
| scottt wheel + ROCm 6.4.3 | ❌ 失敗 | ROCm 將 gfx1151 誤識別為 gfx1100 |
| scottt wheel + ROCm 7.1.1 | ❌ 失敗 | 缺少相容 torchvision |
| 官方 ROCm 7.1.1 PyTorch | ✅ 成功 | 原生支援,無需自訂 |
第一部分:Docker 環境建置
步驟 1:建立專案目錄結構
mkdir -p comfyui-gfx1151
cd comfyui-gfx1151
# 建立模型目錄
mkdir -p models/{checkpoints,clip,vae,loras,controlnet,text_encoders,unet,diffusion_models}
mkdir -p output
mkdir -p custom_nodes
步驟 2:建立 Dockerfile
建立 Dockerfile 檔案:
# ComfyUI for AMD Ryzen AI Max+ 395 (gfx1151)
# 使用官方 ROCm 7.1.1 PyTorch 映像 - 原生支援 gfx1151
FROM rocm/pytorch:rocm7.1.1_ubuntu24.04_py3.12_pytorch_release_2.9.1
LABEL maintainer="ComfyUI gfx1151"
LABEL description="ComfyUI with official ROCm 7.1.1 PyTorch (native gfx1151 support)"
# 設定環境變數
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
# gfx1151 優化環境變數
ENV PYTORCH_TUNABLEOP_ENABLED=0
ENV MIOPEN_FIND_MODE=FAST
ENV ROCBLAS_USE_HIPBLASLT=1
ENV HIP_VISIBLE_DEVICES=0
ENV TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
ENV AMD_LOG_LEVEL=0
# 安裝額外系統相依套件
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ffmpeg \
libgl1 \
libglib2.0-0 \
&& rm -rf /var/lib/apt/lists/*
# 工作目錄
WORKDIR /opt
# Clone ComfyUI
RUN git clone https://github.com/comfyanonymous/ComfyUI.git
WORKDIR /opt/ComfyUI
# 驗證 PyTorch 版本
RUN python -c "import torch; print(f'PyTorch version: {torch.__version__}')"
# 安裝 ComfyUI 相依套件(排除 torch 相關套件避免覆蓋)
RUN grep -v -E "^torch" requirements.txt > requirements_no_torch.txt && \
pip install --no-cache-dir -r requirements_no_torch.txt && \
rm requirements_no_torch.txt
# 安裝額外常用套件
RUN pip install --no-cache-dir \
opencv-python-headless \
scipy \
scikit-image \
accelerate \
omegaconf \
einops \
open-clip-torch \
kornia \
spandrel \
ftfy \
torchsde \
torchdiffeq \
timm \
antlr4-python3-runtime==4.9.* \
imageio
# 驗證 PyTorch 版本沒有被覆蓋
RUN python -c "import torch; assert 'rocm7.1.1' in torch.__version__ or '2.9.1' in torch.__version__, f'Wrong torch version: {torch.__version__}'"
# 安裝 ComfyUI Manager
RUN cd /opt/ComfyUI/custom_nodes && \
git clone https://github.com/ltdrdata/ComfyUI-Manager.git || true
# 安裝 ComfyUI-GGUF (FLUX 2 GGUF 模型支援)
RUN cd /opt/ComfyUI/custom_nodes && \
git clone https://github.com/city96/ComfyUI-GGUF.git && \
pip install --no-cache-dir gguf
# 安裝 ROCm Ninodes (AMD gfx1151 效能優化,速度影響很大)
RUN cd /opt/ComfyUI/custom_nodes && \
git clone https://github.com/iGavroche/rocm-ninodes.git && \
cd rocm-ninodes && \
pip install --no-cache-dir -r requirements.txt || true
# 建立必要目錄
RUN mkdir -p /opt/ComfyUI/models/checkpoints \
/opt/ComfyUI/models/clip \
/opt/ComfyUI/models/vae \
/opt/ComfyUI/models/loras \
/opt/ComfyUI/models/controlnet \
/opt/ComfyUI/models/text_encoders \
/opt/ComfyUI/models/diffusion_models \
/opt/ComfyUI/output \
/opt/ComfyUI/input
# 複製啟動腳本
COPY entrypoint.sh /opt/entrypoint.sh
RUN chmod +x /opt/entrypoint.sh
# 暴露連接埠
EXPOSE 8188
# 啟動指令
ENTRYPOINT ["/opt/entrypoint.sh"]
步驟 3:建立啟動腳本
建立 entrypoint.sh 檔案:
#!/bin/bash
set -e
echo "=============================================="
echo " ComfyUI for AMD gfx1151 (Strix Halo)"
echo "=============================================="
# 顯示 GPU 資訊
echo ""
echo ">>> 檢查 ROCm GPU 狀態..."
if command -v rocm-smi &> /dev/null; then
rocm-smi --showproductname 2>/dev/null || echo "rocm-smi 無法取得 GPU 資訊"
fi
# 顯示 PyTorch 版本與 GPU 支援
echo ""
echo ">>> 檢查 PyTorch 配置..."
python3 -c "
import torch
print(f'PyTorch 版本: {torch.__version__}')
print(f'CUDA/ROCm 可用: {torch.cuda.is_available()}')
if torch.cuda.is_available():
print(f'GPU 名稱: {torch.cuda.get_device_name(0)}')
print(f'GPU 記憶體: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f} GB')
" 2>/dev/null || echo "無法檢查 PyTorch 配置"
# 設定環境變數(確保設定正確)
export PYTORCH_TUNABLEOP_ENABLED=${PYTORCH_TUNABLEOP_ENABLED:-0}
export MIOPEN_FIND_MODE=${MIOPEN_FIND_MODE:-FAST}
export ROCBLAS_USE_HIPBLASLT=${ROCBLAS_USE_HIPBLASLT:-1}
# 清除可能干擾的 CUDA 變數
unset CUDA_VISIBLE_DEVICES 2>/dev/null || true
# 進入 ComfyUI 目錄
cd /opt/ComfyUI
# 解析 COMFYUI_ARGS 或使用預設值
ARGS="${COMFYUI_ARGS:---listen 0.0.0.0 --use-pytorch-cross-attention}"
echo ""
echo ">>> 啟動 ComfyUI..."
echo " 參數: $ARGS"
echo " 環境變數:"
echo " PYTORCH_TUNABLEOP_ENABLED=$PYTORCH_TUNABLEOP_ENABLED"
echo " MIOPEN_FIND_MODE=$MIOPEN_FIND_MODE"
echo " ROCBLAS_USE_HIPBLASLT=$ROCBLAS_USE_HIPBLASLT"
echo ""
echo "=============================================="
echo " ComfyUI 網址: http://localhost:8188"
echo "=============================================="
echo ""
# 啟動 ComfyUI
exec python3 main.py $ARGS "$@"
記得給予執行權限:
chmod +x entrypoint.sh
步驟 4:建立 Docker Compose 配置
建立 docker-compose.yml 檔案:
# ComfyUI with official ROCm 7.1.1 PyTorch - native gfx1151 support
# 使用方式: docker compose up --build
services:
comfyui:
build:
context: .
dockerfile: Dockerfile
container_name: comfyui-gfx1151
# ROCm GPU 存取設定
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
# 群組權限 - 使用數字 GID 避免群組名稱問題
group_add:
- "44" # video group GID
- "992" # render group GID (可能需要根據您的系統調整)
# 安全設定(ROCm 需要)
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
# 共享記憶體(大型模型需要)
ipc: host
shm_size: '64gb'
# 環境變數優化
environment:
# PyTorch 記憶體管理 - 優化高解析度生成
- PYTORCH_HIP_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:6144
# GPU 記憶體配置(統一記憶體架構)
- GPU_MAX_HEAP_SIZE=100
- GPU_MAX_ALLOC_PERCENT=100
# ROCm 優化
- PYTORCH_TUNABLEOP_ENABLED=0
- MIOPEN_FIND_MODE=FAST
- ROCBLAS_USE_HIPBLASLT=1
- TORCH_CUDNN_ENABLED=0
- TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
# 防止 CUDA 變數干擾 ROCm
- CUDA_VISIBLE_DEVICES=
# HIP 設備
- HIP_VISIBLE_DEVICES=0
- AMD_LOG_LEVEL=0
# ComfyUI 設定 - 使用 pytorch cross attention + 保留 4GB VRAM 給系統
- COMFYUI_ARGS=--listen 0.0.0.0 --use-pytorch-cross-attention --reserve-vram 4
# 持久化存儲
volumes:
- ./models/checkpoints:/opt/ComfyUI/models/checkpoints
- ./models/clip:/opt/ComfyUI/models/clip
- ./models/vae:/opt/ComfyUI/models/vae
- ./models/loras:/opt/ComfyUI/models/loras
- ./models/unet:/opt/ComfyUI/models/unet
- ./models/diffusion_models:/opt/ComfyUI/models/diffusion_models
- ./models/text_encoders:/opt/ComfyUI/models/text_encoders
- ./models/upscale_models:/opt/ComfyUI/models/upscale_models
- ./output:/opt/ComfyUI/output
# 網路設定
ports:
- "8188:8188"
# 健康檢查
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8188/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
restart: unless-stopped
步驟 5:確認 render group GID
在執行前,請先確認您系統的 render group GID:
getent group render | cut -d: -f3
如果輸出不是 992,請修改 docker-compose.yml 中的 GID。
步驟 6:啟動 ComfyUI
# 首次啟動(含建置)
docker compose up --build -d
# 查看日誌
docker compose logs -f
# 停止
docker compose down
啟動成功後,開啟瀏覽器存取:http://localhost:8188
第二部分:模型下載與配置
注意:ComfyUI-GGUF 節點已內建於 Docker 映像中,無需手動安裝。
必要模型清單
以下是本測試使用的模型,請下載並放置到對應目錄:
Stable Diffusion 模型
| 模型 | 大小 | 目錄 | 下載來源 |
|---|---|---|---|
sd3.5_medium_incl_clips_t5xxlfp8scaled.safetensors | 12GB | models/checkpoints/ | HuggingFace |
FLUX 1 Schnell 模型
| 模型 | 大小 | 目錄 | 下載來源 |
|---|---|---|---|
flux1-schnell-fp8.safetensors | 17GB | models/checkpoints/ | HuggingFace |
FLUX 2 Dev 模型
| 模型 | 大小 | 目錄 | 說明 |
|---|---|---|---|
mistral_3_small_flux2_fp8.safetensors | 18GB | models/text_encoders/ | Text Encoder(必要) |
flux2-dev-Q4_K_S.gguf | 19GB | models/unet/ | Diffusion Model (GGUF 量化) |
flux2-vae.safetensors | 336MB | models/vae/ | VAE Decoder |
目錄結構
comfyui-gfx1151/
├── models/
│ ├── checkpoints/
│ │ ├── sd3.5_medium_incl_clips_t5xxlfp8scaled.safetensors
│ │ └── flux1-schnell-fp8.safetensors
│ ├── text_encoders/
│ │ └── mistral_3_small_flux2_fp8.safetensors
│ ├── unet/
│ │ └── flux2-dev-Q4_K_S.gguf
│ ├── vae/
│ │ └── flux2-vae.safetensors
│ ├── clip/
│ ├── loras/
│ └── controlnet/
├── output/
├── Dockerfile
├── docker-compose.yml
└── entrypoint.sh
第三部分:ComfyUI Workflow 配置
重要:VAEDecodeTiled 節點
在 gfx1151 上生成 1024x1024 或更高解析度的圖片時,必須使用 VAEDecodeTiled 節點取代標準 VAEDecode。
原因:標準 VAE decode 在高解析度時會產生過大的 GPU 記憶體操作,導致 GPU Hang。
建議參數:
{
"tile_size": 256,
"overlap": 64,
"temporal_size": 64,
"temporal_overlap": 8
}
SD 3.5 Medium Workflow (1024x1024)
{
"3": {
"class_type": "CheckpointLoaderSimple",
"inputs": {
"ckpt_name": "sd3.5_medium_incl_clips_t5xxlfp8scaled.safetensors"
}
},
"6": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": ["3", 1],
"text": "a majestic dragon flying over a medieval castle at sunset, highly detailed, dramatic lighting"
}
},
"7": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": ["3", 1],
"text": "blurry, low quality, distorted"
}
},
"5": {
"class_type": "EmptySD3LatentImage",
"inputs": {
"width": 1024,
"height": 1024,
"batch_size": 1
}
},
"13": {
"class_type": "KSampler",
"inputs": {
"model": ["3", 0],
"positive": ["6", 0],
"negative": ["7", 0],
"latent_image": ["5", 0],
"seed": 42,
"steps": 20,
"cfg": 4.5,
"sampler_name": "euler",
"scheduler": "normal",
"denoise": 1.0
}
},
"8": {
"class_type": "VAEDecodeTiled",
"inputs": {
"samples": ["13", 0],
"vae": ["3", 2],
"tile_size": 256,
"overlap": 64,
"temporal_size": 64,
"temporal_overlap": 8
}
},
"9": {
"class_type": "SaveImage",
"inputs": {
"images": ["8", 0],
"filename_prefix": "sd35_1024"
}
}
}
FLUX 2 Dev Workflow (1024x1024 / 1920x1080)
FLUX 2 使用不同於 FLUX 1 的架構:
- Text Encoder: 單一 Mistral encoder(不是 dual CLIP)
- Diffusion Model: 支援 GGUF 量化版本
- Scheduler: 專用 Flux2Scheduler
{
"1": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "mistral_3_small_flux2_fp8.safetensors",
"type": "flux2"
}
},
"2": {
"class_type": "UnetLoaderGGUF",
"inputs": {
"unet_name": "flux2-dev-Q4_K_S.gguf"
}
},
"3": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "flux2-vae.safetensors"
}
},
"4": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": ["1", 0],
"text": "a majestic dragon flying over a medieval castle at sunset, highly detailed, dramatic lighting"
}
},
"5": {
"class_type": "EmptyFlux2LatentImage",
"inputs": {
"width": 1920,
"height": 1080,
"batch_size": 1
}
},
"6": {
"class_type": "Flux2Scheduler",
"inputs": {
"steps": 20,
"width": 1920,
"height": 1080
}
},
"7": {
"class_type": "SamplerCustomAdvanced",
"inputs": {
"noise": ["8", 0],
"guider": ["9", 0],
"sampler": ["10", 0],
"sigmas": ["6", 0],
"latent_image": ["5", 0]
}
},
"8": {
"class_type": "RandomNoise",
"inputs": {
"noise_seed": 12345
}
},
"9": {
"class_type": "BasicGuider",
"inputs": {
"model": ["2", 0],
"conditioning": ["4", 0]
}
},
"10": {
"class_type": "KSamplerSelect",
"inputs": {
"sampler_name": "euler"
}
},
"11": {
"class_type": "VAEDecodeTiled",
"inputs": {
"samples": ["7", 0],
"vae": ["3", 0],
"tile_size": 256,
"overlap": 64,
"temporal_size": 64,
"temporal_overlap": 8
}
},
"12": {
"class_type": "SaveImage",
"inputs": {
"images": ["11", 0],
"filename_prefix": "flux2_1920x1080"
}
}
}
節點連接說明:
| 節點 | 功能 | 輸入來源 |
|---|---|---|
| CLIPLoader | 載入 Mistral text encoder | - |
| UnetLoaderGGUF | 載入 GGUF 量化的 diffusion model | - |
| VAELoader | 載入 VAE | - |
| CLIPTextEncode | 編碼文字提示 | CLIPLoader |
| EmptyFlux2LatentImage | 建立空白 latent | - |
| Flux2Scheduler | 計算 sigma 時程 | - |
| RandomNoise | 產生隨機噪聲 | - |
| BasicGuider | 引導採樣 | UnetLoaderGGUF, CLIPTextEncode |
| KSamplerSelect | 選擇採樣器 | - |
| SamplerCustomAdvanced | 執行採樣 | 以上各節點 |
| VAEDecodeTiled | 解碼 latent 為圖片 | SamplerCustomAdvanced, VAELoader |
| SaveImage | 儲存結果 | VAEDecodeTiled |
第四部分:測試結果
基本測試 (512x512)
| 模型 | 解析度 | 步數 | 採樣時間 | 總時間 | 狀態 |
|---|---|---|---|---|---|
| SD 3.5 Medium | 512x512 | 20 | ~18s | ~190s | ✅ 成功 |
| FLUX Schnell | 512x512 | 4 | ~38s | ~210s | ✅ 成功 |
| FLUX 2 Dev Q4 | 512x512 | 20 | ~8min | ~11min | ✅ 成功 |
高解析度測試 (1024x1024)
| 模型 | 解析度 | 步數 | 總時間 | VAE 模式 | 狀態 |
|---|---|---|---|---|---|
| SD 3.5 Medium | 1024x1024 | 20 | ~134s | Tiled | ✅ 成功 |
| FLUX Schnell | 1024x1024 | 4 | ~145s | Tiled | ✅ 成功 |
| FLUX 2 Dev Q4 | 1024x1024 | 20 | ~418s (首次) | Tiled | ✅ 成功 |
1024x1024 生成結果
SD 3.5 Medium - 奇幻插畫風格,色彩鮮豔:

FLUX Schnell - 快速生成(僅 4 步),適合預覽:

FLUX 2 Dev Q4 - 電影級寫實品質,細節最豐富:

超高解析度測試 (1920x1080)
這是本次測試的重點,驗證 FLUX 2 在接近 2K 解析度下的穩定性。
| 項目 | 首次執行 | 第二次執行 |
|---|---|---|
| Step 1 (Kernel Tuning) | 25:32 | 0:38 |
| Steps 2-20 速度 | ~40s/step | ~39s/step |
| 採樣總時間 | 37:55 | 12:59 |
| VAE Decode | ~2:32 | ~0:13 |
| 總時間 | 40:27 | 13:12 |
| 系統崩潰 | ❌ 無 | ❌ 無 |
1920x1080 生成結果
FLUX 2 Dev Q4 - 接近 2K 解析度,電影級品質:

效能對比總覽
| 模型 | 1024x1024 時間 | 1920x1080 時間 | 品質評價 |
|---|---|---|---|
| SD 3.5 Medium | ~134s | - | ⭐⭐⭐⭐ 奇幻插畫風 |
| FLUX Schnell | ~145s | - | ⭐⭐⭐ 快速預覽 |
| FLUX 2 Dev Q4 | ~418s | ~13min (tuned) | ⭐⭐⭐⭐⭐ 電影級寫實 |
第五部分:關鍵發現
1. 停用 TunableOp 是關鍵
重要更新:建議停用
PYTORCH_TUNABLEOP_ENABLED(設為 0),避免每次容器重啟都需要花費 25+ 分鐘進行 kernel tuning。詳見第七部分。
2. VAEDecodeTiled 是必須的
在 gfx1151 上生成 1024x1024 或更高解析度的圖片時,必須使用 VAEDecodeTiled 節點。使用標準 VAEDecode 會導致 GPU Hang。
3. 環境變數說明
| 變數 | 值 | 說明 |
|---|---|---|
PYTORCH_TUNABLEOP_ENABLED | 0 | 停用避免重啟 tuning |
MIOPEN_FIND_MODE | FAST | 加速 kernel 搜尋 |
ROCBLAS_USE_HIPBLASLT | 1 | 使用 hipBLASLt |
TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL | 1 | AOTriton 加速 |
PYTORCH_HIP_ALLOC_CONF | garbage_collection_threshold:0.6,max_split_size_mb:6144 | 記憶體管理優化 |
GPU_MAX_HEAP_SIZE | 100 | 最大 heap 大小 (%) |
GPU_MAX_ALLOC_PERCENT | 100 | 最大分配比例 (%) |
4. 不需要 HSA_OVERRIDE_GFX_VERSION
使用官方 ROCm 7.1.1 PyTorch 映像時,不需要設定 HSA_OVERRIDE_GFX_VERSION。gfx1151 已被原生支援。
第六部分:常見問題與解決方案
GPU Hang 問題
症狀:生成高解析度圖片時,GPU 在 VAE decode 階段卡住,日誌停止更新。
解決方案:使用 VAEDecodeTiled 節點取代 VAEDecode。
首次執行極慢(已解決)
症狀:首次運行某個解析度時,第一步需要 10-25 分鐘。
原因:MIOpen kernel tuning - ROCm 需要為新的 tensor 尺寸找到最佳的 GPU kernel。
解決方案:設定 PYTORCH_TUNABLEOP_ENABLED=0 停用 TunableOp,避免每次重啟都要進行 kernel tuning。詳見第七部分。
NCCL Symbol 錯誤
症狀:看到 ncclCommWindowRegister 或類似的 NCCL 錯誤。
原因:使用了不相容的 PyTorch wheels(如 pccr10001 版本)。
解決方案:改用官方 ROCm PyTorch 映像。
GPU 未被識別
症狀:PyTorch 顯示 torch.cuda.is_available() = False。
檢查步驟:
# 檢查 GPU 設備
ls -la /dev/kfd /dev/dri
# 檢查群組權限
groups
# 檢查 ROCm 狀態
rocm-smi --showproductname
解決方案:確保使用者在 video 和 render 群組。
第七部分:效能優化進階
經過進一步測試,我們發現了幾個可以大幅提升效能的優化方法。
1. 停用 TunableOp 避免重啟延遲
原本每次容器重啟都需要花費 25+ 分鐘進行 kernel tuning。設定 PYTORCH_TUNABLEOP_ENABLED=0 可以完全避免這個問題:
environment:
- PYTORCH_TUNABLEOP_ENABLED=0 # 停用避免重啟 tuning
2. AOTriton 實驗性優化
啟用 AOTriton 實驗性功能可以獲得額外的效能提升:
environment:
- TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
3. ROCm Ninodes 自訂節點
ROCm Ninodes 是專為 AMD GPU 優化的 ComfyUI 節點,聲稱可提升 78% 效能。
安裝方式(加入 Dockerfile):
# 安裝 ROCm Ninodes (AMD gfx1151 效能優化)
RUN cd /opt/ComfyUI/custom_nodes && \
git clone https://github.com/iGavroche/rocm-ninodes.git && \
cd rocm-ninodes && \
pip install --no-cache-dir -r requirements.txt || true
4. 更新後的環境變數
更新 docker-compose.yml:
environment:
# PyTorch 記憶體管理
- PYTORCH_HIP_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:6144
# GPU 記憶體配置(統一記憶體架構)
- GPU_MAX_HEAP_SIZE=100
- GPU_MAX_ALLOC_PERCENT=100
# ROCm 優化(重要更新)
- PYTORCH_TUNABLEOP_ENABLED=0 # 停用避免重啟 tuning
- MIOPEN_FIND_MODE=FAST
- ROCBLAS_USE_HIPBLASLT=1
- TORCH_CUDNN_ENABLED=0 # 停用 cuDNN
- TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1 # AOTriton 加速
# 防止 CUDA 變數干擾 ROCm
- CUDA_VISIBLE_DEVICES=
# HIP 設備
- HIP_VISIBLE_DEVICES=0
- AMD_LOG_LEVEL=0
效能改善結果
| 優化項目 | 改善幅度 |
|---|---|
| 停用 TunableOp | 省去 25+ 分鐘 kernel tuning |
| AOTriton 實驗性 | 約 10-15% 效能提升 |
| ROCm Ninodes | 聲稱 78% 效能提升 |
實測結果:套用所有優化後,原本需要 50+ 分鐘的 1920x1080 生成,現在只需約 13 分鐘完成。
第八部分:實戰應用 - 桌布生成工作流程
以下是使用 FLUX 2 生成高品質桌布的完整工作流程。
高品質桌布生成流程
為了獲得最佳品質,建議採用以下流程:
- 生成 720P 基礎版本 (1280x720) - 約 6 分鐘
- img2img 細節強化 (denoise=0.50) - 約 8 分鐘(可選)
- RealESRGAN 4x 放大 + 縮放至 2K - 約 1.5 分鐘
RealESRGAN 放大模型設定
下載 RealESRGAN_x4plus.pth 並放到 models/upscale_models/ 目錄。
更新 docker-compose.yml 加入 volume:
volumes:
- ./models/upscale_models:/opt/ComfyUI/models/upscale_models
RealESRGAN 放大 Workflow
{
"1": {
"class_type": "LoadImage",
"inputs": { "image": "your_image.png" }
},
"2": {
"class_type": "UpscaleModelLoader",
"inputs": { "model_name": "RealESRGAN_x4plus.pth" }
},
"3": {
"class_type": "ImageUpscaleWithModel",
"inputs": {
"upscale_model": ["2", 0],
"image": ["1", 0]
}
},
"4": {
"class_type": "ImageScale",
"inputs": {
"image": ["3", 0],
"upscale_method": "lanczos",
"width": 2560,
"height": 1440,
"crop": "disabled"
}
},
"5": {
"class_type": "SaveImage",
"inputs": {
"images": ["4", 0],
"filename_prefix": "upscaled_2k"
}
}
}
實戰案例:四季桌布生成
以下是使用上述流程生成的桌布範例:
茶壺山風格(瑞芳海岸)
| 季節 | 預覽 |
|---|---|
| 夏日黃昏 | ![]() |
| 秋季楓紅 | ![]() |
| 春日晨曦 | ![]() |
| 冬季雪景 | ![]() |
東海岸風格(清水斷崖)
| 季節 | 預覽 |
|---|---|
| 夏日黃昏 | ![]() |
| 秋季楓紅 | ![]() |
| 春日晨曦 | ![]() |
| 冬季雪景 | ![]() |
Prompt 技巧
以下是生成高品質風景桌布的提示詞技巧:
- 明確指定人數:使用 “exactly four people” 避免人數錯誤
- 指定視角:使用 “back view from behind” 獲得背影視角
- 指定膚色:使用 “East Asian skin tone” 確保亞洲人外觀
- 避免誤解詞彙:不要使用 “wallpaper”(會被誤認為牆紙圖案)
- 強調品質:加入 “photorealistic, highly detailed, 8K quality, cinematic photography”
範例 Prompt:
Back view from behind, Asian Taiwanese family of exactly four people at Taiwan East Coast beach with dramatic cliffs and mountains, Qingshui Cliff style, parents standing on grassy hillside watching two young sons playing in shallow ocean water, summer golden sunset, sandy beach, green grass, blue sea, East Asian skin tone, photorealistic, highly detailed, 8K quality, cinematic photography
結論
AMD Strix Halo (gfx1151) 在 ROCm 7.1.1 下可以穩定運行 ComfyUI,支援包括 FLUX 2 在內的最新 AI 圖像生成模型。關鍵要點:
- ✅ 使用官方
rocm/pytorch:rocm7.1.1_ubuntu24.04_py3.12_pytorch_release_2.9.1映像 - ✅ 高解析度必須使用
VAEDecodeTiled - ✅ 停用 TunableOp (
PYTORCH_TUNABLEOP_ENABLED=0) 避免重啟延遲 - ✅ 96GB 統一記憶體足以運行所有測試的模型(包括 1920x1080)
- ❌ 不要設定
HSA_OVERRIDE_GFX_VERSION
對於 AMD APU 用戶來說,這是一個令人振奮的結果 —— 無需獨立顯卡也能進行高品質的 AI 圖像生成!
測試提示詞
所有測試使用相同的正向提示詞:
a majestic dragon flying over a medieval castle at sunset, highly detailed, dramatic lighting







