Transformers documentation
Устранение неполадок
Устранение неполадок
Иногда возникают ошибки, но мы готовы помочь! В этом руководстве описаны некоторые из самых распространённых проблем, с которыми мы сталкивались, и способы их решения. Однако это руководство не является исчерпывающим сборником всех проблем с 🤗 Transformers. Для дополнительной помощи в диагностике вашей проблемы попробуйте:
- Обращение за помощью на форумах. Существуют отдельные категории, в которые можно опубликовать свой вопрос, например Beginners или 🤗 Transformers. Убедитесь, что вы написали качественный описательный пост с воспроизводимым кодом, чтобы максимально повысить шансы на решение вашей проблемы!
Создайте Issue в репозитории 🤗 Transformers, если проблема связана с ошибкой в библиотеке. Постарайтесь включить как можно больше информации, описывающей баг, чтобы помочь нам лучше понять, что пошло не так и как это исправить.
Если вы используете более старую версию 🤗 Transformers, обратитесь к руководству по миграции, так как между версиями были внесены важные изменения.
Для получения дополнительной информации об устранении неполадок и получении помощи обратитесь к Главе 8 курса Hugging Face.
Окружения с файрволом
Некоторые GPU-инстансы в облачных и корпоративных сетях изолированы от внешних подключений, что приводит к ошибке соединения. Когда ваш скрипт пытается скачать веса модели или датасеты, загрузка зависнет, а затем завершится по таймауту с следующим сообщением:
ValueError: Connection error, and we cannot find the requested files in the cached path. Please try again or make sure your Internet connection is on.
В этом случае попробуйте запустить 🤗 Transformers в офлайн-режиме, чтобы избежать ошибки подключения.
Недостаточно памяти CUDA
Обучение больших моделей с миллионами параметров может быть сложным без соответствующего оборудования. Типичная ошибка, с которой вы можете столкнуться при нехватке памяти на GPU:
CUDA out of memory. Tried to allocate 256.00 MiB (GPU 0; 11.17 GiB total capacity; 9.70 GiB already allocated; 179.81 MiB free; 9.85 GiB reserved in total by PyTorch)
Вот несколько возможных решений, которые можно попробовать для снижения потребления памяти:
- Уменьшите значение per_device_train_batch_size в TrainingArguments.
- Попробуйте использовать gradient_accumulation_steps в TrainingArguments, чтобы эффективно увеличить общий размер батча.
См. раздел обзор оптимизации для получения дополнительной информации о техниках экономии памяти.
ImportError
Другая распространённая ошибка, с которой вы можете столкнуться, особенно если модель только что вышла, — это ImportError:
ImportError: cannot import name 'ImageGPTImageProcessor' from 'transformers' (unknown location)
Для этих типов ошибок убедитесь, что у вас установлена последняя версия 🤗 Transformers, чтобы иметь доступ к самым новым моделям:
pip install transformers --upgrade
CUDA error: device-side assert triggered
Иногда вы можете столкнуться с общей ошибкой CUDA, связанной с ошибкой в коде устройства.
RuntimeError: CUDA error: device-side assert triggered
Сначала попробуйте выполнить код на CPU, чтобы получить более подробное сообщение об ошибке. Добавьте следующую переменную окружения в начало кода, чтобы переключиться на CPU:
>>> import os
>>> os.environ["CUDA_VISIBLE_DEVICES"] = ""Другой вариант — получить более подробный traceback от GPU. Добавьте следующую переменную окружения в начало кода, чтобы traceback указывал на источник ошибки:
>>> import os
>>> os.environ["CUDA_LAUNCH_BLOCKING"] = "1"Некорректный вывод, если токены отступов не маскируются
В некоторых случаях выход hidden_state может быть некорректным, если input_ids содержат токены отступов. Для демонстрации загрузите модель и токенизатор. Вы можете обратиться к pad_token_id модели, чтобы узнать её значение. Для некоторых моделей pad_token_id может быть None, но вы всегда можете задать его вручную.
>>> from transformers import AutoModelForSequenceClassification
>>> import torch
>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased")
>>> model.config.pad_token_id
0В следующем примере показан вывод без маскирования токенов отступов:
>>> input_ids = torch.tensor([[7592, 2057, 2097, 2393, 9611, 2115], [7592, 0, 0, 0, 0, 0]])
>>> output = model(input_ids)
>>> print(output.logits)
tensor([[ 0.0082, -0.2307],
[ 0.1317, -0.1683]], grad_fn=<AddmmBackward0>)Вот фактический вывод второй последовательности:
>>> input_ids = torch.tensor([[7592]])
>>> output = model(input_ids)
>>> print(output.logits)
tensor([[-0.1008, -0.4061]], grad_fn=<AddmmBackward0>)В большинстве случаев вам следует передавать в модель attention_mask, чтобы игнорировать токены отступов и избежать этой скрытой ошибки. Теперь выход второго совпадает с его фактическим результатом:
По умолчанию токенизатор создаёт для вас
attention_maskна основе значений по умолчанию конкретного токенизатора.
>>> attention_mask = torch.tensor([[1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0]])
>>> output = model(input_ids, attention_mask=attention_mask)
>>> print(output.logits)
tensor([[ 0.0082, -0.2307],
[-0.1008, -0.4061]], grad_fn=<AddmmBackward0>)🤗 Transformers не создаёт автоматически attention_mask для маскирования токена padding, если он передан, потому что:
- Некоторые модели не имеют токена отступов.
- Для некоторых сценариев использования пользователям требуется, чтобы модель обращала внимание на токен отступов.
ValueError: Нераспознанный класс конфигурации XYZ для этого типа AutoModel
Как правило, мы рекомендуем использовать класс AutoModel для загрузки предобученных экземпляров моделей. Этот класс
может автоматически определять и загружать правильную архитектуру из заданной контрольной точки на основе конфигурации. Если при
загрузке модели из контрольной точки вы видите ошибку ValueError, это означает, что Auto-класс не смог найти соответствие
между конфигурацией в данной контрольной точке и типом модели, который вы пытаетесь загрузить. Чаще всего это происходит, когда
контрольная точка не поддерживает данную задачу.
Например, вы увидите эту ошибку в следующем примере, так как для GPT2 не существует модели для задачи question answering:
>>> from transformers import AutoProcessor, AutoModelForQuestionAnswering
>>> processor = AutoProcessor.from_pretrained("openai-community/gpt2-medium")
>>> model = AutoModelForQuestionAnswering.from_pretrained("openai-community/gpt2-medium")
ValueError: Unrecognized configuration class <class 'transformers.models.gpt2.configuration_gpt2.GPT2Config'> for this kind of AutoModel: AutoModelForQuestionAnswering.
Model type should be one of AlbertConfig, BartConfig, BertConfig, BigBirdConfig, BigBirdPegasusConfig, BloomConfig, ...