目次
はじめに
本稿では、学習モデルや関連情報の豊富な Automatic 1111 の Stable Diffusion Web UI1 を 4GB RAM の Raspberry Pi で動作させる方法について説明します。
その方法はSSDドライブを仮想メモリー2のスワップ3先として使用することです。しかし、筆者はいくつもの問題に陥りました。それらを解決したので、注意点と設定例を紹介します。
前回は
前回は、RAM 8GB や 16GB モデルを使用し、約6分で画像を生成する方法について紹介しました。しかし、RAM 4GB モデルでは約6時間の生成時間が必要でした。

今回はRAM 4GBモデル
今回、本稿では、RAM 4GB モデルを使いつつ、約10分の実用的な時間で下図のような画像を生成します。

ex01_sd_basic.sh, 512×256, steps=10, japaneseStyleRealistic_v20
SATA Bridge = ASMedia ASM235CM
生成に要した時間 = 626 秒 (約 10 分)
Raspberry Pi 4 や 5 で、最も普及しているのは、RAM 4GBモデルです。すでに、お持ちの方も多いと思います。筆者も複数台の4GBモデルを保有しており、有効活用したいと考えました。
4GB モデルの課題はメモリ不足です。メモリ不足が起因して、マイクロSDカードへのスワップ(メモリ内容の転送)が発生し、極端に生成速度が低下します。また、スワップできずに物理メモリー超過(Out Of Memory)が発生することもあります。そこで、スワップ先をSSDに変更することで、高速化を図ります。
学習モデルが豊富
ここで、学習モデルが豊富であることのメリットを紹介します。学習モデルを気にしなければ、他にも手段があるからです。
下図の左は、Stable Diffusion 1.5 標準モデルを使用して生成した画像で、右側は japaneseStyleRealistic_v20 を使用した生成した画像です。どちらもプロンプト「A professional landscape photograph of European scenery」で生成しました。
左側の標準モデルだと不自然さが感じられると思います。一方の右側は現実に存在しそうな画像になりました。


このように、学習モデルが豊富だと、目的に合った高品質な画像生成ができます。
約10分で画像生成
Raspberry Pi 5 model B RAM 4GB モデルを用い、本稿で紹介する方法で画像を生成したときの所要時間を以下に示します。約10分で画像の生成ができました。
| 測定回数 | 画像生成時間 |
| 1回目(初回) | 572 秒 (約 10 分) |
| 2回目 | 549 秒 (約 9 分) |
| 3回目 | 543 秒 (約 9 分) |
| 4回目 | 554 秒 (約 9 分) |
| 5回目 | 556 秒 (約 9 分) |
SATA Bridge = ASMedia ASM235CM

必要な機材
必要な機材は、以下の通りです。
- Raspberry Pi 4 または 5 RAM 4GB モデル
(RAM 8GB以上の場合は、前回の記事を参照) - マイクロSDカード 16GB以上(高耐久品)
- USB接続の32GB以上のSSD
- Raspberry Pi 公式 ACアダプター(27W USB PD Type-C)
又は USB PD 5V出力で 20W 以上の ACアダプター - その他、周辺機器

ACアダプタ
使用するACアダプタには注意が必要です。SSDは、動作時に最大5Wを消費することがあります。このため、5V出力で 20W 以上の出力が可能な USB PD4 対応 ACアダプタを使用します。
しかし、汎用の 27W USB PD 対応 ACアダプタの5Vの最大出力は15Wです。27Wは 9V時に3A出力が可能な表示であり、5V時は3Aすなわち15Wとなります(一例)。
一方、Raspberry Pi 公式 ACアダプター 27W USB-C Power Supply US は、5.1V×5A = 25.5W 出力に対応しています。

秋月電子通商, https://akizukidenshi.com/catalog/g/g130328/
下図のように「5.1V 5.0A」と書かれていれば大丈夫です。

スワップ用にSSDを使用する
本稿では仮想メモリーのスワップ用としてSSDを使用します。スワップ容量は8GBで十分です。しかし、SSD容量としては、最低でも2倍の16GB以上を確保してください。フラッシュメモリーの書き込み回数による劣化を軽減できます。また、容量に余裕があれば、modelsフォルダをSSDに配置することで、学習モデルの読み込み時間を短縮できます。

Raspberry Pi 5では、より高速な PCIe 接続の NVMe SSD も利用できます。とはいえ、USB接続とPCIe 接続のどちらの場合も、相性の問題が重要となります。USB接続については後述します。PCIe 接続については、Raspberry Pi 5 専用の NVMe SSD モジュール付属キットを購入するのが良いでしょう。
USB接続SSDドライブの選び方
本稿の執筆にあたって、最も苦戦した部分です。

SATA Bridge = Initio INIC3619PN (USB 3.0)
SSD = Intel社 Solidigm™ D3-S4510 SSDSC2KB240G8
あえて極端に書くと、「スワップ機能の要となるのはUSB接続SSDドライブに内蔵されている USB SATA ブリッジIC」です。とくに、Raspberry Pi との相性が重要です。USB SATAブリッジICによっては、ICの動作が不安定になるからです。

Initio INIC3619PN (USB 3.0・UASP非搭載)
スワップ時の動作速度は、転送速度だけでなく1秒間の入出力最大回数IOPSが重要になります。IOPSは、UASP5(後述)と呼ばれるプロトコルに依存しています。しかし、Raspberry Pi との相性でUASPが不安定な場合は、大幅に速度が低下します。このため、UASPに対応していない製品の方が結果的に高速となることもあります。
以下は、SSDドライブの購入時の注意点です。少なくともLinux対応品であることを確認してください。
- [必須] Linuxに対応している製品であること
(Windows専用の製品も多い) - UASP対応品の場合はUASPがLinuxに対応であること
(UASP機能がWindows限定の場合がある) - USB認証品であれば安心だが、Raspberry Pi RAM 16GBモデルを購入する方がコスト的に合理的な場合が多い
SATAブリッジICの動作確認
筆者が動作確認した USB SATAブリッジICを下表に示します。
UASP 対応のおすすめ品は ASMedia ASM235CM (UASP対応・USB認証品)です。約10分で画像生成ができました。UASP非対応品であれば Initio INIC3619PN で、約14分で生成できました。
| メーカー (USB VID) | 型番 (USB PID) | 対応USB (転送速度) | UASP (Linux) | 確認結果 (生成時間) |
| ASMedia (174c) | ASM235CM (235c) | USB 3.1G2 (10Gbps) | ◎ | ◎ 問題なし (10分) |
| JMicron (152d) | JMS578 (0578) | USB 3.0 (5Gbps) | 〇 (やや不安定※1) | 〇 良好 (10分/14分) |
| Realtek (0bda) | RTL9210 (9201) | USB 3.1G2 (10Gbps) | △ (低速※2) | △ 生成可能 (30分※4) |
| Initio (13fd) | INIC3639PN (5912) | USB 3.0 (5Gbps) | × (不安定※3) | × 生成不可 (※3) |
| Initio (13fd) | INIC3619PN (3920) | USB 3.0 (5Gbps) | ー (非対応) | 〇 良好 (14分) |
| Initio (13fd) | INIC1618N (0840) | USB 2.0 (480Mbps) | ー (非対応) | △ 生成可能 (25分※5) |
| Fujitsu | MB86C30A | USB 3.0 (5Gbps) | ー (非対応) | 〇 良好 (15分) |
※1 稀にUASP転送エラー。UASP OFFで安定するが生成時間は約1.5倍(約14分)
※2 生成時間が約5倍(約50分)。実動作IOPSが低い(JMicron JMS578 との比較)
※3 連続使用5分くらいで毎回ハングアップ(5分毎にUSBを抜き差しが必要)
※4 生成時間が約3倍(約30分)かかるが動作は可能
※5 生成時間が約2.5倍(約25分)かかるが動作は安定
Raspberry Pi 5 は USB 3.1 Gen2には非対応 (最大5Gbps)
下図は、ASMedia ASM235CM を搭載した SSDエンクロージャーの一例です。高速動作と安定性を兼ね備えていました。

(UGREEN製 CM2371 80556, 付属ケーブルは Type C, 要交換)

容易に選べないSATAブリッジIC
前々項に「USB接続SSDドライブの選び方」と書いておきながら、実は容易には選べません。各商品の搭載ICの型番が公開されていないからです。しかも、同じ商品であっても製造ロットによってICが異なる場合が多い実態もあります。
入手しやすいのは USB 3.0または 2.0 の格安品に多く採用されている Initio 製 INIC3619PN や INIC1618N です。SSDエンクロージャー(SSDケース)の場合、200円~400円程度です。

UASP対応品に比べると、画像生成時間がUSB 3.0で約1.5倍、USB 2.0で2倍を要しますが、低価格かつ安定して動作します。その結果、不安定な商品よりも画像生成時間を短縮できます。
但し、販売店が「USB 3.0」と表示していても実際にはUSB 2.0 の場合があります。また、Color選択(商品の種類の選択)で、Type C 対応品や USB 3.1 Gen2 (10Gbps) 対応品、UASP対応品を選択すると、他のICになり、相性問題に陥ることがあります。
USB 3.1・UASP対応品を使いたい
USB 3.1 Gen2・UASP対応品はLinuxでは安定しない IC が搭載されている可能性が高くなります。まずは、手持ちのものや知人から借りてSATAブリッジICを確認するのが良いでしょう。
Raspberry Piに接続し、lsusbコマンドを入力すると、USBに接続されている機器の一覧が表示されます。
$ lsusb ⏎
Bus 003 Device 005: ID 174c:235c ASMedia Technology Inc. Ugreen Storage Device
(他のデバイスは表示省略)
上例の「ID 174c:235c」は、前半の VID(ベンダーID) 174c で ASMedia 社を、後半の PID(プロダクトID) 235c で型番 ASM235CM を示します。JMicron のVIDは 152d、Realtek は 0bda、Initio は 13fd です。
なお、Raspberry Pi 5 の転送速度は USB 3.0 の 5Gbps までで、SATA は 6Gbpsまでです。このため、USB 3.1 Gen2対応品の効果は、UASPによる IOPS の向上です。その UASP が不安定な IC を使用するのは、あまり合理的ではないでしょう。
SATAブリッジIC指定の検索方法
多くの場合、ブリッジICの型番が非公開となっているので、検索は容易ではありません。そこで、テキスト生成AIに検索してもらうのが良いでしょう。以下はプロンプトの一例です。{}の中は調査したい商品に合わせて変更してください。生成AIの能力差も考慮し、複数のAIで調査すると良いでしょう。
USB接続の{SSDエンクロージャー/SSDドライブ}のうちBridge ICに{ASM235CM}を搭載した商品の最新情報を、調査して列挙してください。
同じmodel名であってもP/Nが異なると搭載Bridge ICが異なる商品の場合があるので、model名とP/Nの組み合わせで調査してください。
また、それぞれの商品に対して、情報の信頼度を付与してください。
以下はSSDエンクロージャーとASM235CMを指定して検索したときの結果の一例です(執筆時点)。但し、一般的なネット通販ではパーツ番号(P/N)を特定できません。実店舗で現品を確認して購入するのが良いでしょう。
| 商品名 | 型番(Model名) | パーツ番号(P/N) |
| ORICO 2139U3-G2 | 2139U3-G2 | 全般 |
| SSK SHE-C325 | SHE-C325 | A1 / A2 |
| UGREEN 20231 | 20231 | A01※ |
| UGREEN CM280 | CM280 | A01※ |
| ASM235CM-BOARD-2023 | なし(基板単体) | ASM235CM-BOARD-2023 |
(Raspberry PiとRTL9210との相性は他のICと比べて良くない)
SATAブリッジICのUASP機能
USB 3.1 Gen2 以上のSATAブリッジICには、UASP(USB Attached SCSI Protocol)が搭載されています。UASPは、データー転送速度や入出力最大回数IOPSの向上に寄与するので、生成時間にも影響します。しかし、Linux用のドライバとの相性問題で、動作が不安定になることがあります。どちらかといえば、USB認証を受けていない製品で安定動作するICの方が珍しいです。
そこで、UASPを無効化した場合の実影響について調べてみました。
UASP無効時の生成時間は1.5倍
JMicron JMS578 を用いて UASP無効 による影響を確認してみたところ、UASP使用時に比べて、約1.5倍の生成時間を要することがわかりました。とはいえ、10分台での生成が可能です。

下記は、解像度384×256、Steps=10での生成時間の実測値です。UASP有効時の生成時間は約10分、無効時でも14分でした。
| UASP | 測定回数 | 画像生成時間 |
| 有効(ON) | 1回目(初回) | 597 秒 (約 10 分) |
| 有効(ON) | 2回目 | 515 秒 (約 9 分) |
| 有効(ON) | 3回目 | 516 秒 (約 9 分) |
| 無効(OFF) | 1回目(初回) | 813 秒 (約 14 分) |
| 無効(OFF) | 2回目 | 813 秒 (約 14 分) |
| 無効(OFF) | 3回目 | 831 秒 (約 14 分) |
SATA Bridge = JMicron Technology JMS578
下記は、解像度と生成時のStepsを増やし、人物の画像を生成するのに要した時間です。こちらもUASPを無効にすると約1.5倍の時間を要しました。
| UASP | 測定回数 | 画像生成時間 |
| 有効(ON) | 1回目(初回) | 1898 秒 (約 32 分) |
| 有効(ON) | 2回目 | 1894 秒 (約 32 分) |
| 有効(ON) | 3回目 | 1907 秒 (約 32 分) |
| 無効(OFF) | 1回目(初回) | 2772 秒 (約 46 分) |
| 無効(OFF) | 2回目 | 2636 秒 (約 44 分) |
| 無効(OFF) | 3回目 | 2728 秒 (約 45 分) |
SATA Bridge = JMicron Technology JMS578
重要:「1.5倍」は一例です。測定条件やICによって差があります。
(参考)UASPを無効にする方法
UASPが不安定な場合は、UASP機能を無効にすると改善し、結果的に画像生成速度が向上する場合があります。
UASPを無効にするには、/boot/firmware/cmdline.txt の末尾に、「usb-storage.quirks=xxxx:xxxx:u」を追加します。「xxxx:xxxx」の部分には、lsusbで表示されるUSBデバイスのVID(ベンダーID)とPID(プロダクトID)を入力します。JMicron JMS578の場合、VID = 152d、PID = 0578なので、以下のように、すでに書かれている内容に続けて(同じ行に)追加してください。
ファイル=/boot/firmware/cmdline.txt:
~すでに書かれている内容~ usb-storage.quirks=152d:0578:u
ファイルを保存後、Raspberry Pi を再起動すると、UASPが無効になります。
インストール方法(RAM不足対策版)

RAM 4GBの Raspberry Pi 向けのインストール方法を説明します。下記は手順の概要です。詳しい設定方法は、後述します。
- Python3.11のインストール
- USB接続SSDドライブの初期化
- RAM圧縮
インストール = sudo apt install zram-tools
設定 = /etc/default/zramswap に ALGO=lz4、PERCENT=75 - RAMスワップ機能
設定 = /etc/dphys-swapfile に CONF_SWAPSIZE=8192、 /etc/sysctl.conf に vm.swappiness=60 (デフォルト値)を設定後、再起動 - Stable Diffusionのインストール
- Stable Diffusionのオプション設定
設定 = webui-user.sh のCOMMANDLINE_ARGSにオプション(―lowram、―opt-sub-quad-attention)を追加
Python3.11のインストール
Python のバージョンは 3.11 を使用します。本稿では手軽な方法として Raspberry Pi OS Bookworm Lite版 (2025/11/24リリース)を使用します。
Bookworm 2025-11-24 Lite版:https://downloads.raspberrypi.com/raspios_oldstable_lite_arm64/images/raspios_oldstable_lite_arm64-2025-11-24
末尾が「img.xz」のファイルをダウンロード後、そのファイルをRaspberry Pi Imager に取り込み、マイクロSDカードを作成します。作成したマイクロSDカードは、 Raspberry Pi に差し込んでください。
USB接続SSDドライブの初期化
SSD を初期化し、Raspberry Pi OS 上にマウントする方法を説明します。すでに使用していて再初期化したくない場合は省略してください。
※初期化すると、SSD内に保存していたデータは使用できなくなります。
USB SSD を Raspberry Pi に接続すると、自動的に認識し、/dev内に/dev/sdaのようなデバイスノードが生成されます。lsコマンドで確認してください。ただし、デスクトップ版OSの場合は、/media/pi/xxxxに自動マウントされるので、「sudo umount (マウント先)」で解除してください。
$ ls /dev/sd* ⏎
/dev/sda /dev/sda1
複数のドライブが存在する場合、上記の/dev/sda以外にsdbやsdcが表示されます。duコマンドを使って、使用中のドライブを確認し、誤消去しないように注意してください。
以下は、/dev/sdaを初期化する手順です。
$ sudo fdisk /dev/sda ⏎
Welcome to fdisk (util-linux 2.38.1).
Command (m for help): delete -a ⏎ ←パーティション削除
Selected partition 1
Partition 1 has been deleted.
Command (m for help): new ⏎ ←新規パーティション作成
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): ⏎ ←プライマリ
Using default response p.
Partition number (1-4, default 1): ⏎ ←パーティション数 1
First sector (2048-250069678, default 2048): ⏎
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-250069678, default 250069678): ⏎
Do you want to remove the signature? [Y]es/[N]o: Y ⏎
The signature will be removed by a write command.
Command (m for help): write ⏎ ←パーティション変更を実行
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
$ sudo mkfs -t ext4 /dev/sda1 ⏎ ←初期化実行
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 61049388 4k blocks and 15269888 inodes
Filesystem UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
↑作成したパーティションのUUIDが表示されるのでメモしておく
Superblock backups stored on blocks:
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
$ sudo mkdir -pm775 /mnt/ssd ⏎ ←SSDマウント用ディレクトリ作成
$ sudo mount /dev/sda1 /mnt/ssd ⏎ ←SSDのマウント
$ df ⏎ ←SSDがマウントできたかどうかを確認
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 239253292 28 227027004 1% /mnt/ssd
最後にSSDの自動マウントを設定します。ファイル/etc/fstabの最下行に、以下の1行を追加してください。UUIDのxxxx~xxxxの部分には、/dev/sda1の初期化時に表示されたUUIDを入力してください。「sudo blkid」で確認することもできます。
ファイル=/etc/fstab:
UUID="xxxx~xxxx" /mnt/ssd ext4 defaults,nofail 0 0
↑初期化時に表示されたUUID
なお、SSDを起動ドライブにすることも可能ですが、USB接続SSDドライブの場合は、USBケーブルを切断すると起動できなくなるので、お勧めしません。
RAM圧縮設定
RAMを圧縮するツール「ZRAM」をインストールし、設定します。以下のコマンドを入力してください。
$ sudo apt install zram-tools ⏎
インストール後、下記のファイルに圧縮領域75%を設定します。
ファイル=/etc/default/zramswap:
ALGO=lz4
PERCENT=75
RAMスワップ機能
RAMスワップを設定します。下記のファイルに、スワップ先のSSDファイルと、スワップ容量8GB(8192MB)を設定します。
ファイル=/etc/dphys-swapfile:
CONF_SWAPFILE=/mnt/ssd/swap
CONF_SWAPSIZE=8192
スワップのしやすさを示すスワップネス設定のデフォルト値は60%です。現時点での変更は不要ですが、環境の違いなどで必要が生じた場合に調整してください。
ファイル=/etc/sysctl.conf:
vm.swappiness=60
# デフォルト値は60です。
# 値を60よりも下げてスワップしにくくすると、高速化が図れる一方で
# 物理メモリー不足で画像生成が停止しやすくなります。
# 値を上げすぎると、スワップ不要なメモリーをスワップさせてしまい
# 画像生成に時間がかかってしまいます。
# 本稿ではデフォルト値の60で動作確認済みです。
これらの設定を反映するには、Raspberry Piを再起動します。
再起動後、下記のコマンドで状態を確認してください。RAMの圧縮の領域(3G)とスワップ先(/mnt/ssd/swap)、スワップ容量(8G)が表示されるはずです。
$ swapon --show ⏎
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 3G 0B 100
/mnt/ssd/swap file 8G 0B -2
以上で、RAM 4GB の Raaspberry Pi に RAM圧縮と 8GB のスワップ領域を確保し、仮想メモリー容量12GB~16GBくらいを確保しました(RAM内のデータによって圧縮率は変化する)。
Stable Diffusionのインストール
次に、Stable Diffusion をインストールします。

下記を実行してください。
$ sudo apt update ⏎
$ sudo apt install wget git python3-pip libgl1 ⏎
$ cd ⏎
$ git clone http://github.com/AUTOMATIC1111/stable-diffusion-webui ⏎
Stable Diffusionのオプション設定
インストールした Stable Diffusion の起動オプションを設定します。下記のファイルをエディタで開き、COMMANDLINE_ARGS を定義してください。
ファイル=~/stable-diffusion-webui/webui-user.sh:
export COMMANDLINE_ARGS="--skip-torch-cuda-test --no-half --lowram --opt-sub-quad-attention --listen --api"
―listenは、外部のPCから Stable Diffusion の Web UI にアクセスするための設定です。Raspberry Pi 上のコマンド操作のみで使用する場合は、―listenを―nowebuiに変更してください。メモリーを節約できます。
※オプションに付与する―はマイナス「-」が2つです。本稿では、Word Pressの制約の都合で全角の「―」で代用しています。
SSD内に学習モデルを保存したい場合は、~/stable-diffusion-webui/models のフォルダをSSDに移動し、元の位置にシンボリックリンクを設定してください。学習モデルの読み込み速度が飛躍的に向上します。
$ sudo mv ~/stable-diffusion-webui/models /mnt/ssd/ ⏎
$ ln -s /mnt/ssd/models ~/stable-diffusion-webui/models ⏎
画像生成モジュールの自動インストール

ここからは、AUTOMATIC1111 による自動インストールです。全てのインストールを行うのに数時間を要します。
下記のBashスクリプトを実行してください。
$ cd ~/stable-diffusion-webui ⏎
$ ./webui.sh ⏎
このwebui.shは、設定ファイルの webui-user.sh を実行後、Pythonの仮想環境を生成し、仮想環境上で launch.py を実行します。 launch.py は、必要なソフトウェアのダウンロードとインストールを自動的に行います。最も時間がかかるのは、約5GBの標準モデルSD 1.5のダウンロードです。
ダウンロードが終わると、下記のメッセージが表示されます。ここで、httpの末尾のポート番号7860を確認してください。7861等になることもあります。
Running on local URL: http://0.0.0.0:7860
PCのインターネット・ブラウザで「http://(IPアドレス):7860/」にアクセスすると、下図のような画面が表示され、Stable Diffusion web UI が利用できるようになります。

終了するときは、Raspberry Pi のCLIで[Ctrl]+[C]を押下後、[Y][Enter]を入力します。
再度、起動する場合は「./webui.sh」を実行します。インストールが完了している場合、約30秒くらいで起動します。
画像生成用スクリプトのインストール
本稿用に作成した画像生成用のBashスクリプトのインストール方法について説明します。

下記のコマンドでダウンロードしてください(jqは、JSONから画像を抽出するためのモジュール)。
$ cd ⏎
$ git clone https://bokunimo.net/git/bash/ ⏎
$ sudo apt install jq ⏎
RAM 4GBモデルで画像生成
Stable Diffusion web UI が起動していない場合は、下記のコマンドで起動してください。
$ cd ~/stable-diffusion-webui ⏎
$ ./webui.sh & ⏎
画像生成を開始するには、起動が完了してから(Running on local URL: http…の表示)
##DBが損傷した・要復旧##
ます。
warnings.warn(
⏎
$ cd ~/bash/practical/stable_diffusion/ ⏎
$ ./ex01_sd_basic_4g.sh ⏎
./ex01_sd_basic_4g.sh
Stable Diffusion API: 画像生成中... 16:10:56
Applying attention optimization: sub-quadratic... done.
Model loaded in 23.0s (load weights from disk: 1.6s, create model: 1.1s, apply weights to model: 8.1s, apply float(): 9.4s, apply dtype to VAE: 0.1s, hijack: 0.1s, load textual inversion embeddings: 0.3s, calculate empty prompt: 2.2s).
…
Total progress: 100%| 10/10 [08:32<00:00, 51.27s/it]
100 233k 100 233k 0 261 416 0 0:09:34 0:09:34 --:--:-- 64109
終了しました 所要時間 578 秒 (約 10 分)
画像生成が完了したら、同じフォルダ内にex01_sd_basic.pngが作成されます。下図は生成した画像の一例です。学習モデルの変更方法は、前回の記事を参照してください。


下図は、画像生成中にRAMやスワップの状況を確認したときの結果例です。11GBのメモリーの4.5~4.6GBで動作し、6.3GBの余裕があることが分かります。
$ grep ^CONF_ /etc/dphys-swapfile
CONF_SWAPFILE=/mnt/ssd/swap
CONF_SWAPSIZE=8192
$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 3G 2.4G 100
/mnt/ssd/swap file 8G 2.1G -2
$ cat /proc/sys/vm/swappiness
60
$ free
total used free shared buff/cache available
Mem: 4147072 3739184 396784 16 71136 407888
Swap: 11498880 4849840 6649040
動作の様子はLEDで確認する
4GB RAMモデルでの画像生成中は、負荷が高まりコマンドの実行にも時間がかかるようになります。コマンドを受け付けない場合は、LEDの点滅具合で負荷を確認します。

本体のLEDが消灯しっぱなしの場合や、消灯時間の割合が点灯よりも長い場合は、画像生成が進んでいないことを示しています。解像度を下げてスワップを低減してください。
SSDのLEDが点滅していない場合は、スワップ先がSSDではなく、マイクロSDカードとなっています。スワップ設定を見直してください。
Raspberry Pi 5 4GB RAM モデルでの実行結果
RAM 4GB モデルでも、一定のレベルの画像生成が可能ですが、物理RAM容量を上回るメモリーを必要とします。SSDを仮想メモリーとして使用するものの、SSDへのスワップが間に合わなくなると、物理メモリーの容量を超過し、Out of Memory が発生します。
とくに、相性などでアクセス速度が低下した状態のSATAブリッジICを用いている際に、画像生成後の仕上げ処理の段階で Out of Memory が発生することがあります。
解像度を384×256に下げる
SATAブリッジICが十分に高速であれば、解像度を下げなくても問題ありません。生成速度も、ほとんど変わりません。しかし、不安定なSATAブリッジICの場合では、動作を安定化することができます。
下図は、RAM容量 4GB のモデルでの実行結果の一例です。解像度は384×256にしました。



SATA Bridge = INITIO INIC1618N (USB 2.0)
SSD = Intel社 Solidigm™ D3-S4510 SSDSC2KB240G8
モデル = japaneseStyleRealistic_v20
USB2.0・UASP非対応でも動作する
200円程度のSSDエンクロージャーで運悪く USB2.0 品だったとしても、相性問題が発生する製品よりも高速です。
以下に、USB 2.0(480Mbps)・UASP非対応の Initio 製 INIC1618N 使用時の生成時間の確認結果を示します。

SSD = Intel社 Solidigm™ D3-S4510 SSDSC2KB240G8
下記は USB 2.0 接続の SSD を使用した場合に生成に要した時間の一例です。
| 生成回数 | 生成時間 |
| USB 2.0・UASPなし 1回目 | 1478 秒 (約 25 分) |
| USB 2.0・UASPなし 2回目 | 1478 秒 (約 25 分) |
| USB 2.0・UASPなし 3回目 | 1493 秒 (約 25 分) |
| USB 2.0・UASPなし 4回目 | 1507 秒 (約 25 分) |
SATA Bridge = INITIO INIC1618N (USB 2.0)
SSD = Intel社 Solidigm™ D3-S4510 SSDSC2KB240G8
モデル = japaneseStyleRealistic_v20

(USB 2.0・UASPなし 1回目)
おまけ
Raspberry Pi + Stable Diffusion の生成画像を、クラウド上のAIサービス Microsoft Copilot を使って高精細化してみました。山肌や樹木、建物のリアリティを改善することが出来ました。

下図は元の画像です。差があるのは当然として、「この程度しか変わらない」という結果にも驚いてください。

下図は、Microsoft Copilot 側で動物を足してみました。

注意事項
画像生成AIは、実在する写真のような画像を生成することができます。このため、利用時に社会のルールや規則を守ることはもちろんのこと、未だ規則化されていない部分への配慮も必要です。
とくに、偶発的に倫理性を損なう画像が生成される懸念や、偶発的に実在する人物に似た画像が生成される懸念、性別や容姿などに偏見や差別を含んでしまう懸念などがあります。筆者が作成したスクリプトにおいても、そういった画像が生成される場合がありますので、生成した画像の取り扱いには十分に注意してください。
また、自分自身の倫理観が社会とずれている部分や、時代とともに変わっている部分、配慮不足といったことも発生し得ます。
本稿の執筆時には、これらについて注意しながら作成しましたが、そのような点が残存する可能性がある点に、ご理解をいただけるよう、お願いいたします。もちろん、ご指摘いただければ、本稿の趣旨を損なわない範囲で修正いたします。
by bokunimo.net
注釈(筆者の独自の解釈・主観が含まれています)
- Automatic 1111 Stable Diffusion Web UI:画像生成AI Stable Diffusionを、誰にでも簡単に高度な画像生成ができるように拡張し、画像生成AIの普及に貢献した立役者 ↩︎
- 仮想メモリ―:マイクロSDカードやSSDといった記憶装置をRAMの一部として使用し、物理メモリ―よりも多くのメモリーを要する処理を可能とする古くからの仮想化技術。メモリー価格が超高価だった時代に、多くのメモリー容量を必要とするMacintoshやUNIXワークステーションで使われ始めた ↩︎
- スワップ:RAMの一部の情報をマイクロSDカードやSSDに退避させる仮想メモリ―の動作。RAMに戻すこともスワップだが、なぜか戻すときはあまりスワップといわない ↩︎
- USB PD:ACアダプタの出力電圧や供給電流を、Raspberry Pi などの供給先に合わせて制御するUSB接続方式。もしくは、かつては存在しなかったUSB接続の光ディスクPDドライブ ↩︎
- UASP:USBのデーター転送にSCSIと呼ばれるコマンドを使用することで、実使用時のデーター転送速度を向上する技術。SCSIは、かつてMacintoshやUNIXワークステーションのHDD、前述のPDドライブなど高価な外部記憶装置に使われていた。例えばSCSIケーブル1本を買うのに聖徳太子のお札1枚では足りなかった ↩︎

「僅か10分! Raspberry Pi RAM 4GB で AI 画像生成 – Stable Diffusion」への1件の返信
[…] 4GB RAM の Raspberry Pi + Stable Diffusion で 10分! AI 画像生成 […]