カテゴリー
Raspberry Pi

僅か10分! Raspberry Pi RAM 4GB で AI 画像生成 – Stable Diffusion

AIによる画像生成には豊富な学習モデルとRAM容量が必要です。本稿では豊富なモデルに対応した Stable Diffusion を 4GB RAM の Raspberry Pi で動作させ約10分で画像生成する方法について説明します。

はじめに

本稿では、学習モデルや関連情報の豊富な Automatic 1111 の Stable Diffusion Web UI1 を 4GB RAM の Raspberry Pi で動作させる方法について説明します。

その方法はSSDドライブを仮想メモリー2のスワップ3先として使用することです。しかし、筆者はいくつもの問題に陥りました。それらを解決したので、注意点と設定例を紹介します。

前回は

前回は、RAM 8GB や 16GB モデルを使用し、約6分で画像を生成する方法について紹介しました。しかし、RAM 4GB モデルでは約6時間の生成時間が必要でした。

前回のブログ(https://bokunimo.net/blog/raspberry-pi/6065/)

今回はRAM 4GBモデル

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

Raspberry Pi 5 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」で生成しました。

左側の標準モデルだと不自然さが感じられると思います。一方の右側は現実に存在しそうな画像になりました。

Stable Diffusion 1.5 標準モデル
japaneseStyleRealistic_v20

このように、学習モデルが豊富だと、目的に合った高品質な画像生成ができます。

約10分で画像生成

Raspberry Pi 5 model B RAM 4GB モデルを用い、本稿で紹介する方法で画像を生成したときの所要時間を以下に示します。約10分で画像の生成ができました。

測定回数画像生成時間
1回目(初回)572 秒 (約 10 分)
2回目549 秒 (約 9 分)
3回目543 秒 (約 9 分)
4回目554 秒 (約 9 分)
5回目556 秒 (約 9 分)
ex01_sd_basic_4g.sh, 384×256, steps = 10, japaneseStyleRealistic_v20
SATA Bridge = ASMedia ASM235CM
Raspberry Pi RAM 4GB で約10分で生成した画像例

必要な機材

必要な機材は、以下の通りです。

  • 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アダプター
  • その他、周辺機器
Raspberry Pi 5 model B RAM 4GB

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 出力に対応しています。

Raspberry Pi 公式 ACアダプター(27W USB PD Type-C)
秋月電子通商, https://akizukidenshi.com/catalog/g/g130328/

下図のように「5.1V 5.0A」と書かれていれば大丈夫です。

5.1V×5A = 25.5W 出力に対応するRaspberry Pi 公式 ACアダプター

スワップ用にSSDを使用する

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

本稿ではスワップ用にUSB接続のSSDを使用した

Raspberry Pi 5では、より高速な PCIe 接続の NVMe SSD も利用できます。とはいえ、USB接続とPCIe 接続のどちらの場合も、相性の問題が重要となります。USB接続については後述します。PCIe 接続については、Raspberry Pi 5 専用の NVMe SSD モジュール付属キットを購入するのが良いでしょう。

USB接続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の動作が不安定になるからです。

相性問題が発生しにくい USB SATAブリッジ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)
FujitsuMB86C30AUSB 3.0
(5Gbps)

(非対応)
〇 良好
(15分)
ex01_sd_basic_4g.sh (width=384), 384×256, steps=10
※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エンクロージャーの一例です。高速動作と安定性を兼ね備えていました。

ASMedia ASM235CM, USB 3.1 Gen2. 10Gbps を搭載した SSDエンクロージャー
(UGREEN製 CM2371 80556, 付属ケーブルは Type C, 要交換)
USB認証品の中で安価なIC(ASMedia ASM235CM)

容易に選べないSATAブリッジIC

前々項に「USB接続SSDドライブの選び方」と書いておきながら、実は容易には選べません。各商品の搭載ICの型番が公開されていないからです。しかも、同じ商品であっても製造ロットによってICが異なる場合が多い実態もあります。

入手しやすいのは USB 3.0または 2.0 の格安品に多く採用されている Initio 製 INIC3619PN や INIC1618N です。SSDエンクロージャー(SSDケース)の場合、200円~400円程度です。

200円~400円で売られている USB 3.0(5Gbps)・UASP非対応の最安品

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-G22139U3-G2全般
SSK SHE-C325SHE-C325A1 / A2
UGREEN 2023120231A01※
UGREEN CM280CM280A01※
ASM235CM-BOARD-2023なし(基板単体)ASM235CM-BOARD-2023
※UGREEN製のパーツ番号Bから始まるロットはRTL9210が搭載されている
 (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分台での生成が可能です。

JMicron JMS578 を用いて UASP無効 による影響を確認した

下記は、解像度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 分)
ex01_sd_basic_4g.sh (width=384), 384×256, steps=10, SD1.5
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 分)
ex10_sd_practical.sh, 384×512, steps=24, japaneseStyleRealistic_v20
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 4 や 5 では、メモリー不足対策が必須

RAM 4GBの Raspberry Pi 向けのインストール方法を説明します。下記は手順の概要です。詳しい設定方法は、後述します。

  1. Python3.11のインストール
  2. USB接続SSDドライブの初期化
  3. RAM圧縮
    インストール = sudo apt install zram-tools
    設定 = /etc/default/zramswap に ALGO=lz4、PERCENT=75
  4. RAMスワップ機能
    設定 = /etc/dphys-swapfile に CONF_SWAPSIZE=8192、 /etc/sysctl.conf に vm.swappiness=60 (デフォルト値)を設定後、再起動
  5. Stable Diffusionのインストール
  6. 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 による自動インストール

ここからは、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 が利用できるようになります。

Stable Diffusion web UI の画面

終了するときは、Raspberry Pi のCLIで[Ctrl]+[C]を押下後、[Y][Enter]を入力します。

再度、起動する場合は「./webui.sh」を実行します。インストールが完了している場合、約30秒くらいで起動します。

画像生成用スクリプトのインストール

本稿用に作成した画像生成用のBashスクリプトのインストール方法について説明します。

本稿用に作成した画像生成用のBashスクリプト(GitHub)

下記のコマンドでダウンロードしてください(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が作成されます。下図は生成した画像の一例です。学習モデルの変更方法は、前回の記事を参照してください。

Stable Diffusion 1.5 標準モデル
japaneseStyleRealistic_v20

下図は、画像生成中に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が点灯している時だけ画像生成していると考えれば良い

本体の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にしました。

ex01_sd_basic_4g.sh (width=384), 384×256, steps=10
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 使用時の生成時間の確認結果を示します。

USB 2.0・UASP非対応の Initio 製 INIC1618N搭載 SSDエンクロージャー
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 分)
ex01_sd_basic_4g.sh (width=384), 384×256, steps=10
SATA Bridge = INITIO INIC1618N (USB 2.0)
SSD = Intel社 Solidigm™ D3-S4510 SSDSC2KB240G8
モデル = japaneseStyleRealistic_v20
Raaspberry Pi 5 RAM 4GBを用いて25分で生成した画像
(USB 2.0・UASPなし 1回目)

おまけ

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

クラウド上のAIサービス Microsoft Copilot が生成した高精細な風景画像

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

RAM 4GB の Raspberry Pi で 10分で生成した風景画像

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

Microsoft Copilotに動物を追加してもらった

注意事項

画像生成AIは、実在する写真のような画像を生成することができます。このため、利用時に社会のルールや規則を守ることはもちろんのこと、未だ規則化されていない部分への配慮も必要です。

とくに、偶発的に倫理性を損なう画像が生成される懸念や、偶発的に実在する人物に似た画像が生成される懸念、性別や容姿などに偏見や差別を含んでしまう懸念などがあります。筆者が作成したスクリプトにおいても、そういった画像が生成される場合がありますので、生成した画像の取り扱いには十分に注意してください。

また、自分自身の倫理観が社会とずれている部分や、時代とともに変わっている部分、配慮不足といったことも発生し得ます。

本稿の執筆時には、これらについて注意しながら作成しましたが、そのような点が残存する可能性がある点に、ご理解をいただけるよう、お願いいたします。もちろん、ご指摘いただければ、本稿の趣旨を損なわない範囲で修正いたします。

by bokunimo.net


注釈(筆者の独自の解釈・主観が含まれています)

  1. Automatic 1111 Stable Diffusion Web UI:画像生成AI Stable Diffusionを、誰にでも簡単に高度な画像生成ができるように拡張し、画像生成AIの普及に貢献した立役者 ↩︎
  2. 仮想メモリ―:マイクロSDカードやSSDといった記憶装置をRAMの一部として使用し、物理メモリ―よりも多くのメモリーを要する処理を可能とする古くからの仮想化技術。メモリー価格が超高価だった時代に、多くのメモリー容量を必要とするMacintoshやUNIXワークステーションで使われ始めた ↩︎
  3. スワップ:RAMの一部の情報をマイクロSDカードやSSDに退避させる仮想メモリ―の動作。RAMに戻すこともスワップだが、なぜか戻すときはあまりスワップといわない ↩︎
  4. USB PD:ACアダプタの出力電圧や供給電流を、Raspberry Pi などの供給先に合わせて制御するUSB接続方式。もしくは、かつては存在しなかったUSB接続の光ディスクPDドライブ ↩︎
  5. UASP:USBのデーター転送にSCSIと呼ばれるコマンドを使用することで、実使用時のデーター転送速度を向上する技術。SCSIは、かつてMacintoshやUNIXワークステーションのHDD、前述のPDドライブなど高価な外部記憶装置に使われていた。例えばSCSIケーブル1本を買うのに聖徳太子のお札1枚では足りなかった ↩︎

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es