この記事は新歓ブログリレー2025 15日目の記事です。
新入生の皆さん、合格おめでとうございます!24Bのけんたろうです。
さて、東京科学大学はTSUBAMEというスーパーコンピュータを所有しています。新入生の方の中には、これを理由に大学を選んだ方もいらっしゃるのではないかと思います。
そしてこのTSUBAME、なんと東京科学大学の学生なら条件付きで無料で使用することができます。
(医歯学系の方が使えるかどうかは確認できていません、すみません🙇)
そこでこの記事では、TSUBAMEの無料枠を使って、動かすのに高スペックなPCが必要なStable Diffusionを動かしてみたいと思います。
事前準備
まずはTSUBAMEのアカウントを取得する必要があります。こちらの@mtaku3さんの記事を参考に、アカウントを取得してください。
また、利用条件もこちらの記事とその引用元の文書に載っているので確認してください。特に利用目的に関しては、逸脱して使用しないように注意しましょう。

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

アカウントが取得できたら、インタラクティブジョブを起動します。xfceやcode-serverを使っても問題ないですが、この記事ではGUIではなくCUIで、SSHセッションを取得する方法を使ってみます。
TSUBAMEポータルを開いて、左のSSH公開鍵登録からログインに使う公開鍵をアップロードします。また、ログイン名のところに書いてあるux00000
の形式のユーザー名も控えておきましょう。
次に、使っているシェルを開いて、まずはログインノード(計算ノードにログインするためのノード)に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から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にアクセスできました!🙌
モデルの導入
モデルを導入する際は、ダウンロードしてきたファイルを通常通りmodels/Stable-diffusion
に配置することで、自動的にローカルスクラッチ領域にファイルが置かれて容量を消費することなく利用することができます。ただし、ここに置いたファイルはジョブ終了時に削除されるので、別のジョブで利用する際は再度配置する必要があることに注意してください。
このブログのトップ画像でもある下のツバメの画像は、Stable Diffusion XLを用いて生成してみました。大きなモデルなのでローカルで動かす環境を用意するのはなかなか大変ですが、TSUBAMEなら動かせます。
参考: 使用したモデルのリンク
おわりに
科学大生であるというだけでスパコンを使わせてもらえるというのはとんでもなく太っ腹だと思います。また、AI全盛の時代、高性能な計算資源とそれを利用したアプリや研究の需要はどんどん高まっています。新入生の皆さんもそうでない皆さんも、計算資源を使ってやりたいことができたら是非使わせてもらいましょう。
明日の担当は@zoi_dayoさんです。お楽しみに!