気の向くままに辿るIT/ICT/IoT
ハードウェア

Stable Diffusionでローカル生成AI on Linux Ryzen 7 8845HS

ホーム前へ次へ
ミニパソコンって?

Stable Diffusionでローカル生成AI on Linux Ryzen 7 8845HS

Stable Diffusionでローカル生成AI on Linux Ryzen 7 8845HS

2025/04/28

 先月買った自身初購入のミニPCでAMD Ryzen AIを積んだRyzen 7 8845HS搭載AOOSTAR GEM12 Pro MAXにプリインストール・クリーンインストール済みWindows 11 Proとは別にマルチブート、AMDXDNA(Ryzen AI NPU)が実装されたLinuxカーネル6.14な25.04ベータを入れ、USB SSDブートしていたUbuntuにamdgpu対応のStable Diffusion WebUIをインストールして使ってみた話。

Stable Diffusionとは

CompVis/stable-diffusion githubリポジトリ

 Stable Diffusionとは、ミュンヘン大学CompVisグループにより開発され、Runway、Stability AI社を加えた3グループにより2022年に公開されたテキストから画像を生成するAI機能をもつText2Imageなオープンソースソフトウェア。

 以後、Stable Diffsion 1.1、...、1.5、2.0、2.1、3.0、XL(SDXL)、XL Turbo、3.5など留まることなく、3.5だけでもMedium、Large、Large Turboなどがあり、その進化に伴い、Text2Image(txt2image)だけでなく、Image2Image(img2img)など機能追加され、常に進化している、いわゆる生成AI技術であり、生成AIソフトウェア。

Stability AIトップページ

 また、Stability AI社に限っていえば、単一画像からの高品質3Dオブジェクト生成するStable Zero 123、音楽や音響効果を生成するStable Audio、AIアシスタントなどと呼ばれることもあるLLM/Large Language Model/大規模言語モデルであるStable Beluga、マルチバイリンガルな言語モデルStable LM系、日本語専用言語モデルJapanese Stable LM2 1.6B、プログラムコードやクエリの作成補助やコード生成するStable Code系などもあります。

 そんなStable Diffusionは、Deep Generative Neural Network/深層生成ニューラルネットワークの一種であるLatent Diffusion Model/潜在拡散モデルから成っているとされます。

出典:Stable Diffusion by Wikipedia

リアリティに優れ非現実的な画像生成が苦手とされるSD1.5系であえて「ピアノを弾いているネコ」 on Linux AMD Ryzen 7 8845HS PC

 3.5がリリースされた今でも人気が高いのが、SD1.5モデルとのこと。

 理由はいろいろあるようですが、軽量・高速・リアリティ・少ないオプション(設定が容易)・CFG設定にも絡むにせよプロンプト次第で様々な画像を生成可能、Stable Diffusionの公開から3年足らずながら、時系列的、相対的に初期に近いバージョンゆえ、対応モデルもノウハウなど情報も豊富といった点がウケている模様。

 こうした特徴もあって追加学習させ新たなモデルを生成する際のベースモデルとしてとか、クラウドではなく、さほど高性能でないPCでさえ、近年話題のローカルでAI(エッジAI)といったシーンにも都合よく、人気があるようです。

リアリティに優れ非現実的な画像生成が苦手とされるSD1.5系であえて「野球をしているネコ」 on Linux AMD Ryzen 7 8845HS PC

 逆にSD1.5は、非現実的な画像生成は苦手でプロンプトでリアリティのない指定をしたとしても生成されるのは、現実的な範囲での画像となります(テクニックによってはできなくもないという噂も)。

 例えば、SD1.5で「野球をしている猫」のような英文や単語の羅列をプロンプトに入れても、せいぜい「球場にいる猫の横に硬球が転がっている」ような画像が生成されるとか、そんなイメージ。

 SDXLや3.0、3.5など、そうした描画にも長けたモデルを使うと複雑な設定をしなくても期待通り?「ユニフォームを着たバッターボックスに立つネコに投手のネコが投球している」といったような画像が生成されるのとは対象的。

リアリティに優れるとされるSD1.5系で「海岸を走る犬」 on Linux AMD Ryzen 7 8845HS PC

 とはいえ、より現実的にという面では、SD1.5がダントツなんだとか。

 また、初期のSD1.5では、プロンプトには単語もしくはワンフレーズ区切りのみという制約があった模様、これが同じSD1.5でも後に改善され、後続モデルでもそうであるように英文も解釈されるようになり、より使い勝手が良くなったという面も。

「ハットにサングラス、スーツに身を包んだ犬がパソコンを操作」的なAI生成画像 写真左:Amuse 3.0/Windows作と写真右:SD WebUI SDXL1.0系+Lora/Linux on AMD Ryzen 7 8845HS PC
左:Amuse3.0 右:SDXL1.0系+Lora

 比較のため、微調整は必要なものの、Linux上のStable Diffusion Web UI amdgpuでモデルとしてSDXL 1.0系+ポーズやスタイル系のLoraを併用してみたところ、プロンプトなど条件は、ほぼほぼ同じでデフォルトのAmuse 3.0(Windows)作に寄せて「ハットにサングラス、スーツに身を包んだ犬がパソコンを操作」的な微妙に人っぽくもあり、ほんの少し現実離れしたような画像も生成できました。

 ただ、Amuseの方は、SD1.5ベースっぽい?

よりバーチャルリアリティなSD WebUI SDXL1.0系+Lora作「ハットにサングラス、スーツに身を包んだ犬がパソコンを操作」on Linux AMD Ryzen 7 8845HS PC
SDXL1.0系+Lora

 尤も前掲の生成画像は姿勢も同じようなのを選んだわけですが、非現実的と言うなら、明らかに、こっちですけどね。

 AMD Ryzen 7 8845HS/Linux/SD Web UIなSDXL1.0系+Loraにおいてバッチカウント 4で同時に生成されたのが、他1枚、前掲写真右の1枚、そして、この2枚の4枚。

Stable Diffusion Web UIとは

 Stable Diffusion Web UIとは、Stable Diffusionの生成AIを使うにあたり、ブラウザを操作パネルとしたもの。

lshqqytiger/stable-diffusion-webui-amdgpu githubリポジトリ

 AUTOMATIC1111/stable-diffusion-webuiや、このフォークで高速化を施したというlllyasviel / stable-diffusion-webui-forge、NVIDIA/CUDAのみならず、AMD GPU/ROCmにも対応なlshqqytiger/stable-diffusion-webui-amdgpu、そしてForge版lshqqytiger / stable-diffusion-webui-amdgpu-forgeなどがあります。

 GPU分野トップシェアなNVIDIAのGPUに対応している一方、快進撃を続け猛追するAMD製GPUに対応してくれているのが、stable diffusion webui amdgpu。

 尚、AMDはじめ、外付けグラフィックボードではなく、チップ搭載のiGPU/Integrated GPUも増えており、このiGPUでもBIOSなどで明示的にVRAM設定できる機種もあれば、自動割当される機種もあり、後者で自動割当して欲しいところでされないといったことも起こり得る模様。

 そうしたVRAM自動割当なiGPUにおいて、NVIDIAで言うところのCUDAにあたるAMD Radeon GPU用ROCm、そのROCm付きのPytorchは、VRAM以外のRAMを使わないようになっているらしく、Pytorchをいじることなく、VRAM割当を行えるよう動的に共有ライブラリを読み込ませる機能を持つforce-host-alloction-APU(allocationではなく、alloctionなのは、ご愛嬌かと)も併用するのが吉です。

 自身のマシンもRAMは32GBですが、dmesgで見るとVRAMの初期割当は512MB、GTTは、15452Mと合計すると仕様的なVRAM割当可能な最大16GBと合致しているものの、もし、512MBで処理されてしまうと、15GBも割り当てられるメモリが残っているはずなのに、すぐに消耗してしまい、それ以上実行できないといった状態になると思われるので、ありがたい限りです。

AMD用の事前準備

 AMD、Ryzen、Radeon搭載マシンでStable Diffusionを使うにあたり、必要となり得る環境と補足は次の通りです。

 Ryzen AIソフトウェアというか、Ryzen AI NPUについては、Stable Diffusion Web UIで現状対応しているものはなさ気ですが、何れにせよ、Ryzen AIマシンには必須。

 あとPythonはじめ、各種バージョンは、かなり重要。

 必要なツールやアプリは、リンク付きなものは、そこにインストール方法が掲載されており、それ以外はディストロのパッケージマネージャでインストールできます。

 ROCmの導入は、amdgpu-installの方が、上書き・更新も含め、手軽で簡単・便利ですが、--usecaseとかオプション値に、その組み合わせとして何を指定するのが正解なのか、よりよいのかとか、ありえない組み合わせもあるのかとか、--no-dkmsとした場合、後でapt install amdgpu-dkmsする必要があるのかとか、そうした場合、何かしている時にdkmsに関する警告らしきものが表示されることがあるけど、どうすれば回避できるのかとか、公式ドキュメントを見ても理解するのが難しい...と自身は未だに感じています。

 注意事項的なものは、覚えておかないと自身のようにハマり、おそらく、何度も何度もやり直す羽目になるでしょう。

 リアルタイムな状態・ステータスの確認はできた方が幸せになれるはずです。(CPU/GPU/iGPU/NPUを可視化する on Linux Ryzen 7 8845HS)

(sd_webui_amdgpu_311) ubuntu $ python3 -c 'import torch' 2> /dev/null && echo 'Success' || echo 'Failure'
Success
(sd_webui_amdgpu_311) ubuntu $ python3 -c 'import torch; print(torch.cuda.is_available())'
True
(sd_webui_amdgpu_311) ubuntu $ python3 -c "import torch; print(f'device name [0]:', torch.cuda.get_device_name(0))"
device name [0]: AMD Radeon Graphics
(sd_webui_amdgpu_311) ubuntu $ python3 -m torch.utils.collect_env
<frozen runpy>:128: RuntimeWarning: 'torch.utils.collect_env' found in sys.modules after import of package 'torch.utils', but prior to execution of 'torch.utils.collect_env'; this may result in unpredictable behaviour
Collecting environment information...
PyTorch version: 2.8.0.dev20250418+rocm6.4
Is debug build: False
CUDA used to build PyTorch: N/A
ROCM used to build PyTorch: 6.4.43482-0f2d60242
 
OS: Ubuntu 25.04 (x86_64)
GCC version: (Ubuntu 14.2.0-19ubuntu2) 14.2.0
Clang version: Could not collect
CMake version: Could not collect
Libc version: glibc-2.41
 
Python version: 3.11.0 (main, Apr 22 2025, 14:59:37) [GCC 14.2.0] (64-bit runtime)
Python platform: Linux-6.14.0-15-generic-x86_64-with-glibc2.41
Is CUDA available: True
CUDA runtime version: Could not collect
CUDA_MODULE_LOADING set to: LAZY
GPU models and configuration: AMD Radeon Graphics (gfx1103)
Nvidia driver version: Could not collect
cuDNN version: Could not collect
HIP runtime version: 6.4.43482
MIOpen runtime version: 3.4.0
Is XNNPACK available: True
 
CPU:
アーキテクチャ:                       x86_64
CPU 操作モード:                       32-bit, 64-bit
Address sizes:                        48 bits physical, 48 bits virtual
バイト順序:                           Little Endian
CPU:                                  16
オンラインになっている CPU のリスト:  0-15
ベンダー ID:                          AuthenticAMD
モデル名:                             AMD Ryzen 7 8845HS w/ Radeon 780M Graphics
CPU ファミリー:                       25
モデル:                               117
コアあたりのスレッド数:               2
ソケットあたりのコア数:               8
ソケット数:                           1
ステッピング:                         2
Frequency boost:                      enabled
CPU(s) scaling MHz:                   44%
CPU 最大 MHz:                         5102.0000
CPU 最小 MHz:                         400.0000
BogoMIPS:                             7585.50
フラグ:                               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good amd_lbr_v2 nopl xtopology nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba perfmon_v2 ibrs ibpb stibp ibrs_enhanced vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local user_shstk avx512_bf16 clzero irperf xsaveerptr rdpru wbnoinvd cppc arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold vgif x2avic v_spec_ctrl vnmi avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid overflow_recov succor smca fsrm flush_l1d
仮想化:                               AMD-V
L1d キャッシュ:                       256 KiB (8 instances)
L1i キャッシュ:                       256 KiB (8 instances)
L2 キャッシュ:                        8 MiB (8 instances)
L3 キャッシュ:                        16 MiB (1 instance)
NUMA ノード数:                        1
NUMA ノード 0 CPU:                    0-15
Vulnerability Gather data sampling:   Not affected
Vulnerability Ghostwrite:             Not affected
Vulnerability Itlb multihit:          Not affected
Vulnerability L1tf:                   Not affected
Vulnerability Mds:                    Not affected
Vulnerability Meltdown:               Not affected
Vulnerability Mmio stale data:        Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed:               Not affected
Vulnerability Spec rstack overflow:   Mitigation; Safe RET
Vulnerability Spec store bypass:      Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:             Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:             Mitigation; Enhanced / Automatic IBRS; IBPB conditional; STIBP always-on; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
Vulnerability Srbds:                  Not affected
Vulnerability Tsx async abort:        Not affected
 
Versions of relevant libraries:
[pip3] numpy==1.26.2
[pip3] onnx==1.16.2
[pip3] onnxruntime==1.21.1
[pip3] onnxruntime-training==1.19.2
[pip3] onnxscript==0.2.5
[pip3] open-clip-torch==2.20.0
[pip3] pytorch-lightning==1.9.4
[pip3] pytorch-triton-rocm==3.3.0+git96316ce5
[pip3] torch==2.8.0.dev20250418+rocm6.4
[pip3] torchdiffeq==0.2.3
[pip3] torchmetrics==1.7.1
[pip3] torchsde==0.2.6
[pip3] torchvision==0.22.0.dev20250418+rocm6.3
[conda] _anaconda_depends         2024.10             py312_mkl_0  
[conda] blas                      1.0                         mkl  
[conda] mkl                       2023.1.0         h213fc3f_46344  
[conda] mkl-service               2.4.0           py312h5eee18b_1  
[conda] mkl_fft                   1.3.10          py312h5eee18b_0  
[conda] mkl_random                1.2.7           py312h526ad5a_0  
[conda] numpy                     2.0.2                    pypi_0    pypi
[conda] numpydoc                  1.7.0           py312h06a4308_0  
[conda] nvidia-cublas-cu12        12.4.5.8                 pypi_0    pypi
[conda] nvidia-cuda-cupti-cu12    12.4.127                 pypi_0    pypi
[conda] nvidia-cuda-nvrtc-cu12    12.4.127                 pypi_0    pypi
[conda] nvidia-cuda-runtime-cu12  12.4.127                 pypi_0    pypi
[conda] nvidia-cudnn-cu12         9.1.0.70                 pypi_0    pypi
[conda] nvidia-cufft-cu12         11.2.1.3                 pypi_0    pypi
[conda] nvidia-curand-cu12        10.3.5.147               pypi_0    pypi
[conda] nvidia-cusolver-cu12      11.6.1.9                 pypi_0    pypi
[conda] nvidia-cusparse-cu12      12.3.1.170               pypi_0    pypi
[conda] nvidia-cusparselt-cu12    0.6.2                    pypi_0    pypi
[conda] nvidia-nccl-cu12          2.21.5                   pypi_0    pypi
[conda] nvidia-nvjitlink-cu12     12.4.127                 pypi_0    pypi
[conda] nvidia-nvtx-cu12          12.4.127                 pypi_0    pypi
[conda] open-clip-torch           2.32.0                   pypi_0    pypi
[conda] pytorch-lightning         2.5.1                    pypi_0    pypi
[conda] pytorch-triton-rocm       3.2.0                    pypi_0    pypi
[conda] torch                     2.6.0+rocm6.2.4          pypi_0    pypi
[conda] torchaudio                2.6.0                    pypi_0    pypi
[conda] torchdiffeq               0.2.5                    pypi_0    pypi
[conda] torchmetrics              1.7.1                    pypi_0    pypi
[conda] torchsde                  0.2.6                    pypi_0    pypi
[conda] torchvision               0.21.0                   pypi_0    pypi
[conda] triton                    3.2.0                    pypi_0    pypi
(sd_webui_amdgpu_311) ubuntu $

 Install PyTorch for ROCmには、ROCm用Pytorchのインストールと後段に[Verify PyTorch installation]としてPyTorch環境が、また、ROCmによりGPU|iGPUが正常に認識されているか否かの確認方法が載っています。

 その確認方法と自身のAMD Ryzen 7 8845HS/AMD Radeon Graphics 780M搭載ミニPCにおける実行結果がこれ。

 後段にpip3とcondaのTorch環境が載ってますが、後者は残骸、自身は前者を使っているのでROCm対応torchのバージョンは、2.8.0.dev20250418+rocm6.4(なのにtorchvisionが0.22.0.dev20250418+rocm6.3とrocm6.3になってしまっているのはなんでだろう?)。

amdgpu対応Stable Diffusion WebUIのインストール

 AMD Ryzenな今回は、stable-diffusion-webui-amdgpuをgit cloneします。

ubuntu $ mkdir -p path/to/sd
ubuntu $ cd path/to/sd
ubuntu $ python -V
Python 3.13.3
ubuntu $ pyenv virtualenv 3.11.0 sd_webui_amdgpu_311
ubuntu $ pyenv activate sd_webui_amdgpu_311
(sd_webui_amdgpu_311) ubuntu $ python -V
Python 3.11
(sd_webui_amdgpu_311) ubuntu $

 必要ならStable Diffusion用のパスを作って移動。

 また、前後どちらでも良いものの、ここでは、pyenvを使うものとして、(まだ、なければ作成の上、)先に仮想環境に入っておきます。

 尚、AnacondaやMinicondaなどcondaをインストール済みな場合、デフォルトでcondaのbase環境に入っていたりするのでconda info -eして確認、baseにいたら、conda deactivateしておきましょう。

 そうしないとconda baseのPythonバージョンになってしまったりするので。

(sd_webui_amdgpu_311) ubuntu $ wget https://gist.github.com/damico/484f7b0a148a0c5f707054cf9c0a0533/archive/43c317bfbde626d9112d44462d815613194988e0.zip
(sd_webui_amdgpu_311) ubuntu $ unzip 43c317bfbde626d9112d44462d815613194988e0.zip
(sd_webui_amdgpu_311) ubuntu $ mv 484f7b0a148a0c5f707054cf9c0a0533-43c317bfbde626d9112d44462d815613194988e0/test-rocm.py .
(sd_webui_amdgpu_311) ubuntu $ python test-rocm.py
Checking ROCM support...
GOOD: ROCM devices found: 3
Checking PyTorch...
GOOD: PyTorch is working fine.
Checking user groups...
GOOD: The user xxx is in RENDER and VIDEO groups.
GOOD: PyTorch ROCM support found.
Testing PyTorch ROCM support...
Everything fine! You can run PyTorch code inside of:
---> AMD Ryzen 7 8845HS w/ Radeon 780M Graphics
---> gfx1100
---> aie2
(sd_webui_amdgpu_311) ubuntu $ rm 43c317bfbde626d9112d44462d815613194988e0.zip
(sd_webui_amdgpu_311) ubuntu $ rmdir 484f7b0a148a0c5f707054cf9c0a0533-43c317bfbde626d9112d44462d815613194988e0
(sd_webui_amdgpu_311) ubuntu $

 rocmが正常にインストールできたか確認できるスクリプトをgithubで公開してくれている方がいらっしゃるので、ありがたく使わせて頂くと良いでしょう。

 実行してバッチリだとこんな感じの心地よい出力を得ることができます。

 本来は、gfx1103なRyzen 7 8845HSですが、gfx1100となっているのは、~/.bashrcでexport HSA_OVERRIDE_GFX_VERSION=11.0.0してあるから。(ん?もしや11.0.3でもいける?あ、いけた)

 そして後片付け。

(sd_webui_amdgpu_311) ubuntu $ git clone https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu.git
(sd_webui_amdgpu_311) ubuntu $

 冒頭リンクにあるとおり、webui.shだけダウンロードして、これの実行でgit cloneもする方法もありますが、ここでは、素直にgithubリポジトリをgit clone。

(sd_webui_amdgpu_311) ubuntu $ git clone https://github.com/segurac/force-host-alloction-APU.git
(sd_webui_amdgpu_311) ubuntu $ cd force-host-alloction-APU
(sd_webui_amdgpu_311) ubuntu $

 Web UIの実行に移る前にAMD Radeon iGPUな場合、前述の通り、確実にVRAMへの自動割当が行われるようにforce-host-alloction-APUもgit cloneしておきます。

(sd_webui_amdgpu_311) ubuntu $ ls -l
README.md forcegttalloc.c test
(sd_webui_amdgpu_311) ubuntu $ hipcc forcegttalloc.c -o libforcegttalloc.so -shared -fPIC
(sd_webui_amdgpu_311) ubuntu $ ls -l
README.md forcegttalloc.c libforcegttalloc.so test

 ここで、まず、共有ライブラリlibforcegttalloc.soを生成します。

 その名も「強制GTTメモリ割り当てライブラリ」といったものになっています。

 尚、環境が整っていれば、hipccコマンドもあるかと思います。

 ここで作ったlibforcegttalloc.soと/usr/lib64あたりにあるはずの(なければ後述のようにソフトリンクする、ビルドする等した)libMIOpen.so.1.0を環境変数LD_PRELOADに設定するとVRAM自動割当されないAMD Radeon iGPUなマシンでも必要に応じてVRAMに上限までの範囲内でメモリ割当してくれるようになります。

 また、このツールでは、test/以下にプロンプト、出力ファイル名、デバイスの順に3つの引数を渡すことでStable Diffusionによる生成画像を出力してくれるpythonスクリプトdiffusion.pyも同梱されているので予行演習として試しておくと安心です。

 尚、このとき、LD_PRELOADとHSA_OVERRIDE_GFX_VERSION(後者はRyzen 7 8845HSでは、=11.0.0等)設定を前置します。

(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/libMIOpen.so.1.0.60400 /usr/lib64/libMIOpen.so.1.0
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/libhiprtc.so.6.4.60400 /usr/lib64/libhiprtc.so.6
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/libamd_comgr.so.3.0.60400 /usr/lib64/libamd_comgr.so.3
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/lirocm-core.so.1.0.60400 /usr/lib64/librocm-core.so.1
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/librocm-core.so.1.0.60400 /usr/lib64/librocm-core.so.1
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/libamd_comgr.so.3.0.60400 /usr/lib64/libamd_comgr.so.3
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/librocm-core.so.1.0.60400 /usr/lib64/librocm-core.so.1
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/librocblas.so.4.4.60400 /usr/lib64/librocblas.so.4
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/libhipblaslt.so.0.12.60400 /usr/lib64/libhipblaslt.so.0
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/libroctx64.so.4.1.60400 /usr/lib64/libroctx64.so.4
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/libamdhip64.so.6.4.60400 /usr/lib64/libamdhip64.so.6
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/librocprofiler-resister.so.0.4.0 /usr/lib64/librocprofiler-resister.so.0
(sd_webui_amdgpu_311) ubuntu $ sudo ln -s /opt/rocm-6.4.0/lib/librocprofiler-register.so.0.4.0 /usr/lib64/librocprofiler-register.so.0
(sd_webui_amdgpu_311) ubuntu $

 ここで、自身の場合、複数のライブラリが不足しており、エラーの度に順次、探すとROCmがインストールされた/opt/rocm6.4/libにはあったので、そこから結果13件ほどソフトリンクを張る必要がありました。

 LD_LIBRARY_PATHに/opt/rocm6.4/libを設定した方が早かったか...。

(sd_webui_amdgpu_311) ubuntu $ pwd
path/to/force-host-alloction-APU
(sd_webui_amdgpu_311) ubuntu $ pip install accelerate
(sd_webui_amdgpu_311) ubuntu $ ls
README.md forcegttalloc.c libforcegttalloc.so test
(sd_webui_amdgpu_311) ubuntu $ LD_PRELOAD=/home/ryo/app/stable-diffusion-mine/stable-diffusion-webui-amdgpu/force-host-alloction-APU/libforcegttalloc.so:/usr/lib64/libMIOpen.so.1.0 export HSA_OVERRIDE_GFX_VERSION=11.0.0 python test/diffusion.py 'astronaut sitting on the moon' output.jpg hip
(sd_webui_amdgpu_311) ubuntu $ ls
README.md forcegttalloc.c libforcegttalloc.so output.jpg test
(sd_webui_amdgpu_311) ubuntu $

 環境が整ったところでtest/diffusion.pyを実行するとaccelerateがないよ警告だかエラー(大勢に影響ないワーニングということなのか?出力を遡らないとその存在に気づけない)が出るかも、その場合は、pip installしてdiffusion.pyを実行。

 無事完了すれば、カレントディレクトリにoutput.jpgが作成されており、デフォルトのプロンプトで、それが、宇宙飛行士の画像なら、正常にStable Diffusionで生成された画像ということで正常です。

 自身はここで、はしゃいで、もう1つ違うプロンプトで違う画像も出力してみたって噂も。

(sd_webui_amdgpu_311) ubuntu $ pwd
path/to/stable-diffusion-webui-amdgpu
(sd_webui_amdgpu_311) ubuntu $ pip install -U pip wheel
(sd_webui_amdgpu_311) ubuntu $ pip install -r requirements.txt
(sd_webui_amdgpu_311) ubuntu $ pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm6.4
(sd_webui_amdgpu_311) ubuntu $ pip install -r requirements.txt
(sd_webui_amdgpu_311) ubuntu $

 更にstable-diffusion-webui-amdgpuを起動する前準備として必須パッケージのインストール。

 前述の通り、URLのrocmバージョンも大事、各所と合わせる必要あり。

 requirements.txtを2度インストールしているのは、このファイルの動きに疎い自身が、こうするとうまく調整してくれるものと思い込んでいるからですが、あってますかね?

 情報によっては、最初の1度だけpip install -r requirements.txtしたあと、pip uninstall torchしてURL指定の上、torch/torchvision/torch audioをインストールしていることも。(こっちが正解?)

 ちなみに自身は、何度かやってみた中、以前はできていたのですが、最終的にtorchaudioを入れるとエラーになったので単にこれを外して凌いでしまいましたが、なんでだったんでしょ?

 名前からしてText to Speechとかでは必要ですよねtorchaudio、そうならゆくゆくは使ってみたいんですけどね、といってもSD Web UIには見当たらない気がしますが...。

(sd_webui_amdgpu_311) ubuntu $ cd path/to/stable-diffusion-webui-amdgpu
(sd_webui_amdgpu_311) ubuntu $ LD_PRELOAD=/home/ryo/app/stable-diffusion-mine/stable-diffusion-webui-amdgpu/force-host-alloction-APU/libforcegttalloc.so:/usr/lib64/libMIOpen.so.1.0 COMMANDLINE_ARGS="--use-cpu all --no-half --no-half-vae --skip-torch-cuda-test" export HSA_OVERRIDE_GFX_VERSION=11.0.0 ./webui.sh
...

 というわけでstable-diffusion-webui-amdgpuに移動していよいよStable Diffusion Web UIを起動します。

 尚、LD_PRELOAD、COMMANDLINE_ARGS、HSA_OVERRIDE_GFX_VERSIONも、webui_user.shなどで別途設定済みであれば、コマンドライン上では不要、[./webui.sh]だけでいけます。

 (Linuxで)TCMallocを使う場合、google-perftools(か、tcmallocだったか、librust-tcmalloc-*的なものはあって内1つはインストール済みも指摘されたものはubuntuリポジトリにはなかった、もう1つの候補の名称、失念)をapt installする必要があるかと。

 あと、次のような場合、webui.shの編集が必要になります。

 結果、ブラウザや既に開いていればブラウザタブにStable DiffusionのWeb UI(127.0.0.1:7860/localhost:7860)が自動的に表示されます。

 尚、自身は、後でstable-diffusion-webui-amdgpu-forge(Forge版)に気づき、追加インストール、requirements.txtはなく、requirements_version.txtのみ、webui-user.sh、webui.shともにForgeじゃない方のオリジナルと同一だったので、じゃない方から編集済みのwebui-user.sh、webui.shをForge版にコピー。

 これでwebui.shは起動したものの、なぜか、--use-cpu allフラグ・オプションを付けても尚、txt2imgのgenerateボタンを押してもすぐに戻ってしまう現象が...というわけでForgeでの画像生成は、今のところできていません。

 というか、Stable Diffusion Web UIを入れてみようと思ってから、実際に使えるまでの道のり、結構、壁もあって時間がかかりましたが、そういう話ネットには、ほとんどなく、あっさりできました的な情報ばかりな気がするのは、なぜ?

Stable Diffusion WebUIでText2Image

CStable Diffusion Web UI

 Stable Diffusion Web UI(127.0.0.1:7860/localhost:7860 可視部のスクショ)。

CStable Diffusion Web UI画面全体

 起動直後のStable Diffusion Web UI(127.0.0.1:7860/localhost:7860 全画面スクショ)でデフォルトのcheckpointとtxt2imgタブが選択された状態で表示されます。

 画面左上が、そのcheckpointと言われるモデル選択メニュー、デフォルトでは[v1-5-pruned-emaonly.safetensors[6ce0161689]]となっており、要約してみると「SD1.5をスリム化及び品質と安定性を確保したHugging Face社開発の(従前Pytorchで使われていた.pthや.ptといったpickleフォーマット)より安全性が高いモデル」といった感じかと。

 次の段は、機能別とも言えるタブで左からテキストから画像生成[txt2img]、画像から画像生成[img2img]、アップスケール他[Extras]、生成画像のパラメータ確認と他機能への送信[PNG Info]、複数のチェックポイントを統合、新たなモデルを生成する[Checkpoint Merger]、モデルを訓練する[Train]、設定画面[Settings]、拡張機能の管理[Extensions]。

 この内、txt2imgのみ構成に触れると、テキスト入力欄として[(ポジティブ)プロンプト]/[ネガティブプロンプト]、右に[Generate|生成]ボタン、その下に左から[パラメータ読み込み]、[パラメータ削除]、[パラメータ適用]ボタン、下が[保存済みパラメータ選択]メニュー、その右が[編集]ボタン。

 下に行くといくつかタブが並んでますが、[Generation]にだけ触れると左ペインが設定、右ペインが生成画像表示エリアと各種ボタン、[サンプリングメソッド|サンプリング手法]選択(生成画像の雰囲気が変化)、[スケジュールタイプ]メニュー、主に数値とスライダなどで設定できる[サンプリングステップ数](ノイズ除去行程数/高いほど精度向上も時間はかかる)、[Hires.fix]と[Rfiner]開閉ボタン、[生成画像サイズ]、[バッチカウント|生成画像数]、[バッチサイズ](データセット分割時の1つ分のサイズ)、[CFGスケール](プロンプト忠実度の程度/高過ぎれば生成画像精度が落ちるケースも)、[シード値](乱数で使用)、[スクリプト]。

油絵風を指定した生成画像 on SD1.5ベースのStable Diffusion

 前述の通り、SD1.5は、そのリアルさが人気の理由の1つですが、奇抜や奇想天外、想像を・人知を超える画像というわけではなく、より現実世界に近いといった意味のリアルさであり、もちろん前掲のネコのように写真並み以上の画像も生成してくれますが、pencilやoil painting、water paintingなどのフレーズも入れれば、鉛筆画、油絵風、水彩画風など画風を変えることもできます。

 ただ、この時、「油絵風」にしたいのが、生成する画像全体なのか、リアルな部屋の壁に掛かっている絵を指すのかなど表現として受け取り方という点だけからしても揺らぎがあるので、バッチカウントは、最低でも3や4(3パターンか4パターン)にしないと期待した画像を取得するのは難しくなることがあります。

 このスクショは、油絵風(oil painting)をポジティブプロンプトの1つとして指定、更にバッチカウント4として生成される画像は4枚、これとは別にこれらが合成された画像も生成され、その合成画像1枚を選択した様子ですが、4枚中、油絵風は1枚、他の3枚中1枚は、モニタ上の油絵、残る2枚は壁掛けの額に入った油絵といった結果となっています。

 バッチカウント1だと、むしろ、写真のようにしか見えず、どこか一部でも油絵になっているのかどうかも判別できないほど微妙だったため、バッチサイズを増やして試すことにした次第。

 仮にバッチカウント1でもCFGスケールの値によっては、油絵風になったかもしれませんが。

 また、ポジティブプロンプトのベースとして[masterpiece, best quality, high quality, ultra detailed]、(人が対象なら)ネガティブプロンプトのベースとして[worst quality, low quality, bad anatomy, bad hands]を入れると精度が高くなる傾向があるようです。

 更に描いて欲しい内容に応じて特にネガティブプロンプトのベース、それ自体を増やす必要が出てくるケースもあるでしょう。

 あと、生成画像の縦横サイズ指定ですが、「モデルが学習したサイズ」か、整数倍した数ならうまく生成できる一方、1/2とかだと期待した通りにならないので注意。

 軽量で早くできるだろうと思い込んで、あれ?サイズ以外、何も設定変えてないのに急に劣化した...なにこれ、と思ったら、サイズを何れも半分(512x512を256x256)にしたことが原因で、気づくまでに、だいぶ時間を浪費しました...。

備考

 ただ、実は、今回、Web UIの起動においてCOMMANDLINE_ARGSに[--use-cpu all]を指定しています。

 これを指定しなくても起動自体はできるのですが、txt2imgの[Generate]ボタンが効かない(クリックはできるも一瞬でボタンが戻ってしまう)ため。

 どこかでStable Diffusion Web UIにおいてiGPUの場合は、--use-cpuフラグを使うみたいな記述を見かけたことがあったような、なかったような...記憶は曖昧。

 とは言え、[--use-cpu all]指定していても実際のところ、iGPUが機能している様子は、CoreCtrl、nvtop、rocm-smiでも画像生成中のみならず、Stable Diffusionの起動時も、確認できている状況。

 今回使用しているAMD Ryzen 7 8845HS/Hawk PointのiGPUが機能しているのは、Stable Diffusion Web UIに限らず、INT8は論外っぽく、Ryzen 7 8845HSでは厳しそうなComfyでも...、CPUオンリー版でしか使えなかったDocker版LocalAIでも然り。

 一方でiGPUで処理できれば、CPUより高速なはず?512x512、ステップ数20、バッチカウント1、seed -1で1分前後はかかるというのは、CPUで処理されてる?iGPUならこんなもの?というのが判断出来かねている状況。

 と言ってもamd / RyzenAI-SW Tutorialを一通りやってみると必ずしもCPUよりiGPUが高速とは限らず、むしろCPUの方が高速な方が多いくらいかも?ただ、CPUで処理する分をiGPU(とかNPU)で処理すれば、その分、CPU負荷が低減して並行・並列処理ができるのがメリット?ということなら速さは問題ではないのでしょうが。

 SDで[--use-cpu all]を指定しないと正常機能しないけど、iGPUで処理できてるってことでよい?別途、iGPU用フラグがあるわけじゃないよね?

 この点さえスッキリすれば、仮に生成時間が今と同程度だったとしてもLinuxでの生成画像AIは、stable-diffusion-webui-amdgpu一択で十分と思えるのですが。

 尤も今はWindows版しかないAmuseは、AMD自体ではないものの、Ryzen AI(NPU)に最適化する為に作られたAMDパートナー製なので何れLinux版もリリースされるだろうという期待もありますが。

2025/05/08
Stability Matrix/SD.Next生成画像例 on Linux AMD Ryzen 7 8845HS PC

 そのあたりを確認してみたくて、--use-rocmフラグがあるというSD.Nextを使うべく、Stability Matrix経由でインストール、既に単独で入れていたものと共用しようとモデルやLoraはソフトリンクを張り、(Loraはなぜか効かない模様も)使用して起動。

 ちなみにインストールが簡単というStability Matrixの謳い文句の1つとは裏腹に直感的とは言い難い使い勝手で起動して普通に使えるようにするまで結構時間がかかりました...。

 SD.Nextは、SD.Nextで実行中の状態がわかりづらい...SD.Next下部やStability Matrix画面もステータスとなる文字列自体の更新も時間がかかると、ホントに動いているのか?と...。

 さておき、SD.Nextで専用項目のある[--use-rocm]をONにしつつも、専用項目はないので[Extra Launch Argments]経由ですが、やはり、[--use-cpu all]フラグを付けないと生成(Generate)ボタンが効かなくなる事象が発生するのは、SD Web UI amdgpu同様。

 一方、a cute catというプロンプトはじめ画像中央下段にあるように設定してみると(VRAM最大16GB、デフォルトは512MBな使用マシンにおいて)[GPU 7140 MB 46%]という表記が、同じ条件でもう1度やっても、おかしいのか、たまたまなのか、必然なのか同じ数値。

 GPU使用量の表示があるということは、さすが、--use-rocmオプションがあるだけのことはあり、SD.Nextでは、iGPUだけで、もしくは、CPUとiGPUを併用して処理してくれている...と期待したい一方、

 なぜか、SSD上にある同じモデルを使ったプロンプトなど設定もほぼほぼ同一な素のSD Web UI amdgpuよりもStability Matrix/SD.Nextの方が、2〜3倍時間がかかる感じ(画像情報の設定だと前者が1分ちょっとで済むところが、後者だと3〜4分ほど)。

 これってSD.Nextの生成画像情報には、GPUの表記とともに生々しい数値やパーセンテージはありつつも、実はiGPUを使えていないのか...。

 とは言え、何れにせよ、Stable Diffusion系は、GPU|iGPUを使う場合でも、いやAMDに限っては?--cpu allフラグ付きで--use-rocmオプションのないstable-diffusion-webui(-amdgpu)、どっちのオプションも取ることができるSD.Nextも、実際には、GPU|iGPU「を」、もしくは、GPU|iGPU「も」使っている、いや、後者は使おうとはしているが使えていない?ってこと?...って、結局、どういうこと...?

 というわけで同じ条件でもう1度、今度はCoreCtrlを眺めつつ...と思ったら、CPUやGPUで干渉しているのか、稀にブラックスクリーンに成った直後に復帰したことが1度だけあったものの、再ログイン後、amdgpuがactiveになったままなのは救いも、それ以外は何度やっても強制再ログイン状態に...、軽量なCLIならばとnvtopを眺めつつなら実行でき、やはり、GPUも使っていることになっている。

 それと気づいてみれば、nvtopだとforce-host-alloction-APUの恩恵を受けられないのか?右上段の[MEM]は、512MBがMax、一方、GPUのステータスバーやグラフ凡例の[GPU0 %]も50%やら60%やらそれ以上も示す感じ...。

 ただ、うろ覚えもforce-host-alloction-APUは、デフォルトで割当のVRAMが不足する場合、CPUから融通してもらうとか何とか...あったような...とするとG+CであってもVRAMであることに違いはないから、そこに齟齬はないのか。

 これは、朗報と言うべきか、迷宮に放り込まれたというべきか...。

ホーム前へ次へ