GPGPU アプリの CUDA と ROCm の違いは何ですか?

学習内容:

  • CUDA と ROCm の違い。
  • 各プラットフォームの強みは何ですか?

グラフィックス プロセッシング ユニット (GPU) は、従来、画像やビデオの処理とレンダリング、2D および 3D グラフィックス、ベクトル化などのグラフィックス計算タスクを処理するように設計されています。 GPU での汎用コンピューティングは、2001 年以降、グラフィックス プロセッサでのプログラマブル シェーダーと浮動小数点サポートの両方の出現により、より実用的で一般的なものになりました。

特に、2 次元、3 次元、または 4 次元のベクトルを含む行列とベクトルに関する問題が含まれていました。 これらは GPU に簡単に変換され、GPU はネイティブの速度で動作し、これらの型をサポートします。 汎用 GPU (GPGPU) の重要なマイルストーンは 2003 年でした。2 つの研究グループが、CPU よりも高速に実行される GPU で一般的な線形代数の問題を解決するための GPU ベースのアプローチを個別に発見したときです。

GPGPU の進化

GPU を汎用プロセッサとして使用する初期の取り組みでは、グラフィックス プロセッサの 2 つの主要な API である OpenGL と DirectX でサポートされていたグラフィックス プリミティブの観点から計算問題を再構築する必要がありました。

これらの直後に NVIDIA の CUDA が続きました。これにより、プログラマーは、OpenCL やその他のハイエンド フレームワークなど、より一般的な高性能コンピューティングの概念の根底にあるグラフィカルな概念を削除することができました。 つまり、最新の GPGPU パイプラインは、データをグラフィカルな形式に完全かつ明示的に変換する必要なく、GPU の速度を活用できます。

NVIDIA は、CUDA を、ソフトウェアが特定の GPU を汎用処理に使用できるようにする並列コンピューティング プラットフォームおよびアプリケーション プログラミング インターフェイス (API) と説明しています。 CUDA は、計算カーネルを実行するための GPU の仮想命令セットと並列計算要素への直接アクセスを提供するソフトウェア層です。

取り残されるわけではありませんが、AMD は 2016 年に Radeon Open Compute Ecosystem (ROCm) と呼ばれる独自の汎用コンピューティング プラットフォームを立ち上げました。 ROCm は主に、AMD の Radeon Pro ラインなどのディスクリート プロフェッショナル GPU を対象としています。 ただし、公式のサポートはより広範囲で、ゲーム用 GPU を含むコンシューマー グレードの製品にまで及びます。

CUDA とは異なり、ROCm ソフトウェア スタックは、汎用 GPGPU、ハイ パフォーマンス コンピューティング (HPC)、ヘテロジニアス コンピューティングなどの複数のドメインを利用できます。 また、HIP (GPU カーネルベースのプログラミング)、OpenMP/Message Passing Interface (MPI)、OpenCL など、いくつかのプログラミング モデルも提供します。 これらは、AI やエッジ コンピューティングから IoT/IIoT に至る無数のアプリケーション向けに、RDNA や CDNA などのマイクロアーキテクチャもサポートしています。

NVIDIA の CUDA

NVIDIA の Tesla および RTX シリーズのほとんどのカードには、一連の CUDA コアが搭載されています。 (図1) 同時に複数の計算に取り組むように設計されています。 これらのコアは CPU コアに似ていますが、GPU にパックされており、データを並列処理できます。 GPU にはこれらのコアが何千も組み込まれている可能性があり、CPU 中心のタスクを GPU に直接オフロードできる非常に効率的な並列システムになっています。

並列コンピューティングは、共有メモリを介して通信する複数のプロセッサによって同時に実行できる、より大きな問題をより小さな独立した部分に分割するプロセスとして説明されています。 これらは、全体的なアルゴリズムの一部として完了すると結合されます。 並列計算の主な目的は、アプリケーションの処理と問題解決を高速化するために利用可能な計算能力を高めることです。

そのために、CUDA アーキテクチャは C、C++、Fortran などのプログラミング言語で動作するように設計されており、並列プログラマーが GPU リソースをより簡単に使用できるようになっています。 これは、グラフィックス プログラミングの高度なスキルを必要とする Direct3D や OpenGL などの以前の API とは対照的です。 CUDA を搭載した GPU は、OpenMP、OpenACC、OpenCL、HIP などのコードを CUDA にコンパイルすることで、プログラミング フレームワークもサポートします。

ほとんどの API、ソフトウェア開発キット (SDK)、およびソフトウェア スタックと同様に、NVIDIA は、前述の一般的なプログラミング言語のライブラリ、コンパイラ ディレクティブ、および拡張機能を提供し、プログラミングをより簡単かつ効率的にします。 これらには、cuSPARCE、NVRTC ランタイム コンパイル、GameWorks Physx、MIG マルチインスタンス GPU サポート、cuBLAS、およびその他多数が含まれます。

これらのソフトウェア スタックの大部分は、機械学習とディープ ラーニング、コンピューター ビジョン、会話型 AI、レコメンデーション システムなど、AI ベースのアプリケーションを処理するように設計されています。

コンピューター ビジョン アプリは、ディープ ラーニングを使用して、デジタル画像やビデオから知識を取得します。 会話型 AI アプリは、コンピューターが自然言語を理解して通信するのに役立ちます。 レコメンデーション システムは、画像、言語、およびユーザーの興味を利用して、有意義で関連性のある検索結果とサービスを提供します。

GPU で高速化されたディープ ラーニング フレームワークは、カスタム ニューラル ネットワークを設計およびトレーニングするためのある程度の柔軟性を提供し、一般的に使用されるプログラミング言語のインターフェイスを提供します。 TensorFlow、PyTorch などの主要な深層学習フレームワークはすべて、既に GPU で高速化されているため、データ サイエンティストや研究者は GPU プログラミングなしで高速化できます。

AI を超える CUDA アーキテクチャの現在の用途には、バイオインフォマティクス、分散コンピューティング、シミュレーション、分子動力学、医療分析 (CTI、MRI、およびその他のスキャン画像アプリ)、暗号化などが含まれます。

AMD の ROCm ソフトウェア スタック

AMDのROCM (図2) ソフトウェア スタックは CUDA プラットフォームに似ていますが、オープン ソースであり、同社の GPU を使用して計算タスクを高速化する点が異なります。 Radeon Pro W6000 および RX6000 シリーズの最新のカードには、コンピューティング コア、レイ アクセラレータ (レイ トレーシング)、および GPGPU、HPC、HIP (CUDA のようなプログラミング モデル)、MPI、および OpenCL。

ROCm エコシステムは、フレームワーク (TensorFlow/PyTorch)、ライブラリ (MIOpen/Blas/RCCL)、プログラミング モデル (HIP)、インターコネクト (OCD)、アップストリーム Linux カーネル サポートなどのオープン テクノロジーで構成されているため、プラットフォームは定期的に最適化されます。幅広いプログラミング言語のパフォーマンスと効率を実現します。

AMD の ROCm は拡張性を考慮して構築されています。つまり、リモート ダイレクト メモリ アクセス (RDMA) を介してサーバー ノード通信の内外でマルチ GPU コンピューティングをサポートし、CPU の介入なしにホスト メモリに直接アクセスする機能を提供します。 したがって、システムの RAM が大きいほど、ROCm が処理できる処理負荷が大きくなります。

また、ドライバーが RDMA ピア同期サポートを直接組み込む場合、ROCm はスタックを簡素化し、アプリケーションの開発を容易にします。 さらに、言語に依存しない ROCr システム ランタイムが含まれており、HAS (異種システム アーキテクチャ) ランタイム API を利用して、HIP や OpenMP などのプログラミング言語を実行するための基盤を提供します。

CUDA と同様に、ROCm は AI アプリケーションにとって理想的なソリューションです。一部の深層学習フレームワークはすでに ROCm バックエンドをサポートしています (例: TensorFlow、PyTorch、MXNet、ONNX、CuPy など)。 AMD によると、ROCm は独自技術ではないため、どの CPU/GPU ベンダーも ROCm を利用できます。 つまり、CUDA または別のプラットフォームで記述されたコードは、ベンダー中立の HIP 形式に移植でき、そこからユーザーは ROCm プラットフォーム用のコードをコンパイルできます。

同社は、ユーザーが CPU と GPU を 1 つのファイルに統合できるようにする C++ プログラミング言語のソリューション (HCC) など、ROCm の機能をさらに強化するための一連のライブラリ、アドオン、および拡張機能を提供しています。

ROCm の機能セットは広範で、粗粒度仮想メモリのマルチ GPU サポート、同時実行とプリエンプション、HSA シグナルとアトミック、DMA、およびユーザーモード キューを処理する機能が組み込まれています。 また、標準化されたローダーとコード オブジェクト フォーマット、動的およびオフライン コンパイルのサポート、RDMA をサポートする P2P マルチ GPU 操作、トレースおよびイベント コレクション API、システム管理 API とツールも提供します。 その上、多数の Linux フレーバーで特定のアプリケーション用のカスタム ROCm ディストリビューションをパッケージ化するサードパーティのエコシステムが成長しています。

結論

この記事は、NVIDIA の CUDA プラットフォームと AMD の ROCm ソフトウェア スタックの簡単な概要です。 ガイド、ウォークスルー、ライブラリなどを含む詳細な情報は、上記のリンク先のそれぞれの Web サイトで見つけることができます。

並列コンピューティングの分野にトップのプラットフォームはありません。どのプラットフォームも、さまざまな業界で簡単にアプリケーションを開発できる優れたシステムを提供します。 どちらも、直感的なメニュー、ナビゲーション要素、アクセシブルなドキュメント、および初心者向けの教材で使いやすくなっています。

Leave a Comment

Your email address will not be published. Required fields are marked *