🚀

リモートUbuntuでDocker使ってStable Diffusion立ててローカルブラウザからアクセスする

2023/04/14に公開

リモートPCのUbuntuにSSHで入り、stable-diffusion-webui-dockerを使ってStable Diffusionを立て、ローカルPCのブラウザからアクセスする方法を解説する記事です。
GPUを積んだつよつよリモートPCを用いてStable Diffusionを立てたい時に使えるかなと思います。

https://github.com/AbdBarho/stable-diffusion-webui-docker

筆者の環境は以下の通りです。

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インストール

公式を見てインストールします。
https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

sudo apt update
sudo apt install git-all
# 確認
git --version 
# git version 2.25.1 等返ってきたらOK

Dockerインストール

公式を見てインストールします。
少し長いのでコマンドは省略します。
公式通りに作業すれば問題なく終わるはずです。

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

インストールの確認として、sudo docker run hello-worldを叩いて、

Hello from Docker!
This message shows that your installation appears to be working correctly.

が返ってきたらOKです。

dockerグループにユーザ追加

このままだとsudoじゃないとdockerコマンドが使えなくて不便なので、ユーザをdockerグループに追加します。

例によって公式を見て作業します。
コマンドは省略します。

https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user

sudoなしでdocker run hello-worldを叩いて、上記と同様のHello from Docker!が返ってきたらOKです。

Stable Diffusion構築編

公式を見て作業します。

https://github.com/AbdBarho/stable-diffusion-webui-docker/wiki/Setup

まずは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と呼ばれているものです。
https://github.com/AUTOMATIC1111/stable-diffusion-webui

この記事ではこの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にありました。

https://github.com/AbdBarho/stable-diffusion-webui-docker/wiki/FAQ#error-response-from-daemon-could-not-select-device-driver-nvidia-with-capabilities-gpu

NVIDIA Container Toolkitをインストールすれば良いようです。

NVIDIAのドキュメントを見てインストールします。
コマンドは省略します。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit

こちら対応後、適切にインストールできたか確認するために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のドライバをインストールすると解決するようです。

https://github.com/NVIDIA/nvidia-docker/issues/1711

https://github.com/AbdBarho/stable-diffusion-webui-docker/issues/406

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が叩けるので、叩いてみます。

https://developer.nvidia.com/nvidia-system-management-interface

$ 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のスクラップに作業ログ残しながらやったのですが、こういう試行錯誤する系のタスクにはスクラップはすごく良いですね。
よりリアルな作業ログを見たい方はこちらも見てください。

https://zenn.dev/ryugotoo/scraps/d162cc8eb07246

Discussion