思考補完計画

普段何を考えているのか書き留めておこうと思います

Intel Arc A770でStable Diffusionする

(2024年3月追記)
WindowsでもSDNextを入れると問題なく動くようになりました。
下の情報は古いので参考程度にしてください



生成AIに興味があるのでVRAMの量に惹かれてIntel Arc A770 LEを買いました。
Stable Diffusionを動かすまでに四苦八苦したので備忘録として残します。

Stable Diffusionを動かすためのPC構成

一般人は素直にGeforce RTX3060とかを買いましょう。Intel Arcは情報がほとんどないうえにめんどくさいです。
CPUだけでもモデルによっては動作させることができますが1枚生成するのに数分かかるので現実的ではありません。
最新のSD-XL 1.0を使うとVRAM 16GBでもカツカツになります。VRAMの量は正義です。
意外に見落とされがちですがDRAMも64GBあった方がいいです。32GBは本当に最低限度です。
ストレージは当然NVMe SSDを使いましょう。SATA SSDはぎりぎり耐えれますが積極的に選ぶ理由はありません。

当PCの構成

CPU : Ryzen 7 1700
GPU : Intel Arc A770 Limited Edition (VRAM GDDR6 16GB, Driver 31.0.101.4676)
M/B : ASUS TUF B450M-PLUS GAMING (BIOS Ver.4002)
DRAM : ADATA DDR4-2666 32GB(8GBx4)
SSD : TOSHIBA XG3 NVMe SSD 1TB M.2 2280 PCIe 3.0 x4
Resizable BAR : 有効

Intel公式ではRyzen 3000番台以降でResizable BARが機能するとありましたが、1700でも機能しました。

Intel® Arc™ A-Series Graphics – Desktop Quick Start...

当初はWindows11 WSL2 + Ubuntu 22.04 LTSで動かそうとしたのですが、うまくいかないのでネイティブLinuxで動かします。

大まかな手順は以下
Ubuntuのインストール
Intel packageのインストール
Intel oneAPIのインストール
・SD.NEXTのインストール
・SD-XLの導入

Ubuntuのインストール

OSはUbuntu 22.04.2 LTSにします。
ここで注意ですが最新版のUbuntu 22.04.3 LTSだとうまくいきません。おそらくkernel versionが6.2になったためです。
ダウンロードは以下から
https://old-releases.ubuntu.com/releases/jammy/
インストール手順は省略

Intel package runtimeのインストール

公式サイトの手順通りにコマンドを実行するだけです。
https://dgpu-docs.intel.com/driver/client/overview.html
まずはパッケージリポジトリの登録

wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \
  sudo gpg --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-get update

各種パッケージのインストール

sudo apt-get install -y \
  intel-opencl-icd intel-level-zero-gpu level-zero \
  intel-media-va-driver-non-free libmfx1 libmfxgen1 libvpl2 \
  libegl-mesa0 libegl1-mesa libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri \
  libglapi-mesa libgles2-mesa-dev libglx-mesa0 libigdgmm12 libxatracker2 mesa-va-drivers \
  mesa-vdpau-drivers mesa-vulkan-drivers va-driver-all vainfo hwinfo clinfo
Intel oneAPIのインストール

まずはパッケージリポジトリの登録

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

Base ToolkitとHPC Toolkitのインストール

sudo apt install intel-basekit intel-hpckit
SD.NEXTのインストール

通常画像生成といえばAUTOMATIC1111が有名ですが、oneAPIで動かせないのでforkのSD.NEXTを使います。
公式サイトはここから
https://github.com/vladmandic/automatic
まずはgitとvenvを入れます

sudo apt install git python3.10-venv

コードをクローンします

git clone https://github.com/vladmandic/automatic

webui.shを実行します。今回はoneAPIで動かすのでオプションに--use-ipexをつけます
セットアップに時間がかかるので気長に待ちましょう。

cd automatic
./webui.sh --backend diffusers --use-ipex

更新が止まってURLが表示されたらブラウザから操作できます。お疲れ様でした。

http://127.0.0.1:7860/
SD-XLの導入

StableDiffusionの最新モデルSD-XL 1.0をhuggingfaceからダウンロードします
Base : https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors
Refiner : https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/blob/main/sd_xl_refiner_1.0.safetensors
BaseとRefinerをautomatic/models\stable-diffusion内に移動します。
その後のSD.NEXTの設定はgithubWikiを確認してください
https://github.com/vladmandic/automatic/wiki/SD-XL
当環境ではDRAM 32GBだったのでmodelを読み込むときに32GB以上使います。
スワップ領域を設定していないとOSがクラッシュしてしまうのでDRAMが少ない方は設定必須です。

swap領域の追加

まずはスワップ領域を確認します

sudo swapon --show

何も表示がなければスワップ領域が設定されていません。
スワップファイルを作ります。今回は合計で64GBにしたかったためswapfileを32GBで割り当てました

sudo fallocate -l 32G /swapfile

パーミッションの設定とスワップ領域割当・有効化を行います。

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

最後に追加した領域が反映されているか確認しましょう。

sudo swapon --show