восстановление Pytorch из RuntimeError: ошибка CUDA: подтверждение на стороне устройства сработало без перезапуска скрипта - PullRequest
0 голосов
/ 27 марта 2020

Полагаю, что все, кто работал с Pytorch, в некоторой степени знают об ошибке
RuntimeError: CUDA error: device-side assert triggered
.
Я генерирую много данных с использованием кода GPU в моем скрипте (200k + длинные векторы) , так что требуется время. Я делаю это партиями через генератор, так как у меня нет памяти для хранения всех векторов в моем GPU одновременно. Генератор имеет следующую структуру:

    for i in range(0, len(inputs), batch_size):
        try:
            <generate the vectors>
            yield 1, <the vectors>  # Here it was successful
        except RuntimeError:
            print(f'could not generate vectors {index} to {index + batch_size}')
            yield 0, (i, i+ batch_size)  # Here the input was malformed

Я знаю , что некоторые входные данные искажены до такой степени, что генерация векторов из них завершится с ошибкой во время выполнения, и это нормально, это даже не 1% моего набора данных. Я хочу получить индексы и разобраться с этим позже.

Вот моя проблема
Когда создание вектора не удается, графический процессор в основном блокируется и будет отвечать на все запросы с вышеупомянутой ошибкой. Проверка всех вводимых данных была бы громоздкой и медленной. Я не хочу это делать. Я хочу перебрать все неправильно сформированные входы и разобраться с ними позже.

Мой вопрос
Как можно восстановить графический процессор из этого состояния с брикетировкой как можно проще и быстрее? Все вопросы, которые я нашел до сих пор, касаются исправления основной ошибки, которую мне не нужно делать. Я просто хочу продолжить генерирование векторов из моего набора данных.

1 Ответ

0 голосов
/ 27 марта 2020

Одним из способов сделать это может быть регистрация вашего прогресса через сгенерированные входные векторы и перезапуск процесса / машины, если графический процессор блокируется. Если процент неправильно сформированных входов достаточно мал, стоимость сброса графического процессора / компьютера может быть незначительной. У вас может быть задание periodi c, которое проверяет, закончили ли вы работу, и перезапускает ее, если это не так. Это грубый способ решения этой проблемы, но он должен работать.

Например:

for i in range(0, len(inputs), batch_size):
    try:
        exist = check_if_current_index_has_succeded_or_failed()
        if exist:
            continue
        else:
            log_current_index()
        <generate the vectors>
        log_success()
        yield 1, <the vectors>  # Here it was successful
    except RuntimeError:
        log_failure()
        print(f'could not generate vectors {index} to {index + batch_size}')
        yield 0, (i, i+ batch_size)  # Here the input was malformed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...