HPC のトリレンマ: パフォーマンス、ポータビリティー、生産性の選択
物理科学は応用数学を用いて世界を読み解きます。地震学、電磁気学、流体力学はすべて、物理現象をモデル化するために偏微分方程式や有限差分シミュレーションなどの手法に依存しています。
Python とその科学分野向けのライブラリー・エコシステム (NumPy、SciPy、MatPlotLib など) は、科学者や研究者に、比較的少ない行数で手軽に利用できるコードを使用して高度なドメイン固有のソリューションを開発するためのフレームワークを提供しています。この汎用性と生産性のおかげで、Python は今日の科学とエンジニアリングの分野で主要なプログラミング言語の一つとなっています。ほかのプログラミング言語で、文字通り「反重力」をインポートできるものはあるでしょうか。
純粋な Python はコンパイル型言語よりも処理速度が遅い場合もありますが、ハイパフォーマンス・コンピューティング (HPC) におけるその主な役割は、C、C++、Fortran などの低レベルのコンパイル型言語で書かれた高度に最適化されたライブラリーにアクセスするためのインターフェイスとして機能することです。さらに、GPU のサポート向けの CUDA、SYCL、HIP などにもアクセス可能です。NumPy や SciPy など、Python のサイエンス・ライブラリーは、これらのコンパイル済みバックエンドを活用することで、Python の使いやすさを維持しながら高いパフォーマンスを実現します。ただし、こういったモデルは依然としてドメイン固有のタスク向けに最適化された HPC コードの可用性に依存しており、多くの場合、コードの開発と保守には専門的な知識とリソースが必要となります。
Devito のソリューション: 科学者は科学者に任せる
Devito Codes チームは、HPC グレードの有限差分コードのジャストインタイム (JIT) コンパイルを Python エコシステムに導入することを目指していました。Devito を使用することで、科学者は Python のシンボリック計算フレームワーク (SymPy) 内で作業して、複雑な偏微分方程式の解法や目標指向型最適化問題を記述し、主要なすべての CPU と GPU アーキテクチャー向けに並列化されたハードウェア最適化 HPC コードをシームレスに生成できます。
Devito Codes、インテル® Xeon® 6 で大幅な向上を実現 (数値が高いほど性能が向上)
Devito Codes カーネルを使用した傾斜横等方性 (TTI) モデル (一般的なエネルギー業界の地震モデル) の音響異方性伝播関数では、第 5 世代インテル® Xeon® スケーラブル・プロセッサーと比較してインテル® Xeon® 6 のパフォーマンスが向上していることを示しています。1
「ほとんどのユーザーが最初に Devito を採用するのは、生産性向上のためです」と、Devito Codes の CEO 兼共同創業者である Gerard Gorman 氏は述べています。「これにより、独自のラピッド・プロトタイピングが可能になり、コンピューティング・ラボとして活用できるようになります。」
多様なハードウェア環境でのシミュレーション、インバージョン解析、最適化タスク向けに高性能カーネルを生成できる Python フレームワークを作成するのは、簡単ではありません。Devito は、共有メモリーシステム向けの OpenMP、アクセラレーター向けの OpenACC、並列化とポータビリティーを実現する MPI など、複数の HPC テクノロジーを統合しています。高度な最適化には、CUDA、HIP、SYCL などの専用言語を使用したハードウェア固有のチューニングが必要です。Devito Codes は、構造化コンピューティングにほぼすべての既知の最適化手法を適用し、継続的に新たな技術を統合することで、時間の経過とともにパフォーマンスを向上させています。専門家が手作業でチューニングを施した商用ソリューションに匹敵するか、それを上回る場合さえあります。
HPC コード開発の複雑さを克服することで、Devito Codes のユーザーは利用可能なコンピューティング・リソースをすべて活用し、システム間でプロジェクトを簡単に転送できるようになります。HPC オペレーターとサービス・プロバイダーは、ワークロードの互換性とパフォーマンスを確保しながら、現在のインフラストラクチャーの維持、異機種アレイでの拡張、大幅なアップグレードを実施できます。
「DevitoPRO を使用すれば、地球物理学者は研究論文からアルゴリズムを抽出し、短時間で実装することができます。通常はコーディングと最適化に数カ月かかる作業です。この迅速な開発サイクルにより、チームはこれまでにないペースで実験とイノベーションを推進でき、新しいアルゴリズムのテストと導入が加速します。」—Devito、シニア・ソリューション・アーキテクト、Mathias Louboutin 氏
DevitoPRO
Devito は、インペリアル・カレッジ・ロンドンの Gerard Gorman 教授が率いるインテル Parallel Computing Centre (並列計算センター) イニシアチブの一環として始まりました。最初のプロジェクトでは、地震画像処理向けの高性能なオープンソース・ソフトウェアを作成しました。プロジェクトが HPC ワークロード向けの真の最適化コンパイラーとして成熟する中、チームは独自の機能、高度なパフォーマンス最適化、商用サポートを備えたエンタープライズ・エディションである「DevitoPRO」をリリースしました。
DevitoPRO は、主にエネルギー業界における探査地球物理学分野でサービスを提供しています。DevitoPRO は、Python で作成された地震シミュレーション向けに高度に最適化されたポータブルコードをコンパイルするだけでなく、フルウェーブ・インバージョン (FWI) およびリバース・タイム・マイグレーション (RTM) 向けの高性能伝播関数と勾配演算子を提供します。また、DevitoPRO では技術サポート、トレーニング、カスタム・ソフトウェア開発、ハードウェア固有の最適化も提供しています。
Devito は、学術界や産業界の研究者向けに、オープンソースで特許フリーのソフトウェアとして汎用的なシンボリック計算およびコンパイラー・ソフトウェア技術を継続的に提供しています。
SYCL とインテルを活用したコード・ポータビリティーの拡大
従来、異なるプロセッサー間で実行可能なポータブルコードを作成するには、NVIDIA GPU 向け CUDA カーネル、AMD GPU 向け HIP カーネル、x86 および RISC CPU 向け C/C++ など、各ハードウェア・タイプに合わせて固有のカーネルをコンパイルする必要がありました。近年、SYCL は最適化された HPC コードをコンパイルするための新しいマルチプラットフォーム・オプションを HPC プログラマーに提供しています。
「Devito のシンボリック計算と高度なコンパイラー技術の融合により、信頼性が高く、検証可能で最適化されたコード生成が実現します。これは、ミッション重視の数理ソフトウェアにとって不可欠です。生成 AI によるコードにはこのレベルの精度と信頼性が欠けていますが、両方のテクノロジーを組み合わせることで、新しいアルゴリズムの開発とテストで生産性をさらに向上させることが可能です。」—Devito Codes、CEO 兼共同創業者、Gerard Gorman 氏
SYCL はクロスプラットフォームの並列 C++ 抽象化レイヤーです。複数のベンダーが提供する CPU、GPU、FPGA といった多様なデバイス上で、データリソースとコードの実行を検出、管理できる API を搭載しています。SYCL は、インテルがインテル® データセンター GPU に実装した moneAPI と Data Parallel C++ の基盤となっているテクノロジーです。
Devito Codes とインテルのエンジニアが協働し、DevitoPRO に SYCL コード生成を実装しました。この実装には、インテル® データセンター GPU Max 1100 および 1550 シリーズ・アクセラレーターに特化した最適化が含まれています。導入にあたり、DevitoPRO ユーザーはインテル® データセンター GPU をターゲットに設定するだけで、SYCL のパフォーマンス・メリットを活かしたジャストインタイム・コンパイルが可能になります。
弾性波地震学のパフォーマンス向上を実現する混合精度コンピューティング
地震波は、縦波 (P 波) と横波 (S 波) の 2 つの形態で伝搬します。地震学者が音響分析と呼ぶ P 波のモデリングは、波エネルギーと粒子の動きが同じ次元で伝搬するため、数学的にも計算的にも比較的単純です。P 波と S 波を一緒にモデリングする手法 (地震学者が弾性分析と呼ぶ) は幾何学的に複雑になります。
2 つの波形は、90 度の角度で三次元的に移動するため、それらを記述するには、より多くの成分で構成されるより多くの波動方程式が必要になります。また、弾性分析では正確な結果を生成するためにはるかに高い解像度を要し、非常に多くのデータを収集する必要があります。
地震波は、縦波である一次 (P) 波と横波である二次 (S) 波の 2 形態に分類されます。
「弾性分析を実行している場合、最良のケースであれば、音響分析と比較してメモリー使用量が 4~5 倍になるでしょう」と語るのは、Devito Codes の CTO 兼共同創業者である Fabio Luporini 氏です。「単純に物理学的な理由です。結合偏微分方程式で同時に多くの波動場をモデリングしており、それらをメモリーに保存する必要があるためです。」
Devito Codes は、現行のハードウェアでエラスティック・コンピューティング・ワークロードを実現するため、AI コンピューティング・テクノロジーである混合精度アルゴリズムの開発を進めています。精度の低下をわずかに許容できるワークロードでは、FP-32 (32 ビット浮動小数点) から、FP-32 と FP-16 (16 ビット浮動小数点) の綿密に設定された組み合わせに変換されます。この変換では、同じ値を半分のメモリーで表現できます。弾性分析の世界では、ペタバイトのデータセットを半分の 500TB にすることで、メモリーや I/O 管理からディスクへのスナップショットの書き込みまで、あらゆるステップでパフォーマンスが連鎖的に向上します。
Devito Codes、混合精度でパフォーマンスが倍増 (数値が高いほど性能が向上)2
Devito Codes のテストでは、シフティングと混合精度 (FP-16 / FP-32) によりパフォーマンスが 2 倍向上、メモリー使用量が 2 倍低減、スループットが大幅に高速化することが示されています。2
また、FP-16 ワークロードも、インテル® Xeon® 6 プロセッサーやインテル® データセンター GPU など、混合精度をサポートする CPU や GPU で高速に処理できます。初期テストでは、Devito Codes を使用して混合精度で弾性波分析を実行すると、ハードウェアのアップグレードなしで性能の大幅な変化に相当する最大 2 倍のパフォーマンス向上を示しました。1
結論: あらゆるパフォーマンス向上が重要
Devito Codes とインテルは、有限差分シミュレーション向けの異種 HPC システムからより高いパフォーマンスを引き出すために、コンパイラー・テクノロジーの改良と最適化を続けています。Devito のオープンソースと DevitoPRO クライアントにとってこの作業は不可欠です。
「地底画像処理のための地震データの処理には、プロジェクト当たり数百万のコンピューティング費用がかかります」と Gorman 氏は言います。「時間は金なり、です。パフォーマンスを最後の 1% まで底上げする必要があるのです。」
最新のアップデートについては、GitHub の Devito Codes または devitocodes.com を参照してください。