RuntimeError: ошибка CUDA: недостаточно памяти — память CUDA произошла на этапе проверки ⇐ Python
RuntimeError: ошибка CUDA: недостаточно памяти — память CUDA произошла на этапе проверки
У меня возникла проблема «Ошибка CUDA: недостаточно памяти», когда моя модель глубокого обучения выполняет проверку. Хотя ранее на этапе обучения, этапах прямого и обратного распространения, которые должны были занимать много памяти с множеством сохраненных градиентов, статус «Ошибка CUDA: недостаточно памяти» не появлялся.
Моя модель имеет 21257650 параметров. Обучение на графическом процессоре GTX 1070 с памятью 8 ГБ.
##############Ошибка ниже:###############
Traceback (самый последний вызов — последний): Файл «main.py», строка 303, в основной(аргументы) Файл «main.py», строка 284, в главном val_loss, val_psnr = проверка (аргументы, эпоха, писатель) Файл "main.py", строка 144, находится на проверке. for i, (images, gt_image) в цикле: Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\tqdm\std.py», строка 1182, в __iter__ для объекта в итерации: Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\dataloader.py», строка 681, в __next__ данные = self._next_data() Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\dataloader.py», строка 1376, в _next_data вернуть self._process_data(данные) Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\dataloader.py», строка 1402, в _process_data данные.reraise() Файл "C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\_utils.py", строка 461, в повторном поднятии вызвать исключение RuntimeError: обнаружена ошибка RuntimeError в потоке памяти контактов для устройства 0. Исходная трассировка (последний вызов последний): Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 34, в _pin_memory_lo оп данные = pin_memory (данные, устройство) Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 65, в pin_memory тип возвращаемого значения(данные)([pin_memory(образец, устройство) для выборки данных]) # тип: ignore[call-arg] Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 65, в тип возвращаемого значения(данные)([pin_memory(образец, устройство) для выборки данных]) # тип: ignore[call-arg] Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 65, в pin_memory тип возвращаемого значения(данные)([pin_memory(образец, устройство) для выборки данных]) # тип: ignore[call-arg] Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 65, в тип возвращаемого значения(данные)([pin_memory(образец, устройство) для выборки данных]) # тип: ignore[call-arg] Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 50, в pin_memory вернуть data.pin_memory(устройство) RuntimeError: ошибка CUDA: недостаточно памяти Об ошибках ядра CUDA могут сообщаться асинхронно при каком-либо другом вызове API, поэтому трассировка стека ниже может быть неправильной. Для отладки рассмотрите возможность передачи CUDA_LAUNCH_BLOCKING=1. Вот мой код проверки:
def validation(args, epoch,writer): torch.cuda.empty_cache() потери, psnrs, ssims = utils.init_meters(args.loss, reset_loss=True) модель.eval() критерий.eval() args.out_counter = 0 # Сброс индекса выходных изображений начало = время.время() с torch.no_grad(): #no_grad() для моей модели сообщает PyTorch, что я не хочу хранить какие-либо предыдущие вычисления, тем самым освобождая пространство моего графического процессора. цикл = tqdm(enumerate(val_loader), total=len(val_loader)) for i, (images, gt_image) в цикле: # Сборка входного пакета images = [img_.to(устройство) для img_ в изображениях] gt = [gt_img.to(устройство) для gt_img в gt_image] print("gt лен: " + ул(лен(гт))) # Вперед out = модель(изображения) # out = [framet1,framet2] если устройство.тип == "cuda": print(f"Использование памяти графического процессора: {torch.cuda.memory_allocated() / 1024 ** 3:.2f} ГБ") потеря = 0 loss_specific = [] # Вычисление потерь для каждого выхода для вывода цель в zip(out, gt): single_loss, single_loss_specific = критерий (выход, цель) loss += single_loss.item() # используйте loss.item вместо loss, для которого требуются оценки, решена проблема CUDA out Memory loss_special.append(single_loss_species) # Сохраняем значения потерь для k, v в loss.items(): если k != 'всего': v.update(loss_специфический[k].item()) потери['всего'].update(loss.item()) # Расчет показателей для вывода цель в zip(out, gt): utils.eval_metrics(выход, цель, psnrs, ssims) # Тензорная доска если я % args.log_iter == 0: utils.log_tensorboard(писатель, потери, psnrs.avg, ssims.avg.item(), оптимизатор.param_groups[0]['lr'], эпоха * len(train_loader) + i, 'val') # Сохранить изображения результатов # если эпоха % 15 == 0: # epoch_path = os.path.join(args.save_path, args.result_images_folder, 'Epoch_' + str(epoch)) # utils.save_batch_images(args, out, gt, epoch_path) # индикатор выполнения обновления цикл.set_description("(Вал)") цикл.set_postfix(потеря=loss.item()) # Вычисляем время проверки выполнения val_time_elapsed = time.time() - начало # сохраняем val-метрики в csv если эпоха % 2 == 0: utils.save_metrics(args, os.path.join(args.save_path, args.graph_folder), эпоха, потери['total'].avg, psnrs.avg, ssims.avg.item(), оптимизатор.param_groups[0]['lr'], val_time_elapsed, 'val') print('Результаты проверки: \tПотеря проверки: {:.6f}\tVal Time: {:.2f}' '\tPSNR: {:.4f}\tSSIM: {:.3f}'.format(losses['total'].avg, val_time_elapsed, psnrs.avg, ssims.avg.item())) обратные потери['total'].avg, psnrs.avg
У меня возникла проблема «Ошибка CUDA: недостаточно памяти», когда моя модель глубокого обучения выполняет проверку. Хотя ранее на этапе обучения, этапах прямого и обратного распространения, которые должны были занимать много памяти с множеством сохраненных градиентов, статус «Ошибка CUDA: недостаточно памяти» не появлялся.
Моя модель имеет 21257650 параметров. Обучение на графическом процессоре GTX 1070 с памятью 8 ГБ.
##############Ошибка ниже:###############
Traceback (самый последний вызов — последний): Файл «main.py», строка 303, в основной(аргументы) Файл «main.py», строка 284, в главном val_loss, val_psnr = проверка (аргументы, эпоха, писатель) Файл "main.py", строка 144, находится на проверке. for i, (images, gt_image) в цикле: Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\tqdm\std.py», строка 1182, в __iter__ для объекта в итерации: Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\dataloader.py», строка 681, в __next__ данные = self._next_data() Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\dataloader.py», строка 1376, в _next_data вернуть self._process_data(данные) Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\dataloader.py», строка 1402, в _process_data данные.reraise() Файл "C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\_utils.py", строка 461, в повторном поднятии вызвать исключение RuntimeError: обнаружена ошибка RuntimeError в потоке памяти контактов для устройства 0. Исходная трассировка (последний вызов последний): Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 34, в _pin_memory_lo оп данные = pin_memory (данные, устройство) Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 65, в pin_memory тип возвращаемого значения(данные)([pin_memory(образец, устройство) для выборки данных]) # тип: ignore[call-arg] Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 65, в тип возвращаемого значения(данные)([pin_memory(образец, устройство) для выборки данных]) # тип: ignore[call-arg] Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 65, в pin_memory тип возвращаемого значения(данные)([pin_memory(образец, устройство) для выборки данных]) # тип: ignore[call-arg] Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 65, в тип возвращаемого значения(данные)([pin_memory(образец, устройство) для выборки данных]) # тип: ignore[call-arg] Файл «C:\Users\Anh\anaconda3\envs\Kienv1\lib\site-packages\torch\utils\data\_utils\pin_memory.py», строка 50, в pin_memory вернуть data.pin_memory(устройство) RuntimeError: ошибка CUDA: недостаточно памяти Об ошибках ядра CUDA могут сообщаться асинхронно при каком-либо другом вызове API, поэтому трассировка стека ниже может быть неправильной. Для отладки рассмотрите возможность передачи CUDA_LAUNCH_BLOCKING=1. Вот мой код проверки:
def validation(args, epoch,writer): torch.cuda.empty_cache() потери, psnrs, ssims = utils.init_meters(args.loss, reset_loss=True) модель.eval() критерий.eval() args.out_counter = 0 # Сброс индекса выходных изображений начало = время.время() с torch.no_grad(): #no_grad() для моей модели сообщает PyTorch, что я не хочу хранить какие-либо предыдущие вычисления, тем самым освобождая пространство моего графического процессора. цикл = tqdm(enumerate(val_loader), total=len(val_loader)) for i, (images, gt_image) в цикле: # Сборка входного пакета images = [img_.to(устройство) для img_ в изображениях] gt = [gt_img.to(устройство) для gt_img в gt_image] print("gt лен: " + ул(лен(гт))) # Вперед out = модель(изображения) # out = [framet1,framet2] если устройство.тип == "cuda": print(f"Использование памяти графического процессора: {torch.cuda.memory_allocated() / 1024 ** 3:.2f} ГБ") потеря = 0 loss_specific = [] # Вычисление потерь для каждого выхода для вывода цель в zip(out, gt): single_loss, single_loss_specific = критерий (выход, цель) loss += single_loss.item() # используйте loss.item вместо loss, для которого требуются оценки, решена проблема CUDA out Memory loss_special.append(single_loss_species) # Сохраняем значения потерь для k, v в loss.items(): если k != 'всего': v.update(loss_специфический[k].item()) потери['всего'].update(loss.item()) # Расчет показателей для вывода цель в zip(out, gt): utils.eval_metrics(выход, цель, psnrs, ssims) # Тензорная доска если я % args.log_iter == 0: utils.log_tensorboard(писатель, потери, psnrs.avg, ssims.avg.item(), оптимизатор.param_groups[0]['lr'], эпоха * len(train_loader) + i, 'val') # Сохранить изображения результатов # если эпоха % 15 == 0: # epoch_path = os.path.join(args.save_path, args.result_images_folder, 'Epoch_' + str(epoch)) # utils.save_batch_images(args, out, gt, epoch_path) # индикатор выполнения обновления цикл.set_description("(Вал)") цикл.set_postfix(потеря=loss.item()) # Вычисляем время проверки выполнения val_time_elapsed = time.time() - начало # сохраняем val-метрики в csv если эпоха % 2 == 0: utils.save_metrics(args, os.path.join(args.save_path, args.graph_folder), эпоха, потери['total'].avg, psnrs.avg, ssims.avg.item(), оптимизатор.param_groups[0]['lr'], val_time_elapsed, 'val') print('Результаты проверки: \tПотеря проверки: {:.6f}\tVal Time: {:.2f}' '\tPSNR: {:.4f}\tSSIM: {:.3f}'.format(losses['total'].avg, val_time_elapsed, psnrs.avg, ssims.avg.item())) обратные потери['total'].avg, psnrs.avg
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
RuntimeError: ошибка CUDA: недостаточно памяти — память CUDA произошла на этапе проверки
Anonymous » » в форуме Python - 0 Ответы
- 81 Просмотры
-
Последнее сообщение Anonymous
-
-
-
CUDA ON DEBIAN TRIXIE: версия драйвера CUDA недостаточно для версии времени выполнения CUDA
Anonymous » » в форуме Linux - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-