Выбор ответа Junior PyTorch на практике обновлено

Тензоры на разных устройствах

Вопрос

Ошибка: "Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu". Что сделать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Перенести модель (model.to(device)) и каждый батч входов и меток на одно устройство. Операции выполняются только над тензорами на одном устройстве.

Варианты ответа

  1. Перенести модель (model.to(device)) и каждый батч входов и меток на одно устройствоправильный ответ
  2. Перезапустить Python, чтобы CUDA-контекст создался заново на одном устройстве
  3. Уменьшить размер батча, чтобы PyTorch не выгружал часть тензоров на CPU
  4. Вызвать torch.cuda.empty_cache(), чтобы освободить память под перенос тензоров

Разбор

Операции выполняются только над тензорами на одном устройстве. Типичные причины: забыли перенести метки или новый тензор создан внутри forward без device=x.device. Модель переносят один раз до создания оптимизатора, батчи в каждом шаге.

  • Перезапуск не исправит код.
  • Размер батча это про память, не про устройства.
  • empty_cache тут ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.