Установка и устройства: 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) возвращает новый тензор на устройстве — переменную надо переприсвоить.
  • Операции допустимы только между тензорами на одном устройстве, иначе ошибка.
Проверьте себя
1. Что возвращает вызов x.to(device)?
AНичего, он меняет тензор x на месте
BНовый тензор на указанном устройстве
CИмя устройства в виде строки
DTrue или False — удалось ли перенести
2. Что произойдёт при сложении тензора на CPU с тензором на GPU?
APyTorch автоматически перенесёт оба на GPU
BРезультат будет посчитан на CPU
CPyTorch выбросит ошибку о разных устройствах
DРезультат окажется на устройстве первого тензора
3. Что вернёт torch.cuda.is_available() на ноутбуке без видеокарты NVIDIA?
ATrue, потому что CPU тоже считается за устройство
BFalse — и это нормально, считать будем на CPU
CОшибку, PyTorch не запустится
DNone, пока не выбрано устройство
Поддержать проект