この記事は、The Parallel Universe Magazine 51 号に掲載されている「Run TensorFlow* Stable Diffusion on Intel® Arc™ GPUs」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
インテルは、ハイパフォーマンス GPU の「インテル® Arc™ A770」を含む、新しいインテル® Arc™ A シリーズ・グラフィックス・ハードウェアを発表しました。A770 は、ゲーム、デジタルコンテンツ制作、ストリーミングに優れていますが、PC 上でディープラーニング (DL) ワークロードを実行することも可能です。
TensorFlow* (TF) は、確立された DL フレームワークです。インテルは、TF が GPU やその他のオフロードデバイスを含むさまざまなアクセラレーターをターゲットにできるように、Google* とプラグイン・インターフェイス (英語) を設計しました。TensorFlow* 向けインテル® エクステンション (英語) は、ネイティブ Linux* と Windows* Subsystem for Linux* 2 (WSL2) の両方で動作するインテル® Arc™ A シリーズ GPU の実験的サポートを含む、インテル® GPU 上で TF DL ワークロードを実行できるようにするプラグインです。ネイティブ Windows* 上での実行には、TensorFlow* DirectML プラグイン (英語) を使用できます。
WSL2 上の Ubuntu* 20.04 に TensorFlow* 向けインテル® エクステンションをインストールするのは簡単です。Windows* と WSL2 にドライバー、ランタイムパッケージ、TF、拡張機能をセットアップする手順を説明します。インテル® Arc™ A770 GPU でテキストから画像生成するため、Jupyter* Notebook で TF を使用して人気のある KerasCV* Stable Diffusion 機能を簡単に実行する方法を紹介します。
WSL2 での Ubuntu* 20.04 のセットアップ
本記事では、第 12 世代インテル® Core™ i9-12900 プロセッサー (開発コード名 Alder Lake) 搭載の PC とインテル® Arc™ A770 ディスクリート・グラフィックス・カード 16GB を使用しています。前提条件として、Windows* 11 に WSL2 と Ubuntu* 20.04 コンテナがインストールされている必要があります。WSL2 を使用して Ubuntu* 20.04 コンテナをセットアップする手順は、こちらを参照してください。WSL2 は、Windows* ホストで GPU にアクセスするため、DirectX* を含む特別な Linux* カーネルビルドを使用します。これにより、汎用の GPU 計算機能を Windows* と Linux* で共有できます。GPU は Windows* ホストで管理されるため、GPU ドライバーは Windows* にインストールする必要があります。GPU 用の低レベルドライバーをインストールするには、インテル® Arc™ グラフィックス Windows* DCH ドライバーの標準インストーラーを使用する必要があります。ここでは、自己インストール型の実行ファイルを使用して、最新のドライバー (v31.0.101.3490) がインストールされました。
Ubuntu* Linux* でのインテル® グラフィックス計算ランタイムと oneAPI パッケージのセットアップ
Windows* にドライバーをインストールし、WSL2 上の Ubuntu* 20.04 コンテナを起動したら、次のステップでは apt-get コマンドを使用していくつかの Ubuntu*/Debian* パッケージをインストールします。まず、apt システムにインテル® グラフィックス・パッケージの専用リポジトリーを追加する必要があります。
$ sudo apt-get install -y gpg-agent wget $ wget -qO - https://repositories.intel.com/graphics/intel-graphics.key | \ sudo gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg $ echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/graphics/ubuntu focal main' | \ sudo tee /etc/apt/sources.list.d/intel.gpu.focal.list $ sudo apt-get update
リポジトリーが登録されると、以下のコマンドを使用して、インテルが提供するランタイムパッケージをインストールできます。
$ sudo apt-get install \ intel-opencl-icd=22.28.23726.1+i419~u20.04 \ intel-level-zero-gpu=1.3.23726.1+i419~u20.04 \ level-zero=1.8.1+i419~u20.04
これにより、上記のパッケージと暗黙の依存関係が Ubuntu* 20.04 (WSL2 で実行) にインストールされます。
TensorFlow* 向けインテル® エクステンションはインテル® oneAPI ツールキットを使用してビルドされています。そのため、いくつかの oneAPI ランタイム・ライブラリーもインストールする必要があります。
まず、インテルの oneAPI リポジトリーを apt システムに登録します。
$ wget -O- \ https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | \ sudo gpg --dearmor --output /usr/share/keyrings/oneapi-archive-keyring.gpg $ echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] \ https://apt.repos.intel.com/oneapi all main" | \ sudo tee /etc/apt/sources.list.d/oneAPI.list $ sudo apt-get update
次に、DPC++ と oneMKL ランタイムパッケージをインストールします。
$ sudo apt-get install intel-oneapi-runtime-dpcpp-cpp intel-oneapi-runtime-mkl
(この記事でインストールしたバージョンは、intel oneapi runtime dpcpp cpp=2022.2.1 16953 と intel oneapi runtime mkl=2022.2.1 16993です。) これは、TensorFlow* 向けインテル® エクステンションを実行するためのライブラリーのみをインストールし、oneAPI の完全な開発パッケージ (より大規模なもの) は含まれません。oneAPI の開発パッケージ全体をインストールする場合は、oneAPI のインストール・ドキュメント (英語) を参照してください。
Python* 仮想環境の作成
TF を GPU で使用する場合は、Miniconda* を推奨します。Linux* 用の conda 環境を作成する完全なドキュメントは、こちら (英語) を参照してください。最初のステップとして、Ubuntu* 20.04 に Miniconda* をダウンロードしてインストールします。
$ curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \ -o Miniconda3-latest-Linux-x86_64.sh $ bash Miniconda3-latest-Linux-x86_64.sh
次に、TF と TensorFlow* 向けインテル® エクステンションを新しい環境にインストールし、pip を最新バージョンに更新します。
$ conda create --name keras-cv python=3.9 $ conda deactivate $ conda activate keras-cv (keras-cv)$ pip install --upgrade pip
これで、TF (v2.10.0) と TensorFlow* 向けインテル® エクステンション (v1.0.0) をインストールできるようになりました。
(keras-cv)$ pip install tensorflow==2.10.0 (keras-cv)$ pip install --upgrade intel-extension-for-tensorflow[gpu]
パッケージ名の最後にある [gpu] は、拡張機能の GPU バックエンドを選択するように指定するものです。