RaspBerryPi4 4GBモデルの代わりに、Devterm A06でStableDiffusion FastSD CPU を実行してみる

FastSD CPU はラズベリーパイでも実行可能らしいが、

Pi4の4GBRAMとスワップ領域8GBが必要との事なので、DevtermA06の4GBRAMでも実行可能と判断してやってみる。

github.com

 

ncos1.hatenablog.com

今回はhome配下にSDフォルダを作成し、端末を開く
gitから取得コマンド
git clone https://github.com/rupeshs/fastsdcpu.git

ディレクトリ移動

cd fastsdcpu

パーミッション変更
chmod +x install.sh

インストール実行
./install.sh

エラー pythonが入ってないとのメッセージ、メッセージ通りにコマンド
sudo apt install python3.10-venv
再度
./install.sh

Preparing metadata (Pyproject.toml) ... ¥  でかなり時間がかかる

と思ったが、ストールしていた。

再起動して実行後も、固定でストールが発生する模様。

swap領域が不足しているからと予想。(Pi4の4GBRAMとスワップ領域8GBだが以前確認したら2GB程度だったと記憶していた)

swap領域の確認
free -h
2GBで、デバイス名が /dev/zram0  だった。

zram 増やす や zram 容量変更 で検索。

いろいろ情報はあったが、イマイチうまくいかない、情報をバラバラに選択して下記手順で容量拡張に成功した。


設定変更ツールをインストール
sudo apt install zram-config

設定ファイル編集
sudo nano /usr/bin/init-zram-swapping

変更内容

mem=$*1



mem=$*2

2024/03/08追記内容に基づき修正

mem=$*3
に変更し再起動

確認

free -h

 

インストール再実行
./install.sh

約1時間後ストールしたので、増やしてみた。

mem=$(((totalmem / 2 / * 10240))

NG、ストールするまでの時間は伸びた?

GUI無しでwebUIのみ使うインストールに変更(qtの方が速度が速いはずなので、qtにしたかったがインストールが失敗するので暫定処置。)

GUI(Qt無し)版インストール

./install.sh --disable-gui

実行

./start-webui.sh

エラー メッセージに従い下記実施

sudo apt install gcc pyhton3-dev

gccはインストール済みだったが、関連パッケージが入ってなかった?

実行
./start-webui.sh

ラズベリーパイでなくても、armCPU環境でメモリ4GB有るなら実行可能と思われる。

プロンプト

A cinematic shot of a baby racoon wearing an intricate italian priest robe

他の設定は無変更で実行

モデルデータなどダウンロード開始、SDカードなので時間がかかるので暫く放置。

ダウンロードサイズは5GBほどだが、SDカードが遅いのかダウンロードがなかなか進まない。


2024/03/05 追記

途中で止まる、エラーメッセージからpytorchが古いためと判断。

pytorch.org

linux pip cpu でのダウンロードコマンド確認。

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

実施したがエラー、pip3をインストール
sudo apt install pip3
エラーするので、pipを再インストールしてみたら成功。
sudo apt install pip 

再起動して、実行。

失敗、完成せずにkillされてしまう。(・・?

pipをアップグレードしてなかったので、アップグレード実施

pip3 install --upgrade pip

qt込み版をインストールしてみる。

./install.sh

ストールはしなかったが、途中でkillされて止まった。

sudo apt update

sudo apt upgrade

実施、保留となっている2つ分は

sudo apt install ”保留パッケージ名”

でアップデート後GUI版インストールでストール再発、改善されていない模様。

webUI専用版を再インストール

./install.sh --disable-gui

変わらず、途中でkillされる。

swapを増やしてみる

mem=$*4

NG swapサイズが大きくなるタイミングで発生する、SDカードが遅いから?

killされたときのメッセージ

./start-web-ui.sh: line 25: 9076 Killed    $PYTHON_COMMAND src/app.py -w

./start-web-ui.shの25行目は最終行で、内容は” $PYTHON_COMMAND src/app.py -”なので最終のアウトプット処理で時間がかかりすぎてkillされている???

ubuntu Killed  で検索すると

StableDifuusionでおそらくメモリ不足でKilledされたのでは?との情報があったswapが処理中に増加しているので設定は出来ていると思われるがSDカードの性能の問題であればとりあえずココまで。

設定ファイル init-zram-swapping で検索したら

zramデバイスはコア毎に割り当てられるとの情報があった。

zram追加 で検索

zram 追加手順

確認

ls /dev/zram*

結果

/dev/zram0

追加

sudo cat /sys/class/zram-control/hot_add

1

確認

 ls /dev/zram*

/dev/zram0  /dev/zram1

zram1が出来ている事が確認できればOK.

サイズ指定

cat /sys/block/zram1/disksize
0

sudoでははじかれたので、

sudo -s

 echo 512M > /sys/block/zram1/disksize

# cat /sys/block/zram1/disksize
536870912

 

削除手順

確認

ls -l /dev/zra*
brw-rw---- ********* /dev/zram0
brw-rw---- ********* /dev/zram1

削除

echo 1 > /sys/class/zram-control/hot_remove

確認

 ls -l /dev/zra*
brw-rw---- 1 root disk 251, 0 12月  5 23:47 /dev/zram0

 

再起動するとzram1は消えるので残す手順を調べ中。

暫定処置として256×256で実施したら成功、やはりswapメモリ設定を工夫すれば可能なはずだがギアボックスでMAXスピード設定で348secでsdカードへの負担を考えると実用性は限りなく低いのでここで一旦終了。

ピクセル数少ない割にはそこそこ描けてる。(;゚Д゚)

2024/03/08 追記

zramの解釈が間違っていたみたいなので修正。

zram core stream で検索した結果。

redditから、CPU コアと同じ数の圧縮ストリームが適切らしいとの情報があった。

https://www.reddit.com/r/linuxadmin/comments/d39rn8/zram_whats_a_compression_stream/

 

init-zram-swappingを変更

sudo nano /usr/bin/init-zram-swapping

内容

mem=$*5

DevtermA06は最大6コアなので6

mem=$*6

トータル12GBになると思ったが、1.2GBになる(・・?

mem=$*7

は、3.8Gなので、

mem=$*8

にしてみる

トータル1.9Gになる(・・?

mem=$*9

にすると12GBになったので、実行するもkilledにて終了。( ノД`)シクシク…

mem=$*10

メモリサイズ変更してもSDカードの空き容量に変化が無い事が判明、swap領域が足らずメモリ不足でkilledされていたと思われる。

指定して再起動・free -hコマンドで確認して容量が確保されたと思っていたが、違うみたいなので要調査。

Arc Linux WikiによるとRAMディスク上に圧縮するとの事なのでそもそも従来のswapとは別物と考えた方が良い?圧縮しても物理メモリを超えたらswapできずにkilledされる?

wiki.archlinux.jp

なので、swapファイルを作成

sudo fallocate -l 8G /swapfile

パーミッション変更

sudo chmod 600 /swapfile

作成したファイルをswapファイルに指定

sudo mkswap /swapfile

マウント設定ファイルを編集

sudo nano /etc/fstab

末尾に下記内容を追記

/swapfile none swap defaults 0 0

再起動

確認

free -h

作成した分swap領域が増えている。

FastSD CPU 実行したら、

1回目 killedされないが画像は表示されずerror表示となる。

暫く待ってみる、topで確認動作は継続中と思われるがとりあえずもう一度実行。

2回目 できた!完成約4000sが2回表示されたので、error後も待っていれば表示されてたかも。

 

zramの無効化した方が速いかもなので確認。

約2000sで完成、確実にRAM不足の処理をする場合は、速そう・・・というのもギアボックスの設定がMAXで実行したか記録してなかったので(-_-;)

2024/03/09追記

zram有効化した状態で2170sを確認、多少は効果あるが通常操作では有効化していた方が良さそうなので無効化しなくても問題なさそう。

プロンプトは

A cinematic shot of a baby racoon wearing an intricate italian priest robe.

ローブ着ていないけど1stepでこの出来は凄いと思う。

無効化コマンド

sudo systemctl disable zram-config

再起動

確認

free -h

swapが減っているので無効化成功。

再度有効化したい場合

sudo systemctl enable zram-config

再起動する。

 

 

 

ncos1.hatenablog.com

 

*1:totalmem / 2  * 1024

*2:totalmem / 2  * 5120

*3:totalmem / 6  * 20480

*4:totalmem / 2  * 6400

*5:totalmem / stream数  * 1streamに割り当てる容量

*6:totalmem / 6  * 2048

*7:totalmem / 2  * 2048

*8:totalmem / 4  * 2048

*9:totalmem / 6  * 20480

*10:totalmem / 6  * メモリサイズ