Linux + Radeon RX 7800 XT での生成AIに関するメモその2
2025/9/22 時点で色々実験した結果のメモです。あくまでも手元の Linux + 7800 XT での結果なので他の環境では異なる可能性があります。
この記事よりさらに簡易的なメモです。
動作環境
| 環境 | |
|---|---|
| CPU | Ryzen 5600G |
| メモリ | DDR4 3200 32GB |
| マザーボード | Asrock B450M-HDV |
| グラフィックボード | SAAPPHIRE PULSE AMD Radeon RX 7800 XT |
| OS | Fedora 42(ネイティブ実行) |
| GPU実行環境 | ROCm 6.3.1とVulkan(OS標準) |
ROCm 7.0.1
Docker で Ubuntu 24.04.3 を入れて試してみましが、Fedora 42 標準の ROCm 6.3.1 と特に動作は変わりませんでした。
ComfyUI
PyTorch
2025/9/22時点では安定版 PyTorch 2.8 で特に問題ないです。
pip install torch torchvision torchaudio pytorch-triton-rocm --index-url https://download.pytorch.org/whl/rocm6.3
ComfyUI の修正
を参考に comfy/model_management.py について、ROCm と CUDA で異なる動作になっている箇所を同じ動作になるよう修正します。
311行目あたり
MIN_WEIGHT_MEMORY_RATIO = 0.4
if is_nvidia():
MIN_WEIGHT_MEMORY_RATIO = 0.0
を
MIN_WEIGHT_MEMORY_RATIO = 0.4
if is_nvidia() or is_amd():
MIN_WEIGHT_MEMORY_RATIO = 0.0
にします。
動作にほとんど影響はないようですが、VRAM の消費量について改善する可能性があります。
926行目あたり
# NOTE: bfloat16 seems to work on AMD for the VAE but is extremely slow in some cases compared to fp32
# slowness still a problem on pytorch nightly 2.9.0.dev20250720+rocm6.4 tested on RDNA3
# also a problem on RDNA4 except fp32 is also slow there.
# This is due to large bf16 convolutions being extremely slow.
if d == torch.bfloat16 and ((not is_amd()) or amd_min_version(device, min_rdna_version=4)) and should_use_bf16(device):
return d
を
# NOTE: bfloat16 seems to work on AMD for the VAE but is extremely slow in some cases compared to fp32
# slowness still a problem on pytorch nightly 2.9.0.dev20250720+rocm6.4 tested on RDNA3
# also a problem on RDNA4 except fp32 is also slow there.
# This is due to large bf16 convolutions being extremely slow.
if d == torch.bfloat16 and should_use_bf16(device):
return d
にします。
RDNA3 (7800 XT等)で VAE が極端に遅くなる問題があると書かれていますが、pytorch 2.8.0+rocm6.3 では特に問題は起きていないので、bfloat16 を有効にします。修正しない場合、bfloat16 を float32 で動かすので動作速度に大幅な影響を与えます。
1114行目あたり
def pytorch_attention_enabled_vae():
if is_amd():
return False # enabling pytorch attention on AMD currently causes crash when doing high res
return pytorch_attention_enabled()
を
def pytorch_attention_enabled_vae():
# if is_amd():
# return False # enabling pytorch attention on AMD currently causes crash when doing high res
return pytorch_attention_enabled()
にします。
高解像度で VAE を pytorch cross attention で動かすとクラッシュすると書いてありますが、pytorch 2.8.0+rocm6.3 では特に問題は起きていないので、VAE を split cross attention ではなく pytorch cross attention で動かすようにします。VAE の動作速度が大幅に改善します。
Flash Attention
ComfyUI 標準の pytorch cross attention より Unet や Text Encoder の動作速度が改善し、VRAM の消費が減ります。
こちらを参考にインストールします。
ROCm の方ではなく Flash Attention 公式の main_perf ブランチからインストールします。
git clone https://github.com/Dao-AILab/flash-attention
git switch main_perf
pip install triton
FLASH_ATTENTION_TRITON_AMD_ENABLE="TRUE" pip install flash-attn
ComfyUI の起動時に環境変数の設定 FLASH_ATTENTION_TRITON_AMD_ENABLE="TRUE" が必要で、起動オプションに --use-flash-attention を指定する必要があります。
export FLASH_ATTENTION_TRITON_AMD_ENABLE="TRUE"
python main.py --use-flash-attention
Sage Attention
次のコマンドでバージョン 1 が入ります。
pip install sageattention
ComfyUI の起動オプションに--use-sage-attentionを加えると有効になりますが、Flash Attention と比べると VRAM の消費が多く、Wan 2.2 I2V が動きません。Sage Attention 2++ の方は2025/9/22時点では setup.py が CUDA のみ対応でビルドできません。
xformers
うまく動作しません。入れると--disable-xformers をつけていても問題が起きる場合があります。ROCm 用の PyTorch 等と同じ場所に pip 用の配布パッケージがあります。
キャッシュ管理
ComfyUI にはノードキャッシュとモデルキャッシュについて 3 つのオプションがあります。
- --cache-classic
Use the old style (aggressive) caching. - --cache-lru CACHE_LRU
Use LRU caching with a maximum of N node results cached. May use more RAM/VRAM. - --cache-none
Reduced RAM/VRAM usage at the expense of executing every node for each run.
classic と LRU と none に加えてもう一つ new style caching があるように見えますが、execute.pyを見る限り 3 つです(none = DEPENDENCY_AWARE)。
91行目あたり
class CacheType(Enum):
CLASSIC = 0
LRU = 1
DEPENDENCY_AWARE = 2
class CacheSet:
def __init__(self, cache_type=None, cache_size=None):
if cache_type == CacheType.DEPENDENCY_AWARE:
self.init_dependency_aware_cache()
logging.info("Disabling intermediate node cache.")
elif cache_type == CacheType.LRU:
if cache_size is None:
cache_size = 0
self.init_lru_cache(cache_size)
logging.info("Using LRU cache")
else:
self.init_classic_cache()
7800 XT で Wan 2.2 I2V を動かそうとすると、モデルまたはキャッシュの管理に問題があるようで、途中で固まったり、1 回目は生成できても 2 回目の生成が失敗したりします。ComfyUI の起動オプションに--cache-noneを付けると問題を回避できました。実行結果がキャッシュされないので、プロンプトの処理や VAE エンコード等を毎回実行することになりますが。
その他の ComyUI 起動オプション
- --fast fp16_accumulation
fp16_accumulation を有効にします。問題なく動くようです。 - 環境変数
TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
問題なく動きます。 - 環境変数
PYTORCH_TUNABLEOP_ENABLED=1
一部ワークフローで動作しない問題が起きています。
現在使用している ComfyUI 起動オプション
export TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
export FLASH_ATTENTION_TRITON_AMD_ENABLE="TRUE"
python main.py --use-flash-attention --disable-xformers --cache-none --auto-launch --fast fp16_accumulation --bf16-vae
sd-scripts
bitsandbyteが必要なので、
を参考に次のようにビルド&インストールします。
git clone https://github.com/ROCm/bitsandbytes/
cd bitsandbytes
cmake -DCOMPUTE_BACKEND=hip -DBNB_ROCM_ARCH="gfx1101"
cmake --build .
python setup.py install
7800 XT は gfx1101 なのでこれを指定します。グラフィックボードとの対応関係は
次のページを参照してください。
triton のキャッシュ
~/.triton にキャッシュされるので、Attention の設定を変えた場合は削除しないと反映されない場合があります。
rm -rf ~/.tritron