リモートUbuntuでDocker使ってStable Diffusion立ててローカルブラウザからアクセスする
リモートPCのUbuntuにSSHで入り、stable-diffusion-webui-dockerを使ってStable Diffusionを立て、ローカルPCのブラウザからアクセスする方法を解説する記事です。
GPUを積んだつよつよリモートPCを用いてStable Diffusionを立てたい時に使えるかなと思います。
筆者の環境は以下の通りです。
OS
Ubuntu 20.04.6 LTS
lsb_release -a
で確認しています。
GPU
NVIDIA Corporation GV100GL [Tesla V100 PCIe 16GB] (rev a1)
lspci | grep -i nvidia
で確認しています。
準備編
VPNをつなげる
必要に応じてVPNを繋いでください。
SSHでリモートアクセス
筆者はssh -i <秘密鍵のパス> <ユーザ名>@<IPアドレス>
で繋いでいます。
Gitインストール
公式を見てインストールします。
sudo apt update
sudo apt install git-all
# 確認
git --version
# git version 2.25.1 等返ってきたらOK
Dockerインストール
公式を見てインストールします。
少し長いのでコマンドは省略します。
公式通りに作業すれば問題なく終わるはずです。
インストールの確認として、sudo docker run hello-world
を叩いて、
Hello from Docker!
This message shows that your installation appears to be working correctly.
が返ってきたらOKです。
dockerグループにユーザ追加
このままだとsudo
じゃないとdockerコマンドが使えなくて不便なので、ユーザをdockerグループに追加します。
例によって公式を見て作業します。
コマンドは省略します。
sudo
なしでdocker run hello-world
を叩いて、上記と同様のHello from Docker!
が返ってきたらOKです。
Stable Diffusion構築編
公式を見て作業します。
まずはcloneします。
git clone https://github.com/AbdBarho/stable-diffusion-webui-docker
cloneしたディレクトリに移動し、以下を実行します。
docker compose --profile download up --build
docker compose --profile auto up --build
これがうまくいけば、http://<リモートPCのIPアドレス>:7860
にローカルPCのブラウザからアクセスするとStable Diffusionが使えます。
UIはAUTOMATIC1111
と呼ばれているものです。
この記事ではこのUIの使い方については解説しません。
以下では上記Docker Composeコマンドで出たエラーとその対処方法について解説します。
エラー対処編
docker compose --profile auto up --build 時エラー
エラー内容
Attaching to webui-docker-auto-1
Error response from daemon: could not select device driver "nvidia" with capabilities: [[gpu]]
FAQにありました。
NVIDIA Container Toolkit
をインストールすれば良いようです。
NVIDIAのドキュメントを見てインストールします。
コマンドは省略します。
こちら対応後、適切にインストールできたか確認するためにsudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
を実行しますが、ここでもエラーが出ました。
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi 時エラー
エラー内容
Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: initialization error: load library failed: libnvidia-ml.so.1: cannot open shared object file: no such file or directory: unknown
libnvidia-ml.so.1
というライブラリが見つからないことによるエラーのようです。
以下のissueを読むと、Ubuntuのバージョンに合ったNVIDIAのドライバをインストールすると解決するようです。
NVIDIAのドライバインストール
Ubuntuのバージョンに合ったNVIDIAのドライバのバージョンは、ubuntu-drivers devices
を叩くと確認できます
このコマンドを叩くために、ubuntu-drivers-common
をインストールします。
sudo apt install ubuntu-drivers-common
上記インストール後、ubuntu-drivers devices
を叩きます。
$ ubuntu-drivers devices
== /sys/devices/pci0000:2e/0000:2e:00.0/0000:2f:00.0 ==
modalias : pci:v000010DEd00001DB4sv000010DEsd00001214bc03sc02i00
vendor : NVIDIA Corporation
model : GV100GL [Tesla V100 PCIe 16GB]
driver : nvidia-driver-470 - distro non-free
driver : nvidia-driver-525-server - distro non-free
driver : nvidia-driver-515 - distro non-free
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-510 - distro non-free
driver : nvidia-driver-418-server - distro non-free
driver : nvidia-driver-525 - distro non-free recommended
driver : nvidia-driver-390 - distro non-free
driver : nvidia-driver-515-server - distro non-free
driver : nvidia-driver-450-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
driver : nvidia-driver-525 - distro non-free recommended
とあるので、nvidia-driver-525
をインストールし、rebootします。
sudo apt -y install nvidia-driver-525
sudo reboot
正しくインストールされていると、GPUの使用率等を取得できるnvidia-smi
が叩けるので、叩いてみます。
$ nvidia-smi
Wed Apr 12 04:06:03 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla V100-PCIE... Off | 00000000:2F:00.0 Off | 0 |
| N/A 33C P0 25W / 250W | 4MiB / 16384MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1313 G /usr/lib/xorg/Xorg 4MiB |
+-----------------------------------------------------------------------------+
正しくインストールされていることが確認できました。
docker compose --profile auto up --build
さっきはエラーで実行できなかったdocker compose --profile auto up --build
を実行します。
ログを見ると、
webui-docker-auto-1 | Running on local URL: http://0.0.0.0:7860
とあります。
リモートPC上にStable Diffusionのサーバが立ったので、ここにローカルPCからアクセスします。
ローカルPCからアクセス
IPアドレスを知るためにnet-tools
をインストールします。
sudo apt install net-tools
ifconfig
を叩いて、inet
に続くIPアドレスを控えます。
ローカルPCのブラウザにhttp://<IPアドレス>:7860
を入れてアクセスします。
動きました!!!
今回Zennのスクラップに作業ログ残しながらやったのですが、こういう試行錯誤する系のタスクにはスクラップはすごく良いですね。
よりリアルな作業ログを見たい方はこちらも見てください。
Discussion