Выбор ответа Junior PyTorch на практике обновлено
Тензоры на разных устройствах
Вопрос
Ошибка: "Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu". Что сделать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Перенести модель (model.to(device)) и каждый батч входов и меток на одно устройство. Операции выполняются только над тензорами на одном устройстве.
Варианты ответа
- Перенести модель (model.to(device)) и каждый батч входов и меток на одно устройствоправильный ответ
- Перезапустить Python, чтобы CUDA-контекст создался заново на одном устройстве
- Уменьшить размер батча, чтобы PyTorch не выгружал часть тензоров на CPU
- Вызвать torch.cuda.empty_cache(), чтобы освободить память под перенос тензоров
Разбор
Операции выполняются только над тензорами на одном устройстве. Типичные причины: забыли перенести метки или новый тензор создан внутри forward без device=x.device. Модель переносят один раз до создания оптимизатора, батчи в каждом шаге.
- Перезапуск не исправит код.
- Размер батча это про память, не про устройства.
- empty_cache тут ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.