AIじゃないよ

格安GPUインスタンスでの生成AI完全ガイド: Vast.aiで動かすLLM & Stable Diffusion

当サイトはアフィリエイト広告を一部掲載しています。

chatGPTを筆頭とするオンライン上で利用できるAIサービスに対し、公開されているモデルをダウンロードして、ローカル上で動かすことのできるLLaMA系の大規模言語モデルや、Stable Diffusionなどの画像生成AIも広がってきた。

どれだけ生成しても無料で利用できるというメリットはもちろん、ファインチューニングを施して自分の用途に合わせたカスタマイズをできる魅力もある。

しかし、生成AIを自分のPCで動かす上での最大の懸案は、超強力なGPUパワーを必要とすることだ。
RTX 4090などは、30万円に近い価格で販売されており、趣味で生成AIをローカルで使うために、とても気軽に買える値段ではない。

その点、「Vast.ai」という個人間でGPU仮想マシンをレンタルできるサービスは、RTX4090を1時間レンタルして好き放題生成AIのモデルをダウンロードして動かしても、50円強しかかからず、めちゃくちゃ安い。
個人で週末生成AIを楽しむ用途では、かなり最強な選択肢と言えるのではないか。

この記事では、初心者向けに、Vast.aiでGPUインスタンスを起動して、生成AIを動かす手順を解説する。
基本的な使い方に加えて、Stable Diffusionを実用レベルまで設定を作り込むことまで実践してみせる。

読者のレベルとしては、クラウド上の仮想マシンをレンタルした経験が全くない人を想定して、丁寧にステップを踏んで解説していく。

クラウドコンピューティングやGPUインスタンスのレンタルに馴染みがない人にとっては、少しハードルが高く感じるかもしれないが、1度使ってみれば意外と簡単なので、チャレンジしてみてほしい。

たった数十円で、自分のPCよりも圧倒的に高速な環境で、最新の生成AIをゴリゴリ動かせるので、こんなに楽しいことはない。

Vast.aiのアカウント作成・料金チャージ

Vast.aiは、個人間でGPUサーバーを貸し借りするサイト。

RTX4090など、平気で25万円を超えてくるような超ハイスペックGPUを搭載したPCを、オンラインで1時間あたり数十円からレンタルする事ができるクラウドコンピューティングサービスだ。

自分でGPUを購入してマシンを組むよりは圧倒的に手軽なのはもちろん、通常のクラウドコンピューティングサービスと比べても安価なので、特に生成AI周りでGPUパワーを必要とするユーザーにとってのメリットは大きい。

実際にページを開いてみると、以下のように利用可能なインスタンスの一覧が表示される。

その時々で利用可能なインスタンスは変わってくるので、さまざまな条件で検索&フィルタ&並び替えして最適なインスタンスを見つける必要があるが、潤沢に選択肢があるので困らない。

利用するまでのプロセスもとてもシンプルで、サイトトップからアカウントを作成してログインしたら、決済サービスのstripeを利用して利用料金をチャージするだけで、早速使い始める事ができる。

メニューからBilling > Add Creditで、Vast.aiに直接クレカを登録しなくても、stripeで支払えるので、セキュリティ上も若干の安心感がある。

ざっくり金額感の目安としては、RTX4090を1台1時間使っても50円とかなので、最初は10ドル〜20ドル程度をチャージしておけば、十分色々な実験が楽しめるはずだ。

Vast.aiの基本的な使い方

画像生成AIであるStable Diffusionや、大規模言語モデルLLaMA2、音声認識モデルWhisperなどでの利用を念頭に、Vast.aiでのGPUインスタンスの利用方法を解説していく。

条件にあうインスタンスの検索方法

会員登録と10ドル程度のチャージが完了したら、実際にレンタルするインスタンスを探す。
他のユーザーに先に取られてしまうと使えないので、その時々でどのようなマシンが見つかるかは若干の運要素もある。

Vast.aiへのログイン後のコンソール画面を開いて、右上のプルダウンリストで、さまざまな検索条件を付ける事ができる。

料金タイプは「On-Demand」が最も無難で安定だ。他には、他人によって中断されうる「入札」方式も一応あるが、突然使えなくなってしまうので初心者の用途には向かない。
「RTX 3060」や「RTX 4090」など、使用したいGPUを具体的に指定することもできる。
仮想マシンがあるリージョンも、「Planet Earth」(地球全体)やアジアなどから選択できる。
また、並び替えの方法も色々選べるが、「Price (inc.)」(価格が低い順)などで良いだろう。

個人的には、価格が低い順に並べた上で、インターネットの上り/下りの速度が速いものを選ぶ事が多い。
GPUインスタンスで画像生成AIやLLMなどを利用する場合、数十ギガバイトの超大型モデルを仮想マシン上にインストールすることから始めなければならない事が多いため、ダウンロードスピードが早ければ早いほど、レンタルする時間を短縮できるからだ。

検索画面の左サイドバーでは、更に詳細なフィルター条件を設定する事ができる。
たとえば、特にStable Diffusionで大きな画像を生成したい場合などは、潤沢なVRAMが必要になるので、GPU RAMが20GB以上あるGPUに限定して検索することなどができる。

Vast.aiで生成AIを利用した場合の料金イメージ

良さそうなマシンが見つかったら、マウスカーソルを合わせると、より分かりやすい価格表が閲覧できる。

例えば、RTX 3060が1台積まれているマシンは、1時間あたり0.14ドル(約20円)で、50GBのストレージを使うと0.021ドル(約3円)と表示されている。
また、ダウンロード/アップロードの通信にもお金がかかり、1TB=1,000GBなので、ダウンロード1GBあたり0.0296ドル(約4円)という意味だ。

具体的な金額のイメージが難しいので、ここで実際にありそうな生成AIの利用シナリオを1つ考えてみる。

Stable Diffusionで代表的な二次元イラストモデルを使った画像生成を行うとする。
細々としたダウンロードが必要なファイルはあるが、大きなファイルとしてはモデル(ex. Counterfeit-V3=約9GB)とVAE(ex. Counterfeit-V2.5.vae = 約1GB)で、ざっくり最低10GBほどのダウンロードがあると考えられる。
この場合、1時間利用すると、GPUで20円+ストレージ50GBで3円+ダウンロード10GBで40円の合計63円といったところだ。

GPUの時間料金より、通信料(数十ギガのモデルのダウンロード)の方がお金がかかってしまうこともあるので、大型のファイルを送受信することの多い生成AIでの利用においては、ダウンロード/アップロードの料金が重要なファクターと言えるかもしれない。

様々なマシンの料金内訳をチェックしていくと、ダウンロード/アップロードが無料のインスタンスもあるので、そういったお宝を発見するのが重要だ。

仮想マシンで起動するDocker Imageの選択

Vast.aiでは、ユーザーが利用したいツールに最適化された「テンプレート」を選択することで、必要なソフトやパッケージがプリインストールされた仮想マシンを起動する事ができる。

テンプレートは、Dockerイメージと初期化時に設定が必要な項目で構成され、Ubuntu上で稼働するDockerコンテナにユーザーがログインして利用する(Dockerを使ったことがない人でも、特に意識せず使えるので問題ない)。

文章生成AIであるLLaMA2や、音声認識で音声ファイルからテキストを書き起こすWhisper、画像生成AIのStable Diffusionなど、代表的なAIツールのテンプレートが既に用意されており、すぐに試してみる事ができる。
また、PytorchやTensorflowなどの機械学習向けのイメージも用意されている。

インスタンスを検索する画面の左上で、「EDIT IMAGE & CONFIGULATION」を選択すると、テンプレートの選択とカスタマイズができる。

難しく聞こえるが、例えばStable Diffusionを利用する場合、「SD Auto1111」テンプレートをSelectして、ワンクリックで準備完了だ。

テンプレートを選択した状態で、好きなマシンを選んで「RENT」をクリックすれば、すぐに選択したテンプレートで仮想マシンが起動される。

メニューバー内にある「INSTANCES」を開くと、現在起動中のインスタンスが一覧で表示される。 
Stable Diffusionの場合、1〜2分ほどで初期化が完了して利用可能な状態になった。

「OPEN」ボタンを押すと指定したツールが起動する(ex. SD Auto1111の場合はStable Diffusion web UIが開く)。
ターミナル風の小さいアイコン(>_)が「Connect」ボタンで、SSHに必要な情報が表示される。

Vast.aiで実践生成AI:Stable Diffusion WebUI編

それでは、Vast.aiの基本的な使い方に続いて、具体的な利用例を紹介する。
このプロセスをそのまま順番に真似していけば、GPUを使ったStable Diffusionでの画像生成ができるはずだ。

Vast.aiでは、先述の通り、Automatic1111 Stable Diffusion web UIのDocker Imageが用意されている。

web UIは、画像生成AIのStable Diffusionを、ブラウザ上で簡単に操作できるようにしたインターフェースである。
今回は、Vast.aiの仮想マシン上でWeb UIを動かし、自分が利用したいStable Diffusionのモデルやプラグインを入れて、実際に画像を生成する。

この記事では、以下のようなStable Diffusionのそもそもの使い方など、基本的な事項については説明しない。

  • Hugging Face, CivitaiからStable Diffusionのモデルをダウンロードする
  • Hugging Face, CivitaiからEasyNegativeなどのembeddingsをダウンロードする
  • Automatic1111 web UIで、ダウンロードしたモデル、VAEやControl Netを使う

当サイトの過去記事で、ゼロからのStable Diffusion web UIの利用方法の解説と、M1/M2チップを搭載したMacにweb UIを導入する方法を紹介しているので、そちらの記事も参照して欲しい。

クラウドコンピューティングは時間あたりで課金されるため、Vast.aiのインスタンスを立ち上げた後に、ゼロからWebUIの使い方を調べていると、無駄にお金がかかってしまうので、まずは自分のPC上で使い方をマスターしておくのがオススメだ。

初心者向けの方法:Jupyterインターフェースで実行

まずは、ブラウザ上で分かりやすく利用できるJupyterを使って、お気に入りのStable Diffusionのモデルなどをアップロードして、環境を構築する方法を紹介する。

毎回インスタンスを起動するたびに、モデルを手動で一つ一つアップロードし直す必要があるので、少し面倒ではあるが、シェルスクリプトなどを書く必要がなく、初心者でも簡単だ。

高速化のための証明書のダウンロード

Vast.aiでは、インスタンスを立ち上げる際に、「Jupyter direct HTTPS」というオプションのチェックボックスがある。
このオプションを選ぶと、自分のコンピュータと仮想マシンのJupyterの間でダイレクトに接続でき、ファイルのアップロードやダウンロードが大幅に早くなる。

生成AIを利用する際には、大型のモデルをアップロードする必要が生じるので、不可欠なオプションだ。
また、Stable Diffusionで生成した画像をローカルにダウンロードするスピードにも影響するので、利用した方が何かと便利だ。

ただし、このオプションを利用するには、Vast.aiの証明書をあらかじめ自分のPCに入れておく必要がある。
この記事では、Macでの導入方法を解説するが、キーチェーンに追加するだけの超簡単な作業だ。

まずは、こちらのページから、証明書をダウンロードする。
分かりにくいが、「Start by downloading the certificate here.」と書いてある冒頭周辺にある文章をクリックするとダウンロードできる。

すると、「jvastai_root.cer」というファイルがダウンロードされる。これをダブルクリックすると、キーチェーンに追加するかどうかを聞かれるので、右下のプルダウンでキーチェーン「ログイン」を選択し、追加する。

キーチェーンが自動で開くので、そこから追加したばかりの証明書を「信頼する」必要がある。

赤いバツが表示されているVast.aiの証明書を見つけ、ダブルクリックした上で、開いた画面上で信頼の設定を「常に信頼」に切り替える。

これで、「Jupyter direct HTTPS」が利用可能になる。

Vast.aiでのJupyter+Stable Diffusionインスタンスの立ち上げ方

次に、実際にインスタンスを立ち上げる方法を解説する。

起動するテンプレートは、「SD Auto1111」を選ぶ。

「SD Auto1111」テンプレートを選択すると、以下のようにLaunch Modeを選択する事が可能だが、デフォルトで選択されている「Run a jupyter-python notebook (easiest)」をそのまま使う。
「Jupyter direct HTTPS」オプションはオンにしておく。

テンプレートを選択したら、レンタルするインスタンスを探して「RENT」ボタンをクリックする。

「基本的な使い方」のセクションで紹介した手順で、RTX4090やRTX3060あたりのGPUを1台積んでいるインスタンスを選ぶ。
特にStable Diffusionでは大容量のモデルを沢山ダウンロードする事があるので、ダウンロード/アップロードの料金が安い、または無料のインスタンスを選ぶことをお勧めする。

ストレージ容量の割り当ては、いくつのモデルを使用したいかにもよるが、30GBもあれば十分だろう。
大量のモデルとControlNetの全モデルを使いたいといった用途の場合は、50-100GB程度必要になるかもしれない。

「RENT」ボタンをクリックしたら、メニューの「INSTANCES」から起動中のインスタンスを閲覧できる。
1〜2分待てば初期設定が完了し、「OPEN」ボタンが表示されるはずだ。

初期状態では、Stable Diffusionのベースモデルなどしか入っていないので、いきなりStable Diffusionを起動するのではなく、まずはJupyterを起動して、CivitaiやHugging Faceから入手したモデルをアップロードすることから始める。

Jupyterを起動するボタンをクリックすると、ブラウザで新しいタブが開く。
Jupyterの初期画面は、フォルダやファイルが閲覧できるエクスプローラーのような画面になる。初めてJupyterを見る人でも、使い慣れた直感的なUIなはずだ。

「/workspace」というフォルダ内に、Stable Diffusion関連のフォルダが全て入っているので、基本的にはこのフォルダだけを使う。

Jupyter上でStable Diffusionモデルのアップロードを行う

/workspaceフォルダ内にある/stable-diffusion-webuiというフォルダが、Stable Diffusionの実行ファイルや設定ファイルが入っている場所になる。

モデルを保存すべき場所が決まっているので、該当するフォルダ階層まで移動していき、右上の「Upload」をクリックして、利用したいモデルやプラグインのファイルをアップロードする。

モデル(.ckptや.safetensorsファイル)の保存先のフォルダは以下である。
/workspace/stable-diffusion-webui/models/Stable-diffusion

EasyNegativeなどのNegative Prompt用に使うことの多いembeddingsの保存先は以下のフォルダである。
/workspace/stable-diffusion-webui/embeddings

また、画像を補正するために利用するVAEも、以下のフォルダに保存することでWeb UIから利用できるようになる。
/workspace/stable-diffusion-webui/models/VAE

実際に、二次元画像の生成として人気が高いCounterfeit-V3.0モデルをアップロードしてみる。
まずは、上述のパスに従ってJupyterでフォルダ階層を移動していき、/models/Stable-diffusionフォルダを開いたら、ここにローカルに保存しているCounterfeit-V3.0.safetensorsをアップロードする。

Counterfeitのモデルは9GBを超えるファイルなので、そこそこ時間がかかる。自宅のネット回線のアップロード速度が遅い人は、1時間ほどかかってしまうかもしれない(筆者のスマホのテザリングで実験した結果)。

(なお、Jupyterのターミナルを利用することでスピードを上げる方法は後述する。そちらの方法がオススメ。)

アップロードが完了したら、先ほどのVast.aiのInstancesのページに戻り、「OPEN」をクリックすると、Stable Diffusionが立ち上がる。

Stable Diffusion web UIの画面左上で、モデル(チェックポイント)を選択するプルダウンがあるので、それをクリックしてみると、先ほどアップロードしたCounterfeit-V3.0が使えるようになっているはずだ。
(表示されない時は、プルダウンボックスの右側にある更新ボタンを押してロードする)

モデルのアップロードをもっと早く行う方法

上述のように、Jupyterのインターフェース上で、.safetensorsファイルなどをアップロードするのが、初心者でも最も分かりやすいと思われるが、いかんせん自宅のネット回線が弱弱だと時間がかかるし、毎回毎回この作業をするのは面倒だ。

ここでは、Jupyter上でより早くモデルの導入を行う方法も紹介しておく。
リモートマシン上のターミナルを利用する方法なので、普段プログラミングをしない人にとっては使い慣れない画面も出てくるかもしれないが、やることは超簡単なので、理解しておいて損はないはずだ。

先ほどのJupyterのインターフェース上で、右上にある「New」ボタンをクリックすると、リモートマシン上で様々なコマンドを打つことのできる「ターミナル」を起動できる。

「Terminal」を起動すると、ブラウザの別タブが開いて、以下のようなコマンドを受け付ける画面になる。

ここにコマンドを打ち込んでいくことで、自分のPCを介す事なく、インターネット上にあるモデルファイルを、直接Vast.aiのリモートサーバーにダウンロードする事ができる。
自宅のネット回線が遅い場合、インスタンスの回線の方が圧倒的にダウンロード速度が早いので、数十倍のスピードでモデルの導入が完了することもある。

例えば、Counterfeit-V3.0をHugging Faceからダウンロードしてくるコマンドは以下だ。

まず、1行目のcd(チェンジディレクトリ)コマンドで、ダウンロードするファイルを保存したいフォルダまで移動する(ここではモデルのチェックポイントを保存するフォルダ)。
そして、指定したURLのファイルをダウンロードするコマンドであるwgetに、Counterfeit-V3.0のダウンロードリンクを渡すことで、/models/Stable-diffusion/フォルダにモデルが直接ダウンロードされる。

cd /workspace/stable-diffusion-webui/models/Stable-diffusion/
wget https://huggingface.co/gsdf/Counterfeit-V3.0/resolve/main/Counterfeit-V3.0.safetensors

特にStable Diffusionのモデルなど、大容量なファイルはこの方法でダウンロードすることをお勧めする。

そのほかの、1GB以下のVAEやembeddingsなどの雑多なファイルは、Jupyterインターフェース上でアップロードする方法の方が初心者には分かりやすいかもしれない。
もちろん、cdコマンドでVAEやembeddingフォルダまで移動して、wgetでHugging FaceやCivitaiで見つけてきたダウンロードリンクを渡せば、同じ事ができる。

この記事の後半では、さらにテクニカルな環境構築の自動化の方法も解説するが、ここまでマスターすれば、十分実用的だと思う。

使い終わったらインスタンスの破棄を忘れずに

Vast.aiのようなGPUインスタンスのレンタルサービスは、時間単位で課金されるので、使い終わったら必ず返却・破棄する(Destroy)のを忘れないようにする。

メニューの「INSTANCES」から使用中のインスタンスを見つけ、ゴミ箱マークをクリックすると、当該インスタンスを破棄できる。

インスタンスをDestroyすると全てのデータが消えてしまい、次使いたい時はまたレンタルすることから始めなくてはならないので、Stable Diffusionで生成した画像など、保存したいデータはインスタンスをDestroyする前にダウンロードしてローカルに保存しておく。

中級者向けの方法:SSH&いつも使うモデル導入の自動化

次に、Jupyterのインターフェースを使わずに、自分のPCからインスタンスにSSHして、モデルのダウンロードなどもすべてコマンドで実行する手順も紹介する。

自分専用のシェルスクリプトを用意しておくことで、いつも使っているStable Diffusionのモデル、VAE、EasyNegativeなどのembedding、さらにはControlNetの全モデルまで、コマンド一発ですべて自動で導入完了させる事ができる。

GPUインスタンスは、使用するたびにゼロから起動→破棄を繰り返すことになるので、いつもの環境構築の作業はコマンドで自動化するのがベストだ。

この手順はMacを想定したもので、Windowsの場合は大筋やることは変わらないが、実際の手順は多少異なると思われる。

SSH公開鍵の準備

自分のPCのホームディレクトリ直下に「.ssh」フォルダを作成して、ここに公開鍵・秘密鍵を生成する。

ターミナルを開き、ホームディレクトリに移動した上で(cd)、.sshフォルダを作成(mkdir)、当該フォルダのアクセス権限を700に設定する。

初めて実行する人は、.sshフォルダは空になっているはずだが、念のため既存の鍵が入っていないかをチェックする。
ターミナルで以下のコマンドを実行した時、何も表示されなければOK。

# ホームディレクトリ直下に.sshフォルダの生成
cd ~
mkdir .ssh
chmod 700 .ssh
# .sshフォルダ内のファイルの有無の確認
cd ~/.ssh
ls

Macの場合は、デフォルトで公開鍵・秘密鍵のセットを作成するコマンド(ssh-keygen)がある。
実行すると保存場所やパスフレーズを聞かれるが、普段Vast.ai以外にSSHを使う機会のない人は、あまり気にせず全て空欄でエンターを連打すれば良い。

すると、フォルダ内にid_rsaid_rsa.pubという2つのファイルができるので、このうちのid_rsa.pubの内容をcatコマンドで表示して、丸ごとコピーする。

# 暗号鍵の生成
ssh-keygen

# 公開鍵の表示
cat id_rsa.pub

コピーした公開鍵を、Vast.aiのConsole > Account > Change SSH Keyにペーストする。

また、秘密鍵についても、以下のコマンドをターミナルで実行することで登録しておく。
-lコマンドをつけることで、登録されている鍵のFingerprints一覧を表示している。)

# 秘密鍵の登録
ssh-add; ssh-add -l

Stable DiffusionのDocker Image選択(SSH)

Jupyterのテンプレートを使ってもSSHはできるので、Jupyterの手順と同じLaunch Modeを選択しても良いのだが、今回はあえてハードコアにSSH用のテンプレートで起動する。

後ほど紹介するシェルスクリプトで、Stable Diffusionの複数のモデル・Control Net 1.1の全モデルなどを一括で自動ダウンロードすると、軽く50GBほどの通信が発生しうるので、選択するGPUインスタンスはダウンロード/アップロード料金が格安なものを選択することを強くお勧めする。

メニューの「INSTANCES」から起動したインスタンスを確認すると、SSH情報の確認と、Stable Diffusion web UIの起動ができる。

自動で必要なモデルをダウンロードするShell Scriptを作成

GPUインスタンスにSSH接続した状態で、Stable Diffusionのモデル・VAE・Embeddingsなどをダウンロードする手順は基本的に同じで、

  1. cdでモデルを保存するディレクトリに移動
  2. wgetでHugging FaceやCivitaiのダウンロードURLからダウンロード

このステップを繰り返すのみである。

従って、あらかじめ自分が普段使っているStable Diffusionのモデル・VAE・EmbeddingsのダウンロードURLを集めておいて、以下のようなシェルスクリプトを書いて.shファイルを用意しておけば、sh sdsetup.shという感じでターミナルにコマンドを1つ打ち込むだけで、全てのダウンロードが完了する。

以下は、Counterfeit-V3.0、EasyNegativeV2、Counterfeit-V2.5 VAEをダウンロードするシェルスクリプトだ。

GPUインスタンス上でStable Diffusion web UIが入っているパスを最初に定義した上で、cdwgetを繰り返している。
あなたが普段使っているお気に入りのモデルのダウンロードURLをwgetとともに書き足していけば、他のモデルも一気にダウンロードできる。

# Author: notai.jp
# フォルダパスの指定  ------------------------------------------------------------
PATH_SD="/workspace/stable-diffusion-webui/"
PATH_Models=$PATH_SD"models/Stable-diffusion"
PATH_Embed=$PATH_SD"embeddings"
PATH_VAE=$PATH_SD"models/VAE"

# SDモデルのダウンロード  --------------------------------------------------------
cd $PATH_Models
# Counterfeit-V3.0
wget https://huggingface.co/gsdf/Counterfeit-V3.0/resolve/main/Counterfeit-V3.0.safetensors

# Embeddingsのダウンロード  -----------------------------------------------------
cd $PATH_Embed
# EasyNegative V2
wget https://huggingface.co/gsdf/Counterfeit-V3.0/resolve/main/embedding/EasyNegativeV2.safetensors

# VAEのダウンロード  ------------------------------------------------------------
cd $PATH_VAE
# Counterfeit V2.5
wget https://huggingface.co/gsdf/Counterfeit-V2.5/resolve/main/Counterfeit-V2.5.vae.pt

Hugging Faceならwgetコマンドで問題なく動作するが、Civitaiの場合はURLの後に--content-dispositionというコマンドをつけなければ、モデルのファイル名が変わってしまうので注意しよう。

このスクリプトを「sdsetup.sh」と名付けて保存し、自分のMacのホームディレクトリ直下に/workspaceというフォルダを設けて、その中に置く。
もちろん、他の場所に保存しても良いが、違う場所に配置した場合は、適宜以下のコマンドのパスを書き換えて欲しい。

完成した「sdsetup.sh」を、今度はscpコマンドを使って、自分のPCからリモートマシンに転送する。

scpコマンドを利用するにあたり、SSH先の情報が必要になる。
Vast.aiの先ほど起動したインスタンスで、SSH情報の確認を行う。例えばSSH接続用に以下のようなアドレス・ポートが表示されたとする。

ssh -p 7417 root@52.204.230.7 -L 8080:localhost:8080

この場合、scpコマンドの記法は以下のようになる(自分がその時利用しているインスタンスの情報に書き換えること)。自分のPCのターミナルにこれを打ち込む。

scp -P 7417 ./workspace/sdsetup.sh root@52.204.230.7:/workspace

前半の./workspace/sdsetup.shの部分で、自分のPC上で先ほどのsdsetup.shを保存したディレクトリを指定している。
後半のroot@52.204.230.7:/workspaceの部分が、転送先のインスタンスの情報と、インスタンス上でファイルを配置したいディレクトリである。

こうしてファイルが転送できたら、インスタンスの/workspaceディレクトリ直下にsdsetup.shファイルが保存されていることになる。

先ほどVast.aiの起動中のインスタンスで確認したSSH接続のコマンドをターミナルにコピペして、自分のPCとインスタンスのSSH接続を確立した後で、先ほどscpで転送したシェルスクリプトを実行するコマンドを打ち込めば良い。

ls -a
cd /workspace
sh sdsetup.sh

ターミナル上に、各モデルのダウンロードの進捗が表示されるはずだ。
通信が高速なインスタンスを選択すれば、30GBほどのダウンロード作業もあっという間に完了するので、起動するたびにこのスクリプトを実行するのも十分実用的だと言える。

Stable Diffusion WebUI上でモデル等が使えるか確認

シェルスクリプトの実行が完了したら、導入したモデル・Embeddings・VAEが利用できるかどうか確かめる。

再びVast.aiの「INSTANCES」メニューに移動し、起動中のインスタンスの「OPEN」ボタンをクリックすることで、Stable Diffusion web UIがブラウザ上で起動する。

先ほどダウンロードしたCounterfeit-V3.0のモデルチェックポイントや、VAEの選択ができるようになっているはずだ。
(右上のVAEのプルダウンメニューは、Stable Diffusion web UIのSettings > User Interfaceから表示を追加している。)

実際に実行してみた画像が以下である。
16:9のアスペクト比で生成する画像のサイズは960*540、アップスケーラーでこれを2倍の1920*1080のフルHDサイズまで拡大して生成してみた。

これだけ大きなサイズで生成しても、RTX3060を用いた今回は、15秒ほどで画像を生成することができた。

筆者のMac Book Pro(M1 Proを搭載)で同様サイズの画像を生成しようとすると、そもそもVRAMの容量不足でエラーが起きて生成できないし、たとえ画像サイズを大幅に小さくしても生成に1〜2分はかかってしまうので、圧倒的に高速だ。

ControlNetのモデルを一括自動ダウンロードする方法

Control Netは、AIで生成した画像の一部のみを修正したり、人間のポーズを指定してイラストを生成させたり、高度な画像生成には必要不可欠なプラグインだ。

ありがたいことに、Vast.aiのStable Difussion WebUI用のDocker Imageには、起動した時点でControlNet 1.1プラグインが導入されている。

しかしながら、ControlNetには10個以上のモデルがあるところ、1つあたり約1.5GBもあるので、初期状態ではうち1つのモデルファイル(.pth)しか入っていない。
(全部入っていたら、ControlNetだけで20GB近くストレージ容量が占有されるので、まあ当然である。)

Vast.aiでStable Diffusionを起動するたびに、ゼロからControlNetのモデルを一つ一つダウンロードし直すのはあまりに面倒だ。
ここでは、ControlNetのモデルを全て一括でダウンロードするPythonスクリプトを作成し、Vast.aiでの環境構築を超スムーズにする方法を紹介する。

PythonでHugging Face Hubというライブラリを利用すると、ControlNetをはじめ、Hugging Faceの特定のレポジトリをからファイルをダウンロードすることをPythonスクリプトで自動化する事ができる。

まずは、Vast.aiで利用しているインスタンスにHugging Face Hubをインストールする。
筆者が試したところ、初期状態で既にインストールされていたので、最新版であることを確認する意味しかない。

pip install --upgrade huggingface_hub

Pythonスクリプトでsnapshot_download()という関数を利用すると、HuggingFaceのレポジトリから、特定の条件で一部のファイルだけを抽出してダウンロードする事ができる。
ここでは、allow_patterns="*.pth"というパラメータをセットすることで、コントロールネットのレポジトリ内にあるファイルのうち、拡張子が.pthであるものだけを抽出してダウンロードしている。

from huggingface_hub import snapshot_download
from huggingface_hub import hf_hub_download

# Directories  ----------------------------------------------------------------
PATH_SD = "/workspace/stable-diffusion-webui/"

# Download ControlNet Models  -------------------------------------------------
snapshot_download(repo_id="lllyasviel/ControlNet-v1-1",
                  allow_patterns="*.pth",
                  local_dir=PATH_SD+"extensions/sd-webui-controlnet/models")

このスクリプトを、get_huggingface.pyなどと名付けて、上述のシェルスクリプトの中で実行すれば、これも毎回のルーティンとして自動化することができる。

もちろん、自分がよく使う一部のモデルだけで足りるのであれば、wgetコマンドを数行シェルスクリプト内に足しても良いだろう。

実際に、Unsplashから見つけてきたフリー素材の以下の画像を、ControlNetのNormalモデルを使ってイラスト化してみたのが以下の画像だ。

この画像の生成も、10秒そこらで完了しているので、普段M1 Proを積んだMac Book Proで長い時間をかけてControlNetを利用している筆者からすると、GPUのパワーには驚愕するばかりだ。

Vast.aiの利用法まとめと注意点

この記事では、Vast.aiの基本的な使い方から、Stable Diffusionの本格的な環境構築まで、ステップバイステップで解説してきた。

一度使い方をマスターすれば、GPUインスタンスを借りて、いつも使っているモデルのダウンロードをシェルスクリプトで一発完了して、5分ほどでStable Diffusionのいつもの利用環境をGPUインスタンス上に用意する事ができるだろう。

しかも、自分のPCに何もインストールしなくても起動できるので(Jupyter direct HTTPSを使わない)、いつでもどこでもサクッと画像生成ができてしまう。

筆者はこれまでM1 Proを搭載したMac Book Proに各種生成AIのモデルをダウンロードして頑張って使ってきたが、1時間50円そこらで超高速のGPUインスタンスが利用できるので、GPUインスタンスを利用する機会がかなり増えた。

生成AIをローカルで動かすロマンに取り憑かれると、20万円を超えるGPUの手痛い出費がありえるが、20万円もあればVast.aiでRTX4090を4,000時間ほど使えるので、当分の間、GPUを購入せずに済みそうだ。

ただし、Vast.aiのデメリットとしては、個人間のレンタルサービスなので、相手が何者なのかがわからない、というセキュリティ上の懸念がある。
ディスクは暗号化されていないので、ホスト(貸主)に見られたら困るような機密情報はアップロードしないようにすべきだ。

しかし、そのデメリットを踏まえても、Stable DiffusionやLLaMA2などで個人で遊んだり、ユースケースの実験をする場として活用する分には、有り余る価格メリットがある。

Make a comment

*
*
* (公開されません)