HuggingFace Transformers 4.29 : Tutorials : モデルの共有 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/29/2023 (v4.29.1)
* 本ページは、HuggingFace Transformers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
HuggingFace Transformers 4.29 : Tutorials : モデルの共有
最後の 2 つのチュートリアルでは PyTorch, Keras そして分散セットアップのための 🤗 Accelerate でモデルを再調整する方法を示しました。次のステップは貴方のモデルをコミュニティで共有することです!Hugging Face では、人工知能を総ての人に対して民主化するためには知識とリソースをオープンに共有することが妥当であると信じています。他の人が時間とリソースを節約するのに役立つように、モデルをコミュニティと共有することを考えることを奨励します。
このチュートリアルでは、訓練された、あるいは再調整されたモデルを モデルハブ で共有する 2 つの方法を学習します :
- プログラミング的にファイルをハブにプッシュする。
- web インターフェイスでファイルをハブにドラッグ&ドロップする。
Note : モデルをコミュニティと共有するためには、huggingface.co のアカウントが必要です。既存の組織に参加したり新しいものを作成することもできます。
リポジトリの機能
モデルハブの各リポジトリは典型的な GitHub レポジトリのように動作します。リポジトリはバージョン管理, コミット履歴, そして差分を可視化する機能を提供しています。
モデルハブの組み込みバージョン管理は git と git-lfs に基づいています。換言すれば、一つのモデルを一つのリポジトリとして扱うことができて、より素晴らしいアクセス制御とスケーラビリティを可能にしています。バージョン管理は、モデルの特定のバージョンをコミットハッシュ, タグやブランチでピン留め (固定) する方法である、リビジョン (の使用) を可能にします。
その結果、revision パラメータで特定のモデルバージョンをロードすることができます :
model = AutoModel.from_pretrained(
"julien-c/EsperBERTo-small", revision="v2.0.1" # tag name, or branch name, or commit hash
)
ファイルもまたリポジトリで簡単に編集されます、そしてコミット履歴と差分を閲覧することができます :
セットアップ
ハブにモデルを共有する前に、貴方の Hugging Face クレデンシャルが必要です。端末へのアクセスを持つ場合、🤗 Transformers がインストールされた仮想環境で次のコマンドを実行してください。これは貴方のアクセストークンを Hugging Face キャッシュフォルダ (デフォルトで ~/.cache/ ) にストアします :
huggingface-cli login
Jupyter や Colaboratory のようなノートブックを使用している場合には、huggingface_hub ライブラリがインストールされていることを確認してください。このライブラリはプログラミング的にハブと相互作用します。
pip install huggingface_hub
それからハブにサインインするために notebook_login 使用し、そして次でログイン用のトークンを生成するために ここ のリンクに従ってください :
from huggingface_hub import notebook_login
notebook_login()
モデルを総てのフレームワークのために変換する
貴方のモデルが様々なフレームワークで作業する人が使用できることを確実にするため、モデルを PyTorch と TensorFlow の両方のチェックポイントでモデルを変換してアップロードすることを勧めます。このステップをスキップした場合、ユーザは依然として異なるフレームワークからモデルをロードできますが、 🤗 Transformers はチェックポイントを on-the-fly に変換する必要がありますので、それは遅くなります。
別のフレームワークへのチェックポイントの変換は簡単です。PyTorch と TensorFlow がインストールされていることを確認し (インストール手順は こちら を参照)、そして他のフレームワークでタスクに対する特定のモデルを見つけてください。
TensorFlow から PyTorch にチェックポイントを変換するには from_tf=True を指定します :
pt_model = DistilBertForSequenceClassification.from_pretrained("path/to/awesome-name-you-picked", from_tf=True)
pt_model.save_pretrained("path/to/awesome-name-you-picked")
PyTorch から TensorFlow にチェックポイントを変換するには from_pt=True を指定します :
tf_model = TFDistilBertForSequenceClassification.from_pretrained("path/to/awesome-name-you-picked", from_pt=True)
そしてその新しいチェックポイントで新しい TensorFlow モデルをセーブできます :
tf_model.save_pretrained("path/to/awesome-name-you-picked")
訓練中にモデルをプッシュ
モデルへのハブへの共有は特別なパラメータやコールバックを追加するくらいに単純です。再調整チュートリアル を思い出してください、TrainingArguments クラスはハイパーパラメータと追加の訓練オプションを指定するところです。これらの訓練オプションの一つはモデルをハブに直接プッシュする機能を含みます。TrainingArguments で push_to_hub=True を設定します :
training_args = TrainingArguments(output_dir="my-awesome-model", push_to_hub=True)
通常のように訓練引数を Trainer に渡します :
trainer = Trainer(
model=model,
args=training_args,
train_dataset=small_train_dataset,
eval_dataset=small_eval_dataset,
compute_metrics=compute_metrics,
)
モデルの再調整が終わった後、訓練済みモデルをハブにプッシュするために Trainer の push_to_hub() を呼び出します。🤗 Transformers は訓練ハイパーパラメータ, 訓練結果そしてフレームワークのバージョンをモデルカードに自動的に追加してくれさえします!
trainer.push_to_hub()
PushToHubCallback でモデルをハブに共有します。PushToHubCallback 関数では、以下を追加します :
- モデルの出力先ディレクトリ。
- トークナイザー。
- hub_model_id, これはハブのユーザ名とモデル名です。
from transformers import PushToHubCallback
push_to_hub_callback = PushToHubCallback(
output_dir="./your_model_save_path", tokenizer=tokenizer, hub_model_id="your-username/my-awesome-model"
)
fit にコールバックを追加します、すると 🤗 Transformers は訓練済みモデルをハブにプッシュします :
model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=3, callbacks=push_to_hub_callback)
push_to_hub 関数の使用
モデルをハブにアップロードするためにその上で push_to_hub を直接呼び出すこともできます。
push_to_hub でモデル名を指定します :
pt_model.push_to_hub("my-awesome-model")
これは、モデル名 my-awesome-model で貴方のユーザ名のもとにリポジトリを作成します。ユーザはモデルを from_pretrained 関数でロードできるようになります :
from transformers import AutoModel
model = AutoModel.from_pretrained("your_username/my-awesome-model")
貴方が組織に属していてモデルを代わりに組織名のもとにプッシュしたい場合には、単にそれに repo_id を追加してください :
pt_model.push_to_hub("my-awesome-org/my-awesome-model")
push_to_hub 関数はまた他のファイルをモデル・リポジトリに追加するためにも使用できます。例えば、トークナイザーをモデル・レポジトリに追加します :
tokenizer.push_to_hub("my-awesome-model")
あるいは多分、再調整された PyTorch モデルの TensorFlow バージョンを追加したいでしょう :
tf_model.push_to_hub("my-awesome-model")
今は貴方の Hugging Face プロファイルにナビゲートするとき、新しく作成されたモデル・リポジトリを見るはずです。Files タブをクリックするとレポジトリにアップロードした総てのファイルが表示されます。
ファイルを作成してレポジトリにアップロードする方法の詳細は、ここ のハブ・ドキュメントを参照してください。
web インターフェイスによるアップロード
コードを使わないアプローチを好むユーザはハブの web インターフェイスを通してモデルをアップロードできます。新しいリポジトリを作成するために huggingface.co/ にアクセスしてください :
ここから、モデルについての幾つかの情報を追加します :
- レポジトリの オーナー を選択します。これは貴方自身か、所属する組織のどれでもかまいません。
- モデルの名前を選択します、これはまたリポジトリ名にもなります。
- モデルがパブリックかプライベートかを選択します。
- モデルのライセンス使用方法を指定します。
次に新しいファイルをリポジトリにアップロードするためには Files タブをクリックして Add ファイル ボタンをクリックします。それからアップロードしてコミットメッセージを追加するためにファイルをドラッグ&ドロップします。
モデルカードの追加
ユーザがモデルの機能, 制限, 潜在的なバイアス, そして倫理規定を理解することを確実にするため、リポジトリにモデルカードを追加してください。モデルカードは README.md ファイルで定義されます。以下によりモデルカードを追加できます :
- README.md ファイルを手動で作成してアップロードする。
- モデルリポジトリで Edit モデルカード ボタンをクリックする。
モデルカードが含むべき情報の型の良いサンプルのために DistilBert モデルカード を見てください。モデルのカーボンフットプリントやウィジェット・サンプルのような README.md ファイルで制御可能な他のオプションの詳細については、ここ のドキュメントを参照してください。
以上