Установка и устройства: CPU и GPU
Ставим PyTorch и учимся выбирать устройство, на котором будут считаться тензоры.
device — это «место», где живёт тензор и идут вычисления:
cpu(процессор) илиcuda(видеокарта NVIDIA).
Установка
PyTorch ставится через pip. Команда зависит от того, есть ли у вас GPU. Для CPU-версии (подходит всем, работает везде) достаточно:
pip install torch torchvision
Если есть видеокарта NVIDIA и вы хотите считать на ней, нужна сборка под конкретную версию CUDA. Точную команду генерирует конфигуратор на сайте pytorch.org — он подставит нужный индекс пакетов, например:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
Не пытайтесь угадать версию CUDA руками — возьмите готовую строку с официального сайта под вашу систему. На Apple Silicon (M1/M2/M3) GPU-ускорение идёт через бэкенд mps, отдельная CUDA-сборка там не нужна.
Проверка установки
После установки полезно сразу убедиться, что всё на месте и видна ли видеокарта:
import torch
print(torch.__version__) # версия, например 2.3.1
print(torch.cuda.is_available()) # True, если виден GPU NVIDIA
print(torch.backends.mps.is_available()) # True на Apple Silicon
torch.cuda.is_available() вернёт False на машине без NVIDIA-карты — это нормально, всё будет считаться на CPU.
Универсальный выбор устройства
Хороший код не падает на машине без GPU и автоматически использует его, когда он есть. Стандартный приём — один раз вычислить device и дальше везде ссылаться на него:
import torch
# выбираем лучшее доступное устройство
if torch.cuda.is_available():
device = torch.device("cuda")
elif torch.backends.mps.is_available():
device = torch.device("mps")
else:
device = torch.device("cpu")
print("Считаем на:", device)
Теперь любой тензор или модель можно перенести на это устройство.
Перенос на устройство: .to(device)
Тензор создаётся по умолчанию на CPU. Чтобы считать на GPU, его нужно туда перенести методом .to(device). Важнейшее правило: операции идут только между тензорами на одном устройстве. Если один тензор на CPU, а другой на GPU — PyTorch бросит ошибку.
x = torch.tensor([1.0, 2.0, 3.0]) # создан на CPU
x = x.to(device) # перенесли на выбранное устройство
print(x.device) # cuda:0 (или cpu / mps)
# .to() возвращает НОВЫЙ тензор — переменную надо переприсвоить
y = torch.ones(3) # остался на CPU
# z = x + y -> ОШИБКА: разные устройства
y = y.to(device) # теперь оба на одном устройстве
z = x + y # ок
Обратите внимание: .to() не меняет тензор на месте, а возвращает копию на нужном устройстве — поэтому пишут x = x.to(device). Та же логика работает и для модели: model = model.to(device) переносит все её веса.
Зачем это всё
GPU считает матричные операции в десятки и сотни раз быстрее CPU — именно поэтому глубокое обучение «взлетело» вместе с видеокартами. Но переносить данные между CPU и GPU не бесплатно, поэтому переносят один раз и стараются держать всё на устройстве до конца вычислений.
| Команда | Что делает |
torch.cuda.is_available() | проверяет, виден ли GPU NVIDIA |
torch.device("cuda") | объект устройства — видеокарта |
x.to(device) | возвращает копию тензора на устройстве |
x.device | показывает, где сейчас живёт тензор |
Итог
- Ставьте PyTorch командой с сайта
pytorch.org— CPU-версия подходит всем. torch.cuda.is_available()говорит, доступен ли GPU; на его основе выбираютdevice..to(device)возвращает новый тензор на устройстве — переменную надо переприсвоить.- Операции допустимы только между тензорами на одном устройстве, иначе ошибка.