DCAI
Loading Light/Dark Toggl

ComfyUIにSageAttention 2.2/SpargeAttentionを導入してWAN2.2 14Bを高速化する方法

⏱️22min read
📅 2025年12月3日
ComfyUIにSageAttention 2.2/SpargeAttentionを導入してWAN2.2 14Bを高速化する方法のメイン画像

前回の記事ではWAN2.2の基本的な使い方を紹介しましたが、今回はWindows環境のComfyUIでWAN2.2やFlux系モデルの動画生成を高速化するために、「SageAttention 2.2」と「SpargeAttention」の導入方法を詳しく解説します。SageAttentionは、Attention処理の高速化と省メモリ化により、生成AIサービスのコスト最適化と性能向上を実現するライブラリです。SageAttention 2.2/SpargeAttentionの導入はWindowsユーザーにはやや複雑に感じられるかもしれませんが、woct0rdho氏が公開しているリポジトリを利用することで、比較的シンプルな手順で導入できます。本記事の手順に沿って、Wan2.2-I2V-A14BモデルやFlux.1の生成を効率よく高速化していきましょう。(⚠️Wan2.2-I2V-5Bモデルはノイズが出るため、SageAttention/SpargeAttentionを適用して使用することはできません。)

⚠️導入前の注意事項

ComfyUIにSageAttention/SpargeAttentionを導入する際、現在使用中の環境にそのままインストールしてしまうとTorchのバージョンが変わり、既存のカスタムノード等を壊してしまう恐れがあります。そのため、新しくポータル版をダウンロードしてから導入するようにしましょう。

今回はポータル版への導入方法に絞って解説します。Gitでクローンしている方やデスクトップ版を使っている方も、SageAttention/SpargeAttention専用のComfyUIとしてポータル版を別途インストールしておくことをおススメします。

未検証ですが、今回導入するポータル版は執筆時の最新版v0.3.75を使います。CUDAが13.0そしてTorchが2.9.1なので、RTX50XX系のGPUにも対応しています。ただし今回の解説では「SageAttention3」の導入は解説しません。

SageAttention/SpargeAttention導入のメリット・デメリット

SageAttention/SpargeAttentionの導入は、簡単にいうと「生成スピードを取るか、安定性を取るか」のトレードオフになります。

メリット

SageAttention/SpargeAttention導入のメリットとしては生成スピードが大幅に上がることです。WANの動画生成に加えて、Flux.1やQwen-Imageの生成スピードも大幅に上がります。

生成速度のサンプル

筆者の環境(RTX3090)で、Patreonで公開しているWAN2.2 14B I2Vのワークフローで検証したところ、1280x704サイズの5秒動画をLightning 4Step LoRAを使って4ステップで生成した場合、以下の様な生成速度でした。(アップスケーラー処理やフレーム補完は行っていません。)

  • 通常:約8分
  • SageAttention2.2:約5分
  • SpargeAttention:約4分

生成速度が約半分になっていることが確認できました。

デメリット

デメリットとしては、公式の推奨構成ではないのでComfyUI本体やカスタムノードがTorchのバージョン違いにより動作が不安定になり予期しないエラーが出る場合があります。

安定性以外にも、ComfyUIのアップデートが面倒になることです。SageAttention/SpargeAttentionおよびTritonがCUDAやTorchのバージョンにシビアなので、ComfyUIのアップデート前にCUDAやTorchのバージョンを確認する必要があります。ComfyUI内のCUDAやTorchが変わる場合は再度、CUDAやTorchに適したSageAttention/SpargeAttention、Tritonを再インストールする必要があります。

ComfyUIポータル版のインストール

ComfyUIポータル版のダウンロード

まずはComfyUIポータル版をダウンロードします。今回の例では執筆時の最新版v0.3.75を使います。⚠️これ以外のバージョンではうまくインストールできない場合がありますので、ご注意ください。

以下のリンクよりComfyUI_windows_portable_nvidia.7zをダウンロードしましょう。

ComfyUI_windows_portable_nvidia.7zの場所 

ダウンロードできたら、ComfyUI_windows_portable_SAの様な名前にして、現在のComfyUIがインストールされているフォルダーに配置します。例ではC:\Users\user-name\ComfyUI_windows_portable_SAに配置しています。

Pythonのバージョンおよびパッケージの確認(オプション)

配置が完了すればPythonのバージョンとパッケージを確認しましょう。

まずはファイルエクスプローラーでC:\Users\user-name\ComfyUI_windows_portable_SAを開きます。右クリックメニューから「ターミナルで開く」を選択するとC:\Users\user-name\ComfyUI_windows_portable_SAディレクトリでWindows PowerShellがひらきます。✅今回紹介するコマンドはすべてこのディレクトリからの実行を想定しています。

まずは、以下のコードを張り付けてPythonのバージョンを確認します。

python_embeded\python --version

コマンド実行でPythonのバージョンが表示されます。Python 3.13.9と出ていれば問題ありません。

Pythonのバージョン 

次にパッケージの確認をしましょう。以下のコードを実行します。

python_embeded\python.exe -s -m pip list

パッケージ内のtorch、torchaudio、torchvisionのバージョンを確認します。以下のようになっていれば問題ありません。

パッケージバージョン
torch2.9.1+cu130
torchaudio2.9.1+cu130
torchvision0.24.1+cu130
Pythonのパッケージリスト 

Tritonのインストール

Tritonとは、AI/機械学習ワークロードの高速化を目的とした、GPUカーネル最適化のための次世代開発基盤です。SageAttentionはTritonで最適化されたGPUカーネルを使用するため、高性能を引き出すにはTritonのインストールが前提になります。

Visual C++ 再頒布可能パッケージのインストール

初めにVisual C++ 再頒布可能パッケージ for Visual Studio 2015-2022をインストールしましょう。Tritonをコンパイルする為に必要です。

以下のリンクよりダウンロードしたexeファイルを実行します。

Triton-windows

WindowsでSage Attention 2.2/SpargeAttentionを使うには「Triton-windows」が必要になります。woct0rdho氏がWindows用にフォークされたリポジトリを公開しているのでこちらをインストールします。

リポジトリにも記載されていますが、使用するGPUの世代ごとに対応するTriton-windowsのバージョンが決まっているため、表を参考にしながら間違えないように注意しましょう。

TorchTriton-windows
2.73.3
2.83.4
2.93.5

今回使うComfyUIではTorchのバージョンが2.9なので、対応するTriton-windowsは3.5をつかいます。

既存のTritonのクリーンアップ(オプション)

今回用に新しくComfyUIポータル版をダウンロードしている方は不要ですが、インストールの失敗時や既存のComfyUIにTritonをインストールする場合は、パッケージから以前のTritonをアンインストールしておきましょう。

以下のコマンドでアンインストールしましょう。

python_embeded\python.exe -s -m pip uninstall triton

また、インストールの失敗などでTriton-windows自体をアンインストールしたい場合は、以下のコマンドを実行しましょう。

python_embeded\python.exe -s -m pip uninstall triton-windows

triton-windows 3.5.1のインストール

以下のコマンドでtriton-windows 3.5.1がインストールされます。

python_embeded\python.exe -m pip install -U "triton-windows<3.6"
triton-windows 3.5.1のインストール 

Pythonの必要ファイルのインストール(ポータル版のみ)

最後に、ポータル版には含まれていないPython 3.13のライブラリーファイルをコピーします。通常であれば一度ローカルにPythonをインストールしてからincludelibsフォルダーをコピーしますが、triton-windowsの作者woct0rdho氏が必要なファイルをまとめて公開してくれているため、それをダウンロードしてComfyUI_windows_portable_SA/python_embeded内にincludelibsフォルダーを置きます。⚠️すでにフォルダー内にあるLibとは別のフォルダーなので、libsLibの中に入れないでください。

直リンクになりますが、以下のリンクより「python_3.13.2_include_libs.zip」をダウンロードして、中身をC:\Users\user-name\ComfyUI_windows_portable_SA/python_embeded内に配置します。

フォルダーの配置箇所
フォルダーの配置箇所

triton-windowsの動作テスト(オプション)

インストールが完了したら、正しくインストールされたかテストしてみましょう。

C:\Users\user-name\ComfyUI_windows_portable_SA/ComfyUI内にtest_triton.pyファイルを作成して、以下のコードを貼り付けます。

import torch
import triton
import triton.language as tl

@triton.jit
def add_kernel(x_ptr, y_ptr, output_ptr, n_elements, BLOCK_SIZE: tl.constexpr):
    pid = tl.program_id(axis=0)
    block_start = pid * BLOCK_SIZE
    offsets = block_start + tl.arange(0, BLOCK_SIZE)
    mask = offsets < n_elements
    x = tl.load(x_ptr + offsets, mask=mask)
    y = tl.load(y_ptr + offsets, mask=mask)
    output = x + y
    tl.store(output_ptr + offsets, output, mask=mask)

def add(x: torch.Tensor, y: torch.Tensor):
    output = torch.empty_like(x)
    n_elements = output.numel()
    grid = lambda meta: (triton.cdiv(n_elements, meta["BLOCK_SIZE"]),)
    add_kernel[grid](x, y, output, n_elements, BLOCK_SIZE=1024)
    return output

a = torch.rand(3, device="cuda")
b = a + a
b_compiled = add(a, a)
print(b_compiled - b)
print("If you see tensor([0., 0., 0.], device='cuda:0'), then it works")

ファイルの準備ができれば以下のコマンドを実行しましょう。

python_embeded\python 'ComfyUI\test_triton.py'

tensor([0., 0., 0.], device='cuda:0')と表示されれば問題なくインストールできています。⚠️「pynvml package」の警告は無視しても問題ありません。

test_triton.pyの結果 

SageAttentionのインストール

続いて「SageAttention2.2」をインストールします。こちらもwoct0rdho氏のリポジトリを使います。

SageAttention2.2のダウンロード

今回の例では「v2.2.0-windows.post3」をインストールします。複数のWheelがありますが、現在の環境にあったWheelをインストールする必要があります。CUDA13.0/Torch2.9.1/Python 3.13.9なのでComfyUI\sageattention-2.2.0+cu130torch2.9.0.post3-cp39-abi3-win_amd64.whlをダウンロードして、C:\Users\user-name\ComfyUI_windows_portable_SA/ComfyUI内に配置します。(cp39-abi3とはPython3.9以上でバージョン3系統を指します)

また、以下のコマンドでもダウンロードできます。

wget https://github.com/woct0rdho/SageAttention/releases/download/v2.2.0-windows.post3/sageattention-2.2.0+cu130torch2.9.0.post3-cp39-abi3-win_amd64.whl -o ComfyUI\sageattention-2.2.0+cu130torch2.9.0.post3-cp39-abi3-win_amd64.whl

SageAttentionパッケージのインストール

Wheelのダウンロードと配置ができたら、下記のコマンドでパッケージをインストールします。

python_embeded\python.exe -s -m pip install 'ComfyUI\sageattention-2.2.0+cu130torch2.9.0.post3-cp39-abi3-win_amd64.whl'
v2.2.0-windows.post3のインストール 

SageAttentionの動作テスト(オプション)

インストールが完了したら、正しくインストールされたかテストしてみましょう。

C:\Users\user-name\ComfyUI_windows_portable_SA/ComfyUI内にtest_sageattn.pyファイルを作成して、以下のコードを貼り付けます。

#!/usr/bin/env python3

import torch
import torch.nn.functional as F
from sageattention import sageattn
from torch.nn.attention import SDPBackend, sdpa_kernel


def get_rtol_atol(actual, expect):
    actual = actual.float()
    expect = expect.float()
    diff = (actual – expect).abs()
    eps = torch.tensor(
        torch.finfo(actual.dtype).eps, device=actual.device, dtype=actual.dtype
    )
    rdiff = diff / torch.maximum(torch.maximum(actual.abs(), expect.abs()), eps)
    return (
        f”mean_rtol={rdiff.mean().item():.3g} ”
        f”max_rtol={rdiff.max().item():.3g} ”
        f”mean_atol={diff.max().item():.3g} ”
        f”max_atol={diff.max().item():.3g}”
    )


def main():
    batch_size = 4
    head_num = 32
    seq_len = 64
    head_dim = 128
    dtype = torch.float16

    q = torch.randn(batch_size, head_num, seq_len, head_dim, device=”cuda”, dtype=dtype)
    k = torch.randn_like(q)
    v = torch.randn_like(q)
    print(“q”, tuple(q.shape), q.device, q.dtype)

    # ‘Mathematically correct’ implementation
    torch.backends.cuda.enable_math_sdp(True)
    with sdpa_kernel(SDPBackend.MATH):
        out_math = F.scaled_dot_product_attention(q, k, v)

    out_sage = sageattn(q, k, v)
    print(“sage vs math:”, get_rtol_atol(out_sage, out_math))
    print(“The above (except max_rtol) should be < 0.05 (on RTX 20xx/30xx) or < 0.1 (on RTX 40xx/50xx)")


if __name__ == "__main__":
    main()

ファイルの準備ができれば以下のコマンドを実行しましょう。

python_embeded\python 'ComfyUI\test_sageattn.py'

実行後、sage vs math: mean_rtol=0.0372 max_rtol=2 mean_atol=0.0264 max_atol=0.0264の様な行が表示されるので「max_rtol」以外の数値を確認します。

GPUがRTX 20xx/30xx系の方は0.05以下、RTX 40xx/50xxなら0.1以下になっていれば正常です。

test_sageattn.pyの結果 

SpargeAttentionのインストール

さらに高速化を目指すなら「SpargeAttention」を導入しましょう。導入方法は「SageAttention」とほとんど同じです。✅SpargeAttentionは動画生成を高速にしますが、Flux.1やQwen-Imageなどの静止画は高速化しません。

SpargeAttentionのダウンロード

今回の例では「v0.1.0-windows.post3」をインストールします。こちらも複数のWheelがありますが、「SageAttention」と同じようにファイル名が現在の環境に合ったWheelをインストールする必要があります。CUDA13.0/Torch2.9.1/Python 3.13.9なのでComfyUI\spas_sage_attn-0.1.0+cu130torch2.9.0.post3-cp39-abi3-win_amd64.whlをダウンロードして、C:\Users\user-name\ComfyUI_windows_portable_SA/ComfyUI内に配置します。

また、以下のコマンドでもダウンロードできます。

wget https://github.com/woct0rdho/SpargeAttn/releases/download/v0.1.0-windows.post3/spas_sage_attn-0.1.0+cu130torch2.9.0.post3-cp39-abi3-win_amd64.whl -o ComfyUI\spas_sage_attn-0.1.0+cu130torch2.9.0.post3-cp39-abi3-win_amd64.whl

SpargeAttentionパッケージのインストール

Wheelのダウンロードと配置ができたら、下記のコマンドでパッケージをインストールします。

python_embeded\python.exe -s -m pip install 'ComfyUI\spas_sage_attn-0.1.0+cu130torch2.9.0.post3-cp39-abi3-win_amd64.whl'
v0.1.0-windows.post3のインストール 

SpargeAttentionの動作テスト(オプション)

インストールが完了したら、正しくインストールされたかテストしてみましょう。

C:\Users\user-name\ComfyUI_windows_portable_SA/ComfyUI内にtest_spargeattn.pyファイルを作成して、以下のコードを貼り付けます。

#!/usr/bin/env python3

import torch
import torch.nn.functional as F
from spas_sage_attn import spas_sage2_attn_meansim_cuda
from torch.nn.attention import SDPBackend, sdpa_kernel


def get_rtol_atol(actual, expect):
    actual = actual.float()
    expect = expect.float()
    diff = (actual – expect).abs()
    eps = torch.tensor(
        torch.finfo(actual.dtype).eps, device=actual.device, dtype=actual.dtype
    )
    rdiff = diff / torch.maximum(torch.maximum(actual.abs(), expect.abs()), eps)
    return (
        f”mean_rtol={rdiff.mean().item():.3g} ”
        f”max_rtol={rdiff.max().item():.3g} ”
        f”mean_atol={diff.max().item():.3g} ”
        f”max_atol={diff.max().item():.3g}”
    )


def main():
    batch_size = 4
    head_num = 32
    seq_len = 128
    head_dim = 128
    dtype = torch.float16

    q = torch.randn(batch_size, head_num, seq_len, head_dim, device=”cuda”, dtype=dtype)
    k = torch.randn_like(q)
    v = torch.randn_like(q)
    print(“q”, tuple(q.shape), q.device, q.dtype)

    # ‘Mathematically correct’ implementation
    torch.backends.cuda.enable_math_sdp(True)
    with sdpa_kernel(SDPBackend.MATH):
        out_math = F.scaled_dot_product_attention(q, k, v)

    out_sparge = spas_sage2_attn_meansim_cuda(q, k, v)
    print(“sparge vs math:”, get_rtol_atol(out_sparge, out_math))
    print(“The above (except max_rtol) should be < 0.05 (on RTX 20xx/30xx) or < 0.1 (on RTX 40xx/50xx)")


if __name__ == "__main__":
    main()

ファイルの準備ができれば以下のコマンドを実行しましょう。

python_embeded\python 'ComfyUI\test_spargeattn.py'

実行後、sparge vs math: mean_rtol=0.0392 max_rtol=2 mean_atol=0.0249 max_atol=0.0249の様な行が表示されるので「max_rtol」以外の数値を確認します。

GPUがRTX 20xx/30xx系の方は0.05以下、RTX 40xx/50xxなら0.1以下になっていれば正常です。

test_spargeattn.pyの結果 

以上ですべてのインストールが完了しました。つづいて、以前のComfyUI環境からモデルやカスタムノードを共有して、新しいポータル版でも同じワークフローが使えるようにします。

ComfyUIでモデル・カスタムノードの共有方法

今回は既存のComfyUIを壊さないように、新しくポータル版を別ディレクトリにインストールしています。このままではモデルが入っていないため何も生成できません。そこで「extra_model_paths.yaml.example」を編集して以前のComfyUIからモデルを共有しましょう。✅カスタムノードは古いバージョンをアップデートする必要があるケースが多いため、共有ではなく以前のComfyUIのcustom_nodesをコピーして、今回インストールしたComfyUIのcustom_nodesに張り付けた後、ComfyUI-Managerでアップデートすることをおススメします。

extra_model_paths.yaml.exampleの編集方法

基本的にはComfyUI_windows_portable_SA/ComfyUIにある「extra_model_paths.yaml.example」のファイル名をextra_model_paths.yamlに変更して。#comfyui:以下のコメントアウトを外して(行の先頭にある#を削除)base_path:に以前のComfyUIのパスを指定するだけです。

⚠️パスの指定ですが、バグなのか同じディレクトリだからなのか、フルパスでの指定ではファイルが見つからなかったので、相対パスを使って指定しました。

今回は以前のComfyUIポータル版が同じディレクトリにあり、モデルのみを共有したかったので以下のように編集しています。

comfyui:
    base_path: ../../ComfyUI_windows_portable/ComfyUI/
    # You can use is_default to mark that these folders should be listed first, and used as the default dirs for eg downloads
    #is_default: true
    checkpoints: models/checkpoints/
    text_encoders: |
        models/text_encoders/
        models/clip/  # legacy location still supported
    clip_vision: models/clip_vision/
    configs: models/configs/
    controlnet: models/controlnet/
    diffusion_models: |
        models/diffusion_models
        models/unet
    embeddings: models/embeddings/
    loras: models/loras/
    upscale_models: models/upscale_models/
    vae: models/vae/
    audio_encoders: models/audio_encoders/
    model_patches: models/model_patches/

カスタムノードも共有したい方は以下のように記述しましょう。

other_ui:
    base_path: ../../ComfyUI_windows_portable/ComfyUI
    checkpoints: models/checkpoints
    gligen: models/gligen
    custom_nodes: ../../ComfyUI_windows_portable/ComfyUI/custom_nodes

共有をやめたいときは、ファイル名を元の「extra_model_paths.yaml.example」に戻します。

ComfyUIでSageAttention2.2とSpargeAttentionの使い方

いよいよComfyUI上でSageAttention2.2とSpargeAttentionを有効化します。まずは重要な起動設定を行いましょう。

通常はC:\Users\user-name\ComfyUI_windows_portable_SA内のrun_nvidia_gpu.batからComfyUIを立ち上げますが、このままではSageAttentionが有効になりません。ComfyUIの起動コマンドを編集する必要があります。run_nvidia_gpu.batを直接編集するか、run_nvidia_gpu_sa.batという名前でコピーして新しいバッチファイルを作成し、内容を以下のようにしましょう。

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --use-sage-attention
echo If you see this and ComfyUI did not start try updating your Nvidia Drivers to the latest.
pause

ここでは起動コマンドに--use-sage-attentionを追加しています。

では、編集したバッチファイルを実行してComfyUIを立ち上げてみましょう。

起動時のターミナルログを確認して「Using sage attention」と表示されていれば、SageAttentionが正しく読み込まれています。✅ここが「Using pytorch attention」と表示されていた場合はSageAttentionの読み込みに失敗しています。

ComfyUI起動ログ 

⚠️Wan2.2-I2V-5BモデルにSageAttention/SpargeAttentionを適用するとノイズが出るのでWan2.2-I2V-5Bモデルで生成する場合は、起動コマンドの--use-sage-attention使わないで起動しましょう。

WAN2.2 A14B I2VでのSageAttention2.2の使い方

SageAttention2.2をワークフローに組み込むには、カスタムノード「ComfyUI-KJNodes」に含まれているPatch Sage Attention KJを、「ModelSamplingSD3」ノードのHighとLowそれぞれの手前に配置します。sage_attentionの値はautoにしておきましょう。

これで、WAN2.2 A14B I2Vの推論時に「SageAttention」を使用できるようになります。

Patch Sage Attention KJの適用箇所
Patch Sage Attention KJの適用箇所

WAN2.2 A14B I2VでのSpargeAttentionの使い方

SpargeAttentionをワークフローに組み込むには、カスタムノード「ComfyUI-RadialAttn」に含まれているPatchRadialAttnを、「ModelSamplingSD3」ノードのHighとLowそれぞれの手前に配置します。パラメーターはデフォルト値から変更し、High側のlast_dense_timestepを0に、Low側のdense_timestepを0に設定します。

これで、WAN2.2 A14B I2Vの推論時に「SpargeAttention」を使用できます。

PatchRadialAttnの適用箇所
PatchRadialAttnの適用箇所

SpargeAttentionを使用した生成は、処理速度の向上に加え、画質面でも大きく改善されています。

SageAttention2.2の生成結果

SpargeAttentionの生成結果

基本的には前回の記事で紹介しているワークフローと同じですが、SageAttention2.2とSpargeAttentionを使ったワークフローをPatreonで公開しています。有料サポーター様のみ閲覧・ダウンロードが可能となっていますが、導入方法がわからない方は参考にしてください。

まとめ

SageAttention 2.2とSpargeAttentionを組み合わせることで、Windows版ComfyUI上でのWAN2.2の動画生成を大きく高速化できます。一方で、TorchやCUDA、Triton-windowsのバージョンに強く依存する構成のため、専用のポータル版ComfyUIを用意し、extra_model_paths.yamlによるモデル共有やカスタムノードのアップデートを慎重に行うことが重要です。

本記事の手順どおりに環境構築と動作テストを行えば、WAN2.2 A14B I2Vモデルを中心に、安定性を保ちながら高速な動画生成ワークフローを構築できます。注意点として、Wan2.2-I2V-5BモデルではSageAttention/SpargeAttentionの適用によってノイズが出るため、利用する際は--use-sage-attentionを付けずに起動してください。SageAttention 2.2とSpargeAttentionをうまく使い分けて、自分の環境に最適な生成速度と品質のバランスを探ってみてください。

最後までお読みいただきありがとうございます。

もし少しでも参考になったら、ぜひ「いいね」で応援してください!