DeepCacheとは?拡散モデルの特徴量キャッシュで画像生成を高速化する技術

DeepCacheは、U-Net型拡散モデルの隣接するノイズ除去ステップで似た高レベル特徴を再利用し、再学習なしで画像生成を高速化する推論最適化手法です。仕組み、実験結果、実装時の注意点を解説します。

参考文献

DeepCache: Accelerating Diffusion Models for Free

Xinyin Ma, Gongfan Fang, Xinchao Wang

論文を見る

今回の論文

今回取り上げるのは、Xinyin Ma、Gongfan Fang、Xinchao Wangによる論文「DeepCache: Accelerating Diffusion Models for Free」です。2023年12月にarXivで公開され、2024年にCVPRで採録されました。公開元はIEEE/CVF Conference on Computer Vision and Pattern Recognition(CVPR)、URLは https://arxiv.org/abs/2312.00858 、DOIは https://doi.org/10.48550/arXiv.2312.00858 です。研究分野は拡散モデル、画像生成、推論最適化です。

この論文を選んだ理由は、画像生成の待ち時間を減らすために、モデルを蒸留し直したり追加学習したりせず、「すでに計算した中間特徴を再利用する」という実装に落とし込みやすい考え方を示しているためです。推論コストが問題になる画像生成APIや社内生成ツールでは、品質・速度・導入コストのトレードオフを考えるよい出発点になります。

どんな技術か

DeepCacheは、U-Netを使う拡散モデルのノイズ除去処理を高速化する、学習不要の特徴量キャッシュ手法です。拡散モデルは、ランダムノイズから画像へ近づける処理を何十回も繰り返します。通常は各ステップで巨大なU-Net全体を実行しますが、隣り合うステップでは画像の意味を表す深い特徴がよく似ています。

そこでDeepCacheは、あるステップで計算した高レベル特徴を保存し、次の数ステップではそれを再利用します。一方で、輪郭やテクスチャなど変化しやすい低レベル特徴は毎回更新します。つまり「意味的な骨格は少し使い回し、細部だけ新しく計算する」ことで、逐次生成の無駄を削ります。

重要なのは、サンプラーのステップを単に飛ばす方式ではないことです。ステップ数を保ったまま、各ステップ内のU-Net計算を部分的に省略します。論文ではStable Diffusion v1.5を2.3倍高速化しつつ、CLIP Scoreの低下を0.05に抑えたと報告されています。

課題

拡散モデルの高品質な生成には、ノイズを少しずつ除く反復処理が必要です。1回のノイズ除去だけでは画像にならず、20〜100回程度のモデル実行が必要になるため、レイテンシとGPUコストが大きくなります。高解像度化、バッチ生成、画像から動画への拡張では、この問題がさらに目立ちます。

既存の高速化には、少ないステップで生成する高速サンプラー、モデルを小さくするプルーニングや量子化、小型モデルへの蒸留があります。しかし、ステップ削減は品質低下を招きやすく、圧縮・蒸留は再学習用のデータと計算資源、モデルごとの検証を必要とします。配布済みのモデルをすぐ高速化したい開発者にとっては、導入コストが障壁です。

一方、毎ステップでU-Net全体を同じように実行することにも無駄があります。時刻が1つしか違わない潜在表現では、深い層の意味的な特徴まで大きく変化しない場合があります。この時間方向の冗長性を利用し、変化の速い情報だけを計算し直すことがDeepCacheの狙いです。

実際のAIシステムでは、画像生成SaaSの同時実行数、社内ツールの応答時間、限られたGPUでのプレビュー生成などで問題になります。画像1枚当たりの処理時間を下げられれば、同じハードウェアで処理できるリクエスト数も増やせます。

用語解説

拡散モデル
データに加えたノイズを段階的に取り除くように学習し、推論時にはノイズから新しい画像を生成するモデルです。DeepCacheは、この反復的な逆拡散の各ステップにある計算の重複を対象にします。
U-Net
解像度を下げながら特徴を抽出するdownsampling側と、解像度を戻すupsampling側を持つネットワークです。両側を結ぶskip connectionがあり、DeepCacheはここで合流する低レベル特徴と高レベル特徴の役割の違いを使います。
潜在拡散モデル(LDM)
画像そのものではなく、VAEなどで圧縮した潜在空間で拡散処理をするモデルです。Stable Diffusionは代表例であり、U-Netを何度も呼ぶ推論コストが実用上の焦点になります。
高レベル特徴と低レベル特徴
高レベル特徴は物体や構図など意味的な情報、低レベル特徴は局所的な形状・色・テクスチャなどを主に表します。論文の観察では前者は隣接ステップで変化が遅く、後者は更新を残すべき情報です。
キャッシュ間隔(cache interval)
完全なU-Net計算を行ってキャッシュを更新するステップ間隔です。長くすると高速になりますが、古い高レベル特徴を使う期間も延びるため、画質とのトレードオフを制御する重要な設定です。

技術の仕組み

DeepCacheの基本アイデアは、反復する逆拡散の中で「変化が遅い高レベル特徴」をキャッシュし、「変化が速い低レベル特徴」だけを計算し直すことです。モデルの重み、学習データ、サンプラーの基本的な更新則は変更しません。

U-Net内で再利用する場所

U-Netをdownsampling blockをD_i、upsampling blockをU_iとして考えます。対応するdownsampling側の特徴と、より深いupsampling側から戻る高レベル特徴は、各段で連結されます。概念的にはConcat(D_i, U_{i+1})です。

通常の推論では、毎ステップで深いdownsampling側・中央部・upsampling側まで全て計算します。DeepCacheはキャッシュ更新ステップで選択した深さのupsampling blockの出力を保存します。続く取得ステップでは、選択位置までの浅いdownsampling blockを実行し、得られた新しい低レベル特徴と保存済みの高レベル特徴を連結して、その先の軽い復号側だけを実行します。高コストな深部を丸ごと再計算しない点が速度向上の源です。

キャッシュと取得を交互に行う

時刻tで完全なU-Netを実行して高レベル特徴F_cache^tを保存したとします。時刻t-1では、浅い経路から新しい特徴D_m^(t-1)を計算し、Concat(D_m^(t-1), F_cache^t)を後段へ渡します。これをキャッシュ間隔が尽きるまで繰り返し、一定間隔で完全計算に戻ってキャッシュを更新します。

この方式は、生成の途中状態を省略するのではなく、各逆拡散ステップを実行し続けます。そのため、DDIMやPLMSなどのサンプリング手法とも組み合わせられます。ただし再利用する特徴は近似であり、完全なU-Net実行と数値的に同一ではありません。

2つの調整つまみ

実装では主にcache_intervalcache_branch_idを調整します。cache_intervalを3にすると、おおむね3ステップごとに完全計算してキャッシュを更新します。値を大きくすると完全計算の割合が減り、速くなる一方で近似誤差が蓄積しやすくなります。

cache_branch_idは、どの深さで高レベル特徴を切り出して再利用するかを表します。より深い経路を省略するほど計算量を減らせますが、再利用する範囲が広がるため画質への影響を確認する必要があります。論文と公式実装がこの2つを露出させているのは、モデル・解像度・プロンプトにより最適な品質と速度の境界が変わるためです。

学習不要である意味

DeepCacheは、既存の重みを微調整しません。性能を上げるための学習ループや追加データが不要で、推論パイプラインのU-Net呼び出しをキャッシュ対応に差し替えることで使えます。これは、独自モデルの再学習が難しい場合や、複数モデルを試作段階で比較したい場合に特に有利です。

ただし、U-Netのskip connectionを前提にした設計です。Transformer中心のDiffusion Transformer(DiT)へ、そのまま同じ位置のキャッシュを移植できるとは限りません。アーキテクチャが変われば、時間方向に安定な中間表現を改めて測定する必要があります。

実験と結果

論文は、無条件画像生成のLDM-4-G、テキストから画像を生成するStable Diffusion v1.5、DDPMなどで、速度と生成品質の両方を検証しました。比較対象には、ステップ削減、プルーニング、蒸留などの既存高速化も含めています。

速度と品質の主結果

Stable Diffusion v1.5では、50ステップのPLMSサンプリングで2.3倍の高速化を達成し、CLIP Scoreの低下は0.05でした。CLIP Scoreはテキストプロンプトと生成画像の整合性を測る指標なので、速度向上のためにプロンプト追従性を大きく失っていないことを示します。

ImageNetで評価したLDM-4-Gでは、4.1倍の高速化とFIDの0.22悪化が報告されています。FIDは生成画像の分布が実画像分布にどれだけ近いかを見る指標で、低いほどよい値です。条件をさらに攻めた設定では、250ステップのDDIMで最大7.0倍の高速化も図示されていますが、これは速度と品質の設定に依存するため、一般的な期待値として扱うべきではありません。

比較から分かること

論文では、同程度のスループットを使える条件では、DeepCacheとDDIMまたはPLMSを組み合わせることで、通常のサンプリングと同等、場合によってはわずかに良い品質を得られると報告しています。これは、単純にステップ数を減らす代わりに、ステップは維持しつつ内部計算を近似する選択肢があることを意味します。

また、DeepCacheは再学習を必要とする蒸留・プルーニング系の手法より、導入時のコストが小さい点も比較上の利点です。もっとも、これらは用途が完全に競合するわけではありません。大量配信でモデルを固定できるなら蒸留、既存モデルを今すぐ試したいならDeepCacheというように、組み合わせや使い分けが考えられます。

設定ごとのトレードオフ

公式のDiffusersドキュメントでは、RTX A5000・50ステップのStable Diffusion v2.1で、512px・batch size 1の場合、通常2.61秒に対してcache_interval=3, branch=0は1.12秒(2.33倍)、cache_interval=5, branch=0は0.81秒(3.24倍)でした。解像度やバッチサイズが変わっても高速化傾向は見られますが、間隔を大きくすればよいわけではありません。画質評価と実際のGPUでのレイテンシ測定を一組として行う必要があります。

何に使える?

DeepCacheは、U-Net型の拡散モデルで「既存モデルを保ったまま待ち時間を減らしたい」場面に向きます。生成品質を厳密に保証する技術ではないため、用途に応じた品質確認とセットで導入します。

画像生成アプリのプレビュー

デザイン案や広告クリエイティブを何度も生成し直すUIでは、最初のプレビューが早いほど試行回数を増やせます。DeepCacheで低〜中程度のキャッシュ間隔を使えば、構図の探索を素早くし、最終出力だけ通常推論または保守的な設定で再生成する二段階設計が可能です。

GPUコストを抑えた画像生成API

社内のバナー生成、ECの商品背景作成、ゲーム用のラフ素材生成など、同じモデルでリクエストを継続的に処理する用途では、1枚当たりの推論時間が運用コストに直結します。モデルを再訓練せずにスループットを上げられるため、まずキャッシュ設定をABテストする価値があります。

動画・画像編集パイプラインの試作

著者の実装はStable Diffusion XL、Stable Video Diffusion、inpainting、img2imgなども対象として公開されています。動画や編集系は入力解像度・フレーム数で計算量が増えるため、特徴量再利用の効果を検証しやすい領域です。ただし、フレーム間のちらつきや編集忠実度など、静止画指標では見えない品質を別途確認します。

開発や事業へのヒント

この論文の最も一般化しやすい学びは、「反復モデルの全ての中間計算を、全時刻で同じ精度に更新する必要があるか」を分解して考えることです。DeepCacheはU-Netの深さ方向と拡散の時間方向を見て、安定な意味的特徴を再利用対象にしました。

最終品質と探索速度を分ける

小規模な画像生成プロダクトなら、全リクエストを同じ設定で処理する必要はありません。候補出しはDeepCacheを有効にして速くし、ユーザーが選んだ候補の高解像度化や納品画像だけはキャッシュを弱める、または無効化する設計ができます。これならGPU予算を探索体験に配分できます。

キャッシュを設定値ではなく品質契約として扱う

cache_intervalとbranchは、単なる高速化フラグではありません。プロンプト追従、人物の破綻、文字、商品ロゴ、inpainting境界など、サービスにとって重要な品質をどこまで許容するかを決める設定です。代表プロンプト、解像度、ControlNetなどの併用条件ごとに、品質指標と人手レビューを残すと、設定の変更を安全に運用できます。

次の最適化候補を見つける手順

DeepCacheのような最適化を自作・応用する際は、まず各層の中間特徴が隣接ステップでどれほど変化するかを計測します。次に、安定な箇所を再利用しても出力品質が保たれるかを小さな評価セットで検証します。時間的局所性、層ごとの役割差、品質に効く部分だけを再計算するという視点は、エージェントの反復処理や動画生成などにも応用のヒントになります。ただし、別アーキテクチャへの効果は検証なしに仮定できません。

限界

DeepCacheは近似計算であり、完全推論と同じ画像を再現するものではありません。キャッシュ間隔を長くしたり、より大きい範囲を省略したりすると、構図、細部、プロンプト整合性が悪化する可能性があります。特に文字、顔、厳密な物体配置、画像編集の境界など、わずかな劣化が問題になる用途では慎重な評価が必要です。

メモリ面でも、特徴量を保存する領域は必要です。U-Netの深さ、解像度、バッチサイズ、データ型によってキャッシュサイズは変わるため、速度だけでなくVRAM使用量と同時実行数を測る必要があります。キャッシュにより計算は減っても、VRAM不足でバッチを小さくすれば、サービス全体のスループットが期待ほど伸びないことがあります。

また、論文の中心はU-Net型拡散モデルです。DiTやflow matchingなど、現在広がる別系統の生成モデルへ同じ効果が出る保証はありません。さらに、評価結果は使用モデル、サンプラー、ステップ数、GPU、設定に依存します。自社のモデル・プロンプト・解像度で、ベースラインと品質を比較してから採用判断をすることが重要です。

よくある質問

Q. DeepCacheはモデルを再学習する必要がありますか?

A. 必要ありません。既存U-Netの中間特徴を推論中に保存・再利用する方式です。ただしパイプライン実装が対応している必要があり、導入後は自分のモデルと用途に対する品質確認が必要です。

Q. ステップ数を減らす高速化と何が違いますか?

A. ステップ削減は逆拡散の更新回数そのものを減らします。DeepCacheは基本的に更新回数を保ち、各更新でのU-Net内部計算を部分的に省略します。両者は排他的ではなく、サンプラーや設定次第で組み合わせられます。

Q. cache_intervalは大きいほど得ですか?

A. いいえ。大きいほど完全計算が減るため速くなりやすい一方、古い高レベル特徴を長く使うので品質低下のリスクが上がります。まず保守的な値から、代表プロンプトで速度と品質を比較して決めるべきです。

Q. Stable Diffusion以外にも使えますか?

A. 論文と公開実装はLDM、DDPM、Stable Diffusion系を扱っています。U-Netのskip connectionと時間方向の特徴冗長性を利用するため、構造が近いモデルほど適用を検討しやすいです。別アーキテクチャでは専用の検証が必要です。

Q. 本番の画像生成APIで使う際に最初に確認することは何ですか?

A. レイテンシだけでなく、プロンプト追従、人物・文字・ロゴ、解像度別の破綻、VRAM、同時実行数を確認してください。最終成果物が重要な経路には通常推論を残し、探索用経路から導入するのが安全です。

今日の学び

この論文は、拡散モデルが各ノイズ除去ステップで巨大なU-Netを繰り返し実行するコストを扱いました。DeepCacheは、隣接ステップで安定しやすい高レベル特徴をキャッシュし、変化の速い低レベル特徴だけを更新することで、再学習なしの高速化を実現します。

得られるヒントは、反復型AIの高速化では「何回処理するか」だけでなく、「各回でどの内部状態を再計算するか」を見直せることです。品質を測りながらキャッシュ範囲と更新頻度を調整すれば、開発中のプレビューや画像生成サービスのコスト最適化に活かせます。

関連記事

推論最適化

FlashAttention-2とは?GPUの並列化とワーク分割でTransformerのAttentionをさらに高速化する技術

FlashAttention-2は、Attention計算のIO削減に加えて、GPU上の並列化、ワープ間のワーク分割、non-matmul FLOPs削減を見直すことで、長文Transformerの学習・推論を高速化する技術です。仕組み、実験結果、AI開発への応用を解説します。

参照論文:FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning

推論最適化

Ring Attentionとは?複数GPUで長文コンテキストを線形に伸ばす分散Attention技術

Ring Attentionは、長い系列を複数デバイスに分散し、KVブロック通信とblockwise attention計算を重ねることで、近似なしに長文コンテキストを扱う技術です。仕組み、評価結果、AI開発への応用を日本語で解説します。

参照論文:Ring Attention with Blockwise Transformers for Near-Infinite Context

推論最適化

LoongServeとは?長文LLMの推論を高速化するElastic Sequence Parallelismの仕組みと使い道

LoongServeは、長文LLMのprefillとdecodeで必要なGPU並列度を動的に切り替える推論サービング技術です。Elastic Sequence Parallelismの考え方、仕組み、評価結果、RAGやAIエージェントへの応用可能性を日本語で整理します。

参照論文:LoongServe: Efficiently Serving Long-Context Large Language Models with Elastic Sequence Parallelism