見出し画像

200ドルAIパソコンを作る方法|Ubuntu編

「200ドルでAIパソコンを作る」のUbuntu編をまとめてみた。目次のお作法などもよくわかっていないのであとでだいぶ手を加えると思うが、ひとまず公開。

ターゲットはAMD APU搭載パソコン。安価なノートパソコンやミニPCで採用されるケースが多かったRyzen 5 5625UなどのAMD APUを搭載したパソコンは、メルカリで16GBメモリと512GB SSDの構成で3万円以下、つまり200ドルで手に入る。

この記事は、そんな200ドルパソコンのGPUで画像生成AI、それもハイスペしか眼中にないStable Diffusion XL(以下、SDXL)を動かしてAIパソコンを名乗ろう、という企画のUbuntu編である。

といっても、この記事はたったひとつのGitHubを紹介するだけで終わってしまう。Windows編もたったひとつのアプリ「Amuse」の紹介で終わっていたので、両者に格差をつけておらず、今どきな社会風潮にはあっていると思う。

SDXLモデル iNiverse Mix XL を使って、SDXLらしいといわれる水しぶきや光の描写を社会風潮無視のテーマで。

WindowsではなくあえてUbuntuで動かす

WindowsではなくUbuntuで画像生成AIを動かすメリットはあるのか。これについては、「速さ」が挙げられることが多い。NVIDIAではそうだとしても、AMD APUではどうなのか?といった疑いへの調査は別の記事でまとめてみるとして、「3倍ほど速い」といった実測データもあるようなので、めんどうなUbuntuに取り組むモチベーションになるだろう。

もうひとつのメリットは、UbuntuでStable Diffusion web UIを動かすことで、Stable Diffusion用、SDXL用の多くのモデルファイルをそのまま使えること。Amuseもそうであるように、Windowsで動く画像生成AIはDirectMLベースゆえにONNXモデルを使うため、一般的なckptやsafetensorsのモデルはコンバーターなどで変換する必要がある。そして、Stable Diffusionのモデル(SD 1.0、SD 1.5など)には簡単で確かな変換方法があるが、SDXLについてはシンプルな変換方法が現時点では存在しないのだ。

あとは、そもそも、なぜSDXLなのか。XLでなければVRAMもさほど使わない。それならば、AMD APUのパソコンを売って、安くてもNVIDIAのGPUを搭載したパソコンに買い替えたほうが手っ取り早いと思っていると、まあ、身も蓋もない理由がある。

SDXLは推奨VRAMのサイズが16GB(あるいは12GBでがまん)と大きく、お家で動かすにはちょっとした贅沢マシンが必要とされている。ところが、CPUとGPUをひとつに統合したデバイスであるAMD APUは、安価なふつうのメモリをCPUとGPUで共有し、搭載容量の最大で半分までをVRAMとして「動的に割り当てて」くれる。つまり、32GBのメモリを搭載したAMD APUパソコンは、16GB VRAMのGPU搭載機として使える 設計思想だ。

とはいえ、たとえばNVIDIA GeForce RTX 4060のメモリ帯域が実効453GB/sであるのに対し、Ryzen 5 5625Uのメモリ帯域はその10分の1ほどであり、とにかく遅い。それでも、動くのか、動かないのかには、生と死がそうであるように、ゆるやかな連続性を断ち切るような違いがある。安価なパソコンで贅沢マシンと同じように動かせることを楽しみたい。

Ubuntuのインストール

まず結論を書いてしまうと、AMD APUとUbuntuの環境でSDXLを動かすのは「外付けSSDにUbuntu 24.04をインストールする」の一択だ。

SSDはお試しレベルであれば128GB SATAで足りる。中古の128GB SSDとSATAをサポートするUSB接続のケースとを合わせて、アマゾンやアリエクで2000円ほどで手に入る。大容量のモデルデータをいくつもそろえて本格的に使うには512GBや1TBがよいのだろうが、ここにお金かけてしまってはテーマ的に本末転倒かと(安さだけがウリ)。

そして、Windows 11で使っているパソコンでUbuntuを動かす方法は、このnoteにも迷うほどたくさんあふれている。が、古くて安価なAMD APUでSDXLを動かす目的では、その迷うほどの選択肢の ほぼすべてが死路 である。

読み飛ばしていただいて構わないが、手軽なWSL2で動かしたくてもROCmが未サポートかつ本当に動かない、Hyper-Vなど仮想環境ではiGPUが認識されないから動かない、記事がもっとも多いUbuntu 22.04のインストーラーにはWindowsを立ち上がらなくするバグがある、逆にWindows Updateをかけるとデュアルブート構成のUbuntuが立ち上がらなくなるバグがある。UbuntuでStable Diffusion web UIを動かすには、AIアプリをGPUで動かすためのAMDによるライブラリであるROCm 6.2が動き、GPUを使ったAI処理を担うPyTorch 2.4のROCm 6.2対応版が動き、そのPyTorch 2.4がサポートするPython 3.10が動き、そのPython 3.10を(Windowsを壊さない)Ubuntu 24.04で動かす必要がある。それもバージョンは完全一致が必要で「バージョンが上だから動くだろう」が通用しない。そのうえ、そもそもStable DiffusionはAMD ROCmではなくNVIDIA CUDA向けに作られ、そのROCmはAPUをサポートしていない……などなど。早口終了。

ともかく「外付けSSDにUbuntu 24.04をインストールする」を最初の手として打つことが、死路に一条の活路を開くわけだ。

なお、Ubuntuの導入手順は省く。思い出したくないってのも、まあ、ある。知識として必要なのは、BIOSでSecure Bootの設定を無効にすること、RufusでUbuntuのインストール用USBメモリを作ること、Ubuntuのセットアップ時にインストール先を間違えないこと、くらいだろう。

失敗と再セットアップの繰り返しでこの画面を幾度見たことか……。

UbuntuへのStable Diffusion(Automatic1111)のセットアップ

Stable Diffusion(Automatic1111)は、インストールしたてのUbuntu 24.04 に、コマンドをコピペコピペコピペでセットアップする。すでに使い込んだUbuntuや、少しこだわった設定などをしていると失敗の可能性が高まる。それこそ「UbuntuとWindowsでデュアルブートしていると時刻がずれる問題」も放置するくらいの気概で挑もう。

コマンドはGitHubにある「AMD (Radeon GPU) ROCm based setup for popular AI tools on Ubuntu 24.04.1」の手順を「ほぼそのまま」実行する。

実のところ、Ubuntu 24.04は「OSのセットアッププログラムがWindowsを壊さなくなった」のはありがたいのだが、PythonのバージョンがStable Diffusionのセットアップで問題になる。

Ubuntu 22.04の標準であるPython 3.10ではStable Diffusion(Automatic1111)のセットアップに問題はない。が、Python 3.12が標準となったUbuntu 24.04においては、よくある手順ではこのセットアップが「必ず」失敗する(失敗した)。それを、GitHubの手順ではvenyを使ったPython 3.10の仮想環境を作ることでシンプルに回避している。この手順以外の「異なるバージョンのPythonを同居させる方法」ではことごとくセットアップが失敗する(失敗した)ので、veny一択でよいだろう。

さて、一点だけ、もしかすると書き換えが必要な部分がある。セットアップとしては最後の手順となる「Edit environment settings...」でPyTorchのROCm対応バージョン「6.2」のリンクが切れているかもしれず、それらしきエラーが出たら「6.1」に修正して実行する必要がある。GitHubは随時更新されており、そのうえ該当リンクが復活しているかもしれないので、「エラーが出たら修正」でよいだろう。

tee --append webui-user.sh <<EOF
# specify compatible python version
python_cmd="python3.10"
 ## Torch for ROCm
# workaround for ROCm + Torch > 2.4.x - https://github.com/comfyanonymous/ComfyUI/issues/3698
 export TORCH_BLAS_PREFER_HIPBLASLT=0
# generic import...
# export TORCH_COMMAND="pip install torch torchvision --index-url https://download.pytorch.org/whl/nightly/rocm6.1"
# use specific versions to avoid downloading all the nightlies... ( update dates as needed ) 
 export TORCH_COMMAND="pip install --pre torch torchvision --index-url https://download.pytorch.org/whl/rocm6.1"
 ## And if you want to call this from other programs...
 export COMMANDLINE_ARGS="--api"
 ## crashes with 2 cards, so to get it to run on the second card (only), unremark the following 
 # export CUDA_VISIBLE_DEVICES="1"
EOF

そして、webui.sh でStable Diffusion(Automatic1111)を立ち上げるのだが、そのときに、環境変数 HSA_OVERRIDE_GFX_VERSION にパソコンのAMD APUに対応した数値を書いて渡す。

この数値についての説明はややこしい。ROCmで未サポートのAMD APUで動かすので、公式情報ではなく、先人たちの知恵を頼りにした。

私のDell Inspiron 16 5625の場合は、搭載されているAPUがRyzen 5 5625Uで、そのGPU IDはgfx90c(Radeon Vega 7)だ。しかし、PyTorchはgfx90cに対応していない。そのために同じ命令セットであるgfx900(Radeon Vega 10)として「9.0.0」を渡している。

HSA_OVERRIDE_GFX_VERSION=9.0.0 ./webui.sh

GPU IDを調べるのはこちら……でよいのか自信はないが、ほかによいサイトがないと思う。

二度目からは、コマンドでこんな感じにコピペしていけばよいだろう。

$ cd stable-diffusion-webui
$ source venv/bin/activate
(venv) $ HSA_OVERRIDE_GFX_VERSION=9.0.0 ./webui.sh

ともかく、これでAMD APUで動くUbuntuでもStable Diffusionによる画像生成AIを楽しめるようになった。最後の方でやっとLinuxの記事っぽくなった。

もちろん、AIの処理ではGPUがしっかりと使われている。生成が遅いので「GPUではなくてCPUで処理しているのでは」と勘ぐってしまうかもしれないが、CPUによる処理はさらにとんでもなく遅いので安心してほしい。

また、AMD APUが「メインメモリからVRAMを動的にどれだけ割り当てたか」を知る方法として、Windowsではタスクマネージャーがある。が、Ubuntuでそれを知る方法がわからない。わからないが、メインメモリの空き領域が減っていく推移などみる限り、Windowsと同じように動的な割り当てをしているようだ。

加えて、この動的なVRAM割り当ての動きはNVIDIA GPUには存在しないので、AMD APUであることを想定していないアプリなどでは「とてもひどい絵」が生成される。Negative Promptでも抑えきれないレベルでだ。この点も、問題ないようだ。

Hello Asuka Benchmarkを試してみると……16分超えに。
CPUで動いているんでは?と疑わずにいられないが、ちゃんとGPUが働いている。
みんな大好き yayoi_mix でCivitaiにあったプロンプトを拝借。SDXLではないものの、世の中のAI美少女のイメージはこれなのでは。

おわりに

安さに飛びついて買った2年半前のデルのノートパソコン。そんなパソコンで画像生成AIが「2024年の9月になって」使えるようになったのが嬉しくて長文を書いてみた。

画像か大規模言語モデル(LLM)かを問わず、生成AIをデルのAMD APU搭載ノートパソコンで動かす際の最大の障壁は「VRAMの割当容量が512MBで固定され、変更できない」点にあった。

記事ではまったく触れなかったが、ほとんどの記事は「AMD APUであれば、まずはBIOSでVRAMの割当容量を増やしましょう」から始まるのに、デルではそれができない。そして、「それができない」場合に提案されるいくつものツールがあるのだが、すべて使えない。

この障壁も、世界中の知と知がつながったことで、この数か月でなくなった(LLMではこの障壁は残っている)。自身の実感でもあるが、もし画像生成AIが生み出すのがAI美少女ではなくポリコレ女性ばかりだったら、世界中の男どもはデルの制限? Ubuntu? なにそれ? で残りの人生を別のなにかに使って有意義に過ごしていただろう。この記事にもある、6重苦7重苦に立ち向かう原初的な力には、本当に驚かされるばかりだ。