I/O最適化
このページは、2026-06-05の勉強会でチームが共有したI/O最適化の基礎をまとめたものです。 担当: 小林。HPCとAIの両方にまたがるため、性能分析章に置きます。
これは何か
I/O最適化とは、システムやストレージにおけるデータ読み書きの処理効率を高め、待ち時間を減らす手法です。 計算が速くても、ファイルの読み書きで待っていると全体は遅くなります。
HPC(OpenFOAM)でのI/O
OpenFOAMでは計算中に次のI/Oが発生します。
- モデルロード、初期メッシュ読み込み
- 境界条件・物性値ファイルの読み込み
- 各時刻ディレクトリへの結果出力、ログ出力
- 並列実行時の
processor*/以下への読み書き - post-processing用データ出力
対策の方向性
| 対策 | 内容 |
|---|---|
| scratch領域の活用 | 一時ファイル・中間ファイルを高速なローカル/作業用ストレージに置く |
| 出力頻度の調整 | 書き出す時刻ステップ・ログ量を減らす |
| 並列I/O形式の検討 | collated形式など、ファイル数と書き込み方式を見直す |
scratch領域とは、マシンから高速にアクセスできる作業用ディレクトリのこと。計算中に一時的に使います。
富岳でのI/Oプロファイリング(要確認)
富岳の利用手引書には、I/Oプロファイリング・I/O最適化の項目があり、DarshanやLLIO情報でI/O待ちを確認できるとされています。
ただし2026年大会の実機・利用可否は未確定です(調査ステータス)。
AI(Qwen multi-GPU推論)でのI/O
Qwenのmulti-GPU推論では、次のデータ移動が性能に影響します。
- モデル重みの読み込み
- 入力リクエストの読み込み
- CPU → GPU 転送
- GPU間通信(NCCL)
- KV cacheの読み書き
- prefill worker → decode worker のデータ受け渡し
- ログ出力
対策の方向性
| 対策 | 内容 |
|---|---|
| パイプライン化 | GPUが計算している間に、次の入力をCPU側で準備する |
| モデルロード時間の短縮 | 大規模LLMの重みロードが競技の課題になりうる。配置の工夫 |
| 重みの配置 | scratch領域に重みを置けるかは環境依存(昨年は議論あり、要確認) |
昨年のI/O最適化(経験談)
- 昨年のHPCでは、一時ファイル・中間ファイルの置き場所をscratch領域に変えて高速化していた、との情報があります(要確認)。
- AI課題でも、本番でDeepSeekの重みをscratch領域に置けたとの話がありますが、
玄界では不可だった可能性も指摘されています(要確認)。
出典: 木更津高専チームの参加記(経験談)。
最初に見るべき指標
| 観点 | 見るもの | なぜ重要か |
|---|---|---|
| I/O待ち時間 | 読み書きにかかった時間、I/O待ち割合 | ストレージが律速か判断する |
| ファイル数・出力頻度 | 時刻ディレクトリ数、ログ量 | 小さな書き込みの多発を防ぐ |
| モデルロード時間 | 重みロードにかかる時間 | 大規模LLMで支配的になりうる |
注意点
- scratch領域の利用可否・容量は環境ごとに違います。大会の実機ルールで要確認です。
- I/Oを減らすために結果出力を削りすぎると、解析・検証ができなくなります。