はじめに
Google Colabを用いてstable diffusionや機械学習で遊んでいたが,いつのまにかコンピューティングユニット制になっていたので,Paperspace Gradientに乗り換えてみた.
Paperspace Gradientには無料版,8ドル,39ドルのプラン(2023年2月現在)があり,使えるGPUや永久ストレージ等に違いがある.個人的に一番気になったのは,無料版だとプロジェクトが公開状態になることである.Google Colabとは異なりGoogle をマウントすることができない上に,永久ストレージの容量を超えると従量課金される点が怖い.そこで,Paperspace Gradient上で生成したデータをGoogle Driveに転送する方法を構築した.
環境
- Windows10 PC
- Google Chrome
- Paperspace Gradient Pro (8ドルのやつ)
- Google Cloud Platform (課金登録無し)
方法
Paperspace Gradientの契約とpydrive2の設定
- Paperspace Gradientの有料版を契約(無料版でも問題はない)
注意点は特にないが,クレジットカードの登録時にAmexは使えなかった.MasterCardを登録した.珍しく住所の登録欄があったが,Stateに都道府県,Cityに市区町村,Addressに残りの住所を書いたら問題なく登録はできた(念のため英語で住所は書いた).
- pydrive2を用いてGoogle Driveにアップロードとダウンロードできる状態にする
pydrive2自体の使い方は多くのサイトで紹介しているが,Paperspace Gradientでpydrive2を使用するためには,Google Driveの認証の問題をクリアする必要がある.
ローカル環境でpydrive2を使用する方法ではPaperspace Gradient上では認証ができない.そのため,このリンク先(ここをクリック)に書いてあるように,Google APIの設定を行う必要があった.基本的にはそのサイトに書いてあるように操作すればできたが,私の環境では一部修正が必要だった.
具体的には,ローカルでauth.pyを実行する際の初期ファイル構成を以下のようにする必要があった.setting.yaml内も以下に対応させて修正した.
- 上記のjsonおよびyamlファイル(client_secrets.json,saved_credentials.json, settings.yaml)をPaperspace Gradient上の作業スペースにアップロードする.
- 以上で,pydrive2を用いてgoogle drive上のファイルを扱うことはできるようになった.
Automatic1111上での運用
Google Driveにアクセスできるようになったので,今流行ってるStable Diffusionのweb UIであるAUTOMATIC1111上で生成した画像をgoogle driveにアップロードする方法を構築した.
- AUTOMATIC1111をPaperspace Gradient上にインストールする
基本的には,このサイト(ここをクリック)通りにやればできる.
- Google Driveにファイルをディレクトリごとアップロードするコードを追記する.
先ほどダウンロードされたipynbファイル(これ)の中に,Google Driveへのファイルのアップロード用のセルを挿入する.ひとまず,このサイト(ここをクリック)にあるアップロードスクリプトをコピペして挿入すればOK.私は,「Launch the WebUI」セルの下に挿入した.
その後,コピペしたコードの”pydrive”になっている箇所を”pydrive2″に修正した.
- ipynbファイルを更に修正する
- pydrive2をpipでインストールするコードの追記する
元のipynbファイル(これ)は,google driveを使用していないのでpydrive2をインストールするコードを追記する.「!pip install pydrive2」をどこかのセルに追加すれば良い.
- 2.で追記したコード内のpathの値を修正する.
txt2imgで画像を生成した場合,’/notebooks/storage/stable-diffusion/stable-diffusion-webui/outputs/txt2img-images’ディレクトリに画像が生成されるため,pathにはこの値を設定する.parentidには,Google Drive上のアップロードしたいフォルダのフォルダIDを設定する.
- pydrive2をpipでインストールするコードの追記する
- pydrive2の設定で生成したjsonおよびyamlファイル(client_secrets.json,saved_credentials.json, settings.yaml)を,’stable-diffusion-webui’フォルダ直下に置く.
- あとは,1.で紹介したサイトの通りに実行していく.画像を生成したらAUTOMATIC1111を閉じてセルを終了する.その後,Google Driveにファイルをアップロードするコードを実行することで,Google Drive上の指定したフォルダに画像がコピーされる.
- 容量の節約のために,「!rm -rf /notebooks/storage/stable-diffusion/stable-diffusion-webui/outputs/txt2img-images/*」 により,Paperspace上の生成した画像を全て削除する.もともとipynbに削除用のセルが記載されていたが,そのコードではうまくファイルが消えなかった.
まとめ
Paperspace Gradient上でAUTOMATIC1111を実行し,生成した画像をGoogle Driveにコピーすることができた.Paperspace Gradientは「/tmp」,「/storage」,「/notebook」のディレクトリがあり,課金対象の永久ストレージ領域は「/storage」,「/notebook」である.「/tmp」は一時的な保存領域であり,Machineを止めるとデータは消えるため,一時的に使用するモデルや画像を入れ放題(上限はあるかもしれない)である.「/tmp」ディレクトリをうまく活用することで,大きなデータも扱えると思われるので,積極的に利用していきたい.