# Загрузка моделей

Чтобы загрузить модели в 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. Поддерживаются любые пользовательские модели. Подробнее ниже!

Существует несколько способов загрузить модели, чтобы они были корректно интегрированы в Hub и получали [метрики загрузок](models-download-stats), описанные ниже.

- Если ваша модель предназначена для библиотеки, которая имеет [встроенную поддержку](#upload-from-a-library-with-built-in-support), вы можете использовать методы, предоставляемые этой библиотекой. Пользовательские модели, использующие `trust_remote_code=True`, также могут применять эти методы.
- Если ваша модель — это пользовательская модель PyTorch, можно использовать класс [`PyTorchModelHubMixin`](#upload-a-pytorch-model-using-huggingfacehub), так как он позволяет добавить `from_pretrained` и `push_to_hub` в любой класс `nn.Module`, подобно моделям в библиотеках Transformers, Diffusers и Timm.
- Помимо программной загрузки, вы всегда можете использовать [веб-интерфейс](#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"/>

 Пример [репозитория](https://huggingface.co/LiheYoung/depth_anything_vitl14), использующего [PyTorchModelHubMixin](#upload-a-pytorch-model-using-huggingfacehub). Загрузки показаны справа.

## Использование веб-интерфейса

Чтобы создать новый репозиторий модели, перейдите на [huggingface.co/new](http://huggingface.co/new). Затем выполните следующие шаги:

1. На вкладке Файлы и версии выберите Добавить файл и укажите Загрузить файл:

2. Далее выберите файл на вашем компьютере для загрузки и оставьте полезное сообщение коммита, чтобы было понятно, что именно вы загружаете:

3. Затем нажмите **Commit changes**, чтобы загрузить вашу модель на Hub!

4. Осмотр файлов и истории

Вы можете проверить свой репозиторий со всеми недавно добавленными файлами!

Интерфейс позволяет просматривать файлы модели и коммиты, а также видеть изменения, внесённые каждым коммитом:

5. Добавить метаданные

Вы можете добавить метаданные в карточку вашей модели. Вы можете указать:
* тип задачи, для которой предназначен данный модель, что позволяет использовать виджеты и провайдеров инференса.
* используемая библиотека (`transformers`, `spaCy` и т. д.)
* язык
* набор данных
* метрики
* лицензия
* и многое другое!

Подробнее о тегах моделей — [здесь](./model-cards#model-card-metadata).

6. Добавление трассировок TensorBoard

Любой репозиторий, содержащий трассировки TensorBoard (файлы с именем, включающим `tfevents`), получает метку [`TensorBoard`](https://huggingface.co/models?filter=tensorboard). По соглашению мы рекомендуем сохранять трассировки в подпапке `runs/`. Тогда вкладка «Метрики обучения» позволяет легко просматривать графики записанных переменных, например, потерь или точности.

Модели, обученные с помощью 🤗 Transformers, по умолчанию генерируют [трассировки TensorBoard](https://huggingface.co/docs/transformers/main_classes/callback#transformers.integrations.TensorBoardCallback), если установлен пакет [`tensorboard`](https://pypi.org/project/tensorboard/).

## Загрузка из библиотеки с встроенной поддержкой

Сначала проверьте, принадлежит ли ваша модель библиотеке, которая имеет встроенную поддержку загрузки/сохранения в Hub, например Transformers, Diffusers, Timm, Asteroid и т. д.: 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). Это способ заставить вашу модель работать с Transformers с помощью флага `trust_remote_code=True`. Возможно, стоит рассмотреть этот вариант вместо полноценной интеграции библиотеки.

## Загрузка модели PyTorch с помощью huggingface_hub

Если ваша модель является (кастомной) моделью PyTorch, вы можете использовать класс [class](https://huggingface.co/docs/huggingface_hub/package_reference/mixins#huggingface_hub.PyTorchModelHubMixin) `PyTorchModelHubMixin`, доступный в Python-библиотеке [huggingface_hub](https://github.com/huggingface/huggingface_hub). Это минимальный класс, который добавляет любому `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. Поддерживаются dataclasses Python.

Это обеспечивает автоматический сбор метрик загрузок, что позволяет отслеживать количество загрузок модели так же, как это доступно для моделей, нативно интегрированных в библиотеки Transformers, Diffusers или Timm. С помощью этого класса-миксина каждая отдельная контрольная точка хранится на Hub в отдельном репозитории, состоящем из 2 файлов:

- файл `pytorch_model.bin` или `model.safetensors` с весами
- файл `config.json`, представляющий собой сериализованную версию конфигурации модели. Этот класс используется для подсчета метрик загрузок: каждый раз, когда пользователь вызывает `from_pretrained` для загрузки `config.json`, счетчик увеличивается на единицу. См. [это руководство](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), чтобы узнать, как использовать CLI `git` для фиксации и отправки ваших моделей.

