この記事は、The Parallel Universe Magazine 56 号に掲載されている「Try the Future of AI Development on the AI PC」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
インテル® GPU 向けのオープンソース OpenAI* Triton バックエンドを構築して実行する方法
ディープラーニング (DL) AI ソリューションが大規模になるにつれて、AI 開発者が直面する最大の課題の 1 つが、パフォーマンスに優れたモデルを効率良く作成する方法です。これまで、AI モデルの開発者はカーネルを C++ で記述し、pybind を使用して Python* から実行する必要がありました。このため、AI 開発者は DL カーネルとモデルを理解するだけでなく、C++ とカーネル開発に関連する C++ テンソルの抽象化についても学ぶ必要がありましたが、この課題への取り組みとして、OpenAI* は、開発者が効率的な GPU コードを作成できるようにする、オープンソースのドメイン固有の Python* に似たプログラミング言語およびコンパイラーである Triton をリリースしました。
OpenAI* Triton の概要
Triton は、機能とパフォーマンスの点で C++ と Python* の中間層を提供します。目標は、DL 開発者が複数層のソフトウェア・スタックを実装することなく、最適化されたカーネルを構築できるようにすることです。Triton はネイティブ Python* ではありませんが、Python* コードと同じソースファイル内で開発できるため、コード管理がはるかに容易になります。 DL は本質的に大規模な並列計算を扱うため、Triton は個々の要素ではなくデータのブロックを扱うように設計されています。これにより、変数を定義することで、データのセットを表す言語の構文が簡素化されます。
result = x + y
例えば、上記のコードは x
ベクトルと y
ベクトルの要素単位の加算を行い、出力ベクトルを result
変数に書き込みます。
構文の簡素化以外の Triton の利点は、パフォーマンスです。Triton は言語であるとともにコンパイラーでもあるため、構文を特定のハードウェア設計にマップすることができます。ニューラル・ネットワークは大規模であり、実行するには大量のメモリー操作が必要です。Triton は、開発者とコンパイラー・バックエンドが、ネイティブ Python* で利用できるものよりも最適化されたキャッシュ階層とメモリーの使い方を言語の操作にマップできるよう意図的に定義されています。
これは Triton で実現される機能の一部であり、DL 開発者にとって不可欠な操作が含まれています。Triton の詳細は、OpenAI* の Triton リソース (英語) を参照してください。
インテル® Core™ Ultra プロセッサー上の Triton
OpenAI* はソフトウェア開発の課題を簡素化します。開発者は、場所と時間に拘束されることなくコードを開発したいと考えています。ワークステーション・レベルのラップトップを利用することもできますが、持ち運びに苦労するのが目に見えています。そこで、強力な統合 GPU とニューラル・プロセシング・ユニットを備えた、新しいインテル® Core™ Ultra プロセッサー・ベースのラップトップを選択し、新しい AI PC で Triton を試してみることにしました。
インテル® Core™ Ultra プロセッサー向け Triton のコンパイル
Triton はオープンソースですが、インテル® GPU のサポートは開発中であり、Triton のメイン・リポジトリーにまだアップストリームされていません。インテルは、ここで Triton バックエンドをオープンソースで (英語) 開発しています。ほかのハードウェア・ベンダーと同様に、インテルは Triton のフォークからこのバックエンドを開発しており、この作業のアップストリームに取り組む予定です。GitHub* サイトには、このコードはインテル® データセンター GPU マックス・シリーズのカード上で開発およびテストされているという記述がありますが、任意のインテル® GPU 向けに oneAPI を使用して開発されたソフトウェアは、ほかのインテル® GPU でも動作するはずです。そこで、ソースからコードをビルドして、MSI* Prestige 16 AI Evo ラップトップでどのように動作するか確認してみることにしました (ちなみに、コンシューマーレベルのインテル® Arc™ A770 GPU 上で実行したところ、同様に動作しました)。
システムの設定
次の構成のシステムを使用しました。
- Ubuntu* 23.10、カーネル 6.5.0-17
- インテル® oneAPI ベース・ツールキット 2024.0.1 (インストール手順 (英語))
- Anaconda* (インストール手順 (英語))
Linux* をインストールした後、/etc/default/grub
を変更する必要があることに注意してください。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
を次のように変更します。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.force_probe=7d55"
ここで、7d55 は統合 GPU の PCI ID です。アップストリームの Ubuntu* 統合ドライバーは最新の iGPU の PCI ID をまだ認識しないため、この変更が必要になります。次に、
sudo update-grub
を実行した後、再起動します。