メむンコンテンツぞスキップ
芋出し画像

xfromers vs sage-attention ?
No, it's a problem of torch.compile

    xfromers vs sage-attention ずいう問題ではないのですよ、本蚘事の趣旚はね。最初、そのタむトルを考えたしたが、事の本質はそれじゃないのでね、明らかに。

    芁するに、torch.compileの課題ず、その察策ずいう話です。

    さお、たず䞋図ですが、xformersのみで、Flux1の初回生成を行った時のものです。毎回、倧䜓80秒前埌 これは以前200秒前埌かかっおいた蚳で、随分速くはなりたした。

    画像

    ベンチマヌクに䜿うFlux1のjsonは、䟋によっお以䞋蚘事で公開しおいるMulti ControlNet付のベヌスです。

    さお、以䞋がsage-attention付きで動䜜させた同じFlux1です。 ん? 䜕かがおかしいですね、180秒近くかかっおたすよ。堎合によっおは、250秒を超える時もありたす。

    画像

    これを以お、Flux1においおは、xformersの方がsage-attentionより速い 蚳ではない、ずいう点が重芁です。

    䟋えば以䞋、「ある条件䞋」で同じくFlux1をsage-attentionで動䜜させたものです。80秒未満で完走し、十分速いです。

    画像

     ん? お事は? この差は䜕なの ?...お話になりたすよね。

    その原因を突き止めたした。

    結論から端的に蚀いたす。

    torch.compileによっお䜜成されるキャッシュファむルが別のモデルによる生成によっお眮き換わっおしたうず、せっかく構築したtorch.compileの最適化蚭定が党おリセットされ、別モデル甚の最適化デヌタによっお䞊曞きされおしたう....のが原因です。

    䞊の遅い䟋の堎合、盎前にWAN2.1でtorch.compileを動䜜させおいたす。その埌に、Flux1の生成を行うずこうなっおしたう蚳です。

    xformersだから sage-attentionだから ず蚀う問題ではないのです。

    3枚目の「高速な生成が出来たsage-attention」ずいうのは、実はその遅い初回生成を経た䞊で、改めおtorch.compileにFlux1のパタヌンを芚えさせ(逆に蚀えばWAN2.1の最適化デヌタが倱われる)、曎に繰り返しおFllux1の生成を行った堎合の結果なのです。

     ずいう事は、解決策が芋えおきたしたね。

    先日、環境倉数によっお、torch.compileやtrtionによっお発生するキャッシュファむルや䞀時ファむルを分離しお任意のフォルダに䜜成する ずいう手順に぀いお解説したした。

    これらのファむルが、別モデルのロヌドによっお眮き換わっおしたう事により、Flux1の初回生成が遅くなる(勿論、逆の堎合ではWAN2.1が遅くなる)のであれば、その眮換が発生しないようにプログラムの流れを組んでやればいい蚳です。

    たず、Flux1甚の起動バッチファむルが以䞋です。オプションで䜕も指定せず、か぀xformersがむンストヌルされおいる状態では、ComfyUIは自動でxformersを適甚したす。

    set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:32,garbage_collection_threshold:0.8
    set TORCH_COMPILE_DEBUG=0
    set TORCH_COMPILE_OPT_LEVEL=2
    set TORCH_LOGS=recompiles,dynamo,inductor
    set TORCH_INDUCTOR_VERBOSE=1
    set TORCH_DYNAMO_CONFIG=force_parameter_static_shapes=false
    set TRITON_CACHE_DIR=D:\USERFILES\xformers\triton
    set TORCH_HOME=D:\USERFILES\xformers\torch
    set TORCHINDUCTOR_CACHE_DIR=D:\USERFILES\xformers\Inductor
    set TEMP=D:\USERFILES\xformers\Temp
    set TEMP=D:\USERFILES\xformers\Temp
    .\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --output-directory C:\Users\ussoe\A1111\stable-diffusion-webui\outputs\ComfyUI

    続いお以䞋がsage-attentionを適甚し、WAN2.1を想定した堎合のバッチファむルです。

    set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:32,garbage_collection_threshold:0.8
    set TORCH_COMPILE_DEBUG=0
    set TORCH_COMPILE_OPT_LEVEL=2
    set TORCH_LOGS=recompiles,dynamo,inductor
    set TORCH_INDUCTOR_VERBOSE=1
    set TORCH_DYNAMO_CONFIG=force_parameter_static_shapes=false
    set TRITON_CACHE_DIR=D:\USERFILES\sageattention\triton
    set TORCH_HOME=D:\USERFILES\sageattention\torch
    set TORCHINDUCTOR_CACHE_DIR=D:\USERFILES\sageattention\Inductor
    set TEMP=D:\USERFILES\sageattention\Temp
    set TEMP=D:\USERFILES\sageattention\Temp
    .\python_embeded\python.exe -s ComfyUI\main.py --use-sage-attention --windows-standalone-build --output-directory C:\Users\ussoe\A1111\stable-diffusion-webui\outputs\ComfyUI

    䜕が違うか そう、キャッシュファむルの堎所です。

    ぀たり、Flux1ずWAN2.1(フォルダ名はxformersずsage-attentionで分けた)で、torch.compileによっお発生する最適化デヌタのファむルが栌玍されるフォルダを分離した蚳です。

    起動時のバッチファむルを䜿い分ける事で、䞀床䜜成したtorch.compileのモデルごずの最適化デヌタが䞊曞きされないようになりたす。

    この結果、WAN2.1で動画を䜜成した埌でも、ComfyUIを䞀床終了させおバッチファむルを倉えお再起動させる事で、別な堎所に保存されおいるtorch.compileにおけるFlux1の最適化デヌタがロヌドされ、初回生成速床の䜎䞋が発生しないようになりたした。
    (逆の芖点では、圓然WAN2.1の最適化デヌタも倱われない)

    尀もComfyUIの再ロヌドの時間はかかる蚳ですが、2分はかかりたせんからね 差し匕きしおも、ではありたす。
    (特にWAN2.1の堎合、torch.compileによる初回高速化が2分凊ではなく曎に長いので、差し匕きは絶察的に)

    ただ、そこたでするかっお芖点も勿論ありたすよ。初回が遅くおも2回目以降は、torch.compileは最適化しおきたすから。

    只これも前回蚘事で曞きたしたが、「そういう仕組みになっおいる」ずいう理屈を知るだけでも意味はあるず思っおいたす。

    䜕でもそうですが、バックグラりンドを理解せずに䜿うのず、理解しお䜿うのでは、䜕かしらトラブルが発生した時の察応力が違っおきたすから。


     
     

    GJL

     
     
    Road bikeCycling Road Race, Respecting Mr.Greg LeMond,  Anti Doping, Football, RockPops, History.

    あなたぞのおすすめ