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/APUAMD 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
Python3.12.3
PyTorch2.9.1+rocm7.1.1
ROCm7.1.1
ComfyUI0.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.safetensors12GBmodels/checkpoints/HuggingFace

FLUX 1 Schnell 模型

模型大小目錄下載來源
flux1-schnell-fp8.safetensors17GBmodels/checkpoints/HuggingFace

FLUX 2 Dev 模型

模型大小目錄說明
mistral_3_small_flux2_fp8.safetensors18GBmodels/text_encoders/Text Encoder(必要)
flux2-dev-Q4_K_S.gguf19GBmodels/unet/Diffusion Model (GGUF 量化)
flux2-vae.safetensors336MBmodels/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 Medium512x51220~18s~190s✅ 成功
FLUX Schnell512x5124~38s~210s✅ 成功
FLUX 2 Dev Q4512x51220~8min~11min✅ 成功

高解析度測試 (1024x1024)

模型解析度步數總時間VAE 模式狀態
SD 3.5 Medium1024x102420~134sTiled✅ 成功
FLUX Schnell1024x10244~145sTiled✅ 成功
FLUX 2 Dev Q41024x102420~418s (首次)Tiled✅ 成功

1024x1024 生成結果

SD 3.5 Medium - 奇幻插畫風格,色彩鮮豔:

SD 3.5 Medium 1024x1024

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

FLUX Schnell 1024x1024

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

FLUX 2 Dev 1024x1024

超高解析度測試 (1920x1080)

這是本次測試的重點,驗證 FLUX 2 在接近 2K 解析度下的穩定性。

項目首次執行第二次執行
Step 1 (Kernel Tuning)25:320:38
Steps 2-20 速度~40s/step~39s/step
採樣總時間37:5512:59
VAE Decode~2:32~0:13
總時間40:2713:12
系統崩潰❌ 無❌ 無

1920x1080 生成結果

FLUX 2 Dev Q4 - 接近 2K 解析度,電影級品質:

FLUX 2 Dev 1920x1080

效能對比總覽

模型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_ENABLED0停用避免重啟 tuning
MIOPEN_FIND_MODEFAST加速 kernel 搜尋
ROCBLAS_USE_HIPBLASLT1使用 hipBLASLt
TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL1AOTriton 加速
PYTORCH_HIP_ALLOC_CONFgarbage_collection_threshold:0.6,max_split_size_mb:6144記憶體管理優化
GPU_MAX_HEAP_SIZE100最大 heap 大小 (%)
GPU_MAX_ALLOC_PERCENT100最大分配比例 (%)

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

解決方案:確保使用者在 videorender 群組。


第七部分:效能優化進階

經過進一步測試,我們發現了幾個可以大幅提升效能的優化方法。

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 生成高品質桌布的完整工作流程。

高品質桌布生成流程

為了獲得最佳品質,建議採用以下流程:

  1. 生成 720P 基礎版本 (1280x720) - 約 6 分鐘
  2. img2img 細節強化 (denoise=0.50) - 約 8 分鐘(可選)
  3. 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 技巧

以下是生成高品質風景桌布的提示詞技巧:

  1. 明確指定人數:使用 “exactly four people” 避免人數錯誤
  2. 指定視角:使用 “back view from behind” 獲得背影視角
  3. 指定膚色:使用 “East Asian skin tone” 確保亞洲人外觀
  4. 避免誤解詞彙:不要使用 “wallpaper”(會被誤認為牆紙圖案)
  5. 強調品質:加入 “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 圖像生成模型。關鍵要點:

  1. ✅ 使用官方 rocm/pytorch:rocm7.1.1_ubuntu24.04_py3.12_pytorch_release_2.9.1 映像
  2. ✅ 高解析度必須使用 VAEDecodeTiled
  3. ✅ 停用 TunableOp (PYTORCH_TUNABLEOP_ENABLED=0) 避免重啟延遲
  4. ✅ 96GB 統一記憶體足以運行所有測試的模型(包括 1920x1080)
  5. ❌ 不要設定 HSA_OVERRIDE_GFX_VERSION

對於 AMD APU 用戶來說,這是一個令人振奮的結果 —— 無需獨立顯卡也能進行高品質的 AI 圖像生成!


測試提示詞

所有測試使用相同的正向提示詞:

a majestic dragon flying over a medieval castle at sunset, highly detailed, dramatic lighting

參考資源