Intel ARC B580でstable diffusion(ubuntu編)(pytorchのビルド)「Building PyTorch for Stable Diffusion on Intel ARC B580(with Ubuntu)」

Ubuntu

結論から言うと、ubuntuでB580を使ってstable diffusionを動かすことに成功しました。

現在の手順はubuntu22.04でpytorchのビルドを済ませ、5つのwhlファイルをubuntu24.10でインストールしてからstable diffusionを動かすという方法です。
24.10でビルドすればいいじゃんと思ったんですが、何度やっても24.10ではビルドは成功しませんでした。

今回は手取り足取りの記事は書きません。
pytorchのビルドなんて限られた人しかやらないですし、そういった人ならたぶん今回の雑な記事でも再現できると思います。

手順を大まかに説明します。
まずは「ubuntu22.04」で
・ubuntu22.04のカーネルをバージョンアップ(今回は6.12.7)
・ドライバとoneAPIのインストール
・ffmpegのインストール
・minicondaのインストール
・pytorchのビルド

次に「ubuntu24.10」で
・ドライバとoneAPIのインストール
・pyenvのインストール
・stable diffusionのインストール
・whlファイルのインストール
・stable diffusion実行
です。

https://pytorch-extension.intel.com/installation?platform=gpu&version=v2.5.10%2Bxpu&os=linux%2Fwsl2&package=source
今回のビルド手順は、上記サイトになるべく沿って行っています。

まず、ubuntu22.04のカーネルをバージョンアップ

ubntu 22.04にてARC B580を動作させるの記事のとおりにカーネルのバージョンアップします。
2024/12/29現在、ubuntuのバージョンは22.04.5です。

次にドライバとoneAPIのインストール

ドライバとoneAPIをインストール。

#!/bin/bash

# IntelグラフィックスGPG公開キーをインストールする
wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \
  sudo gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg

# パッケージリポジトリを構成する
echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" | \
  sudo tee /etc/apt/sources.list.d/intel-gpu-jammy.list

sudo apt update -y

sudo apt install -y libze1 intel-level-zero-gpu intel-opencl-icd clinfo libze-dev intel-ocloc intel-level-zero-gpu-raytracing

sudo usermod -aG render $USER
sudo usermod -aG video $USER

#!/bin/bash

sudo apt update -y

wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null

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 update -y

sudo apt install -y intel-oneapi-base-toolkit

ffmpegのインストール

どうもtorchvisionのビルドで必要になるようです。

sudo apt install ffmpeg

で良いのでインストールします。

ffmpeg -version

で「–enable-shared」が有効になっていることを確認しましょう。

minicondaのインストール

https://pytorch-extension.intel.com/installation?platform=gpu&version=v2.5.10%2Bxpu&os=linux%2Fwsl2&package=source
これによると、conda環境にてビルドするようにとのことですので、conda環境を構築します。

cd ~
mkdir -p install
cd install
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ./Miniconda3-latest-Linux-x86_64.sh 

ずっとenterキーで飛ばしていき、選択肢は「yes」「そのままenter」「no」でインストールを終えます。

echo "export PATH=~/miniconda3/bin:$PATH" >> "$HOME/.bashrc"
echo "source ~/miniconda3/etc/profile.d/conda.sh" >> "$HOME/.bashrc"
source ~/.bashrc

とりあえず、conda環境をアクティベートするための記述です。
次は環境を整えていきます。

#condaを最新にする
conda update -n base -c defaults conda

#conda-forgeをデフォルトチャネルに設定する
conda config --add channels conda-forge
conda config --set channel_priority strict

#conda環境を構築する
conda create -n env_test python=3.10
source activate env_test

conda update --all

stable diffusionはpython3.10で動作しますので、python3.10でビルドするよう整えます。

いよいよpytorchのビルドに

cd ~
mkdir -p pytorch_build
cd pytorch_build

#「.bashrc」に以下を書き込む
echo "source /opt/intel/oneapi/setvars.sh" >> "$HOME/.bashrc"
source ~/.bashrc

上記スクリプトを実行すると、conda環境がdeactivate状態になりますので

source activate env_test

もう一度、activateします。

wget https://github.com/intel/intel-extension-for-pytorch/raw/v2.5.10%2Bxpu/scripts/compile_bundle.sh

ビルドスクリプトをダウンロードして、

bash compile_bundle.sh /opt/intel/oneapi/compiler/latest /opt/intel/oneapi/mkl/latest /opt/intel/oneapi/ccl/latest /opt/intel/oneapi/mpi/latest /opt/intel/oneapi/pti/latest lnl-m 2> >(tee -a error_log.txt >&2)

上記スクリプトでビルド開始です。
ビルドの対象を「Lunar Lake(オプション「lnl-m」)」で。

ビルドが成功すると、「intel-extension-for-pytorch」「audio」「pytorch」「torch-ccl」「vision」の各フォルダに「dist」フォルダが作成されます。
そのなかに、バイナリファイルが作成されているはずですので、それらをubuntu24.10の環境でインストールします。

すべて集めると上の写真のようになります。

ubuntu24.10にドライバとoneAPIをインストール

ubuntu24.10を用意して、ドライバとoneAPIをインストール。

#!/bin/bash

sudo apt -y update
sudo apt -y install software-properties-common

# Add the intel-graphics PPA for 24.10
sudo add-apt-repository -y ppa:kobuk-team/intel-graphics

# Install the compute-related packages
sudo apt install -y libze-intel-gpu1 libze1 intel-ocloc intel-opencl-icd clinfo intel-gsc

# Install the media-related packages
sudo apt install -y intel-media-va-driver-non-free libmfx1 libmfx-gen1 libvpl2 libvpl-tools libva-glx2 va-driver-all vainfo intel-level-zero-gpu-raytracing

sudo usermod -aG render $USER
sudo usermod -aG video $USER
#!/bin/bash

sudo apt update -y

wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null

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 update -y

sudo apt install -y intel-oneapi-base-toolkit

whlファイルのインストール

ubuntu24.10は標準でpython3.12.8がインストールされていますが、これではstable diffusionは動きませんので、pyenvを用意します。

#!/bin/bash

sudo apt install git build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev curl \
    libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

cd ~/.pyenv && src/configure && make -C src

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

source ~/.bashrc

pyenv install 3.10.16

pyenvのインストールが終わったら、

cd ~
mkdir -p AI_ARC
cd AI_ARC

pyenv local 3.10.16

フォルダの名前は、自分は「AI_ARC」にしてますけど別に何でもいいです。
pyenvのpythonバージョンは3.10.16にしてますけど「3.10」ならなんでも大丈夫でしょう。

そうしたらそのまま、

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

上記スクリプトでstable diffusionをインストールしたら、そのフォルダのなかに先程完成した5つのwhlファイルをぶっこみます。

こんな感じになりますけど、気にしない。

python3 -m venv vnev
source ./venv/bin/activate

で,仮想環境を構築して

pip install ./intel_extension_for_pytorch-2.5.10+git2bca097-cp310-cp310-linux_x86_64.whl ./oneccl_bind_pt-2.5.0+xpu-cp310-cp310-linux_x86_64.whl ./torch-2.5.0a0+gita8d6afb-cp310-cp310-linux_x86_64.whl ./torchaudio-2.5.1a0+1661daf-cp310-cp310-linux_x86_64.whl ./torchvision-0.20.1a0+3ac97aa-cp310-cp310-linux_x86_64.whl

上記スクリプトでwhlファイルのインストール。
ただし、ファイル名はビルドした時期によって異なりますので、適宜変更してください。
済みましたら、

./webui.sh --use-ipex

で実行。

プロンプト「beach」のみで生成。
「v1-5-pruned-emaonly.safetensors」って著作権的にどうなんですかね。
問題があったら修正します。
とりあえず動作したときの画像です。

ハローアスカベンチの結果です。
Windowsとあまり変わらないですね。

急いで記事にしたので、抜け落ちた点があるかもしれません。
この手の情報は時間とともに陳腐化してしまうので、あまり詳しくは書きません。
すぐに使えなくなってしまうので。

pytorchのビルドにものすごく時間がかかる上に何度も失敗しますので、時間と気力のある方向けの情報です。
よかったら活用してみてください。

追記1
2024/12/31現在
B580でstable diffusionを動作させることはできるようになりましたが、画像を連続で生成していると生成速度が遅くなる現象が発生しました。
確かに現在のpytorchのソースも「Lunar Lake」の内蔵GPU「Xe2」用ですし、Linux用のドライバも正式対応ではないので不安定なのかもしれません。
自分の環境だけかもしれませんが、一応報告です。

追記2
「セグメンテーションフォルト」などと表示されて、どうしてもビルドに失敗する人は、メモリの設定に注目してください。
巷には「DDR5-5600」や「DDR5-6000」などというメモリが売られています。
そういう自分も「CrucialPro DDR5-6000 24GB x 2」という構成で「DDR5-6000」で動作させていましたが、どうにも失敗が続くので、「DDR5-4800」で試してみたところ、うまくいった経緯があります。
「DDR4」の場合はあまり聞いたことはありませんが、どうなんでしょう?
いろいろ手を尽くしてもできなかった時に思い出してください。
それでもダメな場合は・・・。

あきらめて、正式な対応を待ちましょう。
できないものはしかたありません。

コメント

タイトルとURLをコピーしました