# モデルのアップロード

Hubにモデルをアップロードするには、[Hugging Face](https://huggingface.co/join)でアカウントを作成する必要があります。Hub上のモデルは[Gitベースのリポジトリ](./repositories)であり、バージョン管理、ブランチ、検索可能性、共有機能、数十のライブラリとの統合など、多くの機能を提供します。リポジトリにアップロードする内容は自由に制御でき、チェックポイント、設定ファイル、その他のファイルを含めることができます。

リポジトリは、[osanseviero/fashion_brands_patterns](https://huggingface.co/osanseviero/fashion_brands_patterns) のような個人ユーザーや、[facebook/bart-large-xsum](https://huggingface.co/facebook/bart-large-xsum) のような組織にリンクできます。組織は、企業、コミュニティ、またはライブラリに関連するモデルをまとめることができます。組織を選択した場合、そのモデルは組織のページに紹介され、組織のすべてのメンバーがリポジトリに貢献できるようになります。新しい組織は[こちら](https://huggingface.co/organizations/new)で作成できます。

> **_注:_** ダウンロード指標を取得するには、モデルがTransformers/Diffusersライブラリと互換性がある必要はありません。カスタムモデルもサポートされています。詳細は以下を参照してください!

モデルをハブに適切に統合し、[ダウンロード指標](models-download-stats)を取得するには、いくつかの方法があります。以下に説明します。

- モデルが[組み込みサポート](#upload-from-a-library-with-built-in-support)を提供するライブラリ向けに設計されている場合、そのライブラリが提供するメソッドを使用できます。`trust_remote_code=True` を使用するカスタムモデルも、これらのメソッドを利用できます。
- モデルがカスタムのPyTorchモデルである場合、Transformers、Diffusers、Timmライブラリのモデルと同様に、`nn.Module`クラスに`from_pretrained`や`push_to_hub`を追加できるため、[`PyTorchModelHubMixin`クラス](#upload-a-pytorch-model-using-huggingfacehub)を活用できます。
- プログラマティックなアップロードに加えて、[Webインターフェース](#using-the-web-interface)または[gitコマンドライン](#using-git)をいつでも使用できます。

モデルがアップロードされたら、リポジトリに[Model Card](./model-cards)を追加して、モデルをドキュメント化し、発見しやすくすることを推奨します。

<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/example_repository.png"
alt="drawing" width="600"/>

 [PyTorchModelHubMixin](#upload-a-pytorch-model-using-huggingfacehub)を活用した[リポジトリ](https://huggingface.co/LiheYoung/depth_anything_vitl14)の例です。ダウンロード数は右側に示されています。

## Webインターフェースの使用

新しいモデルリポジトリを作成するには、[huggingface.co/new](http://huggingface.co/new)にアクセスしてください。その後、以下の手順に従ってください。

1. 「Files and versions」タブで、「Add File」を選択し、「Upload File」を指定します:

2. そこから、アップロードするファイルをコンピュータから選択し、アップロードする内容が分かるよう、役立つコミットメッセージを残します:

3. その後、**Commit changes** をクリックして、モデルを Hub にアップロードしてください!

4. ファイルと履歴を確認する

最近追加されたすべてのファイルを含むリポジトリを確認できます!

UIでは、モデルファイルとコミットを探索し、各コミットによって導入された差分を確認できます:

5. メタデータを追加

モデルカードにメタデータを追加できます。指定できる項目は以下の通りです:
* このモデルが対象とするタスクの種類を指定し、ウィジェットとInference Providersを有効にします。
* 使用されるライブラリ(`transformers`、`spaCy`など)
* 言語
* データセット
* メトリクス
* ライセンス
* さらにたくさん！

モデルタグの詳細については、[こちら](./model-cards#model-card-metadata)をご覧ください。

6. TensorBoardのトレースを追加する

`tfevents` を含むファイル名を持つ TensorBoard のトレースを含むリポジトリは、[`TensorBoard` タグ](https://huggingface.co/models?filter=tensorboard) で分類されます。慣例として、トレースは `runs/` サブフォルダー以下に保存することをお勧めします。これにより、「Training metrics」タブで、loss や accuracy などの記録された変数のチャートを簡単に確認できます。

🤗 Transformersで学習されたモデルは、[`tensorboard`](https://pypi.org/project/tensorboard/)がインストールされている場合、デフォルトで[TensorBoardトレース](https://huggingface.co/docs/transformers/main_classes/callback#transformers.integrations.TensorBoardCallback)を生成します。

## ビルトインサポート付きライブラリからアップロード

まず、Transformers、Diffusers、Timm、Asteroid など、Hub へのプッシュ/ロードをネイティブでサポートしているライブラリ由来のモデルかどうかを確認してください: https://huggingface.co/docs/hub/models-libraries。以下では、Transformers のようなライブラリでこれがどれだけ簡単かを示します:

```python
from transformers import BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

model.push_to_hub("nielsr/my-awesome-bert-model")

# reload
model = BertModel.from_pretrained("nielsr/my-awesome-bert-model")
```

Transformers などの一部のライブラリは、[Hub からのコードの読み込み](https://huggingface.co/docs/transformers/custom_models)をサポートしています。これは、`trust_remote_code=True` フラグを使用して、モデルを Transformers で動作させるための方法です。完全なライブラリ統合の代わりに、このオプションを検討することをお勧めします。

## huggingface_hubを使用してPyTorchモデルをアップロードする

モデルが（カスタムの）PyTorch モデルである場合、[huggingface_hub](https://github.com/huggingface/huggingface_hub) Python ライブラリで利用可能な`PyTorchModelHubMixin` [クラス](https://huggingface.co/docs/huggingface_hub/package_reference/mixins#huggingface_hub.PyTorchModelHubMixin)を活用できます。これは最小限のクラスであり、ダウンロードメトリクスとともに、任意の`nn.Module`に`from_pretrained`および`push_to_hub`の機能を追加します。

`pip install huggingface_hub`を実行したと仮定して、使用方法は以下の通りです。

```python
import torch
import torch.nn as nn
from huggingface_hub import PyTorchModelHubMixin

class MyModel(
    nn.Module,
    PyTorchModelHubMixin, 
    # optionally, you can add metadata which gets pushed to the model card
    repo_url="your-repo-url",
    pipeline_tag="text-to-image",
    license="mit",
):
    def __init__(self, num_channels: int, hidden_size: int, num_classes: int):
        super().__init__()
        self.param = nn.Parameter(torch.rand(num_channels, hidden_size))
        self.linear = nn.Linear(hidden_size, num_classes)

    def forward(self, x):
        return self.linear(x + self.param)

# create model
config = {"num_channels": 3, "hidden_size": 32, "num_classes": 10}
model = MyModel(**config)

# save locally
model.save_pretrained("my-awesome-model")

# push to the hub
model.push_to_hub("your-hf-username/my-awesome-model")

# reload
model = MyModel.from_pretrained("your-hf-username/my-awesome-model")
```

ご覧のとおり、唯一の要件は、モデルが`PyTorchModelHubMixin`を継承していることです。すべてのインスタンス属性は、自動的に`config.json`ファイルにシリアライズされます。なお、`init`メソッドは、JSONでシリアライズ可能な引数のみを引数として受け取れます。Pythonのdataclassesはサポートされています。

これには自動的なダウンロード指標が備わっており、Transformers、Diffusers、Timm ライブラリにネイティブで統合されたモデルと同様に、モデルが何回ダウンロードされたかを確認できます。このミックスインクラスを使用すると、各チェックポイントは2つのファイルからなる単一のリポジトリとして Hub に保存されます。

- 重みを格納した`pytorch_model.bin`または`model.safetensors`ファイル
- `config.json`ファイルは、モデル設定のシリアライズされたバージョンです。このクラスはダウンロード指標の集計に使用されます。ユーザーが`from_pretrained`を呼び出して`config.json`を読み込むたびに、カウントが1増加します。自動ダウンロード指標については、[このガイド](https://huggingface.co/docs/hub/models-download-stats)を参照してください。

各チェックポイントにモデルカードを追加することをお勧めします。これにより、モデルの内容について知ることができ、論文へのリンクなども確認できます。

詳細については、[huggingface_hubのドキュメント](https://huggingface.co/docs/huggingface_hub/guides/integrations)をご覧ください。

https://huggingface.co/docs/huggingface_hub/guides/uploadを参照して、ファイルやフォルダをハブにプログラムでアップロードすることもできます。

## Gitの使用

最後に、モデルのリポジトリは単なる Git リポジトリであるため、Git を使用してモデルファイルを Hub にプッシュすることもできます。[リポジトリの入門](repositories-getting-started#terminal)のガイドに従い、`git` CLI を使用してモデルをコミットおよびプッシュする方法を学習してください。

