dockerというものに少しだけ詳しくなった日。そしてStable Diffusion雑感。

dockerというものに少しだけ詳しくなった日。そしてStable Diffusion雑感。

環境が完成してからというもの、毎日Stable Diffusionです。
やりすぎて普通の画像を見ても「どういうPromptで生成したんだろう?」と考えるほど。
重症です。

しかし困った事がひとつ。

毎回作った環境が初期化される

前回の記事から構築のコマンドをコピペし、環境を用意。
するとdocker上で作ったはずの”LDM”という環境がない。
なのでconda activate lsbが打てない。何度作っても消える。

CUDAなんてない!Ryzen + RADEONのAMD環境でもStable Diffusionをローカルマシンで動かす。

今は雨後の筍の様にSD環境構築記事が溢れています。
自分はそれに飛びついて理解しないままコマンドを打った者の末路と言えましょう。

それでもStable Diffusionが触りたくて毎回環境をイチから作ってました(慣れると20分程度で作れはする)

condaの問題ではない

熱も一段落したところで、重い腰を上げて解決を目指すことにしました。
dockerもcondaも初めての私ですが、「どちらかにセーブ的なものがあるのでは?」と考えました。

まずcondaについて検討。

conda info -e

これで見ると、ベース環境である”base”ごと無くなっています。
そして”conda activate”と打つたびに毎回”conda init bash”しろ、と言われる。
なのでcondaは丸ごと初期化されているようです。

これはベースになっているdockerの問題かも。

dockerの正解を知る

結論として、別に毎度消えていたわけではありませんでした。

毎回PCをつける度に

$ drun rocm/pytorch:rocm5.2_ubuntu20.04_py3.7_pytorch_1.11.0_navi21

と「イメージ」から起動していたため、何十個もの「コンテナ」として残っていました。
VMwareみたいなハイパーバイザ型を考えていたため、てっきり常にイメージに書き込まれているのかと。

一度作った環境を継続して使いたかったら、停止しているコンテナを起動し、それにアタッチするのが正解のようです。

“docker ps -a”で停止しているコンテナのNAMESを確認。

$ docker ps -a
CONTAINER ID   IMAGE                                                          COMMAND   CREATED       STATUS                   PORTS     NAMES
56d05286cfa2   rocm/pytorch:rocm5.2_ubuntu20.04_py3.7_pytorch_1.11.0_navi21   "bash"    9 hours ago   Exited (0) 8 hours ago             naughty_galois

コンテナの起動とアタッチ=シェルに接続。

$ docker start NAMES
$ docker attach NAMES

これで前回環境まで戻れた!もう何回もconda createしなくていいのか・・・

せっかく作った環境をイメージに保存しておきたいと思います。
稼働させたままシェルから抜けるため、まず”Ctrl+p > Ctrl+q”を押す。
次に先程メモしたNAMESを含めて

$ docker commit NAMES radeon_sd1.4

などとすれば新しいイメージとして作成されます。
これで環境がおかしくなったときはコンテナごとパージして1からリスタートしやすくなります。

$ docker ps -a
CONTAINER ID   IMAGE                                                          COMMAND   CREATED      STATUS                  PORTS     NAMES
a3235d77a96a   radeon_sd1.4                                                   "bash"    2 days ago   Up About an hour                  angry_gauss
56d05286cfa2   rocm/pytorch:rocm5.2_ubuntu20.04_py3.7_pytorch_1.11.0_navi21   "bash"    2 days ago   Exited (0) 2 days ago             naughty_galois

一度起動したコンテナのNAMESをリネームする事ができます。
これで毎回再開時にdocker ps -aで名前確認をする必要がなくなります。

$ docker rename angry_gauss ldm_sd

dockerのディスク増量

NVMeの一部領域をマウントする

遊んでいるうちにSATA120GBで限界が来たため、docker領域としてWindowsに使っているNVMeの一部を充てました。

予めWindows側で”ディスクの管理”にて領域を縮小し、300GBの未使用領域を確保。
Ubuntuに入り直して作った領域をext4でフォーマットします。
手順はUSB外付けHDDをext4にフォーマットする手順を参照させてもらいました。

フォーマット後、dockerのディレクトリとする/home/dolls/dockerxを作成。
最後に/etc/fstabを変更してリブート。

$ sudo vi /etc/fstab 
# /etc/fstab: static file system information.
/dev/nvme0n1p4	/home/dolls/dockerx	ext4	defaults	0       0

dockerの保存場所を変更する

dockerの仮想環境上のホームだけでなく、保存イメージの保管場所も移します。

Dockerイメージの格納場所を変更する方法を参照しました。
docker serviceを停止し、設定ファイルを変更します。

$ sudo systemctl stop docker
[sudo] dolls のパスワード: 
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
dolls@grayound:~/dockerx$ sudo vi /lib/systemd/system/docker.service

Execstart変数の末尾にディレクトリ指定を追加。

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -g /home/dolls/dockerx/images/docker

今回は過去環境を踏襲したかったので変なディレクトリ構造のまま使います。
終わったらdockerを再開

$ sudo systemctl daemon-reload
$ sudo systemctl start docker

docker imagesで過去にダウンロードしたimageが表示されれば完了。

一通り触って思う事

「言葉だけでAIが写真やイラストにしてくれる」

そう聞くと夢の様ですが、ちょっと触った程度では「なんとなくイイ」程度の画像が大量生産されるだけでした。

なにかの土台にするとか、自分の思考にない科学反応を期待するとか、そいういう用途には使えるでしょう。
例えば背景画はAIに出力させてその上に主題を置いたり、方向性が合ってれば詳細は気にされないプレゼンの挿絵を描いたり。
ここら辺は数ヶ月のうちに商用サービスとしてお目見えすると思います。
パワポの文脈を読み取って勝手にオススメイラストとか生成してくれるかもしれない。

でも「作品」と呼べるレベルは結局アーティスト(のスキルを持つ人、努力を行う人)が必要だと感じました。
いい絵には結局アウトプットに対する明確なビジョンが必要であり、生み出してるのはそういうPromptを追求した人です。

人間が感じる「イマイチ」と「エモい」までを理解し、それを埋めるAIができたとき、初めてAIがそのジャンルの職業を脅かすかもしれません。

コメントを残す