メインメモリーが256GBになったんでPrimoCacheを再設定して主に生成AIモデルの転送速度を高速化する

大量に画像生成モデルが溜め込んでストレージを圧迫するが HDDに保存していると読み込みが遅いからPrimoCacheを使って NVMe ロード速度を手に入れる
PrimoCacheは設定項目は数が多くて日本語の情報がないんでメモ

  1. 「Stable Diffusionのモデル保管」
  2. 「動画の録画・エンコード」
  3. 「動画ファイルのアーカイブ」

L1キャッシュとL2キャッシュ

  • L1キャッシュ (RAMキャッシュ): 大量に用意したメインメモリー
  • L2キャッシュ (SSDキャッシュ): L1キャッシュから溢れたデータをX670EにいっぱいさせるM.2のSSDに保存

L1の領域はキャッシュタスクごとに領域が予約される
L2はキャッシュ用としてフォーマットしたストレージなら複数のキャッシュ設定で同じものを指定できるが分けたほうが無難かも

基本の設定項目

キャッシュタスクを作成する際の主要設定項目の意味と役割

L1キャッシュ (RAM) の設定

Block Size (ブロックサイズ)

キャッシュを管理する最小単位
この設定はキャッシュの効率とパフォーマンスに直接関わる

  • 小さいサイズ (例: 16KB, 32KB)
    • 適した用途: OS プログラム ソースコードなど 多数の小さなファイルを扱うドライブ
    • メリット: 小さなファイルでも無駄なくキャッシュ領域を使える
    • デメリット: 管理するブロック数が増えて管理コスト(メモリオーバーヘッド)が増加
  • 大きいサイズ (例: 64KB, 128KB, 512KB)
    • 適した用途: 動画 AIモデル ディスクイメージ 巨大な単一ファイル
    • メリット:
      • オーバーヘッド削減: インデックス情報などに使われるメモリが減ってRAMをキャッシュに使る領域が増える
      • シーケンシャル性能向上: 巨大なファイルを連続して読み込む際の転送速度が向上
    • デメリット:
      • キャッシュ領域の無駄: たとえ1KBのファイルでも、キャッシュ上では1ブロック(例: 512KB)丸ごと占有する
      • ランダムアクセス性能の低下: ファイルの特定の部分だけを読み書きするようなランダムアクセスでは、不要なデータまで読み込みかえって遅くなる
      • 動画再生に関する注意点: ブロックサイズが小さすぎると 動画プレイヤーが必要とするデータ供給量にキャッシュの読み出しが追いつかず 再生が途切れる

逆に大きすぎても、シークの反応が鈍くなる
動画用途では64KB〜128KBの範囲で試

Defer-Write (遅延書き込み)

書き込み処理を一旦メモリ上で完了させ 後からディスクに書き込む機能
書き込み速度が大幅に向上するが、停電などの不意な電源断でデータが失われる

  • Latency (遅延時間): 書き込みデータをディスクに送るまでの時間は短いほど安全性が高く 長いほどパフォーマンスが上がる
  • Write Mode: 何かよくわからんからネイティブでいいんでない?
  • Flush on Sleep: PCがスリープや休止状態に入る際に キャッシュ内の未書き込みデータをディスクに書き出す設定だが俺はスリープとか休止使わないんでOFF
  • Flush L1 Cache to L2 Cache: L1キャッシュの書き込み領域が一杯になったらデータをディスクではなくL2キャッシュに書き出すかならずON

Prefetch (プリフェッチ)

Windows起動時に前回のキャッシュ内容を自動的に読み込んでおく

  • Prefetch Last Cache: 前回シャットダウン時のキャッシュ内容を復元
  • Start at Windows Boot: Windowsログオン前からプリフェッチを開始し復元早くする
  • Lock Cache Content: これもよくわからん

L2キャッシュ (SSD) の設定

Individual Read/Write Cache Space

L2キャッシュ領域を「読み取り専用」と「書き込み専用」に分割するか
SDモデルならほぼ読み込み「Read 100%」にすると早い

Gather Interval (データ収集間隔)

L1からL2へデータを移動させる頻度

  • DEFAULT: システムの負荷が低い時を見計らって、パフォーマンスに影響を与えないようにキャッシュを構築
  • IDLE-ONLY: システムが完全にアイドル状態の時だけキャッシュを構築
  • INSTANT: PCのシステム負荷に関わらず、積極的にキャッシュを構築します。早くキャッシュ効果を得たい場合に有効です。

あとの選択肢は秒数設定マシンパワーに自身があるなら常にインスタントで

【環境に合わせた3つのキャッシュタスク設定例

メインメモリ256GB、NVMe SSD 2枚、大容量HDD多数という変な構成で3つのタスクを構成する

システム構成の目標

  1. Stable Diffusionモデル用HDD: 巨大なモデルファイルの読み込みを高速化する。
  2. 録画・エンコード用SSD: 高頻度の読み書きが発生するドライブのパフォーマンスを最大化する。
  3. 動画アーカイブ用HDD: たまにしかアクセスしないが、再生時の読み込みを快適にする。

タスク#1: Stable Diffusionモデル用 (超読み取り特化)

モデルは一つ10GB以上でHDDを直に読むとVRAMに展開するまで何分かかかる

  • 対象ドライブ: Hドライブ (16TB HDD)
  • L1キャッシュ: 65GB RAM
  • L2キャッシュ: 250GB PLEXTOR SSD
  • Block Size: 512KB (巨大ファイルに最適化)
  • Defer-Write: 無効 (読み取り中心なので不要。安全性重視)
  • Prefetch設定: 全て有効 (再起動後も即座によく使うモデルを高速読み込み)
  • L2設定: Read 100% (読み取り専用に全振り)

ポイント: 巨大なモデルファイルを扱うためブロックサイズを512KBに設定L1/L2キャッシュを潤沢に使って読み取り性能極振り
Lock Cache Contentを有効にすることで、よく使う特定のモデルが常にキャッシュされてるので起動から生成まで早い

タスク#2: 録画・エンコード用 (高頻度I/O特化)

TSファイルの録画やMP4へのエンコードの読み書き

  • 対象ドライブ: Jドライブ (SATA SSD)
  • L1キャッシュ: 50GB RAM
  • L2キャッシュ: 1,000GB Samsung 990 PRO
  • Block Size: 32KB (動画ファイルに適したバランスの取れたサイズ)
  • Defer-Write: 有効 (60秒) (書き込み性能を最大化)
  • Prefetch設定: Lock Cache Content以外を有効 (ファイルが常に変わるためロックはしない)
  • L2設定: デフォルト値

ポイント: 最もアクセスが激しいので最高性能のSSDを割り当てる
遅延書き込み有効で録画中のエンコード時のI/O待ちを回避
Flush L1 Cache to L2 Cacheを有効ににしてL1→L2データの受け渡しをスムーズにする

タスク#3: 動画アーカイブ保存用 (低頻度アクセス・軽量キャッシュ)

エンコード済みのMP4ファイルを保存しておくHDD
アクセス頻度は低いが 再生時と転送に快適さは欲しい

  • 対象ドライブ: MP4保存用HDD群
  • L1キャッシュ: 25GB RAM
  • L2キャッシュ: なし (アクセス頻度が低いので不要)
  • Block Size: 64KB (動画再生時の安定性を考慮)
  • Defer-Write: 無効 (アーカイブファイルは安全第一)
  • Prefetch設定: Lock Cache Content以外を有効

ポイント:ここの設定は甘い
再生するときに効くキャッシュタスクになってるが動画の整理をするときにファイル移動を繰り返す場合早くなる設定になってないから後で見直す

コケたとこ

  • エラーでL2キャッシュが作成できない: L2キャッシュとして使用するSSDを一度NTFSでフォーマットする必要があった
  • 動画再生がカクつく: ブロックサイズが小さすぎると再生でデータ供給が追いつかず\再生が止まる 16KBで設定していたブロックを32KBに変更して解決

おわり

ワークフローのメタデータ残ってるか?

キャッシュ化がうまく動くと9モデルの切替が1,000秒から22秒に大幅短縮される