#
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がインストールされていることを確認してください（インストール手順についてはこちらを参照）し、 その後、他のフレームワーク向けに特定のタスク用のモデルを見つけます。

Pytorch
Hide Pytorch content

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")

TensorFlow
Hide TensorFlow content

指定して、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")

JAX
Hide JAX content

Flaxでモデルが利用可能な場合、PyTorchからFlaxへのチェックポイントの変換も行うことができます：

    >>> flax_model = FlaxDistilBertForSequenceClassification.from_pretrained(
    ...     "path/to/awesome-name-you-picked", from_pt=True
    ... )

##
Push a model during traning

Pytorch
Hide Pytorch content

モデルを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()

TensorFlow
Hide TensorFlow content

`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`ファイルで制御できる他のオプション、例えばモデルの炭素フットプリントやウィジェットの例などについての詳細は、こちらのドキュメンテーションを参照してください。