ぐるのなんか

多分ゲームのプレイ日記とか

Paperspaceで使うファイルの置き場を変えてみた

相変わらずよくわからんまま追加学習させてます。
LoRAとかにも手を出したみたんですけど、sd_dreambooth_extensionのLoRAは実装が壊れてるのか画像生成時にうまく適用できないみたいですね。
今んとここの拡張機能を使わせてもらってます。
github.com

とりあえずファイル置き場を作る

前回の反省

さてタイトルの件ですが前回の記事で学習モデルやらなんやらをGoogleDriveから引っ張ってくる話をしました。
なんかAPI使ったり認証情報保存してアップロードしたりと七面倒なことを書いてましたが、公式のドキュメント見たら「gdownってライブラリ使いなー」って書いてありました。
docs.paperspace.com
めっちゃ簡単そうですね。
ただこれGoogleDriveの方のファイルを共有リンクからアクセス可能にしないと駄目っぽいのでそれもそれでどうなん?となってました。
そもそも無料で使ってると上限15GBなのでちょっと欲張るとすぐいっぱいになりますね。

新しい寄生先の作成

で、無料で使えてアクセス制限もかけられる都合の良いサービスないかなと探してたら、HuggingFaceで普通にできるっぽいです。*1
Stable Diffusionのモデル落としてくるためにしか使ってなかったので全く気づきませんでした。上っ面の部分しか触れてないとこういうことありますよね。

画面右上のユーザーのアイコンクリックしたとこのここ

上からNew Model=学習モデル置く場所、New Dataset=学習用データセット置く場所、New Space=paparspaceみたいなクラウドサービス動かす場所、を作れるようです。

ただ一番下はともかく、New ModelとNew Datasetでできるものは実体としてはGitリポジトリっぽいので、公開しないなら使い分け意識しなくてもいいかなって感じです。
とりあえずNew Modelをクリックすると下みたいな画面が開くので適当に名前つけてPrivateを選択、

Create Modelをクリックでリポジトリが作成されます。

Create Model Cardってボタンがあるので、New Model、New Datasetはそれぞれ学習モデル、データセットを公開するための雛形も一緒に作ってくれるって感じですね。

リポジトリができたら好きなGitクライアントでローカルにクローン、クローンしたフォルダにアップロードしたいファイル置いてコミット→プッシュ、でOK。
Privateの場合だけかも知れませんがクローンのタイミングでGit Credencial ManagerからHuggingFaceの認証情報を求められます。

普通にHuggingFaceのログインに使ってる情報を入れればOKです。

Paperspace側に持ってくる

HuggingFace側の準備

アップロードが出来たらそのファイルを使いたい環境に持ってくるわけで、curlコマンドとかでダウンロードできるんですが、
リポジトリをPrivateにしているので認証も通してやる必要があります。

認証の仕方は色々あるんですが、とりあえずHuggingFaceの方で参照用のトークンを作成し、curlコマンド内にトークンも入れ込んでしまう形にしました。(あんまり詳しくはない)
とりあえずトークンを作成する画面へはSettings>Access Tokens>New Token

適当な名前つけてRoleのとこをダウンロード用ならread、アップロード用ならwriteを選択、

作成されたトークンを右端のボタンでコピー。

あと作成したリポジトリ内のアップロードしたファイルのページを開いて

downloadボタンを右クリックしてリンクをコピー。

Paperspace側でダウンロード

ファイルをダウンロードするためのノートブックに以下のようなコマンドを記載。

%%bash
cd (ファイルをDLしたいディレクトリ)

token=(コピーしたトークン)
url=(コピーしたリンクのファイル名除いたURL)
file_name=(ファイル名)
curl -K<(builtin echo "-u :${token}") -Lo $file_name $url$file_name

これを実行すればファイルがダウンロードされてくるはず。
やたら変数切ってるのは複数ファイル落としたい場合に備えてで、最後の2行だけ繰り返すか、file_name2とか作って

curl -K<(builtin echo "-u :${token}") -Lo $file_name $url$file_name -Lo $file_name2 $url$file_name2 ... 

って感じでいけると思います。
※2023/08/23追記
ちょっと前からこのコマンドでダウンロードができなくなってたんですが、公式のドキュメントとか見てcurlコマンドのところを以下に書き換えたらうまいこといきました。

curl -K <(builtin echo "-H \"Authorization: Bearer ${token}\"") -Lo $file_name $url$file_name

BASIC認証んとこにトークン書いてたのをHTTPリクエストのヘッダーにトークン書き込むように変えた感じです。
そういやなんかのコマンド実行したときにBASIC認証廃止するよみたいなメッセージが出てたかもしれない。
追記ここまで

そのまま使う人がいるか分かりませんが、使う場合は自己責任でお願いします。
トークンの値をpaperspace上に置いとくのはどうなんだと自分でも思いますが、
まあそれを見られるということはそもそも非公開にしているノートブックを覗かれてるわけで、
その時点でだいぶ終わってるので気にするべきは別のとこかなと。
おすすめの方法があれば教えてください。

一応builtin echoの部分は下記の記事を参考にして多少気を使った結果です。
qiita.com

おわり

ということで、やってる事自体はあんま変わらんのでストレージ周りに関係する話だけ書きました。
まあでもDreamboothじゃなくてLoRA使うならモデルサイズもそこまで気にする必要もないかなぁと思ったり。
バカでかいサイズのデータセット作ったりしたらヘビーに使うかもしれません。
何にせよGoogleDriveは他の用途でも使うので追加学習関連を切り分けられて良かったです。
おわり。

*1:>

無制限ってことでいいんだよな…?