feature image

2025年3月21日 | ブログ記事

TSUBAMEでStable Diffusionを動かしてみる

この記事は新歓ブログリレー2025 15日目の記事です。

新入生の皆さん、合格おめでとうございます!24Bのけんたろうです。

さて、東京科学大学はTSUBAMEというスーパーコンピュータを所有しています。新入生の方の中には、これを理由に大学を選んだ方もいらっしゃるのではないかと思います。

そしてこのTSUBAME、なんと東京科学大学の学生なら条件付きで無料で使用することができます。
(医歯学系の方が使えるかどうかは確認できていません、すみません🙇)

そこでこの記事では、TSUBAMEの無料枠を使って、動かすのに高スペックなPCが必要なStable Diffusionを動かしてみたいと思います。

事前準備

まずはTSUBAMEのアカウントを取得する必要があります。こちらの@mtaku3さんの記事を参考に、アカウントを取得してください。
また、利用条件もこちらの記事とその引用元の文書に載っているので確認してください。特に利用目的に関しては、逸脱して使用しないように注意しましょう。

【東工大生必見】スパコンを無料で使う方法
はじめに はじめまして。22Bの@mtaku3です。 R6年度から、鹿児島高専から本校情報工学系に編入してきた者です。traPに入部して、まだ一週間も経っていませんが初記事投稿していきたいと思います! TSUBAME 4.0をご存知ですか? 東工大は長年、高性能計算機(HPCI)であるTSUBAMEを運用しています。今春、TSUBAME 3.0が新たにTSUBAME 4.0に刷新され、運用が開始されました。(2024/4/11 現在テスト運用中) 新たなTSUBAME 4.0ではなんと NVIDIA H100 TensorコアGPU が960基(1ノードあたり4基 x 240台)搭載されており、近年のAI需要を鑑みたハードウェア構成となっています。(その他、詳細なスペックについてはこちらをご覧ください) 無料で使えるってホント? TSUBAME 4.0の規約・利用細則によると、 利用細則第4条第1項第1号「

また、こちらの記事も参考になります。

TSUBAMEに詳しくなろう!(Reverse Proxyアルヨ)
はじめに こんにちは。22Bの@mtaku3です。 前回に引き続き、今回もTSUBAME 4.0についてです。東工大生がTSUBAMEのインタラクティブジョブを利用するにあたって知っておいたほうが良い(技術的な)事柄について色々説明していこうと思います。 Lmod TSUBAMEではLmodを利用したモジュール単位でのソフトウェア管理があります。 要は使いたいソフトウェアを利用者がコマンドを実行して都度読み込んでくださいということです。 Lmodのコマンドは以下の通りで * module avail : 利用可能なモジュールを表示 * module list : ロード済みのモジュールを表示 * module load <name> : モジュールをロード * module unload <name> : モジュールをアンロード 簡単でしょ? 私の環境で module avail を実行した際の利用可能なモジュールは次の通りでした。 ほとんどのソフトウェアは東工大学生ならばアカデミックライセンスで使用できるそうですが、一部制限があるようです。(商用アプリケ</name></name>

アカウントが取得できたら、インタラクティブジョブを起動します。xfceやcode-serverを使っても問題ないですが、この記事ではGUIではなくCUIで、SSHセッションを取得する方法を使ってみます。

TSUBAMEポータルを開いて、左のSSH公開鍵登録からログインに使う公開鍵をアップロードします。また、ログイン名のところに書いてあるux00000の形式のユーザー名も控えておきましょう。

TSUBAMEポータルのサイドバー

次に、使っているシェルを開いて、まずはログインノード(計算ノードにログインするためのノード)にSSH接続します。秘密鍵のパスとユーザー名は置き換えてください。

$ ssh -i ~/your_private_key ux00000@login.t4.gsic.titech.ac.jp
[ux00000@login1 ~]$

iqrshというコマンドでインタラクティブジョブを投入することができます。詳しい使い方は公式ドキュメントを参照してください。

[ux00000@login1 ~]$ iqrsh -l h_rt=<時間>
[ux00000@r0n00 ~]$

これで、高性能なノードにSSH接続することができました。

【おすすめ】VSCodeから繋ぐ

これでシェルにアクセスできるようになりましたが、VSCodeからRemote Tunnelという機能を使って接続することで、シェルにもアクセスできるしファイルの編集もやりやすい環境にすることができます。VSCodeの公式ドキュメントを参考に、ノードにVSCodeのCLIを導入します。今回は~/binにファイルを配置しますが、好きなディレクトリに配置してください。

mkdir ~/bin
cd ~/bin

curl -Lk 'https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64' --output vscode_cli.tar.gz

tar -xf vscode_cli.tar.gz

./code tunnel

こうするとGitHubかMicrosoftアカウントでのログインを求められるので、ログインします。

そうしたらVSCodeにRemote - Tunnels拡張機能を入れて、左下のユーザーアイコンから同じアカウントにログインすることで、リモート エクスプローラーに先程作ったTunnelが出てきます。

VSCodeのリモート エクスプローラー

これで、VSCodeからTSUBAMEに繋げることができます。ターミナルを閉じたりしてcodeコマンドが終わってしまう場合は、nohupなどを使うと良いと思います。

Stable Diffusionを動かしてみる

動かし方にも色々ありますが、今回は(多分)一番有名なStable Diffusion web UIを使います。

ここで重要になるのが容量制限です。ホームディレクトリは25GB、/tmpディレクトリは1ノードあたり2GBまでとなっており、pipの一時ファイルやモデルのファイルによって簡単に制限に到達してしまいます。そこで、この2つをローカルスクラッチ領域という、ジョブ終了時に削除されるが大容量なSSD領域に入れることによって制限を回避します。これは/local/${JOB_ID}に設定されています。

インストール

まずは本体を取ってきます。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui

次に、上に書いた設定を行います。私はこのようなシェルスクリプトを、リポジトリのルートに置いて使っています。パスは適宜調節してください。また、exportを使用している関係で、シェルを閉じるとtmpディレクトリが元に戻ることに注意してください。(私は.bashrcに設定を書くことで対策しています。)Loraなどを使う場合は、適宜設定を追加してください。

#!/bin/bash

# tmpディレクトリの位置を変える
mkdir /local/${JOB_ID}/tmp
export TMPDIR=/local/${JOB_ID}/tmp

# モデルのディレクトリをローカルスクラッチへのシンポリックリンクにする
mkdir /local/${JOB_ID}/Stable-diffusion
mkdir /local/${JOB_ID}/VAE
rm -rf ./models/Stable-diffusion
rm -rf ./models/VAE
ln -s /local/${JOB_ID}/Stable-diffusion ./models
ln -s /local/${JOB_ID}/VAE ./models

【参考】私が.bashrcに書いている設定

if [ ! -e /local/$JOB_ID/tmp ]; then
    mkdir /local/$JOB_ID/tmp
fi

export TMPDIR=/local/$JOB_ID/tmp

次に、UIに外部からアクセスできるようにwebui-user.shの設定を編集します。#export COMMANDLINE_ARGS=""のコメントアウトを外し、次のような設定を追加します。$hostにはノード名が入っています。

export COMMANDLINE_ARGS="--listen --subpath /rnode/$host/7860"

これで準備は完了です。次のコマンドでWebUIを起動します。Permission deniedが出たら、適宜chmod u+x <ファイル名>で実行権限を付与してください。

./webui-user.sh
./webui.sh

実行したら、TSUBAMEのリバースプロキシ機能を用いてWebUIにアクセスします。次のURLにアクセスしてください。node_nameはOpen OnDemandのダッシュボードや、echo $hostで確認できるr0n00の形のものです。

https://ood.t4.gsic.titech.ac.jp/rnode/<node_name>/7860/

また、WebUI組み込みの、URLを発行してくれる機能を使っても良いです。

export COMMANDLINE_ARGS="--share"

こうするとターミナルにURLが出てくるので、ここにアクセスします。

これで、晴れてWebUIにアクセスできました!🙌

Stable Diffusion web UIの画面

モデルの導入

モデルを導入する際は、ダウンロードしてきたファイルを通常通りmodels/Stable-diffusionに配置することで、自動的にローカルスクラッチ領域にファイルが置かれて容量を消費することなく利用することができます。ただし、ここに置いたファイルはジョブ終了時に削除されるので、別のジョブで利用する際は再度配置する必要があることに注意してください。

このブログのトップ画像でもある下のツバメの画像は、Stable Diffusion XLを用いて生成してみました。大きなモデルなのでローカルで動かす環境を用意するのはなかなか大変ですが、TSUBAMEなら動かせます。

参考: 使用したモデルのリンク

Stable Diffusion XLで生成した、一匹のツバメの画像

おわりに

科学大生であるというだけでスパコンを使わせてもらえるというのはとんでもなく太っ腹だと思います。また、AI全盛の時代、高性能な計算資源とそれを利用したアプリや研究の需要はどんどん高まっています。新入生の皆さんもそうでない皆さんも、計算資源を使ってやりたいことができたら是非使わせてもらいましょう。

明日の担当は@zoi_dayoさんです。お楽しみに!

Kentaro1043 icon
この記事を書いた人
Kentaro1043

24B インフラが大好きです

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2025年3月24日
なぜ我々はゆずを買ってしまうのか
Naru820 icon Naru820
2025年3月19日
後始末には気を付けようという話 ~event Action失敗談~
Alt--er icon Alt--er
2025年3月16日
しくじり引っ越し俺みたいになるな!!
vPhos icon vPhos
2025年3月9日
# WOLF RPGエディターについて
Synori icon Synori
2025年3月15日
PyTorchで爆速レイトレーシング
Luke256 icon Luke256
2025年3月12日
サークル旅行のためだけにアプリをこしらえる人たち
kitsne icon kitsne
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記