0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux + Radeon RX 7800 XT での生成AIに関するメモその2

Last updated at Posted at 2025-09-22

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?