WSL上ComfyUI環境におけるディスク速度改善に関するメモ
ComfyUIをWSL上で使用している際、モデルファイルの増加によってシステムディスクの容量が不足する問題に直面することがあります。この記事では、ext4フォーマットのディスクをUbuntu専用として活用し、アクセス速度を5-10倍に向上させる方法のメモです。
背景
WSL上のComfyUI環境では、様々なモデルによってディスクスペースが肥大化し、UbuntuとWindowsが存在するシステムディスクの容量が足りなくなることがあります。その対策として、modelsフォルダを他のディスクにコピーし、シンボリックリンクからアクセスする方法がありますが、アクセス速度が極端に低下し、Fluxなどの巨大なモデルではロードに数十分かかるという問題が発生します。
Windowsからの直接アクセスはできなくなりますが、ディスクをext4でフォーマットしてUbuntu専用にすることで、アクセス速度を大幅に改善できます。
手順
1. ディスクをext4でフォーマット
powershell内で管理者権限で、フィジカルドライブにマウント
wsl --mount \\.\PHYSICALDRIVE3 --partition 1 --type ext4
wsl(ubuntu内で)ディスクをext4でフォーマット
lsblk を実行し、ターゲットのディスクのデバイス名を確認
MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 389.8M 1 disk
sdb 8:16 0 12G 0 disk [SWAP]
sdc 8:32 0 1T 0 disk /mnt/wslg/distro
/
sdd 8:48 0 931.5G 0 disk
この場合はsddなので、このデバイスをext4でフォーマット
sudo mkfs.ext4 /dev/sdd
※ sdc の部分は実際のデバイス名に置き換えてください!sddとは限りません。
※ この操作は毎回ではなく、最初の一回だけです。
※ コマンドの実行前に、対象ディスクのデータをバックアップしてください。フォーマットするとデータは消去されます。
2. フィジカルドライブをマウント
このディスクはPowerShellから以下のコマンドでマウントできます:
このコマンドは上でも出ましたが、WSLを終了したら、設定したマウントは外れますので、Windowsを起動し直したり、ログオンする毎にマウントし直します。
wsl --mount \\.\PHYSICALDRIVE3 --bare
ただし、毎回手動ではめんどうなので、以下のようにWindowsログオン時に自動的にマウントするよう設定します。
タスクスケジューラの設定方法
Windowsのタスクスケジューラを開く
「基本タスクの作成」を選択
タスク名と説明を入力(例: "WSL-Disk-Mount")
トリガーを「ログオン時」に設定
操作を「プログラムの開始」に設定
プログラム/スクリプトに wsl を入力
引数に --mount \.\PHYSICALDRIVE3 --bare" を入力
「完了」をクリック
3. WSL側での確認と設定
WSL(Ubuntu)で lsblk コマンドを実行すると、マウントされたディスクを確認できます:
lsblk
実行結果の例:
MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 389.8M 1 disk
sdb 8:16 0 12G 0 disk [SWAP]
sdc 8:32 0 1T 0 disk /mnt/wslg/distro
/
sdd 8:48 0 931.5G 0 disk
最後の行の sdd が、先ほどマウントしたディスクです。
4. 手動マウント
以下のコマンドでマウントポイントを作成し、ディスクをマウントします:
sudo mkdir -p /mnt/mydisk
sudo mount /dev/sdd /mnt/mydisk
これで /mnt/mydisk を高速なディスクとして利用できるようになります。
5. 自動マウント設定
起動時に自動的にマウントするため、以下のスクリプトを .bashrc に追加します:
# デバイスが見つかったかチェック
# lsblkの出力からヘッダーを除外し、NAMEとSIZEだけを対象にする
DEVICE_NAME=$(lsblk -o NAME,SIZE --noheadings | awk -v size="931.5G" '$2 == size {print $1; exit}')
if [ -n "$DEVICE_NAME" ]; then
echo "Found device: /dev/$DEVICE_NAME"
if [ ! -d "/mnt/mydisk/models" ]; then
echo "Mounting /dev/$DEVICE_NAME to /mnt/mydisk..."
sudo mount /dev/"$DEVICE_NAME" /mnt/mydisk
else
echo "Skip mounting: /mnt/mydisk/models does exist."
fi
else
echo "Error: No device found with size 931.5G"
exit 1
fi
まとめ
この方法を使用することで、WSL上のComfyUI環境におけるモデルロード速度が5-10倍に向上し、特に大規模モデルを扱う際のロード速度が大幅に改善されます。
この設定は他のWSL上のAIモデルを使った開発環境にも応用可能です。
注意点
もっとスマートなやり方はあると思いますが、とりあえず問題なく動いているので、紹介しました。
ディスクをフォーマットすると既存のデータはすべて消去されます
ext4フォーマットのディスクはWindows側から直接アクセスできません
ディスクサイズは環境によって異なるため、スクリプト内の 931.5G は実際のディスクサイズに合わせて調整してください
Happy ComfyUI-ing!