さくらのクラウド高火力プランでStable Diffusion WebUIをさくっと動かす手順

はじめに

さくらのクラウドには、機械学習やディープラーニング(深層学習)に最適なGPUサーバを利用できる「高火力プラン」があります。

本記事では、GPUサーバを使って画像生成AIを利用してみたいという方に向けて、代表的な画像生成AIモデルの1つであるStable Diffusion、およびそのWebUIを、さくらのクラウド高火力プランで動かす手順をご紹介します。

さくらのクラウドへのログイン

今回の作業を行うには、さくらインターネットの会員IDと、さくらのクラウドのアカウントが必要です。これらの登録については、さくらのクラウドのマニュアルに手順が載っているので、そちらをご覧ください。

手順を要約すると以下のようになります。

  1. さくらインターネットの会員IDを取得 (すでにお持ちの場合は省略)
  2. さくらのクラウドのコントロールパネルにアクセス
  3. 画面左側の「さくらインターネット会員としてログイン」に、会員IDとパスワードを入力してログイン
  4. さくらのクラウドのアカウントを作成 (すでにお持ちの場合は既存のアカウントを選択してもかまいません)
さくらのクラウドのログイン画面(さくらインターネット会員としてログイン)
クラウドアカウントの選択

スタートアップスクリプトの登録

さくらのクラウドには、新たにサーバを作成する際にスクリプトを実行することで、使いたいソフトウェアのインストールや設定を行うことができる「スタートアップスクリプト」という機能があります。今回の作業ではこれを使って、Stable Diffusion WebUIの構築に必要なインストールや設定を行います。

サーバを作成する前に、使用するスクリプトを登録します。

コントロールパネルのサイドバーの「サービス」から「リソースマネージャ」を開きます。

サイドバーの「スクリプト」を開きます。

上部の「+ 追加」ボタンを押します。

スクリプト追加画面に次の内容を入力し、最下部にある「+ 作成」をクリックします。

項目設定内容
クラスShell
名前Stable Diffusion WebUI
内容この表の下に掲載されているコードをコピーしペースト
タグ空欄
アイコン-
スクリプト追加画面の設定内容

「内容」欄にペーストするコードはこちらです。

なお、CUDAドライバのバージョンが更新されると、下記スクリプトのままでは動かないことがあります。CUDA Toolkitのダウンロードページにてアーキテクチャなどを選択して表示されるインストーラを参考に、下記スクリプトの「NVIDIA CUDAドライバのインストール」の部分を編集して使ってください。

#!/bin/bash
 
# @sacloud-once
# @sacloud-name "Stable Diffusion WebUI"
# @sacloud-desc-begin
#   Stable Diffusion WebUIのセットアップを行います。
#   起動後、「http://<IPアドレス>:7860/」にアクセスしてください。
#   モデルの追加は /home/ubuntu/stable-diffusion-webui/models/ 以下の適切な場所に配置してください。
#   なお、初回のセットアップには相当の時間がかかります。(目安:15分)
#   また、40GB以上のディスクの接続が必要です。
#   初回は起動後に一度再起動することをおすすめします。
# @sacloud-desc-end
# @sacloud-text required shellarg maxlen=100 WEBUI_USERNAME "WebUIログイン名"
# @sacloud-password required shellarg maxlen=100 WEBUI_PASSWORD "WebUIパスワード"
# @sacloud-checkbox required default= UNUSED_NVIDIA_EULA_CHECKED "NVIDIAのEULAに同意します https://docs.nvidia.com/cuda/eula/index.html"
# @sacloud-require-archive distro-ubuntu distro-ver-22.04.*
 
set -eu
 
WEBUI_USERNAME=@@@WEBUI_USERNAME@@@
WEBUI_PASSWORD=@@@WEBUI_PASSWORD@@@
 
# OSのアップデート
echo "Updating packages using apt"
apt update
apt upgrade -y
apt install -y curl git libgl1 libglib2.0-0 libtcmalloc-minimal4 nvtop pciutils python3 python3-pip python3-venv wget
 
# GPUの検出
if [ $(lspci | grep -c NVIDIA) -ge 1 ]; then
  echo "GPU(s) found"
 
  # NVIDIA CUDAドライバのインストール
  # See: https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local
  if [ $(dpkg -l cuda-toolkit-12-5 | grep -c ^ii) -eq 0 ]; then
    echo "Installing NVIDIA CUDA Driver"
    curl -fsSL -o /etc/apt/preferences.d/cuda-repository-pin-600 \
      https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
    curl -fsSL -o /tmp/cuda-repo-ubuntu2204-12-5-local_12.5.0-555.42.02-1_amd64.deb \
      https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda-repo-ubuntu2204-12-5-local_12.5.0-555.42.02-1_amd64.deb
    dpkg -i /tmp/cuda-repo-ubuntu2204-12-5-local_12.5.0-555.42.02-1_amd64.deb
    rm -f /tmp/cuda-repo-ubuntu2204-12-5-local_12.5.0-555.42.02-1_amd64.deb
    cp /var/cuda-repo-ubuntu2204-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/
    apt update
    apt install -y cuda-toolkit-12-5 cuda-drivers
  fi
else
  echo "No GPUs found"
fi
 
PASSWORD_FILE_PATH=/home/ubuntu/.stable-diffusion-password
if [ ! -e $PASSWORD_FILE_PATH ]; then
  echo "Creating password file for Stable Diffusion WebUI"
  echo "${WEBUI_USERNAME}:${WEBUI_PASSWORD}" | sudo -u ubuntu tee $PASSWORD_FILE_PATH >/dev/null
  sudo -u ubuntu chmod 600 $PASSWORD_FILE_PATH
fi
 
if [ ! -e /home/ubuntu/stable-diffusion-webui ]; then
  echo "Installing Stable Diffusion WebUI"
  pushd /home/ubuntu
    curl -fsSL https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh | \
      sed 's/KEEP_GOING=1/KEEP_GOING=0/' | \
      sudo -u ubuntu bash
  popd
fi
 
UNIT_PATH=/etc/systemd/system/stable-diffusion-webui.service
if [ ! -e $UNIT_PATH ]; then
  cat <<EOF | sed 's/^ *//' >$UNIT_PATH
    [Unit]
    Description=Stable Diffusion WebUI
    After=network.target
 
    [Service]
    Type=simple
    WorkingDirectory=/home/ubuntu/stable-diffusion-webui
    User=ubuntu
    Group=ubuntu
    ExecStart=/home/ubuntu/stable-diffusion-webui/webui.sh --listen --gradio-auth-path=$PASSWORD_FILE_PATH
    Restart=on-failure
 
    [Install]
    WantedBy=multi-user.target
EOF
  systemctl daemon-reload
  systemctl enable --now stable-diffusion-webui.service
fi
 
echo "Done the script"
exit 0

操作確認ダイアログで「作成」をクリックするとスクリプトの登録が完了します。

サーバの作成

登録したスタートアップスクリプトを使ってサーバを作成します。

サーバ一覧画面での操作

コントロールパネルのサイドバーから「サーバ」をクリックします。

さくらのクラウド高火力プランは、現在は石狩第1ゾーンでのみ提供されています。そこで、ページ左上の部分が「石狩第1ゾーン」になっていることを確認します。「石狩第1ゾーン」になっていなければ、クリックして「石狩第1ゾーン」を選択します。

右上の「+ 追加」ボタンをクリックすると、サーバの作成画面が表示されます。

サーバ作成モードの選択

サーバ作成には「シンプルモード」と「通常モード」があります。今回は通常モードを使用しますので、画面右上の「シンプルモード」にチェックが入っている場合はチェックを外します。

サーバプランの選択

サーバプランで「GPUプラン」を選択します。(「石狩第1ゾーン」以外を選択している場合、「GPUプラン」は表示されません。画面左上で「石狩第1ゾーン」が選択されていることを確認してください)

なお、GPUプランでは、仮想コア数4、メモリ56GBで固定です。「サーバプラン一覧から選択」は使用しません。

ここからはディスクやNICなど、各種項目を設定していきます。次の内容でサーバを設定します。

ディスク

項目設定内容補足
「新規ディスクを作成」を選択
ディスクプラン「SSDプラン」を選択「標準プラン」でも動作しますが、SSDに比べて動作は遅くなります
ディスクソース「アーカイブ」を選択「マイアーカイブ」ではありません
アーカイブ選択「Ubuntu Server 22.04.1 LTS 64bit #…」を選択「(cloudimg)」がないものを選択します。「22.04」の後ろの数字は時期によって異なる可能性があります。「22.04.3」のようなものでも構いません。
ディスクサイズ「40GB」以上を選択40GBで設定は行えますが、多くのモデルを利用する予定、または多くの画像を生成する予定がある場合は100GB以上をおすすめします
ディスクを暗号化するチェックの必要はありません
別のストレージに収容するチェックの必要はありません複数のサーバで冗長化するときに利用する設定のため、今回は必要ありません
準仮想化モードを使うチェックを入れますチェックを外すと動作が遅くなります

NIC

項目設定内容補足
インターネットに接続
インターネットに接続1IP 共有セグメント変更できません
準仮想化モードを使うチェックを入れますチェックを外すと動作が遅くなります
パケットフィルタ選択-

ディスクの修正

項目設定内容補足
ディスクの修正をするチェックを入れます
管理ユーザのパスワードパスワードを設定しますサーバ上でのパスワードを設定します。このサーバ専用のパスワードをおすすめします。
ホスト名お好きな名前を設定します。例:「stablediffusion」半角のアルファベット・数字が利用できます
公開鍵「なし」を選択お手持ちのSSH公開鍵が存在する場合は設定してもかまいません
パーティションのUUIDの変更チェックの必要はありません
スタートアップスクリプト「shell」を選択
配置するスタートアップスクリプトスクリプト登録時に設定した名前(例では「Stable Diffusion WebUI」)を選択
usacloudをインストールするチェックを入れます
インストールされているパッケージをアップデートするチェックの必要はありませんスタートアップスクリプト内で同等の処理が行われるためチェックは不要です
WebUIログイン名お好きな名前を入力しますインストール後にブラウザからアクセスするときに使用します。半角英数で設定してください。暗号化されない状態でネットワークを流れることになります。他人に見られても問題ない名前を設定してください。
WebUIパスワードお好きなパスワードを入力しますインストール後にブラウザからアクセスするときに使用します。半角英数で設定してください。暗号化されない状態でネットワークを流れることになります。必ず専用のパスワードを作成してください(パスワードを再利用しないでください)。
NVIDIAのEULAに同意しますEULAを確認後、チェックを入れますEULAはこちらのURLにあります

シンプル監視

項目設定内容補足
シンプル監視を有効にするチェックの必要はありません

サーバの情報

項目設定内容補足
名前ディスクの修正の「ホスト名」と同じ名前異なる名前をつけても特に問題は発生しませんが、同じ名前にしておくと便利です
説明空欄でかまいません
タグ空欄でかまいません
アイコン-

その他のオプション

項目設定内容補足
仮想サーバ上のキーボード…チェックの必要はありません
作成後すぐに起動チェックを入れます作成後すぐに作業を開始しない場合はチェックせずに作成だけ行うことも可能です

作成数

項目設定内容補足
作成数「1」に設定します

サーバの作成処理

設定が完了したら「+ 作成」ボタンをクリックします。すると、有料リソースの作成確認ダイアログが表示されます。内容を確認して「作成」ボタンをクリックします。

サーバの作成が行われます。ディスクのコピーが行われるため、しばらく時間がかかります。

サーバの起動

サーバの作成時に「作成後すぐに起動」をチェックしていた場合は、サーバは作成後に自動で起動します。よってこのステップで行うことはありません。

サーバをいったんシャットダウンした後、もう一度起動する場合は以下の手順で行います。

サイドバーの「サーバ」をクリックして、サーバ一覧を開きます。

作成したサーバの行をダブルクリックするか、右端の「▼」をクリックして「詳細」を選択します。

右上の「電源操作」から「▶ 起動」をクリックします。

起動確認のダイアログが出たら「実行」を押します。

サーバが起動すると、「電源操作」部が「UP」になります。

Stable Diffusion WebUIのインストール

初めてサーバを起動したとき、スタートアップスクリプトによってStable Diffusion WebUIが自動的にインストールされます。このインストールには30分程度かかります(ネットワークや他社サーバの状態によってかかる時間は変化します)。

起動の完了は「コンソール」から確認できます。確認手順を以下に記載します。

サイドバーの「サーバ」をクリックして、サーバ一覧を開きます。

作成したサーバの行をダブルクリックするか、右端の「▼」をクリックして「詳細」を選択します。

「コンソール」タブをクリックします。

画面の黒い部分をクリックします。

画像のように「login:」というプロンプトが表示されていれば、インストールと起動が完了しています。

※Stable Diffusion WebUIが起動するタイミングの関係で、この画面になっていてもアクセスできない場合があります。その場合はしばらく待つとアクセスできるようになると思います。

Stable Diffusion WebUIの実行

サーバが起動したら、「http://<サーバのIPアドレス>:7860/」にアクセスします。例えばサーバのIPアドレスが「192.0.2.1」であれば「http://192.0.2.1:7860/」です。「https」でなく「http」であることに注意してください。

サーバのIPアドレスは、サーバ詳細のNICタブ、またはサーバ一覧のNIC列で確認できます。IPアドレスの横のコピーアイコンからIPアドレスのコピーができるので便利です。

NICタブからIPアドレスを確認
サーバ一覧のNIC列でIPアドレスを確認

ブラウザからアクセスすると、Stable Diffusion WebUIのログイン画面が表示されます。

サーバ作成時に指定した「WebUIログイン名」と「WebUIパスワード」を入力してログインします。

ログインすると、次のような画面が表示されます。(画面はStable Diffusion WebUIのアップデートによって変更になっている場合があります)

txt2imgタブのPromptとNegative promptに生成内容を指定して何か生成してみましょう。2つある入力欄の、上がPrompt、下がNegative promptです。

ここでは、三毛猫(calico cat)の画像を生成するプロンプトを入力しています。入力内容は以下の通りです。

  • Prompt: masterpiece, high quality, realistic, HD, calico cat
  • Negative prompt: worst quality, low quality, zombie, sketch, interlocked fingers, comic, nsfw

「Generate」ボタンを押すと、2秒程度で画像が生成されます。ボタンをクリックするたびに生成結果は変わるので、何度か試してみてください。今回は次のような画像が生成されました。

プロンプトの内容を変更していろいろ試してみてください。インターネットを検索すると、いろいろなプロンプト(しばしば「呪文」と呼ばれます)の例が出てきますので参考にしてください。

高度な使い方:モデルの追加

Stable Diffusionでは、チェックポイントやLoRAとよばれるファイルを追加することで、別の絵柄などを生成することができます。

モデルの入手

モデルを配布しているサイトの中で代表的なものの1つがCivitaiです。チェックポイントについてはModels > BASE MODELに、LoRAについてはModels > CHARACTERから入手することができます。

なお、モデルの利用に際しては、以下の点にご注意ください。

  • さくらインターネットでは、個別のモデルファイルの使用方法や内容については関知しません。
  • それぞれのモデルごとにライセンスが定められています。それに違反しないように、ライセンスをよく読んでからご利用ください。
  • 既存のキャラクターの権利に十分配慮してご利用ください。

WinSCPのインストール

Stable Diffusionで使用するモデルファイルを追加するには、サーバへファイルを転送する必要があります。ここでは、ファイル転送ソフトとしてWinSCPを利用します。インストール手順は以下の通りです。

  1. 窓の杜からWinSCPをダウンロードします。(公式サイトよりも窓の杜の方がわかりやすいのでおすすめです)
  2. ダウンロードしたインストーラーを起動し、手順に従ってインストールします。途中で表示される対象ユーザーや表示形式はどちらを選んでもかまいません。

なお、この後の表示例は表示形式として「エクスプローラー」を選んだ場合のものです

WinSCPの起動と設定

まずはWinSCPを起動します(インストーラーからの自動起動でもかまいません)。すると、通常は「ログイン」ダイアログが開きます。

ログインダイアログを閉じてしまった場合や、設定によって開かない場合は、メニューの「タブ」→「新しいタブ」または「タブ」→「サイト」→「サイトマネージャー…」を選択してください。

ログインダイアログが開いたら、「新しいサイト」をクリックし、右側に接続情報を設定します。

接続情報としては以下を設定します。

項目設定内容
転送プロトコルSFTP
ホスト名サーバのIPアドレス
ポート番号22
ユーザ名ubuntu
パスワードサーバ作成時に「管理ユーザのパスワード」に設定したパスワード

「管理」→「名前をつけて保存」で保存しておくと、2回目以降の接続時に便利です。

「セッションの保存名」ダイアログの設定内容は、お好みに応じて調整してください。

設定ができたら「ログイン」ボタンをクリックします。

初めて接続するサーバの場合、接続先のサーバに関する接続が表示されます。本来は内容をきちんと確認するべきですが、「はい」をクリックします。2回目以降に接続する場合でこの表示が行われた場合は間違ったサーバーに接続しようとしているなど何かおかしいので「キャンセル」してください。

補足:ホスト鍵の正しい確認方法

  1. クラウドコントロールパネルで当該ホストの「コンソール」を開きます。
  2. ユーザ名「ubuntu」でログインします。
  3. 次のコマンドを入力し、実行します。
ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub -E sha256
  1. 出力されたテキストを確認し、WinSCPの「SHA-256:」の行に表示されているものと比較します。

モデルファイルの追加

WinSCPでサーバに接続したら、/home/ubuntu/stable-diffusion-webui/models に移動します。

追加するモデルの種類に合わせたディレクトリ(フォルダ)を開きます。チェックポイントであれば「Stable-diffusion」、LoRAであれば「Lora」を開きます。(下図ではStable-diffusionを選択しています)

WinSCPにファイルをドラッグ&ドロップすることでファイルを転送できます。

チェックポイントを追加した場合は、WebUIのリロードアイコンを押すと使用できるようになります。

サーバのシャットダウン(終了)

しばらく生成して遊んだら、サーバをシャットダウンします。

コントロールパネルの「電源操作」から「シャットダウン」を選びます。「強制停止」を行うとサーバが壊れる場合がありますので、こちらではなく「シャットダウン」を選んでください。

確認ダイアログが出たら、内容と対象のサーバが正しいことを今一度確認して「実行」を押します。

しばらくすると、状態が「DOWN」になりサーバが停止します。

サーバの削除

サーバが不要になったらサーバを削除します。

コントロールパネルのサイドバーから「サーバ」をクリックして、サーバ一覧を開きます。

削除するサーバの行をダブルクリックするか、右端の「▼」をクリックして「詳細」を選択します。

サーバの「電源操作」が「DOWN」になっていない場合、サーバのシャットダウンを行います。操作手順は「サーバのシャットダウン(終了)」を参照してください。

サーバの「電源操作」が「DOWN」になったら、右上から「サーバを削除」をクリックします。

サーバと一緒に削除するディスクを選択します。

右上の「削除」をクリックします。

確認ダイアログが出たら、内容を確認して「実行」を押します。

サーバ一覧からサーバが消えたら完了です。

おわりに

本記事では、GPUサーバを使って画像生成AIを利用してみたいという方に向けて、代表的な画像生成AIモデルの1つであるStable Diffusion、およびそのWebUIを、さくらのクラウド高火力プランで動かす手順をご紹介しました。さくらのクラウド高火力プランは最低1時間から利用することができるので、短期的なお試しに最適です。ぜひ使ってみてください。

また、もっと本格的にGPUサーバを使いたい方には、NVIDIA H100 GPUを搭載した物理サーバ「高火力PHY(ファイ)」もあります。さくらのクラウド高火力プランでは計算能力が足りないという方はこちらもご検討ください。