# Устранение неполадок

В этом руководстве представлены инструменты и знания, необходимые для решения ряда типичных проблем. Если перечисленные здесь рекомендации не покрывают вашу ситуацию, обратитесь к разделу [Как получить помощь](#asking-for-help), чтобы узнать, где можно найти поддержку по конкретной проблеме.

## Проблемы при загрузке наборов данных с помощью `push_to_hub`

### Проблемы с аутентификацией

Если при публикации набора данных на 🤗 Hub с помощью [Dataset.push_to_hub()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.push_to_hub) и токена доступа Hugging Face возникают проблемы с аутентификацией:

* Убедитесь, что токен Hugging Face, который вы используете для аутентификации, имеет разрешение **write**.
* В ОС X может помочь очистка всех паролей huggingface.co в доступе к ключам, а также повторная настройка `git config --global credential.helper osxkeychain` перед использованием `hf auth login`.

В качестве альтернативы вы можете использовать SSH-ключи для аутентификации — подробнее в [документации 🤗 Hub](https://huggingface.co/docs/hub/security-git-ssh).
 
### Потеря соединения при загрузке крупного набора данных 

При загрузке больших наборов данных в Hub, если количество фрагментов набора велико, это может привести к созданию слишком большого количества коммитов в Hub за короткий промежуток времени. В результате возникнет ошибка соединения. Ошибка соединения также может быть вызвана ошибкой HTTP 500, возвращаемой хранилищем AWS S3, которое Hub использует внутренне. В любом из этих случаев вы можете повторно запустить [Dataset.push_to_hub()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.push_to_hub), чтобы продолжить загрузку набора данных. Hub проверит SHA уже загруженных фрагментов, чтобы избежать их повторной загрузки. Мы работаем над тем, чтобы сделать процесс загрузки более устойчивым к временным ошибкам, поэтому всегда рекомендуется обновляться до последней версии библиотеки.

### `Too Many Requests`

Загрузка больших наборов данных с помощью `push_to_hub()` может привести к ошибке:

```bash
HfHubHTTPError: 429 Client Error: Too Many Requests for url: ...
You have exceeded our hourly quotas for action: commit. We invite you to retry later.
```

Если вы столкнулись с этой проблемой, необходимо обновить библиотеку `datasets` до последней версии (или как минимум до `2.15.0`).

## Проблемы при создании наборов данных из собственных данных

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

При создании набора данных из одной из самых частых проблем является то, что структура файлов не соответствует ожидаемому формату, либо возникает проблема с файлом метаданных.

Подробнее о требуемой структуре каталогов см. в соответствующих страницах документации:

* [AudioFolder](https://huggingface.co/docs/datasets/audio_dataset#audiofolder)
* [ImageFolder](https://huggingface.co/docs/datasets/image_dataset#imagefolder)

### Проблемы с pickle 

#### Проблемы с pickle при использовании `Dataset.from_generator`

When creating a dataset, [IterableDataset.from_generator()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.IterableDataset.from_generator) and [Dataset.from_generator()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.from_generator) expect a "picklable" generator function. This is required to hash the function using [`pickle`](https://docs.python.org/3/library/pickle.html) to be able to cache the dataset on disk.

Хотя функции-генераторы, как правило, «picklable», объекты генераторов таковыми не являются. Поэтому, если вы используете объект генератора, вы столкнётесь с `TypeError` следующего вида:

```bash
TypeError: cannot pickle 'generator' object
```

Эта ошибка также может возникать при использовании функции-генератора, которая обращается к глобальному объекту, не поддерживающему сериализацию (pickling), например, к соединению с БД. В таком случае инициализируйте такой объект непосредственно внутри функции-генератора, чтобы избежать этой ошибки.

#### Проблемы с pickle в `Dataset.map`

Ошибки сериализации (pickling) также могут возникать в многопроцессном [Dataset.map()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.map) — объекты сериализуются для передачи дочерним процессам. Если объекты, используемые в преобразовании, не поддерживают сериализацию, результат `map` невозможно закэшировать, что приводит к возникновению ошибки.

Вот несколько способов решить эту проблему:
* Универсальное решение проблем с pickle — убедиться, что объекты (или классы генераторов) можно сериализовать вручную, реализовав `__getstate__` / `__setstate__` / `__reduce__`.
* Вы также можете указать собственный уникальный хеш в `map` с помощью аргумента `new_fingerprint`.
* Вы также можете отключить кэширование, вызвав `datasets.disable_caching()`, однако это нежелательно - [узнайте больше о важности кэша](cache)

## Обращение за помощью

Если вышеприведённые рекомендации по устранению неполадок не помогли вам решить проблему, обратитесь за помощью к сообществу и команде.

### Форумы 

Обратитесь за помощью на форумах Hugging Face — опубликуйте свой вопрос в категории [🤗Datasets](https://discuss.huggingface.co/c/datasets/10). Убедитесь, что ваш пост содержит подробное описание проблемы, релевантный контекст о вашей конфигурации и воспроизводимый код, чтобы максимально повысить шансы на решение вашей задачи!

### Discord

Задайте вопрос в [Discord](http://hf.co/join/discord), и команда и сообщество помогут вам.

### Обсуждения сообщества на 🤗 Hub

Если у вас возникают проблемы с созданием пользовательского набора данных на Hub, вы можете обратиться за помощью к команде Hugging Face, открыв обсуждение на вкладке Community вашего набора данных с таким сообщением:

```text
# Dataset rewiew request for <Dataset name>

## Description

<brief description of the dataset>

## Files to review

- file1
- file2
- ...

cc @lhoestq @albertvillanova
```

### GitHub Issues

Наконец, если вы подозреваете, что нашли ошибку, связанную с самой библиотекой, создайте Issue в [репозитории GitHub](https://github.com/huggingface/datasets/issues) 🤗 Datasets. Укажите контекст проблемы: фрагмент кода для воспроизведения, сведения об окружении и данных и т. д., чтобы помочь нам разобраться, что пошло не так, и найти способ исправить это.

