久しぶり過ぎる投稿になります。新年1発目は生成AIネタです。
タイトルの通り、生成AIに手を出して遊んだり、あとはもっぱらモンハンやっています(笑)

最近はトラブルシューティング関連はChatGPTやGeminiにすっかりお世話になっていますね〜。
Ubuntu派生のelementaryOSの最新版であるelementaryOS8でStableDiffusion環境を構築しました。
その中でいくつかハマったポイント、筆者がどのように解決したのかなど記載しておきます。


elementaryOS8のインストールのハマりポイント

久しぶりのelementaryOSですが、日本語環境は進化しておりました。
特に何も設定することなく、半角全角キーで日本語に切り替え可能なようになっていました。
しかし、以下のはまりポイントがありました。

インストール時のブラックアウト問題

筆者の今回の環境HP Z2 Mini G4 というWorkstaionモデルとなります。
CPUはXeon搭載しているのにロマンを感じヤフオクでポチってしまいました。

そのマシンですが、グラフィックスボードはNvidiaのT1000を搭載しております。
これがLinuxの USB メディアからの起動時にインストーラ起動画面から次に切り替わる段階でブラックアウトしてしまうという事象に直面しました。
調べたところ、これについては、Nvidiaの問題ということが判明。
起動時にeキーで編集モードにして、quiet splashの次にnomodesetを記載、ctrl+xで保存で解決しました。(※またインストール後に適切なドライバを当てる必要あり。)


インストール後のネットワーク不可問題

インストール完了後、ネットワーク接続が行えなくなり、パッケージの更新も当然不可。
NetworkManagerは稼働しているが、nmtuiでアクティベーション不可な状態となり、
調査の結果、以下手順で解決できました。

/etc/network/interfacesを作成

sudo vi /etc/network/interfaces

以下を記述

auto lo
iface lo inet loopback

NetworkManagerのサービスを再起動。

sudo systemctl restart NetworkManager

時刻ずれの問題

今回筆者はWorkstationに複数ディスクを搭載して、WindowsとLinuxをデュアルブートにしました。
その場合、WIndowsとLinuxを切り替えて起動すると時刻にずれが生じてしまいます。
Linux上で以下のコマンドを入力することで解決できました。

sudo timedatectl set-local-rtc 1

Stable Diffusion環境の作成

Pythonのバージョンについて

elementaryOS8のデフォルトのpythonのバージョンは3.12となっています。
しかし、StableDiffusionではpythonのバージョンが3.10となります。

じゃあ、pythonをダウングレードするのか?
いいえ、その必要はないです、pythonは Venvという仮想環境が別途構築できますので、
仮想環境をpython3.10で構築します。

以下手順でpython3.10を取得します。

sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.10 python3.10-venv python3.10-dev

上記によりpython3.10が使えるようになります。

pythonの仮想環境は以下の手順で作成します。

python3.10 -m venv .venv
source .venv/bin/activate

これでpython3 -Vとすると、python3.10になっているかと思います。
尚、仮想環境から抜けるにはdeactivateと入力します。これで 元のpython3.12になります。

Stable Diffusionの環境構築について

上記他には以下不足のパッケージを追加

sudo apt install libstdc++-12-dev libgoogle-perftools-dev curl git

以下手順で行いました。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
source .venv/bin/activate
cd stable-diffusion-webui/
./webui.sh --upcast-sampling --no-half

エラー等なく順調に行けば、デフォルトのブラウザが起動し、以下のような表示になります。

早速生成してみる

kawaii cute japanese girl with nowear at seaside beachとしてみた。
ローカル生成なので、変な規制はないのかなという確認で、ひょっとして何も着てない画像も生成されるのか?というアホな期待も込め、プロンプトにnowearを入れてみたんだが。。。

おいおい、なんで水着だけなんだよぉ???どうしてそうなる???

うん、まぁシーサイドビーチは合ってる、水着っぽいの着てるけど、あなた、顔が溶けてないかい。。。

シーサイドビーチはOK、年齢が低過ぎる気が。。。それとえーと?片手がないけど・・・・

シーサイドビーチはOK、うーん、背中だけど、まぁこれが一番まともな方か?


無事構築できた感想、まとめ

といった具合で生成はされるものの、まだまだプロンプトがポンコツなせいか、
全くもって期待通り(おい??)の画像は生成されないという結果だった。

生成は概ね1分程度であった。モデルを変更すると、メモリ不足(T1000の4GBの貧相なスペックのため)で落ちてしまうこともあり、今後本格的に行うのであればマシンスペックを上げるか、仮想サーバのレンタルも検討が必要であろうと思う。

今回はまずは自分で環境構築ができるのかどうか、実際に試してみたかったこともある。
またハマりポイントも実際に解決することができた。
マシンスペックは最低限ではあるが、ローカル生成AI環境を稼働させること自体はできたので満足である。

尚、今後は、他の生成AIツール、comfyUiや、テキスト生成のOllamaなども試してみたい。
また構築にあたってのハマりポイントなどあれば紹介していきたい。

というわけで本日はここまで
何かの参考になれば幸いです。
それでは良きハッピーハッキングライフを!!