Qwen Image EditでLoRAを使っていると、初回は1時間かかるのに、2回目からは10分で終わるという現象に気づいた方も多いのではないでしょうか。しかも、プログラムを再起動しても2回目以降は速いまま。この記事では、その理由をキャッシュの仕組みから丁寧に解説します。


結論:2種類のキャッシュが組み合わさっている

速度差の正体は、主に以下の2つのキャッシュ機構です。

  1. OSのページキャッシュ(RAMへのファイルキャッシュ)
  2. CUDA / Tritonカーネルのコンパイルキャッシュ(ディスクへの保存)

それぞれ詳しく見ていきましょう。


① OSのページキャッシュ(最大の要因)

LoRAやベースモデルの重みファイルは数GBにおよびます。初回実行時はこれをSSDやHDDから読み込む必要があるため、I/Oに時間がかかります。

初回: ストレージ(SSD/HDD) → RAM → GPU  ← 遅い
2回目: RAM(キャッシュ済み) → GPU        ← 速い

OSは一度読み込んだファイルデータをRAMのページキャッシュとして保持し続けます。重要なのは、プログラムを再起動してもOSは動き続けているため、このキャッシュは消えないという点です。

そのため、アプリを落として再度起動しても、2回目以降はRAMから高速に読み込めます。

💡 確認方法: free -h コマンドで buff/cache の列を見ると、OSページキャッシュの使用量が確認できます。

⚠️ キャッシュを意図的にクリアしたい場合:
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches
これを実行すると、再び初回と同じ遅さに戻ります。


② CUDA / Tritonカーネルの JITコンパイルキャッシュ

初回実行時、GPUで動く演算カーネルをその場でコンパイル(JIT)する処理が走ります。LoRAのアーキテクチャに合わせた専用カーネルが生成されるため、これが時間のかかる原因の一つです。

コンパイル結果はディスク上にファイルとして保存されるため、プログラムを再起動しても再利用されます。

~/.nv/ComputeCache/   ← NVIDIA CUDAカーネルキャッシュ
~/.triton/cache/      ← Tritonカーネルキャッシュ
~/.cache/torch/       ← PyTorchコンパイルキャッシュ

③ HuggingFaceモデルキャッシュ(補助的要因)

モデルの設定ファイルやTokenizerの処理結果も、以下のパスにキャッシュされます。

~/.cache/huggingface/hub/    ← モデル本体・LoRAの重みファイル
~/.cache/huggingface/assets/ ← 設定ファイル等

保存先は環境変数で変更できます:

export HF_HOME=/custom/path/

キャッシュの保存場所まとめ

キャッシュ種別 保存場所(Linux) PC再起動後
OSページキャッシュ RAM(物理メモリ)上 ❌ 消える
CUDAカーネル ~/.nv/ComputeCache/ ✅ 残る
Triton ~/.triton/cache/ ✅ 残る
PyTorch ~/.cache/torch/ ✅ 残る
HuggingFace ~/.cache/huggingface/ ✅ 残る

Windowsの場合のパス:

C:\Users\<ユーザー名>\AppData\Local\NVIDIA\ComputeCache\
C:\Users\<ユーザー名>\.cache\huggingface\hub\

なぜプログラム再起動でも速いのか?

整理すると、以下のようになります。

フェーズ 初回が遅い理由 2回目が速い理由
モデル読み込み SSD/HDDから読む(低速I/O) OSページキャッシュ(RAM)から読む
GPU演算準備 CUDAカーネルをJITコンパイル コンパイル済みキャッシュを再利用
設定・Tokenizer ファイルのパース処理が走る 処理済み結果をキャッシュから取得

プログラムを再起動してもOSとディスクキャッシュは生きています。そのため、アプリレベルの再起動では「初回の遅さ」は再現しません。

PCごと再起動した場合はOSページキャッシュは消えますが、ディスク上のキャッシュ(CUDA・Triton・HuggingFaceなど)は残るため、それでも2回目以降の速度はある程度維持されます。


キャッシュを確認・管理するコマンド(Linux)

# キャッシュサイズを確認
du -sh ~/.cache/huggingface/
du -sh ~/.triton/
du -sh ~/.nv/

# OSページキャッシュの使用量確認
free -h

# OSページキャッシュをクリア(要sudo)
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches

# CUDAキャッシュをクリア
rm -rf ~/.nv/ComputeCache/
rm -rf ~/.triton/cache/

まとめ

Qwen Image Edit + LoRAの「初回1時間→2回目10分」という現象は、OSのページキャッシュとCUDA/Tritonのコンパイルキャッシュの組み合わせによるものです。プログラムを再起動してもディスクキャッシュは消えないため、速い状態が維持されます。

LoRAの重みが変わると一部キャッシュが無効になり、再コンパイルが走ることもあります。その場合は再び初回と同程度の時間がかかることがあるので、覚えておくと役立ちます。