APAC HPC-AI 2026 キャッチアップ議事録

2026 APAC HPC-AI Competition への参加に向けたチームの学習記録・技術ドキュメントです。競技中はチーム内の知識共有に、終了後はポートフォリオおよび後輩向け参考資料として活用します。

HPCやAI推論最適化の初心者が、議論に参加できる最低限の背景をそろえることを目的にしています。

読み方

最初に読む順番は次の通りです。

  1. 調査ステータス
  2. 2026年大会の現時点まとめ
  3. 2025年大会の振り返り
  4. OpenFOAM課題の入口
  5. LLM推論課題の入口
  6. 用語辞書

各ページでは、情報の確証度を次のように分けます。

表記意味
確定公式サイト、公式ドキュメント、モデルカード、論文、公式リポジトリで確認できた情報
要確認メモ、Discord/Slack上の議論、リンク先のREADME、実装断片から推測できるが、最終ルールではない情報
経験談参加記やチーム内メモに基づく実践知。再現性は環境に依存する

まず押さえる結論

  • 2026年大会の公式スケジュールは公開済みだが、課題の細部、計測方法、制約は今後確定する可能性がある。
  • メモ上では、HPC側はOpenFOAM、AI側はQwen系LLM推論、PD disaggregation、Dynamo/SGLang周辺が議論対象になっている。
  • 2025年大会では、HPC側がNWChem、AI側がDeepSeek-R1 671B + SGLangだったことは公式発表と参加記で整合する。
  • 最適化の本体は「速そうなフラグを試す」ではなく、計測、ボトルネック特定、1変更1実験、記録、比較を繰り返すこと。

大会概要

項目内容
主催HPC Advisory Council / NSCC Singapore / NCI Australia
テーマ①OpenFOAM 流体力学シミュレーション実行時間の最小化(CPU マルチノード)
テーマ②Qwen LLM 推論スループットの最大化(GPU)
トレーニング開始2026年6月8日〜
競技マシンアクセス2026年8月3日〜
提出期限2026年10月9日
プレゼン面接2026年10月19日〜
最終結果発表2026年11月(Supercomputing Conference 2026)

優勝チームは 2027 ISC 国際学生クラスタコンペティション APAC 代表枠を獲得できます。

ドキュメントを読む

公開サイト: https://<your-github-username>.github.io/APAC-HPC-AI/

ローカルでプレビューする場合:

# mdBook のインストール(初回のみ)
cargo install mdbook

# ライブプレビュー(ブラウザで http://localhost:3000 が開く)
mdbook serve --open

リポジトリ構成

src/          # 記事ソース(Markdown)
  SUMMARY.md  # 目次・章構成
book/         # ビルド成果物(Git 管理外)
book.toml     # mdBook 設定
.github/
  workflows/
    deploy.yml  # GitHub Pages 自動デプロイ

コントリビュート

  1. src/ 配下に .md ファイルを作成する
  2. src/SUMMARY.md に章のリンクを追加する
  3. mdbook serve でローカル確認する
  4. main ブランチへ push すると GitHub Pages に自動デプロイされる

参考文献の方針

本文中の主張には、できる限り該当ページへのリンクを付けています。まとめて確認する場合は参考文献一覧を見てください。

調査ステータス

このページは、殴り書き.txtに含まれるリンクと議論を、どこまで裏取りできたかを管理するためのページです。

元メモから抽出した主要リンク

対象URL現時点の扱い
木更津高専チームの参加記https://zenn.dev/chizuchizu/articles/7e77fe8d44244b経験談。2025年AI課題の実験方針、困りごと、運用知の参考にする
2026年大会公式ページhttps://www.hpcadvisorycouncil.com/events/2026/APAC-AI-HPC/確定。スケジュール、表彰、主催情報の一次情報
2025年日本チーム入賞プレスリリースhttps://www.tuat.ac.jp/documents/tuat/outline/disclosure/pressrelease/2025/20251209_01.pdf確定。日本チーム受賞、理研R-CCS支援の一次情報
2025年大会結果公式PDFhttps://www.hpcadvisorycouncil.com/pdf/8th-apac-hpc-ai-competition.pdf確定。2025年の課題と結果の一次情報
OpenFOAM HPC Committee repohttps://develop.openfoam.com/committees/hpc確定。OpenFOAMベンチマーク候補の一次情報。ただし2026年大会で使うケースは未確定
Dynamo benchmarkshttps://github.com/ai-dynamo/dynamo/tree/main/benchmarks要確認。ベンチマーク候補・参考実装。大会ルールそのものではない
Dynamo Qwen3 recipehttps://github.com/ai-dynamo/dynamo/tree/main/recipes/qwen3-235b-a22b-fp8要確認。TensorRT-LLM向けrecipeであり、SGLang課題との関係は大会側確認が必要
既存mdBook公開先https://namacha411.github.io/hpcai-meeting-minutes/チーム内成果物。公式情報ではない

確定情報と未確定情報

確定

  • 2026年大会はHPC-AI Advisory Council、NSCC Singapore、NCI Australia、Firmus Technologiesなどが関係するAPAC HPC-AI Competitionである。
  • 2026年大会の主要日程は公式ページで公開されている。
  • 2025年大会は、HPC側でNWChem、AI側でDeepSeek-R1 671B + SGLangが課題だった。
  • 2025年大会では、理研R-CCSが支援した日本チームが複数入賞した。
  • Qwen3-235B-A22Bは、Qwen公式モデルカード上で総235B、活性化22BのMoEモデルとして説明されている。

要確認

  • 2026年HPC課題の正確なOpenFOAMケース、メッシュサイズ、評価コマンド、許可される変更範囲。
  • 2026年AI課題がSGLang固定なのか、Dynamo/TensorRT-LLM recipeをどの範囲で参照するのか。
  • Qwen3.5など、メモ上の提案が大会設計に反映されるかどうか。
  • ランダム重みで測るのか、実モデル重みで測るのか。
  • 評価指標が総スループットだけなのか、TTFT、TPOT、p95 latency、request success rateなども含むのか。
  • 2026年大会の実機。チームは富岳(A64FX)を前提に最適化を調査しているが、運営メモでは「4ノード・100+コアのCPUクラスタ」とされ、2025年は玄界が使われたとの情報もある。実機は未確定。
  • -Ofast系の許容範囲。演算順序変更・近似・精度劣化を伴うため、大会でどこまで許可されるか。昨年は精度低下・収束条件変更が禁止だった。
  • system-level tuning(CPU周波数スケーリング、NUMAトポロジ最適化、ファイルシステム/ストレージアクセス)が今年も許可されるか。昨年ルールには記載あり。
  • scratch領域の利用可否。重みや中間ファイルをscratchに置けるか。玄界では不可だった可能性あり。
  • 利用可能なプロファイリングツール(mpiP/Score-P/Scalasca/nsys等)が実機で使えるか。

調査で見えた論点

  • OpenFOAMはMPIによる領域分割、I/O形式、decomposeParDict、ソルバ設定が性能に影響する。
  • LLM推論はprefillとdecodeで計算特性が違う。PD disaggregationはこの差を利用する設計。
  • 高い総スループットだけを追うと、1リクエストあたりの体感速度が悪化する場合がある。評価指標の定義確認が重要。
  • 大会ではルール違反になり得る最適化がある。量子化、モデル品質を落とす変更、実験的機能の扱いは必ずルールで確認する。

議事録

チーム定例・作業会の議事録を日付順に管理します。

運用ルール

  • ファイル名はYYYY-MM-DD.mdにする。
  • 1回の議事録には、実施日時、参加目的、決定事項、共有内容、TODO、次回方針を残す。
  • 調査した技術情報の詳細は各技術ページに分け、議事録には「何を調べたか」「何が決まったか」「次に誰が何を見るか」を中心に書く。
  • 参考文献がある場合は、本文中または末尾にリンクを置く。

一覧

テンプレート

# YYYY-MM-DD 議事録

## 実施日時

- YYYY-MM-DD(曜日) HH:MM-

## 目的

- 

## 決定事項

- 

## 共有内容

- 

## TODO

| 項目 | 内容 | 期限 |
|---|---|---|
|  |  |  |

## 次回方針

- 

## 参考リンク

- 

2026-05-29 議事録

実施日時

  • 2026-05-29(金)

目的

  • APAC HPC-AI 2026に向けて、チーム内で知識共有するための土台を決める。
  • HPC、OpenFOAM、AI推論最適化の初心者でも後から追える形で、調査内容をmdBookにまとめ始める。

決定事項

  • チームの知識共有にはmdBookを使う。
  • 今後の調査内容、体験談、議事録、用語辞書、参考文献をmdBook上で管理する。
  • 議事録は日付別にsrc/minutes/配下へ追加し、src/SUMMARY.mdから辿れるようにする。
  • 情報の確証度を区別する。公式サイト、公式ドキュメント、論文、公式リポジトリで確認できたものを優先し、体験談やチャット上の情報はその旨を明示する。

共有内容

  • 去年までの大会問題、参加体験談、今年の課題候補に関する情報を集めた。
  • 2025年大会では、HPC側がNWChem、AI側がDeepSeek-R1 671B + SGLang推論ベンチマークだったことを確認した。
  • 2026年大会では、メモ上の議論としてHPC側にOpenFOAM、AI側にQwen系LLM推論、PD disaggregation、Dynamo/SGLang周辺が出ている。
  • ただし、2026年の正確なOpenFOAMケース、AI側のモデル構成、評価指標、禁止事項は最終ルールで確認する必要がある。
  • 初心者向けに、HPC/OpenFOAM/LLM推論/ベンチマーク指標の用語辞書を作成した。

TODO

項目内容目的
Qwenモデルの勉強Qwen3-235B-A22B、MoE、active parameters、context length、推論時のメモリ要件を理解するAI課題のモデル特性を説明できるようにする
OpenFOAMの勉強case構成、solver、mesh、domain decomposition、MPI並列実行を理解するHPC課題で何を変更すると性能が変わるか把握する
プロファイリングの勉強perf、VTune、nsysnvidia-smiなどでCPU/GPU/通信/I/Oを測る流れを理解する勘ではなく計測に基づいて改善箇所を決める
ベンチマーク指標の理解throughput、TTFT、TPOT、latency、concurrency、ISL/OSLを整理する「速い」の意味をチーム内で揃える
変更禁止設定の理解量子化、モデル精度に影響する変更、実験的機能、収束条件変更などの扱いを確認するルール違反を避ける

今後の方針

  • 毎週金曜日18:00から情報共有と目標確認を行う。
  • 各自が調べたこと、試したこと、詰まったことを共有する。
  • 次の1週間で何を調べるか、何を実験するかを決める。
  • 調査内容は議事録だけに閉じず、再利用できる内容は該当する技術ページへ反映する。

次回までの確認ポイント

  • 公式ルール更新がないか確認する。
  • Qwen、OpenFOAM、プロファイリング、ベンチマーク指標、禁止事項の担当を決める。
  • 調査したリンクは必ず参考文献として残す。

関連ページ

2026-06-05 議事録

実施日時

  • 2026-06-05(金)18:00-

目的

  • HPC/AI最適化に関する勉強会・MTGの内容を共有する。
  • 各自の調査内容をすり合わせ、今後の方針と次回までのタスクを整理する。

決定事項

  • 10月11〜12日のイベントは、とりあえず全員エントリーしておき、都合が変わった人はオンライン参加に切り替える。(対面/オンラインの最終判断は各自の授業・ゼミ次第)
  • プロファイリングは、まずperf + mpiPの組み合わせで着手する。
  • コンパイラ最適化はコストが低いので、早い段階で試す。
  • CPUアーキテクチャの深掘り(アセンブリレベルの最適化など)は学習コストが高いため、当面は優先度を下げる
  • 来週の発表形式はスライドベースにする(図・画像を載せやすいため)。
  • 計測データの保管場所とフォーマットは、来週のMTGで決める(今回は保留)。

共有内容

各自が担当した最適化テーマを発表した。詳細は下記の技術ページに分けて整理した。

調査テーマ

  • ボトルネック分析の全体像: 計算・通信・I/Oの割合を把握する(ボトルネック分析)。
  • コンパイラ最適化・ライブラリ選定: GCCの最適化オプション、BLASライブラリの選定など(CPU最適化)。
  • MPI通信最適化: 通信がボトルネックになりやすい点、ロードインバランス(rank間の負荷の偏り)への対処(MPI通信最適化領域分割)。
  • NUMA最適化: メモリの局所性、スレッド配置の工夫(NUMA最適化)。
  • GPU/NCCL最適化: GPU間通信(NCCL)の最適化(NCCL通信最適化)。
  • I/O最適化: スクラッチ領域の活用など(I/O最適化)。
  • スケーリング分析: ノード数・スレッド数を変えたときの性能変化を測定する(スケーリング分析)。

注: 上記の発表は富岳(A64FX)を前提に調査されている。2026年大会の実機は未確定のため、富岳前提の内容は調査ステータスの要確認項目として扱う(富岳アーキテクチャ)。

方針議論

  • CPU演算性能は富岳では比較的強いため、通信(MPI)がボトルネックになる可能性が高いという認識で一致した。
    • ※ ただし、これは富岳を前提とした認識。2026年大会で使う実機(メモ上は「4ノード・100+コアのCPUクラスタ」)は最終ルールで要確認
  • コンパイラ最適化は低コストなので、早めに試す価値がある。
  • 大規模LLMのモデルロード時間が競技で課題になりうる。スクラッチ領域への配置が有効な可能性がある(要確認)。

プロファイリングツールの整理

ツール用途
perfCPUプロファイリング(軽量)
mpiP / VampirMPI通信の可視化・タイムライン分析
nvidia-smiGPU状態の確認
IPMMPI通信の概要把握

→ まずperf + mpiPの組み合わせで着手するのが現実的、との結論。

データ管理・議事録の運用

  • 計測データの保管場所は来週決める。
  • 発表はスライドベースで行う。
  • スパコンの共有ストレージの活用も検討する(メモ上は「限界」と記載。名称・利用可否は要確認)。

TODO

項目内容目的
環境構築各自の担当問題(HPC / AI)を動かせる状態にするこれ以降の計測・実験の前提を揃える
ベースライン計測何も工夫しない状態での実行時間を記録する最適化の効果を比較する基準を作る
プロファイリング初挑戦perfなどのツールを1つ使い、結果を持ち寄る勘ではなく計測でボトルネックを特定する
来週の発表準備計測結果・使ったツール・分析方法をスライドにまとめるチーム内で知見を共有・再利用できるようにする
データ管理方針の決定来週のMTGで保管場所・フォーマットを決める計測データを散逸させず蓄積する

今後の方針

  • 次回までの達成ラインを以下とする。
    • 最低ライン: モデル(担当問題)を動かす + プロファイリングツールを1つ使ってみる。
    • できれば: プロファイリング結果の分析・コードの理解まで進める。
  • 1回の実験で変更する条件は1つにし、「なぜ速くなったか」も記録する(プロファイリングと性能分析の基本方針に従う)。

関連ページ

2026-06-12 議事録

実施日時

  • 2026-06-12(金)

目的

  • 環境構築の進捗を共有する。
  • 問題が未公開の期間に何を進めるか(過去問・プロファイリング学習)を決める。

決定事項

  • 問題が未公開のうちは、環境をたくさん触ることプロファイリングを学ぶことに注力する。
  • 過去問を解いて、プロファイリングを学び、最適化を試して理解を深める。
  • 6月中に過去問のプロファイリング&最適化を行う(過去問は6月中に解きたい)。
  • 来週までに、各自プロファイリングツールを複数試し、結果をスライドにまとめる。
  • 来週はTeams会議で実施する(松村は不在)。

共有内容

進捗(環境構築)

担当進捗
松村・渡邉SSHと仮想環境の構築
田中・小林・久保田OpenFOAMの構築と実行、基本的なperf実行まで完了

共有された知見

  • PythonのPackage Manageruvがおすすめ。
  • perfcache-referenceイベントはハードウェア依存らしい(要確認)。計測値の比較時は環境差に注意する。
  • ベンチマーク抽出ツールは大会側から指定されるらしい(未確定)。詳細は不明だが、現時点でも分析の練習はできそう。

TODO

項目内容目的
プロファイリングツールを試す各自perfなどのツールを複数使い、結果を持ち寄る来週のスライドの材料にする
結果のスライド化使ったツール・計測結果・分析方法をスライドにまとめるチームで知見を共有する
過去問に着手過去問を入手し、実行・プロファイリング・最適化を試す本番の問題公開前に手を動かして理解を深める

今後の方針

  • 6月中: 過去問を解き、プロファイリングと最適化を試して理解を深める。
  • 7月: 問題が公開されることを期待する。公開後は、その問題に対する取り組みへ移行する。
  • 来週: プロファイリングツールをたくさん試し、その結果をスライドにまとめて共有する(Teams、松村不在)。

未確定事項

  • 2026年大会の問題(HPC/AI課題)はまだ公開されていない。
  • ベンチマーク抽出ツールは大会側指定。内容は未確定。
  • cache-referenceなどHWイベントの扱いは環境依存のため要確認。

関連ページ

2026年大会の現時点まとめ

公式に確認できたこと

2026年大会の公式ページは、2026 APAC HPC-AI Competitionです。

公式ページに掲載されている主要日程は次の通りです。

日程内容
2026-05-22競技チーム一覧の確定
2026-05-29training planの発表
2026-06-08以降training lecture開始
2026-08-03以降競技マシンへのアクセス開始
2026-10-09以前スライドとコード提出
2026-10-16presentation interview agenda発表
2026-10-19以降presentation interview
2026-11Supercomputing Conference 2026で最終結果発表
2027年SupercomputingAsia 2027で授賞式

表彰には、First Place、Second Place、Third Place、Merit Prize、HPC Special Prize、AI Special Prizeなどがあると公式ページに書かれています。

メモ上の2026年課題候補

殴り書き.txtには、主催側の説明として次の内容が含まれています。

  • HPC側: OpenFOAM HPC Committee repositoryからOpenFOAMベンチマークケースと入力ファイルを使う予定。
  • HPC側: 4ノード、100コア超の現代的CPUクラスタで短時間に終わる問題サイズを選ぶ予定。
  • AI側: Qwen inference / PD disaggregation inference workloadsを更新中。
  • AI側: Dynamoのbenchmarksrecipes/qwen3-235b-a22b-fp8をPBS/Slurmに適用する計画。
  • ただし、正確なOpenFOAMケース、パラメータ、SGLangで使うモデル構成、測定方法は未確定。

これは重要な手がかりですが、公式ページに最終ルールとして掲載されたものではありません。現時点では「要確認」として扱います。

今年の質問リスト

大会運営に確認すべき質問です。

質問理由
OpenFOAMのケース名、ソルバ、メッシュサイズは何か最適化対象がケース依存だから
変更可能範囲はどこまでかソルバ改変、decomposeParDict、I/O、コンパイルオプションの扱いが異なる
AI側はSGLang固定か、Dynamo必須か、TensorRT-LLM recipeは参考だけか実装戦略が大きく変わる
モデル重みは実重みかランダム重みかspeculative decodingやMTPの有効性が変わる
評価指標は総throughputだけか実サービスらしさ、fairness、latency trade-offが変わる
量子化、torch.compile、実験的機能、モデル品質を下げる変更は禁止か2025年はこの種の制約があったため
ジョブスケジューラはPBSかSlurmか実行スクリプトと自動実験基盤が変わる

当面の動き方

最終ルールが出るまでは、競技固有の数値チューニングではなく、次を優先します。

  • OpenFOAMの並列実行、領域分割、ログの読み方を理解する。
  • LLM推論のprefill、decode、KV cache、throughput、latencyの意味を理解する。
  • 実験ログのフォーマットを先に決める。
  • 1回の実験で1つの変更だけを入れ、差分を説明できるようにする。

参考文献

2025年大会の振り返り

公式発表で確認できる2025年課題

HPC-AI Advisory Councilの2025年結果PDFでは、2025年大会の課題が次のように説明されています。

部門課題
HPC TrackNWChemによる計算化学シミュレーションの実行時間最小化
AI TrackSGLangを使ったDeepSeek-R1 671B推論スループット最大化

公式PDFでは、参加者がprofiling、algorithmic refinements、architecture-specific tuningを使ってHPC/AI性能を改善したことも説明されています。

日本チームの結果

東京農工大学などのプレスリリースでは、理研R-CCSが支援した4チームの入賞が確認できます。

チーム
T0M0K4ZU w/ RIKEN総合部門 Merit Award
Moralistars w/ RIKENHPC部門 Best HPC Performance賞
SQUID w/ RIKENHPC部門 Excellent HPC Performance賞
Kisarazu Big Branch team w/ RIKENAI部門 Excellent AI Performance賞

このプレスリリースでは、理研R-CCSが2025年大会から学生出場支援事業を開始し、練習用計算資源として九州大学のスーパーコンピュータ「玄界」の利用支援などを行ったことも説明されています。

参加記から得られる実践知

木更津高専チームの参加記は公式ルールではありませんが、初心者チームが何に詰まるかを知るうえで有用です。

主な学びは次の通りです。

  • 最初の数週間は、最適化以前にクラスタ、VPN、2FA、ジョブスケジューラ、モデルロードに慣れる時間になる。
  • 2025年のAI側では、SGLang公式ドキュメントとブログを読み、parallelism、batch size、network、attention、MoE/MTPなどを調べている。
  • 実験は300回規模になり得るため、実験前に仮説を書き、実験後に設定、結果、ログ、解釈を残す仕組みが必要。
  • 成功例だけでなく、期待した高速化が出なかった例も重要。例えばDP Attentionは文献上よく見えても、実環境ではスループットが落ちる可能性がある。

2026年に引き継ぐべき教訓

  1. ベースラインをまず動かす。
  2. 実行時間、ロード時間、I/O、ネットワーク、GPU使用率、CPU使用率を分けて見る。
  3. 「速くなった」ではなく、「どのメトリクスが、どの条件で、どれだけ変わったか」を記録する。
  4. 大会ルール上禁止される可能性がある変更を、早い段階でリストアップする。
  5. プレゼン評価もあるため、最終スコアだけでなく実験設計と説明可能性を残す。

参考文献

プロファイリングと性能分析

これは何か

プロファイリングは、プログラムの実行時間、CPU/GPU使用率、メモリ使用量、通信時間、I/O待ち時間を計測する作業です。 最適化の前に必ず行い、「どこが遅いのか」を事実で確認します。

コンテストで上位を狙うには、最初からコードや設定を勘で変えるのではなく、まず性能探偵として遅い場所を特定することが重要です。

なぜ重要か

HPCやAI推論では、遅く見える原因が一つとは限りません。

  • CPU計算が重い。
  • GPUが十分に使えていない。
  • GPU間通信が詰まっている。
  • MPI通信待ちが長い。
  • KV cacheやメモリアクセスが帯域不足になっている。
  • I/Oやモデルロードで待っている。
  • CPU側の前処理がGPUを待たせている。

ボトルネックを特定しないまま最適化すると、スコアに効かない場所へ時間を使う危険があります。

キャッチアップすべき技術一覧

技術WhatWhyWhenWhereHow重要度
プロファイリング実行時間やリソース使用状況を計測改善箇所を特定するため最初に必ず実施CPU、GPU、メモリ、通信、I/Operf、VTune、nsyshtopnvidia-smi★★★★★
ボトルネック分析最も遅い部分を特定効果の大きい改善を行うためプロファイリング後システム全体時間割合分析、待ち時間分析★★★★★
CPU最適化CPU計算を高速化CPUが律速の場合に有効CPU使用率が高い時HPC計算、前処理SIMD、OpenMP、コンパイラ最適化★★★★☆
GPU最適化GPU利用率を上げるGPUの遊び時間を減らすGPU utilizationが低い時AI推論、学習batch調整、kernel融合★★★★☆
メモリ最適化メモリアクセスを改善メモリ待ちを減らすcache missや帯域待ちが多い時LLM、科学計算cache活用、データ配置改善★★★★☆
MPI通信最適化ノード間通信を減らすHPCでは通信が支配的になりやすいMPI_Waitなどが長い時CPUクラスタ通信回数削減、通信隠蔽★★★★★
NCCL通信最適化GPU間通信を高速化マルチGPU効率を上げるAllReduceなどが長い時分散推論、分散学習topology確認、通信設定確認★★★★★
NUMA最適化CPUとメモリ配置を最適化リモートメモリアクセスを減らすマルチソケット環境大型CPUサーバnumactl、CPU pinning★★★☆☆
I/O最適化データ読み書きを高速化ストレージ待ちを減らす大量データ利用時学習、シミュレーションcache、並列I/O、出力頻度調整★★★☆☆
スケーリング分析並列効率を測るノードやGPUを増やす価値を判断する最適化評価時分散システム全般1→2→4→8台比較★★★★★

HPCコンテストでの優先順位

順位技術理由
1プロファイリング何が遅いか分からないと改善できない
2ボトルネック分析最も効果の大きい箇所を見つける
3MPI/NCCL通信解析HPC・AIともに通信が律速になりやすい
4スケーリング分析ノード数やGPU数を増やす価値を判断できる
5メモリ最適化現代CPU/GPUは計算よりメモリ待ちが効くことが多い
6CPU/GPU最適化ボトルネックが計算だった場合に有効
7NUMA/I/O最適化特定環境で大きな効果を発揮する

去年の課題との対応

部門最重要技術次点
NWChem(4 CPU nodes)MPI通信解析スケーリング分析、NUMA最適化
SGLang + DeepSeek-R1(16 H100 GPUs)NCCL通信解析GPUプロファイリング、KV cache解析

2025年AI部門では、単純なCUDA最適化よりも、次の順番で状況を切り分ける力が重要だった可能性があります。

  1. GPUは本当に忙しいのか。
  2. GPU間通信で詰まっていないか。
  3. KV cache参照で帯域不足になっていないか。
  4. CPUがGPUを待たせていないか。

これは要確認の推測ですが、SGLangや大規模LLM推論では、GPU kernel単体の高速化だけでなく、batching、KV cache、GPU間通信、CPU側スケジューリングが全体性能に影響します。

最初に見るべき指標

対象指標見る理由
CPUCPU使用率、hotspot関数、cache miss、context switchCPU計算や前処理が律速か見る
GPUGPU utilization、SM使用率、memory bandwidth、kernel timelineGPUが計算で忙しいか、待っているかを見る
メモリ使用量、帯域、cache miss、page faultメモリ待ちや容量不足を見る
MPIMPI_Wait、通信時間、rank間の負荷差ノード間通信やload imbalanceを見る
NCCLAllReduce/AllGather時間、GPU間転送、topologyマルチGPU通信の詰まりを見る
I/O読み書き時間、ファイル数、ログ量ストレージ待ちを見る
scaling1/2/4/8ノード比較、parallel efficiency並列化が効いているか見る

代表ツール

ツール主な対象用途
perfLinux CPUCPU hotspot、命令、cache missなどの確認
Intel VTune ProfilerCPU、thread、memory、MPIなどCPUボトルネックの詳細分析
NVIDIA Nsight Systems (nsys)CPU/GPU全体timelineCUDA kernel、CPU待ち、GPU待ち、通信の流れを見る
nvidia-smiNVIDIA GPUGPU使用率、メモリ使用量、電力、プロセス確認
htopCPUプロセスCPU core使用状況、プロセス監視
MPI profiling interface / PMPIMPI通信MPI関数ごとの時間や呼び出しを測る
NCCL logs / NsightGPU間通信collective通信の時間やtopology問題を調べる

実験の進め方

  1. 何も変更しないbaselineを測る。
  2. CPU、GPU、通信、I/Oのどこで時間を使っているかを大まかに分ける。
  3. 最も時間割合が大きい箇所を1つ選ぶ。
  4. その箇所に対して1つだけ変更する。
  5. 同じ条件で再測定する。
  6. 速くなった理由、遅くなった理由、変わらなかった理由を記録する。

実験ログテンプレート

experiment_id:
date:
target:
baseline_command:
changed_setting:
nodes:
cpus:
gpus:
input_size:
profiling_tool:
wall_time:
cpu_summary:
gpu_summary:
memory_summary:
communication_summary:
io_summary:
bottleneck_hypothesis:
result:
next_action:

参考文献

ボトルネック分析

このページは、2026-06-05の勉強会でチームが共有したボトルネック分析の基礎をまとめたものです。 担当: 渡邉。

これは何か

ボトルネック分析とは、プログラム全体の実行時間のうち、どこが最も時間を使っているかを切り分ける作業です。 最適化の前に必ず行い、「速くすべき場所」を事実で決めます。

なぜ重要か

HPCでは、「CPUが遅いからCPUを速くする」という発想は的外れになりやすいです。 実際には、次の場所がボトルネックになることが多いです。

  • メモリアクセス(帯域待ち)
  • ノード間通信(MPI)
  • 同期待ち(待機・idle)

つまり、計算そのものより「待ち時間」が支配的になりやすい、という認識が出発点です。

基本フロー

最初に、全体時間を次の観点で分解します。

見るもの何が分かるか
計算・通信・I/Oの時間割合どのカテゴリが支配的か
関数・プロセス・スレッドごとの時間どの処理が重いか(hotspot)
CPU使用率計算で忙しいのか、待っているのか
MPI通信時間ノード間通信が律速か

マクロからミクロへ:最適化の定石

いきなりソースコードの行を見てはいけません。 ボトルネックの「種別」を大局から絞り込みます。

フェーズ粒度やること代表ツール例
Phase 1マクロ(低負荷)CPU/GPU/メモリ/通信のどこが遅いか切り分けLinaro MAP、Nsight Systems、perfmpiP、IPM
Phase 2ミドル(中負荷)関数特定、並列インバランス・待機状態の定量化Score-P、TAU、HPCToolkit
Phase 3ミクロ(高負荷)行レベルの原因(cache miss、依存関係)解明Scalasca、Nsight Compute、Callgrind、ftrace

合言葉は「推測するな、計測せよ」。低負荷ツールで「当たり」をつけ、高負荷ツールで「原因」を特定します。

ツールの詳細はプロファイリングツール実践ガイドにまとめています。

注意点

  • 計測ツール自体にオーバーヘッドがあります。マクロ→ミクロの順で、必要なときだけ重いツールを使います。
  • 1回の実験で変える条件は1つにします。
  • 「速くなった」だけでなく、なぜ速くなったかを記録します。

関連ページ

参考文献

プロファイリングツール実践ガイド

このページは、2026-06-05の勉強会でチームが整理した「用途別プロファイラ・トレースツールの全体像」をまとめたものです。 個々のツールの公式情報は参考文献を参照してください。

これは何か

性能解析ツールは、何をどの粒度で測りたいかによって使い分けます。 ここでは、抽象度(マクロ/ミドル/ミクロ)と対象レイヤ(CPU/MPI/OpenMP/GPU/メモリ)で整理します。

大局から局所へ:3つの抽象度

抽象度計測オーバーヘッド手法用途ツール例
高(マクロ)サンプリング、全体傾向の俯瞰CPU/GPU/通信の「どこ」が遅いか切り分けLinaro MAP、Nsight Systems、mpiP、IPM
中(ミドル)関数単位のコールグラフ、MPI待機時間、メモリ推移関数特定、並列インバランスの発見Score-P、TAU、HPCToolkit、Massif
低(ミクロ)インストルメンテーション、詳細トレース、HWイベント行レベルの原因解明(cache miss、依存関係)Scalasca(trace)、Nsight Compute、Valgrind、ftrace

レイヤ別の代表ツール

CPU(計算密度・メモリアクセス)

アプローチツール特徴
サンプリング(低負荷・推奨)perfLinux標準。HWカウンタ(PMU)を読む。perf c2cでfalse sharing(偽共有)も検出
サンプリングIntel VTune ProfilerEBSでcache missをソース行へ直接マッピング
サンプリングLinux ftraceカーネルレベルの挙動(スケジューリング遅延・割り込み)を追跡
インストルメンテーション(高負荷)Callgrind(Valgrind)正確な命令数とコールグラフを生成。Cachegrindでcacheも模擬

gprofは関数プローブのオーバーヘッドが大きく、現代のHPCでは非推奨とされています。

MPI(通信・同期のオーバーヘッド)

アプリが「計算」しているのか「待機」しているのかを切り分けます。

ツール特徴
mpiP極めて軽量。関数ごとの時間・通信量をテキストサマリで出力。最初の一手
IPMメッセージサイズごとの通信量・通信トポロジを低負荷で把握
Score-PHPC標準の計測インフラ。CUBE4形式で出力し後続解析へ繋ぐハブ
Scalasca待機状態(wait states)を定量化し、通信ボトルネックを特定
TAUMPI + OpenMP + GPUのハイブリッド環境を統合プロファイル
HPCToolkitMPIとCPU HWカウンタを紐づけた統計プロファイル

MPIトレース・タイムライン可視化

「なぜ・いつ・誰のせいで待機したか」を時系列で追います。

ツール特徴
VampirScore-PのOTF2トレースを読み、大規模ノードのタイムラインを可視化
Cubeメトリクス・コールツリー・システムの3軸で階層的にボトルネック特定
Intel Trace Analyzer (ITAC)「理想化(無限に速いネットワーク)」機能で通信オーバーヘッドを分離
Paraver / JumpshotExtraeベース/レガシーMPICH向けのトレース可視化

GPU(ホスト連携→カーネル深掘り)

最大の罠は「いきなりGPUカーネル内部を見ること」。まずCPU-GPU間のデータ転送(PCIe)を疑います。

視点ツール特徴
マクロ(システム全体)Nsight SystemsCPUスレッド、GPUへのデータ転送、kernel dispatchの非効率を特定
ミクロ(カーネル内部)Nsight Computeレジスタ使用量、メモリ帯域、命令レベルのstall原因を解析
AMD ROCm環境rocprof (v3)Roofline分析でHW理論限界に対する位置を可視化

OpenMP(並列インバランスと同期)

「CPU使用率が100%か」ではなく「有意義な計算をしているか」を問います。

ツール特徴
Intel VTune (OpenMP Wait Analysis)アクティブ時間と待機/アイドル時間を厳密に分離
Linaro MAP適応型サンプリングで極小ファイルサイズ。ソース改変なしで行レベルの待機を特定
TAU (OMPT)ハイブリッド実行時のタイムラインを可視化

メモリ(安全性検証とヒープ最適化)

目的ツール特徴
エラー検出(安全性)AddressSanitizer (ASan)コンパイラベース。低負荷でCI/CDに組み込める
エラー検出(深掘り)Valgrind Memcheck再コンパイル不要だが負荷は数十倍
使用量・ヒープ最適化Heaptrack低負荷でヒープ確保/解放をトレース。リークや無駄を特定
使用量・ヒープ最適化Massif (Valgrind)メモリ使用量の推移をスナップショットで記録

富岳・HPCコンテストでよく使う組み合わせ

チームの調査では、富岳環境で次のツールが定番として挙がりました(実機・利用可否は要確認)。

  • 必須: mpiP / Score-P / Cube / perf / nsys(GPU使用時)
  • 発展: Scalasca / Vampir / HPCToolkit / VTune

OpenFOAMのMPI最適化なら、次の流れが強力とされています。

mpiP  →  Score-P  →  Cube  →  Scalasca

まず何から使うか(チームの結論)

  • 最初の一手は perf + mpiP。低負荷で「当たり」をつけられる。
  • 必要に応じてScore-P/Cube/Scalascaへ深掘りする。

注意点

  • 富岳前提のツール構成です。2026年大会の実機は未確定なので、利用可能なツールは要確認です(調査ステータス)。
  • ツールはオーバーヘッドが大きいものほど後段で使います。

関連ページ

参考文献

スケーリング分析

このページは、2026-06-05の勉強会でチームが共有したスケーリング分析の基礎をまとめたものです。 担当: 田中。

これは何か

スケーリング分析とは、ノード数・コア数・MPIランク数・OpenMPスレッド数などの計算資源を変えたときに、実行時間や並列効率がどう変化するかを測り、並列化の限界やボトルネックを特定する分析です。

CPU計算を単純に速くする方法として「CPUの数を増やす」「クロック周波数を上げる」が考えられますが、資源を増やした分だけ速くなるとは限りません。それを確かめるのがスケーリング分析です。

基本概念

用語説明
strong scaling問題サイズを固定し、ノード/コア数を増やしてどれだけ速くなるかを測る
weak scaling1ノードあたりの問題サイズを固定し、資源と問題サイズを同時に増やす
parallel efficiency理想的な速度向上に対して、実際にどれだけ効率が出ているか

理想的には、CPU/nodeを 1, 2, 4, ... と増やすと実行時間が 1/1, 1/2, 1/4, ... と減るはずですが、実際にはきれいに比例しません。

なぜ理想どおりにならないか

要因内容
逐次部分(アムダールの法則)並列化できない処理が残ると、資源を増やしても頭打ちになる
MPI通信・collective・同期資源を増やすほど通信・同期のコストが増える
load imbalance(負荷の偏り)rank間で計算量が偏ると、速いrankが遅いrankを待つ

特にload imbalanceは重要です。一部のrankが先に終わっても、最も遅いrankが終わるまで全体は終わりません。追加したnodeの効果が「待ち」で失われます。

大会との関係

  • 「ノードを増やせば勝てる」ではなく、どこまで増やすと効率が落ちるかを把握することが重要です。
  • 領域分割の手法(scotchなど)やrank数の調整で、スケーリングが改善することがあります(領域分割)。

最初に見るべき指標

観点見るものなぜ重要か
速度向上1/2/4/8ノードのspeedupカーブ理想直線からどれだけ離れるか
並列効率parallel efficiencyどの規模で効率が落ちるか
負荷の偏りrankごとの計算時間のばらつき(CV)load imbalanceの有無

改善の進め方

実行時間だけを見るのではなく、計算資源を変えながら対照実験を行い、プロファイリングで原因を特定します。

  1. 入力を固定し、node/rank/thread数を変えて測る(strong scaling)。
  2. speedupと並列効率を出し、頭打ちになる点を探す。
  3. その点でプロファイルを取り、逐次部分・通信・load imbalanceのどれが原因か切り分ける。
  4. 原因に応じて対策(分割手法変更、rank数調整、通信削減など)を1つずつ試す。

代表的なプロファイリングツールはperfです。詳しくはプロファイリングツール実践ガイドを参照してください。

実験ログテンプレート

experiment_id:
date:
case:
nodes:
ranks:
threads:
wall_time:
speedup_vs_1node:
parallel_efficiency:
rank_time_imbalance:
bottleneck_hypothesis:
notes:

関連ページ

参考文献

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最適化の項目があり、DarshanLLIO情報で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を減らすために結果出力を削りすぎると、解析・検証ができなくなります。

関連ページ

参考文献

OpenFOAM課題の入口

OpenFOAMとは

OpenFOAMは、CFD、つまり数値流体力学のためのオープンソースソフトウェア群です。2026年大会のHPC側では、メモ上、OpenFOAM HPC Committee repositoryのケースが使われる可能性があります。

現時点では、どのケースが大会本番で使われるかは未確定です。

OpenFOAM HPC Committee repository

OpenFOAM HPC Benchmark SuiteのREADMEでは、このリポジトリの目的が次のように説明されています。

  • HPCアーキテクチャ上でデータセットをセットアップして実行するためのガイドや初期スクリプトを提供する。
  • ハードウェア、ソフトウェア環境、設定を比較するための共通基準を提供する。
  • 性能を測るためのKPIを定義する。

README上では、Grand Challenges、Industrial Applications、Microbenchmarks、Other Benchmarksに分かれ、DrivAer、cavity、motorbike、combustion、wind farmなど複数のケースが整理されています。

OpenFOAMの並列実行の基本

OpenFOAM v13 User Guide: Running applications in parallelでは、OpenFOAMの並列実行はdomain decomposition、つまり計算領域を複数の部分に分割して各プロセスに割り当てる方式だと説明されています。

基本の流れは次の通りです。

  1. decomposeParDictで分割数と分割方法を決める。
  2. decomposeParでメッシュと初期場を分割する。
  3. mpirunなどでソルバを-parallel付きで実行する。
  4. 必要ならreconstructParで結果を再構成する。

よく出る分割方法は次の通りです。

方法意味
simplex/y/z方向に単純分割する
hierarchical分割順序を指定できる幾何分割
scotchプロセッサ境界を減らすことを狙うグラフ分割
ptscotch並列実行向けのSCOTCH系分割

性能に効きそうな場所

初心者が最初に見るべき観点です。

観点見るものなぜ重要か
領域分割decomposeParDict、各rankのセル数、境界面MPI通信量とロードバランスに直結する
線形ソルバfvSolution、反復回数、残差OpenFOAM実行時間の大部分を占めやすい
I/OwriteInterval、fileHandler、ログ出力並列ファイル数が多いとファイルシステムが詰まる
コンパイルMPI、最適化フラグ、OpenFOAM版CPU命令、通信ライブラリ、数学ライブラリで差が出る
ノード配置rank mapping、core binding、NUMACPUメモリ帯域とネットワーク利用に影響する

最初の実験テンプレート

本番ケースが出たら、まず次を固定してベースラインを作ります。

項目記録内容
Git commit / OpenFOAM version再現性のため
ケース名、メッシュサイズ問題規模の確認
ノード数、rank数、threads並列条件
decomposeParDict分割条件
実行コマンドPBS/Slurmスクリプト含む
wall time大会指標の中心
反復回数、残差速いが解が悪い変更を見抜く
I/O時間、ログサイズボトルネック確認

参考文献

OpenFOAM最適化の考え方

最適化の単位

OpenFOAMの高速化は、少なくとも次の層に分けて考えます。

リスク
実行設定rank数、ノード数、binding、I/O設定低い
分割設定simplehierarchicalscotch、分割方向低から中
ソルバ設定tolerance、relTol、preconditioner、反復上限中。精度や収束性が変わる
コンパイル設定compiler、MPI、最適化フラグ中。環境差が出る
コード変更ソルバ改変、行列計算、通信削減高い。ルール確認が必須

大会では「どこまで変更してよいか」が最重要です。最終ルールが出るまでは、設定変更と計測基盤の準備に寄せるのが安全です。

ボトルネックの探し方

最初に見るべき症状と対応です。

症状疑う場所次に見るログ・指標
rank数を増やしても速くならないMPI通信、分割不均衡各rankのセル数、境界数、MPI時間
solver反復が多い線形ソルバ設定、メッシュ品質residual、iteration count
計算開始前後が遅いI/O、decompose、reconstructログの時刻、ファイル数、scratch配置
ノードを増やすと不安定network、MPI、filesystemPBS/Slurmログ、MPIエラー
一部rankだけ遅いload imbalance、NUMA、bindingrank別時間、CPU affinity

OpenFOAMで特に注意すること

I/O

OpenFOAMの並列実行では、rankごとにprocessor*ディレクトリが作られます。大規模並列ではファイル数が増え、I/Oが詰まることがあります。

OpenFOAM user guideでは、collated file handlerにより、分割されたfieldやmeshをまとめた形式で扱えると説明されています。ただしMPIのthreading supportなど環境条件があります。

領域分割

分割は「セル数を均等にする」だけでは不十分です。境界面が増えると通信が増えます。乱暴にrankを増やすと、計算より通信の割合が増えて遅くなることがあります。

収束条件

toleranceやrelTolを緩めると速くなる場合がありますが、結果の正当性が変わります。大会で許されるか、評価がwall timeだけか、物理結果の検証があるかを確認する必要があります。

実験ログの最小項目

experiment_id:
date:
author:
case:
openfoam_version:
git_commit:
nodes:
ranks:
threads:
decomposition:
solver_settings_changed:
io_settings_changed:
command:
wall_time:
iteration_count:
residual_summary:
stdout_log:
stderr_log:
notes:
next_action:

参考文献

CPU最適化(コンパイラ・ライブラリ)

このページは、2026-06-05の勉強会でチームが共有したCPU最適化の基礎をまとめたものです。 担当: 田中。

これは何か

ここでのCPU最適化とは、コンパイラ・ライブラリとそれらの設定を適切に行うことでCPU計算部分を高速化し、実行時間を短縮することとします。 アルゴリズム自体を書き換えるのではなく、「ビルドの仕方」と「使うライブラリ」で速くするアプローチです。

なぜ重要か

  • 実装をほとんど変えずに高速化できる可能性があり、コストが低い。
  • ハードウェアの性能を引き出せる。
  • 一方で、検証コストが大きく、ハードウェアへの理解が必要です。

2025年大会(NWChem)のルールでは、次が許可された最適化として挙げられていました(昨年のルール。今年は要確認)。

  • Compiler optimizations: 異なるコンパイラ(Intel、GCC、AOCC)と最適化フラグ
  • Mathematical libraries: 最適化されたBLAS/LAPACK(Intel MKL、OpenBLAS、AOCL)の利用
  • Parallel strategies: MPI設定、hybrid並列、プロセス配置・affinity、スレッド管理

コンパイラ最適化フラグ

コンパイルオプションを、マシン/プログラムに合わせて組み合わせると、実装を変えずに高速化できる可能性があります。

gccの代表的な最適化オプション:

オプション内容
-O2 / -O3 / -Ofast一般的な最適化レベル設定
-march=<target cpu>CPU固有命令を使う最適化

競技プログラミングで知られるQCFium法のように、pragmaで局所的に指定する例もあります。

#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

参考実験では、これらの指定で約29%(×1.2〜1.5程度)速くなったケースが報告されています(経験談・環境依存)。

-Ofastの注意(重要・要確認)

-Ofastなどの一部の最適化は、次のように数値の振る舞いを変えます

  • 演算の結合順序の変更
  • 近似的な数学関数・命令の利用
  • NaNや無限大が発生しないと仮定する
  • +0.0-0.0を区別しない
  • 動的な丸めモードを無視する

これにより、数値・分岐条件・収束過程の変更、計算精度の劣化が起こりえます。

2025年大会の禁止事項(昨年のルール)には次がありました。今年も同様かは要確認です。

  • Algorithm alteration(基本アルゴリズムの変更)
  • Precision reduction(計算精度・データ精度の低下)
  • Input modification(分子構造、basis set、収束条件の変更)

-Ofast系が大会でどこまで許容されるかは、必ずルールで確認し、結果が変わらないか検証すべきです。

検証手段:サニタイザー

望ましくない動作・未定義動作をピンポイントで検出するために、サニタイザーを使います。

-fsanitize=address,undefined
-fno-omit-frame-pointer

ライブラリ選定

数値ライブラリと並列ランタイムにも複数の実装があり、組み合わせで高速化を狙えます。 適切に選ばないと、むしろ並列計算効率が落ちることがあります。

種類補足
数値計算ライブラリ BLAS/LAPACKOpenBLAS、Intel MKLnumpyのバックエンドとしても有名
派生実装ScaLAPACK、Sparse BLAS など用途特化
ライブラリ設定Threaded / Sequential / MPI / 精度設定でも性能が変わる

BLASは行列・ベクトル演算の標準API、LAPACKはそれを使う線形代数ライブラリです。

さらに調べるべきキーワード(チームの宿題)

用語一言
LTO複数の翻訳単位を横断した最適化(Link Time Optimization)
PGO実行プロファイルを利用した最適化(Profile-Guided Optimization)
lddコマンド実行ファイルが依存する共有ライブラリを確認する
NUMANUMA最適化を参照

まとめ

  • 利点: 実装コストを抑えつつ大幅な高速化が期待でき、ハード性能を引き出せる。
  • 欠点: 検証コストが大きく、ハードウェア理解が必須。
  • -Ofast系は精度に影響するため、大会での許容範囲を要確認。

関連ページ

参考文献

MPI通信最適化

このページは、2026-06-05の勉強会でチームが共有したMPI通信最適化の基礎をまとめたものです。 担当: 松村。OpenFOAM最適化の中心テーマです。

これは何か

MPI(Message Passing Interface)は、複数プロセス間でデータをやり取りするプロセス間通信ライブラリです。 例: MPI_Send()MPI_Recv()

HPCクラスタでは、Node1〜Node4のように数百〜数万のCPUコアが協調して計算します。 そのため、プロセス間の通信が性能を大きく左右します。

なぜMPI通信が必要か

100万セルの流体解析を例にすると、1つのCPUで全部解く代わりに、領域を複数のrank(Rank0〜Rank3)に分割して並列計算します。

  • 分割すると、各rankの**境界セル(Boundary Cells)**の情報を隣のrankと交換する必要があります。
  • この交換(通信)がないと計算を進められません。

なぜMPI通信が「遅い」か

処理おおよその時間スケール
CPU演算ns(ナノ秒)
通信μs〜ms(マイクロ〜ミリ秒)

その差は1000倍以上です。人間サイズに換算すると「1秒 vs 約11日」というイメージです。 だからこそ、通信削減 = 高速化になります。

富岳で見るべき典型的ボトルネック

注: チームは富岳(A64FX)を前提に調査しています。2026年大会の実機は未確定です(富岳アーキテクチャ調査ステータス)。

① MPI通信

「ノード数を増やしたのに速くならない」典型です。

対策:

  • 通信回数の削減
  • 通信と計算のオーバーラップ(重ね合わせ)
  • MPIランク配置の改善

② メモリ帯域律速

富岳のCPUはA64FX。メモリ帯域がボトルネックになりやすいです。 詳細は富岳アーキテクチャを参照。

Load Imbalance(最重要ボトルネック)

rank間で計算量が偏ると、全体は最も遅いrankに引っ張られます。

rank計算時間
Rank010秒
Rank1〜35秒(残り5秒は待機/idle)

→ 全体 = 10秒。速いrankが遊んでいる分、追加した計算資源が無駄になります。 対策は領域分割の改善です(領域分割)。

OpenFOAMの典型的ボトルネック

OpenFOAMはCFD(速度・圧力・温度を解く)で、最終的に巨大な連立一次方程式 Ax = b を解きます。

計算の流れ:

メッシュ生成 → 行列構築 → Pressure Solver → 結果出力

実行時間の多くはPressure Solver(圧力ソルバ)が占めます。

反復法とMPI_Allreduce

Pressure SolverはCG系の反復法(CGPCGBiCGStabGAMGなど)で、正解に少しずつ近づきます。 各反復で残差を計算し、全rankで合わせるためにMPI_Allreduceを使います。

MPI_Allreduceとは: 各rankの値(局所誤差)を集約して全体の値(全体誤差)を計算し、全rankへ配り直す collective通信です(Gather → 合算 → Broadcast)。

Pressure Solver → 残差計算 → MPI_Allreduce → 全員同期 → Pressure Solver → ...

このループが本当のボトルネックになりがちです。

なぜAllreduceが大量発生するのか

CG反復は、反復ごとにMPI_Allreduceを繰り返します。 例えば300 iterationなら、300回以上の通信が発生します。

Pressure Solver 起動 → MPI_Allreduce 頻発 → 通信待ち(Idle) → (繰り返し)

→ 結論: 通信最適化が重要。研究者は次を頑張ります。

  • ソルバ変更(PCGGAMG
  • 通信回数の削減
  • rank数の調整
  • メッシュ分割の改善(領域分割

最初に見るべき指標・設定

観点見るものなぜ重要か
通信時間MPI_AllreduceMPI_Waitの時間通信・同期待ちが律速か
負荷の偏りrankごとの計算時間のばらつきload imbalanceの有無
ソルバfvSolutionのsolver/precondition設定PCG/GAMGの選択で通信特性が変わる
分割decomposeParDictのmethod通信量・負荷分散に直結

注意点

  • ソルバや収束条件(tolerance/relTol)の変更は、物理結果や収束性に影響します。大会で変更可能か要確認です。
  • 富岳前提の議論です。実機の通信特性(InfiniBand/Tofu等)は環境依存です。

関連ページ

参考文献

領域分割(decomposePar)

このページは、2026-06-05の勉強会でチームが共有した領域分割(OpenFOAMのdecomposePar)の基礎をまとめたものです。 担当: 松村。

これは何か

decomposeParは、OpenFOAMのメッシュを複数のrank(プロセス)へ分割するコマンドです。 分割方法はdecomposeParDictmethodで指定します。

ポイントは、分割の断面 = 通信が発生する面ということ。分割の仕方で通信量と負荷分散(load imbalance)が決まります。

なぜ重要か

  • 分割の断面積が大きいほど、隣接rankとのMPI通信が増えます。
  • rank間で計算量が偏ると、速いrankが遅いrankを待ち、並列効率が落ちます。
  • つまり、領域分割は通信量とロードバランスの両方に効く重要な設定です。

主な分割手法

method種類長所短所
simple単純分割実装・設定が簡単通信が多い(断面の表面積が大きくなりやすい)
hierarchical階層型分割ノード構造を考慮、通信削減。速くて設定簡単軸の指定が必要
scotchグラフ分割通信量を最小化。最も一般的で高品質ライブラリ依存
ptscotchscotchの並列版巨大メッシュ(100万セル以上)向け。MPI版Scotchセットアップがやや複雑

コンテスト視点:試す順番

チームのおすすめの順番です(経験談)。

  1. hierarchical … 速い・設定簡単
  2. scotch … まず比較対象にする
  3. ptscotch … 超大規模メッシュ向け

実際のHPCコンテストでは、decomposeParDictmethodscotchに変えただけで10〜30%高速化するケースも珍しくありません(経験談・環境依存)。

設定例:

// decomposeParDict
method scotch;

最初に見るべき指標・設定

観点見るものなぜ重要か
分割手法decomposeParDictmethod通信量・負荷分散に直結
rank数numberOfSubdomains多すぎると通信・同期が増える
負荷の偏りrankごとのcell数・計算時間のばらつきload imbalanceの有無

注意点

  • ptscotchは巨大メッシュで効果的ですが、小さいメッシュでは恩恵が小さいことがあります。
  • 分割を変えたら、必ずbaselineと同じ条件で再測定し、効果をプロファイルで確認します。
  • 大会で変更可能な設定範囲は要確認です。

関連ページ

参考文献

NUMA最適化

このページは、2026-06-05の勉強会でチームが共有したNUMA最適化の基礎をまとめたものです。 担当: 渡邉。

これは何か

NUMA(Non-Uniform Memory Access)は、マルチプロセッサ・システムにおけるメモリ配置のアーキテクチャです。 各プロセッサが個別のローカルメモリを持ち、それに直接アクセスします。

方式特徴
UMA(Uniform Memory Access)全プロセッサが共通のメモリに同じ距離でアクセス
NUMAプロセッサごとにローカルメモリがあり、アクセス距離が異なる

なぜ重要か

  • 近いメモリ(ローカル)にアクセスすれば速い。別ノードのメモリ(リモート)にアクセスすると遅い。
  • そのため、ローカルメモリを有効に使えるようにスレッドを配置することが重要です。
  • 配置を誤ると、リモートメモリアクセスが増えて遅くなります。

基本概念

ローカルメモリ・リモートメモリ

スレッドが使うメモリを、できるだけそのスレッドが動くプロセッサのローカル側に置くのが理想です。 同じメモリにアクセスするスレッドは、同じノードにまとめます。

プロセッサ・アフィニティ

特定のプロセッサ・コアへのスレッド/プロセスの割り当てを保持し続けることです。

  • スレッドが使うメモリをローカルに保てる。
  • ただし、OSの効率的なリソース管理を妨げる可能性があるため、慎重に設定します。
  • numactlコマンドで、NUMAポリシーを制御し、特定ノードでプロセスを動かせます。

ファーストタッチポリシー

OSが、そのメモリ領域に最初にアクセスしたプロセスにメモリを紐付ける仕組みです。

  • NUMAを有効に使うには、初期化スレッドと実行スレッドを一致させる必要があります。
  • つまり、データを使う実行スレッド自身に初期化させると、ローカルメモリに割り当たります。

大会との関係

  • 2025年大会のルールでは「System-level tuning: NUMA topology optimization」が許可項目として挙げられていました(昨年のルール。今年は要確認)。
  • マルチソケット/マルチNUMAノード環境では、CPU pinningとファーストタッチでメモリ局所性を上げられます。

最初に見るべき指標・設定

観点見るものなぜ重要か
メモリ局所性ローカル/リモートアクセス比率リモートアクセスが多いと遅い
スレッド配置numactl、CPU affinity設定スレッドとメモリの距離を縮める
初期化初期化スレッドと実行スレッドの一致ファーストタッチで局所配置になるか

注意点

  • アフィニティ固定はOSのスケジューリングと衝突することがあるため、効果を測りながら設定します。
  • NUMA最適化は環境構造(ソケット数・NUMAノード数)に強く依存します。

関連ページ

参考文献

富岳(A64FX)アーキテクチャ

このページは、2026-06-05の勉強会でチームが共有した富岳/A64FXに関する基礎をまとめたものです。

重要(要確認): チームは富岳(A64FX)を前提に最適化を調査していますが、2026年大会で使う実機は未確定です。 運営メモでは「4ノード・100+コアのCPUクラスタ」とされ、2025年大会では玄界が使われたとの情報もあります。 このページの内容は「富岳前提の調査」として扱い、最終ルールで実機を確認してください(調査ステータス)。

これは何か

富岳は理化学研究所のスーパーコンピュータで、CPUにA64FXを採用しています。

特徴内容
CPUA64FX(Armベース)
コア数48 Core(計算コア)
メモリHBM2(広帯域メモリ)
ベクトル拡張SVE512(Scalable Vector Extension、512bit幅)

なぜ重要か

A64FXはCPU演算性能が比較的強い一方で、**メモリ帯域がボトルネック(メモリ帯域律速)**になりやすい特性があります。 つまり「CPUを速くする」より「メモリアクセスと通信を改善する」方が効くことが多い、という前提で最適化を考えます。

メモリ帯域律速への対策

対策内容
データ局所性改善使うデータをまとめ、キャッシュに乗せる
キャッシュ利用改善アクセスパターンを連続的にする
配列配置変更(SVE活用)ベクトル化しやすいデータ配置にする

SVE(Scalable Vector Extension)は、ベクトル長に依存しないArmのSIMD拡張です。富岳では512bit幅(SVE512)です。

大会との関係

  • もし実機が富岳系なら、A64FX/SVE/HBM2の特性を踏まえた最適化が有効になります。
  • ただし前述のとおり実機は未確定です。実機が異なる場合、-marchやSVE前提の最適化は効果が変わります。

注意点

  • 「A64FXは強いらしい」という認識はあくまで一般論で、実アプリ(OpenFOAM等)では帯域・通信が律速になりがちです。
  • 実機・コンパイラ・利用可能ツールは大会のルール公開後に必ず見直します。

関連ページ

参考文献

LLM推論課題の入口

今年のAI側で出ている名前

メモ上では、2026年AI側の議論に次の名前が出ています。

名前何か現時点の扱い
QwenAlibaba/QwenチームのLLMシリーズ公式モデルカードあり
Qwen3-235B-A22B総235B、活性化22BのMoEモデル公式モデルカードあり
SGLang高スループット・低レイテンシ向けLLM serving framework公式ドキュメントあり
DynamoNVIDIAの分散推論serving framework公式ドキュメントとGitHubあり
PD disaggregationprefillとdecodeを別workerに分ける推論構成SGLang/Dynamoに公式説明あり

Qwen3-235B-A22B

Qwen3-235B-A22BのHugging Faceモデルカードでは、主な仕様が次のように説明されています。

項目内容
種類Causal Language Model
パラメータ数総235B、活性化22B
層数94
Attention headsQ: 64、KV: 4
Experts128
Activated experts8
Context lengthnative 32,768 tokens、YaRNで131,072 tokens
ライセンスApache-2.0

MoEなので、全パラメータを毎token使うわけではありません。ただし、重みはGPUメモリ上に載せる必要があるため、active parametersだけで必要VRAMを見積もると失敗します。

SGLang

SGLang公式ドキュメントでは、SGLangは大規模言語モデルとマルチモーダルモデル向けの高性能serving frameworkと説明されています。特徴として、RadixAttention、prefix caching、multi-GPU parallelismなどが挙げられています。

2025年大会のAI側では、DeepSeek-R1 671BをSGLangで推論する課題だったことが公式発表で確認できます。

Dynamo

NVIDIA Dynamoは、分散LLM servingのためのframeworkです。メモ上では、Dynamoのbenchmarksrecipes/qwen3-235b-a22b-fp8が2026年AI側の参考として示されています。

ただし、該当recipeのREADMEはTensorRT-LLM向けと説明しているため、SGLang課題とどう関係するのかは大会運営への確認が必要です。

推論の2段階: prefillとdecode

LLM推論は大きく2段階に分かれます。

段階何をするか性能特性
prefill入力prompt全体を処理し、KV cacheを作る計算量が大きい。長い入力で重くなる
decode1 tokenずつ次tokenを生成するメモリ帯域、KV cacheアクセス、batchingが効く

SGLangのPD Disaggregationドキュメントも、prefillは計算集約、decodeはKV cache管理を伴うメモリ集約と説明しています。

参考文献

PD Disaggregation

何を分けるのか

PD disaggregationは、LLM推論のprefillとdecodeを別々のworker poolに分ける構成です。

SGLangの説明では、従来の統合engineではprefill batchとdecode batchが同じengineで処理され、decode遅延やDP attentionの不均衡が起きると説明されています。

Dynamoのdesign docでは、disaggregated executionを次の3段階として説明しています。

  1. prefill engineがprefillを計算し、KV cacheを生成する。
  2. prefill engineがKV cacheをdecode engineへ転送する。
  3. decode engineがdecodeを実行する。

なぜ速くなる可能性があるのか

prefillとdecodeは得意なGPU配置・並列化が違います。

段階重いもの向きやすい最適化
prefill長い入力列の一括計算大きめbatch、計算資源、chunked prefill
decodeKV cache読み書き、1 tokenずつの生成高concurrency、KV cache効率、メモリ帯域

この2つを同じworkerで雑に混ぜると、長いprefillがdecodeを邪魔し、ユーザーから見たtoken生成が遅くなることがあります。

RDMAとKV転送

Dynamoのdisaggregated servingドキュメントでは、KV cacheをprefill側GPU memoryからdecode側GPU memoryへ転送するため、RDMAが重要だと説明されています。Dynamo docsでは、RDMAなしではKV cache transferが大きなボトルネックになり得るとも説明されています。

大会環境でInfiniBand、RoCE、UCX、NIXL、Mooncakeなどが使えるかは、必ず確認します。

SGLangとDynamoの関係

DynamoのSGLang backend docsでは、SGLang単体のdisaggregationとDynamo統合時の流れが少し違うと説明されています。

大まかには次の理解でよいです。

構成役割
SGLang単体SGLang router/load balancerがprefill/decodeを扱う
Dynamo + SGLangDynamoのdiscoveryやrouterがworker選択やrequest flowを管理し、SGLang側のbootstrapを使ってKV転送する

最初に見るメトリクス

PD disaggregationの評価では、総throughputだけでは不十分です。

メトリクス意味
TTFTrequestを送ってから最初のtokenが出るまでの時間
TPOT / ITL出力token間の平均時間
Output tokens/s全体で何token/s出るか
Requests/srequestを何件/s処理できるか
p95 latency遅いrequestを含めた体感の悪さ
GPU memory usageKV cacheや重みでどれだけVRAMを使うか
KV transfer timeprefillからdecodeへのKV cache転送時間

注意点

  • PD disaggregationは常に速いとは限らない。短いprompt中心なら転送コストが勝つ可能性がある。
  • RDMAが弱い環境では、KV transferがボトルネックになる。
  • prefill/decode worker数の比率を間違えると、片方が詰まる。
  • 競技評価が総throughputだけの場合、実サービスらしいlatency最適化と衝突する可能性がある。

参考文献

AI推論ベンチマーク指標

なぜ指標が重要か

LLM推論の最適化では、「速い」の意味が複数あります。大会のスコアが総throughputだけなら高concurrencyに寄せる戦略が強くなります。一方で、実サービスの会話体験ではTTFTやTPOTが重要になります。

メモ上の議論でも、「高concurrencyで総throughputは上がるが、1リクエストあたりのtoken生成速度が落ちる」という懸念が出ています。

基本指標

指標読み方意味
Throughputスループット単位時間あたりの処理量。tokens/sやrequests/sで表す
TTFTTime To First Tokenrequest開始から最初のtokenが返るまでの時間
TPOTTime Per Output Token出力token 1個あたりにかかる時間
ITLInter-Token Latencytoken間の待ち時間。TPOTと近い意味で使われることがある
Latencyレイテンシrequest全体の応答時間
p50/p95/p99percentile中央値、遅い5%、遅い1%を見る指標
ISLInput Sequence Length入力token数
OSLOutput Sequence Length出力token数
Concurrency並行数同時に処理するrequest数

ベンチマークで固定すべき条件

条件理由
ISL/OSL分布prefill/decodeの負荷比が変わる
concurrencythroughputとlatencyのtrade-offが変わる
request count少なすぎると揺らぎが大きい
warmupCUDA graph、cache、JITなどの初回コストを分離する
streaming有無TTFTやITLの測り方が変わる
sampling設定出力長やEOSで結果が変わる
ignore_eos固定長出力ベンチでは便利だが、現実の出力分布から外れる可能性がある

Dynamo/AIPerf

Dynamoのbenchmarks/README.mdでは、Dynamo deploymentの測定にAIPerfを使う例が示されています。例では、--concurrency--request-count--streamingなどを指定してprofileし、concurrency sweepでPareto分析を行う流れです。

大会でDynamo/AIPerfがそのまま使われるかは未確定ですが、指標の考え方としては有用です。

最小の比較表

実験結果は最低限この形で残します。

experimentchangeconcurrencyISLOSLTTFT p50TPOT p50output tok/sreq/serror ratenotes
baselinenone

参考文献

AI推論最適化の論点

まず分類する

AI推論最適化は、次の層に分けて考えます。

ルール違反リスク
ベンチ条件concurrency、request count、ISL/OSL低。ただし指定条件は守る
serving設定max running requests、CUDA graph batch、memory fraction低から中
並列化TP、PP、DP、EP、DP attention中。モデル・実装依存
cacheKV cache、prefix cache、RadixAttention
disaggregationprefill/decode分離、worker比率、KV transfer中から高
推測系speculative decoding、MTP、draft model高。モデル品質・重み・評価条件に依存
量子化FP8、INT8、INT4、KV quantization高。2025年はモデル性能低下変更が禁止された
実験的機能torch.compileなど高。2025年は実験的機能が禁止されたという参加記情報あり

Qwen3-235B-A22Bで重要そうなこと

Qwen3-235B-A22BはMoEモデルです。総235Bの重みを扱いつつ、1 tokenあたりは一部expertを使います。

重要な論点は次の通りです。

  • 重みロード時間とストレージ配置。
  • GPUメモリ上に重みとKV cacheをどう載せるか。
  • Expert Parallelismでexpert計算をどう分散するか。
  • TP/PP/EPの組み合わせ。
  • 長いcontextを扱う場合のprefillコスト。
  • thinking mode / non-thinking modeと出力長の扱い。

SGLangで出てくる設定

参加記では、--max-running-requests--cuda-graph-max-bsをバッチサイズ相当の調整として扱ったと書かれています。SGLangのserver argumentsにもこれらの引数が存在します。

ただし、最適値はモデル、GPU、VRAM、context長、concurrency、CUDA graphの有無で変わります。固定値を丸写ししないで、sweepする必要があります。

speculative decoding / MTP

SGLangのSpeculative Decoding docsでは、EAGLE、Multi Token Prediction、draft model、NGRAMなど複数の推測デコード手法が説明されています。

メモ上の議論では、ランダム重みでベンチマークすると、MTPやspeculative decodingの有効性が実運用の分布を反映しないのではないかという懸念があります。これは妥当な論点です。推測デコードは「予測したtokenがどれだけ採用されるか」に依存するため、実重み・実データ分布でないと評価が歪み得ます。

DP Attention

2025年参加記では、DeepSeekモデル向けのDP Attentionを試したものの、KV cache削減は確認できてもスループットは大きく下がったと書かれています。

この教訓は、公式ブログや論文上の高速化率をそのまま信じないことです。最適化は次の条件が揃ったときだけ意味があります。

  • 同じモデルか。
  • 同じGPU世代か。
  • 同じbatch/concurrencyか。
  • 同じ入力長・出力長か。
  • 同じnetworkか。
  • 同じ評価指標か。

実験の優先順位

最終ルール前にやるなら、リスクが低い順に進めます。

  1. ベンチマークの測り方を固定する。
  2. concurrency sweepを作る。
  3. TP/PP/DP/EPの意味をチームで説明できるようにする。
  4. SGLangの主要server argumentsを読む。
  5. PD disaggregationの構成図を描けるようにする。
  6. ルール確定後に、禁止されていない範囲で最適化候補を絞る。

参考文献

NCCL通信最適化

このページは、2026-06-05の勉強会でチームが共有したNCCL通信最適化の基礎をまとめたものです。 担当: 小林。

これは何か

NCCL(NVIDIA Collective Communications Library、読み: ニッケル)は、複数GPU間の通信ボトルネックを軽減するためのライブラリです。

AI課題(Qwen推論)では、Tensor Parallelやprefill-decode間の処理などでGPU間通信が発生します。 NCCLはこのGPU間のcollective通信を担います。

なぜ重要か

Qwenのような大規模LLMを複数GPUで動かすとき、モデルをGPUに分割して実行します。 このとき通信(AllReduceなど)が遅いと、GPUが計算せずに**待つ時間(idle)**が増えます。

つまりHPC-AIでは、NCCLでQwen推論中のGPU間通信を高速化し、tokens/secを上げることが目標になります。

基本概念:NCCLの主な通信

通信内容使用場面
AllReduce全GPUの計算結果を集約して全GPUへ戻す分散学習、Tensor Parallel
AllGather各GPUのデータを集めるモデル分割、並列推論
ReduceScatter集約しながら分割して配る大規模モデル並列
Broadcast1つのGPUのデータを全GPUへ配る重み・設定の共有
Send/RecvGPU間で個別に送受信Pipeline処理、KV cache転送

AI TrackでNCCLが使われる流れ

Tensor Parallelでは、各GPUがモデルの一部を計算します。

GPU0/1/2/3: それぞれモデルの一部を計算
        ↓
計算結果を NCCL で集約(AllReduce / AllGather)
        ↓
次の層へ進む

ここで通信が遅いと、GPUの待ち時間が増えて全体が遅くなります。

最適化手順

1. 測定する

Qwen推論を実行し、Nsight SystemsやNCCLログで次を確認します(例)。

  • Prefill計算時間 / Decode計算時間
  • NCCL通信時間
  • GPU idle(GPU待ち時間)
  • KV cache転送時間
  • どのGPU間で通信しているか(通信経路)

2. ボトルネックを分類して対策する

計測結果原因対策
NCCL通信時間が長いGPU間通信が遅いNIC指定、NCCL設定変更(パラメータ調整)
GPU idleが多い通信待ちが発生通信と計算の重なり(オーバーラップ)を改善
KV cache転送時間が長いKV cache転送が遅いprefill / decode の配置を見直す
rankごとに時間が違う負荷分散が悪いbatch分割やworker比率を調整

大会との関係

  • 2025年AI課題(16 H100 GPUs)でも、GPU kernel単体よりGPU間通信が律速になりやすいと考えられます(要確認)。
  • prefill/decodeの配置はPD Disaggregationと関係します。

注意点

  • NCCLパラメータやNIC指定は環境依存です。大会の実機・設定可否は要確認です。
  • GPUプロファイリングは「いきなりカーネル内部」ではなく、まずCPU-GPU転送と通信を疑います(プロファイリングツール実践ガイド)。

関連ページ

参考文献

用語辞書

大会・HPC一般

用語説明
HPCHigh Performance Computing。多数のCPU/GPU、メモリ、ネットワークを使って大規模計算を高速に行う分野
ノードクラスタを構成する1台の計算機。CPU、GPU、メモリ、NICを持つ
rankMPIプロセスの番号。OpenFOAMではrankごとに計算領域の一部を担当する
MPIMessage Passing Interface。複数プロセス間で通信する標準API
PBS / SlurmHPCクラスタでジョブを投入・管理するジョブスケジューラ
wall time実際に時計で測った経過時間。大会の実行時間評価で重要
strong scaling問題サイズを固定し、ノード数を増やしてどれだけ速くなるか
weak scaling1ノードあたりの問題サイズを固定し、ノード数と問題サイズを同時に増やす評価
NUMACPUソケットごとにメモリアクセス距離が違う構造。bindingを誤ると遅くなる
CPU affinity / bindingプロセスやスレッドを特定CPU coreに固定すること
InfiniBandHPCでよく使われる低レイテンシ・高帯域ネットワーク
RDMARemote Direct Memory Access。CPUをあまり介さずリモートメモリへ直接転送する仕組み
UCXHPC通信で使われる通信framework。InfiniBand/RDMAなどを抽象化する
profiling実行時間やCPU/GPU/メモリ/通信/I/Oの使用状況を計測し、性能問題を調べること
bottleneck全体性能を制限している最も遅い部分。最適化ではまずここを特定する
hotspot実行時間の多くを占める関数や処理箇所
scaling analysisノード数やGPU数を増やしたとき、性能がどれだけ伸びるかを測る分析
parallel efficiency並列化したときに、理想的な速度向上に対してどれだけ効率が出ているか
PMPIMPIのprofiling interface。MPI関数の呼び出し時間などを測るツール実装に使われる
NCCLNVIDIA Collective Communications Library。複数GPU間のAllReduceなどのcollective通信に使われる
load imbalancerank/スレッド間で計算量が偏ること。最も遅いrankに全体が引っ張られる
Amdahl's law並列化できない逐次部分があると、資源を増やしても速度向上が頭打ちになる法則
MPI_Allreduce各rankの値を集約し結果を全rankへ配るcollective通信。反復ソルバで多発する
collective通信全rank/全GPUが参加する通信(AllReduce、AllGather、Broadcastなど)
memory bandwidthメモリ帯域。単位時間に転送できるデータ量。律速になると計算が待たされる
false sharing(偽共有)別スレッドが同一cache lineを更新し合い、無駄なcache同期で遅くなる現象
first-touch最初にアクセスしたスレッドのローカルメモリに割り当てるNUMAの仕組み
numactlNUMAポリシーを制御し、特定ノードでプロセスを動かすコマンド
A64FX富岳のArmベースCPU。48コア、HBM2、SVE512が特徴
SVEScalable Vector Extension。ベクトル長非依存のArm SIMD拡張(富岳は512bit)
HBM2広帯域メモリ。A64FXが採用
LTOLink Time Optimization。複数の翻訳単位を横断した最適化
PGOProfile-Guided Optimization。実行プロファイルを利用した最適化
-Ofast精度を犠牲にしうる積極的なコンパイラ最適化。大会での許容範囲は要確認
-march対象CPU固有の命令を使うコンパイラ最適化オプション
サニタイザー未定義動作やメモリエラーを検出するビルド機能(ASan、UBSanなど)
scratch領域マシンから高速にアクセスできる一時作業用ストレージ

OpenFOAM / CFD

用語説明
CFDComputational Fluid Dynamics。流体の運動を数値計算で解く分野
OpenFOAMCFD向けのオープンソースソフトウェア群
caseOpenFOAMでの計算問題一式。0/constant/system/などを含む
solver方程式を解く実行プログラム。例: simpleFoampimpleFoam
mesh計算領域を小さなcellに分割したもの
cellmeshの最小単位
domain decomposition計算領域を複数プロセスに分けること
decomposeParDict領域分割方法を指定するOpenFOAM設定ファイル
decomposeParcaseを並列実行用に分割するコマンド
reconstructPar並列実行後の分割結果を結合するコマンド
residual数値解が方程式をどれだけ満たしていないかの指標
tolerance / relTol線形ソルバの収束判定条件
RANSReynolds-Averaged Navier-Stokes。乱流を平均化して扱う手法
LESLarge Eddy Simulation。大きな渦を直接解き、小さな渦をモデル化する手法
KPIKey Performance Indicator。TTSFなど性能評価用の指標
TTSTime To Solution。解を得るまでの時間
Pressure Solver圧力の連立方程式を解くソルバ。OpenFOAMの実行時間の多くを占める
反復法正解に少しずつ近づけて解く方法。CG/PCG/BiCGStab/GAMGなど
PCGPreconditioned Conjugate Gradient。前処理付き共役勾配法
GAMGGeometric-Algebraic Multi-Grid。マルチグリッド系ソルバ。通信特性が異なる
decomposeParDictのmethodsimple/hierarchical/scotch/ptscotchなど領域分割の手法
Boundary Cells(境界セル)分割した領域の境界にあるcell。隣rankと情報交換が必要

AI推論

用語説明
LLMLarge Language Model。大規模言語モデル
inference学習済みモデルを使って出力を生成すること
servingAPIとして推論を受け付け、複数requestを処理する運用形態
tokenLLMが処理するテキストの単位
prefill入力prompt全体を処理してKV cacheを作る段階
decodeKV cacheを使って1 tokenずつ出力を生成する段階
KV cacheAttention計算で使うKey/Valueを保存し、過去tokenの再計算を避けるcache
TTFTTime To First Token。最初のtokenが返るまでの時間
TPOTTime Per Output Token。出力token 1個あたりの時間
ITLInter-Token Latency。token間の待ち時間
throughput単位時間あたりの処理量。tokens/sやrequests/s
concurrency同時に処理するrequest数
ISLInput Sequence Length。入力token数
OSLOutput Sequence Length。出力token数
p95 latency遅い側5%を含めた応答時間。体感品質を見るのに重要

モデル・並列化

用語説明
QwenAlibaba/QwenチームのLLMシリーズ
DeepSeek-R1reasoning向けLLM。2025年大会AI課題で使われた
MoEMixture of Experts。複数expertのうち一部だけをtokenごとに使うモデル構造
expertMoE内の専門サブネットワーク
active parameters1 tokenの計算で実際に使われるパラメータ数
total parametersモデル全体のパラメータ数。VRAM見積もりではこちらも重要
TPTensor Parallelism。1層内の行列計算を複数GPUに分ける
PPPipeline Parallelism。層を複数GPU/ノードに分ける
DPData Parallelism。同じモデル複製で別request/batchを処理する
EPExpert Parallelism。MoEのexpertを複数GPUに分ける
DP AttentionAttention部分をdata-parallel寄りに扱う最適化。モデル・実装依存
CUDA GraphCUDA kernel実行列をgraph化し、起動 overheadを減らす仕組み
prefix cache同じprefixを持つrequestでKV cacheを再利用する仕組み
RadixAttentionSGLangのprefix sharing/cache管理に関係する仕組み
speculative decoding小さいモデルや補助headで先のtokenを予測し、採用できた分だけ高速化する手法
MTPMulti Token Prediction。複数tokenを先読み予測する手法
quantization重みやKV cacheを低精度化してメモリや計算を減らす手法
FP8 / BF16数値形式。FP8は低精度で軽い、BF16は学習・推論でよく使われる16bit形式

Framework / Tool

用語説明
SGLang高性能LLM serving framework
DynamoNVIDIAの分散推論serving framework
TensorRT-LLMNVIDIA GPU向けLLM推論最適化ライブラリ
vLLMLLM serving framework。PagedAttentionなどで知られる
AIPerfAI推論性能測定ツール。Dynamo docsで利用例がある
NIXLNVIDIAのKV転送などで使われる通信/転送ライブラリ
MooncakeSGLangのPD disaggregationで使えるKV transfer engineの一つ

参考文献一覧

大会

OpenFOAM / HPC

HPC最適化・プロファイリング

GPU / NCCL

Qwen / LLM

SGLang

Dynamo / NVIDIA

共有リンク集

チーム内で共有された外部URLを保存するページです。 参考文献一覧とは分けて、共同編集資料、スライド、作業用ドキュメント、外部ノートなどを管理します。

運用方針

  • 新しい外部URLを共有したら、このページに追加する。
  • 何のためのリンクか、後から見て分かる説明を書く。
  • 公式資料や技術的根拠として本文で引用するURLは、必要に応じて参考文献一覧にも追加する。
  • Google Drive、Google Docs、Google Slidesなどの共有資料は、アクセス権限も確認する。

チーム作業資料

名称URL用途追加日備考
技術キャッチアップ共有スライドhttps://docs.google.com/presentation/d/1PG013sviaa7bvxlbhFgblGv6lIDH3wrcjRO3Jo5qB94/edit?usp=sharingQwen、OpenFOAM、ベンチマーク指標、禁止事項などの技術キャッチアップをチームでまとめる2026-05-29Google Slides。閲覧・編集権限を確認する

追加テンプレート

| 名称 | URL | 用途 | 追加日 | 備考 |
|---|---|---|---|---|
|  | <https://example.com> |  | YYYY-MM-DD |  |

mdBook の使い方

mdBook は Rust 製の静的サイトジェネレーターで、Markdown ファイルからドキュメントサイト(HTML)を生成します。このリポジトリで使っているツールです。

インストール

Rust がある場合(推奨)

cargo install mdbook

バイナリを直接取得する場合

GitHub Releases から OS に合ったバイナリをダウンロードして PATH の通ったディレクトリに置きます。

Windows(winget)

winget install -e --id Rust.Rust
cargo install mdbook

プロジェクト構造

book.toml       # プロジェクト設定
src/
  SUMMARY.md    # 目次(章の順序と構成を定義)
  chapter_1.md  # 記事ファイル
book/           # ビルド出力(自動生成・編集不要)

book.toml の主要設定

[book]
title = "APAC-HPC-AI"
authors = ["Typewriter"]
language = "ja"          # サイトの言語コード

[build]
build-dir = "book"       # 出力先ディレクトリ(デフォルト: book)

SUMMARY.md — 目次の書き方

src/SUMMARY.md が本全体の構成を決定します。ここに書いたリンクのみがサイドバーに表示されます。

# Summary

- [はじめに](./introduction.md)

# 第1部:ツールガイド
- [mdBook の使い方](./mdbook-usage.md)
- [GitHub Pages への公開](./github-pages.md)

# 第2部:OpenFOAM
- [OpenFOAM 入門](./openfoam/intro.md)
  - [メッシュ生成](./openfoam/meshing.md)   ← インデントでサブ章

ルール:

  • リストアイテム - [タイトル](./ファイルパス) が章になる
  • インデント(2スペース or タブ)でサブ章を作れる
  • # 見出し はセクション区切り(リンクなし)
  • SUMMARY.md に書かれていないファイルはサイトに含まれない

記事の書き方

src/ 以下に .md ファイルを作成します。通常の Markdown がそのまま使えます。

# 章タイトル

## セクション

本文テキスト。**太字**、*斜体*、`コード` が使えます。

コードブロック(シンタックスハイライト付き):

​```bash
mpirun -np 4 openfoam
​```

数式(KaTeX):

\\( E = mc^2 \\)    ← インライン数式

\\[
  \nabla \cdot \mathbf{u} = 0
\\]                  ← ブロック数式

ディレクトリで章をまとめる

src/
  openfoam/
    intro.md
    meshing.md

SUMMARY.md でのパス指定: ./openfoam/intro.md


ビルドとプレビュー

コマンド説明
mdbook buildbook/ に HTML を生成
mdbook serveローカルサーバーを起動(http://localhost:3000
mdbook serve --openブラウザも自動で開く
mdbook watchファイル変更を監視して自動ビルド(サーバーなし)
mdbook cleanbook/ を削除

mdbook serve 実行中はファイルを保存するたびにブラウザが自動更新されます。


新しい章を追加する手順

  1. src/ にファイルを作成する
# 例: OpenFOAM 入門記事
# (Windowsの場合)
New-Item src/openfoam-intro.md
  1. src/SUMMARY.md にリンクを追加する
- [OpenFOAM 入門](./openfoam-intro.md)
  1. mdbook serve で確認する

この 2 ステップを忘れると、ファイルを作ってもサイトに表示されないので注意。


カスタマイズ(book.toml)

[book]
title = "APAC-HPC-AI"
description = "APAC HPC-AI Competition 2026 チーム知識ベース"

[output.html]
theme = "navy"               # デフォルトテーマ: default, rust, coal, navy, ayu
git-repository-url = "https://github.com/<username>/APAC-HPC-AI"
edit-url-template = "https://github.com/<username>/APAC-HPC-AI/edit/main/{path}"

[output.html.search]
enable = true    # 全文検索(デフォルトで有効)

edit-url-template を設定すると各ページに「ページを編集」リンクが表示され、共同執筆がしやすくなります。

GitHub Pages への公開(GitHub Actions)

main ブランチに push するたびに mdBook を自動ビルドして https://<username>.github.io/<repo>/ に公開する仕組みを作ります。


全体の流れ

git push → GitHub Actions が起動
         → mdbook build を実行
         → book/ を GitHub Pages にデプロイ
         → https://<username>.github.io/<repo>/ が更新される

Step 1: GitHub Actions ワークフローを追加

リポジトリに .github/workflows/deploy.yml を作成します(このリポジトリには既に含まれています)。

name: Deploy mdBook to GitHub Pages

on:
  push:
    branches: [main]
  workflow_dispatch:        # 手動実行ボタンも有効にする

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install mdBook
        env:
          MDBOOK_VERSION: "0.4.40"
        run: |
          curl -sSL "https://github.com/rust-lang/mdBook/releases/download/v${MDBOOK_VERSION}/mdbook-v${MDBOOK_VERSION}-x86_64-unknown-linux-gnu.tar.gz" \
            | tar -xz
          sudo mv mdbook /usr/local/bin/

      - name: Setup Pages
        uses: actions/configure-pages@v5

      - name: Build
        run: mdbook build

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./book

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

Step 2: GitHub リポジトリの設定

ワークフローを push する前に、GitHub 側で Pages のソースを「GitHub Actions」に変更します。

  1. リポジトリページを開く
  2. Settings タブ → 左サイドバー Pages
  3. SourceDeploy from a branch から GitHub Actions に変更して Save

![Pages設定の場所: Settings > Pages > Source > GitHub Actions]

この設定をしないとデプロイジョブが Error: HttpError: Not Found で失敗します。


Step 3: 初回デプロイ

# ワークフローファイルを push する
git add .github/workflows/deploy.yml
git commit -m "ci: add GitHub Pages deployment workflow"
git push origin main

push 後、リポジトリの Actions タブでジョブの進行状況を確認できます。緑のチェックマークが付けば成功です。

公開 URL: https://<username>.github.io/<repository-name>/


動作確認チェックリスト

  • .github/workflows/deploy.ymlmain ブランチに存在する
  • Settings → Pages → Source が GitHub Actions になっている
  • Actions タブで Deploy mdBook to GitHub Pages ジョブが成功している
  • 公開 URL にアクセスしてサイトが表示される

トラブルシューティング

症状原因と対処
Error: HttpError: Not FoundPages の Source が GitHub Actions になっていない
mdbook: command not foundMDBOOK_VERSION の値が古い → Releases で最新バージョンを確認
ページが真っ白book.tomlbuild-dirupload-pages-artifactpath が一致しているか確認
CSS/JS が 404book.toml[output.html]site-url の設定が必要な場合あり(サブディレクトリ公開時)

手動デプロイ(ローカルから)

CI を使わずに手動でデプロイしたい場合は gh-pages ブランチに push する方法もあります。

mdbook build
cd book
git init
git add .
git commit -m "deploy"
git push -f https://github.com/<username>/<repo>.git HEAD:gh-pages

ただし、ワークフローによる自動デプロイの方が手間がなくミスも少ないため、通常は CI を推奨します。