Share a Model
最後の2つのチュートリアルでは、PyTorch、Keras、および🤗 Accelerateを使用してモデルをファインチューニングする方法を示しました。次のステップは、モデルをコミュニティと共有することです!Hugging Faceでは、知識とリソースを公開的に共有し、人工知能を誰にでも提供することを信じています。他の人々が時間とリソースを節約できるように、モデルをコミュニティと共有することを検討することをお勧めします。
このチュートリアルでは、訓練済みまたはファインチューニングされたモデルをModel Hubに共有する2つの方法を学びます:
- プログラムでファイルをHubにプッシュする。
- ウェブインターフェースを使用してファイルをHubにドラッグアンドドロップする。
コミュニティとモデルを共有するには、huggingface.coでアカウントが必要です。既存の組織に参加したり、新しい組織を作成したりすることもできます。
Repository Features
Model Hub上の各リポジトリは、通常のGitHubリポジトリのように動作します。リポジトリはバージョニング、コミット履歴、違いの視覚化の機能を提供します。
Model Hubの組み込みバージョニングはgitおよびgit-lfsに基づいています。言い換えれば、モデルを1つのリポジトリとして扱うことができ、より大きなアクセス制御とスケーラビリティを実現します。バージョン管理にはリビジョンがあり、コミットハッシュ、タグ、またはブランチ名で特定のモデルバージョンをピン留めする方法です。
その結果、revision
パラメータを使用して特定のモデルバージョンをロードできます:
>>> model = AutoModel.from_pretrained(
... "julien-c/EsperBERTo-small", revision="v2.0.1" # タグ名、またはブランチ名、またはコミットハッシュ
... )
ファイルはリポジトリ内で簡単に編集でき、コミット履歴と差分を表示できます:
Set Up
モデルをHubに共有する前に、Hugging Faceの認証情報が必要です。ターミナルへのアクセス権がある場合、🤗 Transformersがインストールされている仮想環境で以下のコマンドを実行します。これにより、アクセストークンがHugging Faceのキャッシュフォルダに保存されます(デフォルトでは ~/.cache/
に保存されます):
huggingface-cli login
JupyterやColaboratoryのようなノートブックを使用している場合、huggingface_hub
ライブラリがインストールされていることを確認してください。
このライブラリを使用すると、Hubとプログラム的に対話できます。
pip install huggingface_hub
次に、notebook_login
を使用してHubにサインインし、こちらのリンクにアクセスしてログインに使用するトークンを生成します:
>>> from huggingface_hub import notebook_login
>>> notebook_login()
Convert a Model for all frameworks
異なるフレームワークで作業している他のユーザーがあなたのモデルを使用できるようにするために、 PyTorchおよびTensorFlowのチェックポイントでモデルを変換してアップロードすることをお勧めします。 このステップをスキップすると、ユーザーは異なるフレームワークからモデルをロードできますが、 モデルをオンザフライで変換する必要があるため、遅くなります。
別のフレームワーク用にチェックポイントを変換することは簡単です。 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")
Flaxでモデルが利用可能な場合、PyTorchからFlaxへのチェックポイントの変換も行うことができます:
>>> flax_model = FlaxDistilBertForSequenceClassification.from_pretrained(
... "path/to/awesome-name-you-picked", from_pt=True
... )
Push a model during traning
モデルをHubにプッシュすることは、追加のパラメーターまたはコールバックを追加するだけで簡単です。
ファインチューニングチュートリアルから思い出してください、TrainingArgumentsクラスはハイパーパラメーターと追加のトレーニングオプションを指定する場所です。
これらのトレーニングオプションの1つに、モデルを直接Hubにプッシュする機能があります。TrainingArgumentsでpush_to_hub=True
を設定します:
>>> training_args = TrainingArguments(output_dir="my-awesome-model", push_to_hub=True)
Pass your training arguments as usual to Trainer:
>>> trainer = Trainer(
... model=model,
... args=training_args,
... train_dataset=small_train_dataset,
... eval_dataset=small_eval_dataset,
... compute_metrics=compute_metrics,
... )
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()を呼び出して、トレーニング済みモデルをHubにプッシュします。🤗 Transformersは、トレーニングのハイパーパラメータ、トレーニング結果、およびフレームワークのバージョンを自動的にモデルカードに追加します!
>>> trainer.push_to_hub()
PushToHubCallbackを使用してモデルをHubに共有します。PushToHubCallback関数には、次のものを追加します:
- モデルの出力ディレクトリ。
- トークナイザ。
hub_model_id
、つまりHubのユーザー名とモデル名。
>>> 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"
... )
🤗 Transformersはfit
にコールバックを追加し、トレーニング済みモデルをHubにプッシュします:
>>> model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=3, callbacks=push_to_hub_callback)
push_to_hub 関数を使用する
また、モデルを直接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タブをクリックすると、リポジトリにアップロードしたすべてのファイルが表示されます。
リポジトリにファイルを作成およびアップロードする方法の詳細については、Hubドキュメンテーションこちらを参照してください。
Upload with the web interface
コードを書かずにモデルをアップロードしたいユーザーは、Hubのウェブインターフェースを使用してモデルをアップロードできます。huggingface.co/newを訪れて新しいリポジトリを作成します:
ここから、モデルに関するいくつかの情報を追加します:
- リポジトリの所有者を選択します。これはあなた自身または所属している組織のいずれかです。
- モデルの名前を選択します。これはリポジトリの名前にもなります。
- モデルが公開か非公開かを選択します。
- モデルのライセンス使用方法を指定します。
その後、Filesタブをクリックし、Add fileボタンをクリックしてリポジトリに新しいファイルをアップロードします。次に、ファイルをドラッグアンドドロップしてアップロードし、コミットメッセージを追加します。
Add a model card
ユーザーがモデルの機能、制限、潜在的な偏り、倫理的な考慮事項を理解できるようにするために、モデルリポジトリにモデルカードを追加してください。モデルカードはREADME.md
ファイルで定義されます。モデルカードを追加する方法:
- 手動で
README.md
ファイルを作成およびアップロードする。 - モデルリポジトリ内のEdit model cardボタンをクリックする。
モデルカードに含めるべき情報の例については、DistilBert モデルカードをご覧ください。README.md
ファイルで制御できる他のオプション、例えばモデルの炭素フットプリントやウィジェットの例などについての詳細は、こちらのドキュメンテーションを参照してください。