AUTOMATIC1111をPaperspace Gradientで実行し, Google Driveに画像を送る.

こちらは旧バージョンです.記事「AUTOMATIC1111をPaperspace Gradientで実行し, Google Driveに画像を送る(認証にサービスアカウント利用Ver.)」を参考にしてください.

はじめに

 Google Colabを用いてstable diffusionや機械学習で遊んでいたが,いつのまにかコンピューティングユニット制になっていたので,Paperspace Gradientに乗り換えてみた.
 Paperspace Gradientには無料版,8ドル,39ドルのプラン(2023年2月現在)があり,使えるGPUや永久ストレージ(Persistent Storage)の容量等に違いがある.個人的に一番気になったのは,無料版だとプロジェクトが一般公開状態になることである.そして,Google Colabとは異なりGoogle Driveをマウントすることができない上に,永久ストレージの容量を超えると従量課金される点が怖い.そこで,Paperspace Gradient上で生成したデータをGoogle Driveに転送する方法を構築した.

環境

  • Windows10 PC
  • Google Chrome
  • Paperspace Gradient Pro (8ドルのやつ)
  • Google Cloud Platform (GCP.Google Drive APIは無料)

方法

Paperspace Gradientの契約

  1. Paperspace Gradientの有料版を契約
     注意点は特にないが,クレジットカードの登録時にAmexは使えなかった(私はMasterCardを登録した).珍しく,クレジットカードの登録内容に住所の登録欄があったが,Stateに都道府県,Cityに市区町村,Addressに残りの住所を書いたら問題なく登録はできた(念のため英語で住所は書いた).
     これから紹介する手法は,OAuth2.0認証に必要なファイルをPaperspace Gradientに配置するため,公開設定になってしまう無料版を使用することはNG 

pydrive2の設定

  1. pydrive2を用いてGoogle Driveにアップロードとダウンロードできる状態にする
    【追記】GCPのGoogle Drive APIで,OAuth2.0認証ではなくサービスアカウントを用いて認証ファイルを生成し,pyDrive2によりファイルのアップロードとダウロードを実現する方法があった(こちらの「Googleの認証」を参照).この方法であれば,OAuth2.0認証を通すための認証ファイルをローカル環境で生成する必要がなく,認証ファイルの生成がGCP上で完結する.
     変更点は,
    工程(取り消し線の文章)でclient_secrets.jsonなどをアップロードしていた場所に上記のサイトで作成する認証ファイル service_account.jsonをアップロードすることと,Google Driveに画像をアップロードするコードでservice_account.jsonを読み込むようにするだけである.
     pydrive2自体の使い方は多くのサイトで紹介しているが,Paperspace Gradientでpydrive2を使用するためには,Google Driveの認証の問題をクリアする必要がある.
     ローカル環境でpydrive2を使用する方法ではPaperspace Gradient上では認証ができない.そのため,このリンク先(ここをクリック)に書いてあるように,Google APIの設定を行う必要があった.基本的にはそのサイトに書いてあるように作業すれば良いのだが,私の環境では一部修正が必要だった.
     具体的には,ローカルでauth.pyを実行する際の初期ファイル構成を以下のようにする必要があった.setting.yaml内も以下に対応させて修正した.主な修正点は,saved_credentials.jsonも空のファイルであらかじめ作成しておく必要があったことと,OAuth2.0認証に必要なファイルの名前がclient_secrets.jsonである必要があったことである.


     
  2. Paperspace Gradientに認証ファイルをアップロード
     上記のjsonおよびyamlファイル(client_secrets.json,saved_credentials.json, settings.yaml) service_account.jsonをPaperspace Gradient上の作業スペースにアップロードする(AUTOMATIC1111の場合のアップロード先は後述).
     
  3. 設定終了
     以上で,pydrive2を用いてgoogle drive上のファイルを扱うことはできるようになった.
     

Automatic1111上と組み合わせる

 Google Driveにアクセスできるようになったので,今流行ってるStable Diffusionのweb UIであるAUTOMATIC1111上で生成した画像をgoogle driveにアップロードする方法を構築した.

  1. AUTOMATIC1111をPaperspace Gradient上にインストールする.
     基本的には,このサイト(ここをクリック)通りにやればできる.プロジェクトのサイト(Github)を見ても良いかも.
     
  2. Google Driveにファイルをディレクトリごとアップロードするコードを追記する.
     先ほどダウンロードされたipynbファイル(これ)の中に,Google Driveへのファイルのアップロード用のセルを挿入する.ひとまず,このサイト(ここをクリック)にあるアップロードスクリプトをコピペしてセルを挿入すればOK.WEBUIの使用後に画像を転送するので,私は「Launch the WebUI」セルの下に挿入した.その後,コピペしたコードの”pydrive”になっている箇所を”pydrive2″に修正した.
    【追記】service_account.jsonを読み込むコードを,上記のアップロードスクリプトをコピペしたセル内に追記した.このサイトの「PyDriveの動作確認」の箇所を参考に,コードを修正すること(以下のように修正する).

    アップロード用のセルの修正箇所(追加と削除)


     
  3. ipynbファイルを修正する .
    • pydrive2をインストールするセルを追記する
       元のipynbファイル(これ)は,google drive関連のコードの記述がないので,そのままではpydrive2がインストールされない.「!pip install pydrive2」と記入したセルを追加site
    • 2.で挿入したコードのpathの値を修正する.
       txt2imgで画像を生成した場合,「/notebooks/storage/stable-diffusion/stable-diffusion-webui/outputs/txt2img-images」ディレクトリに画像が生成されるため,pathにはこの値を設定する.parentidには,Google Drive上のアップロードしたいフォルダのフォルダIDを設定する.フォルダIDの取得方法に関しては,こちらのサイトなどを追加してインストールする.
  4. pydrive2の設定」で生成した認証ファイルjsonおよびyamlファイル(client_secrets.json,saved_credentials.json, settings.yaml) service_account.jsonを,「/notebooks/stable-diffusion-webui」ディレクトリ直下に置く(以下の画像でいえば,「stable-diffusion-webui」ディレクトリに設置する).

     
  5. あとは,1.で紹介したサイトの通りにセルを実行していく.画像を生成し終わったら,AUTOMATIC1111を閉じて,実行中のセルを終了する.その後,2.で作成したセル(Google Driveにファイルをアップロードするセル)を実行することで,Google Drive上の指定したフォルダに画像がコピーされる.
     
  6. 容量の節約のために,「!rm -rf /notebooks/storage/stable-diffusion/stable-diffusion-webui/outputs/txt2img-images/*」 により,Paperspace上の生成した画像を全て削除する.ipynbファイル(これ)に削除用のセルが記載されていたが,私はそのコードではうまくファイルが消えなかった.
     

まとめ

 Paperspace Gradient上でAUTOMATIC1111を実行し,生成した画像をGoogle Driveにコピーすることができた.Paperspace Gradientは「/tmp」,「/storage」,「/notebook」,「/datasets」のディレクトリがあるらしく,課金対象の永久ストレージ(Persistent Storage)領域は,「/storage」,「/notebook」,「/datasets」である(Persistent Storageの仕様を見た感じだと,「/notebook」と「/datasets」ディレクトリは「/storage」の下に紐づいている).←なんか色々間違ってる気がするので,消しておく. 

 「/tmp」は一時的な保存領域であり,Machineを止めるとデータは消えるため,一時的に使用するモデルや画像を入れ放題である(公式サイトに書いてないので,仕様の詳細は不明).「/tmp」ディレクトリをうまく活用することで,大きなデータも扱えると思われるので,積極的に利用していきたい.

Paperspace Gradientのワークスペースのディレクトリ構造(公式サイトより引用)

コメント

タイトルとURLをコピーしました