21 октября 2026 г. · Анатолий Крылов, редактор Тераферма
PyTorch на арендованной GPU: рабочая среда Python за 10 минут без поломанных зависимостей
Рабочая среда PyTorch на арендованной GPU собирается за 10 минут, и ставить CUDA или драйвер для этого не нужно. Драйвер уже стоит на машине, а в шаблоне «PyTorch + CUDA + Jupyter» на Тераферме есть PyTorch 2.7.1 с CUDA 12.8. Ваша задача: проверить карту, поставить зависимости проекта так, чтобы они не заменили torch, перенести кэши в /workspace и запускать долгие задачи так, чтобы они пережили обрыв связи.
Статья продолжает гайд первый запуск на арендованной GPU: там про SSH-ключ, Jupyter и подключение. Здесь разберём, что делать после того, как вы оказались в терминале сервера.
Что уже есть на сервере
| Компонент | Что стоит в шаблоне | Нужно ли ставить |
|---|---|---|
| Драйвер NVIDIA | на машине владельца, пробрасывается в контейнер | нет, и обновить его изнутри нельзя |
| CUDA и cuDNN | библиотеки внутри PyTorch, CUDA 12.8, cuDNN 9 | нет |
| PyTorch | 2.7.1 | нет, если проекту не нужна другая версия |
| Python и pip | Python образа pytorch/pytorch |
нет |
| Jupyter Lab | запускается автоматически, папка /workspace |
нет |
Компилятор CUDA nvcc |
отсутствует: образ runtime, а не devel | только для сборки CUDA-расширений из исходников |
Последняя строка важна. Пакеты с готовыми колёсами (transformers, diffusers, peft, bitsandbytes, ultralytics) ставятся обычным pip install. А то, что компилируется из исходников, например flash-attn без готовой сборки под вашу версию, потребует nvcc. Тогда либо ищите готовое колесо под свою версию torch и CUDA, либо запускайте сервер со своим образом на базе pytorch/pytorch:…-devel.
Шаг 1. Проверьте карту и PyTorch (1 минута)
nvidia-smi
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available(), torch.cuda.get_device_name(0))"
df -h /workspace
nproc && free -g
Первая команда показывает модель карты, память и драйвер. Вторая должна вывести что-то вроде 2.7.1+cu128 12.8 True NVIDIA GeForce RTX 4090. Третья показывает свободное место на рабочем диске: его объём вы выбирали при запуске. Четвёртая выводит ядра CPU и оперативную память. Они понадобятся, чтобы настроить загрузку данных.
Если вторая команда вывела False, дальше не идите. Разбор причин — в статье CUDA не видит видеокарту.
Шаг 2. Перенесите кэши в /workspace (1 минута)
Hugging Face, pip и PyTorch по умолчанию складывают скачанное в ~/.cache. На сервере это системный раздел, и модель на 15 ГБ может его переполнить. Перенаправьте кэши на рабочий диск:
cat >> ~/.bashrc <<'EOF'
export HF_HOME=/workspace/.cache/huggingface
export PIP_CACHE_DIR=/workspace/.cache/pip
export TORCH_HOME=/workspace/.cache/torch
export HF_HUB_ENABLE_HF_TRANSFER=1
EOF
source ~/.bashrc
pip install -q hf_transfer
hf_transfer ускоряет загрузку моделей с Hugging Face в несколько раз: канал серверов обычно 100 Мбит/с и выше, и стандартный загрузчик его не заполняет. Для закрытых моделей вроде Llama выполните huggingface-cli login и вставьте токен.
Учтите, что трафик на Тераферме оплачивается по факту. Скачивайте модель один раз и держите её на диске сервера, пока работаете, а не перекачивайте при каждом запуске скрипта.
Шаг 3. Поставьте зависимости, не сломав torch (3–5 минут)
Самая частая поломка на новом сервере выглядит так: pip install -r requirements.txt, в котором стоит torch==2.3.0, — и pip ставит другую сборку, иногда без CUDA. Через полчаса вы обнаруживаете, что обучение идёт на процессоре.
Защитой служит файл ограничений:
cd /workspace
git clone https://github.com/<вы>/<проект>.git && cd <проект>
pip freeze | grep -E "^(torch|torchvision|torchaudio)==" > /workspace/constraints.txt
pip install -r requirements.txt -c /workspace/constraints.txt
Если пакет несовместим с установленной версией torch, pip остановится и покажет конфликт. Тогда решите осознанно: обновить пакет, ослабить версию в requirements или поставить другой torch с правильного индекса:
pip install torch==2.6.0 --index-url https://download.pytorch.org/whl/cu124
Для ускорения установки можно использовать uv: pip install uv && uv pip install --system -r requirements.txt -c /workspace/constraints.txt. На проектах с десятками зависимостей он экономит несколько минут оплаченного времени.
Нужен ли venv
Для одного проекта на сервере — нет. Контейнер одноразовый, и системный Python образа уже содержит согласованный PyTorch. Отдельное окружение нужно, когда на одном сервере живут два проекта с разными версиями библиотек:
python -m venv /workspace/venv --system-site-packages
source /workspace/venv/bin/activate
Флаг --system-site-packages оставляет доступным установленный PyTorch, и его не нужно скачивать заново. Чтобы окружение было видно в Jupyter, зарегистрируйте ядро: pip install ipykernel && python -m ipykernel install --user --name venv.
Шаг 4. Проверьте скорость карты (1 минута)
Перед долгой задачей полезно убедиться, что карта выдаёт свою скорость. Скрипт измеряет умножение матриц в bf16 — основную операцию обучения и инференса:
import torch, time
x = torch.randn(8192, 8192, device="cuda", dtype=torch.bfloat16)
for _ in range(3): x @ x
torch.cuda.synchronize(); t = time.time(); n = 50
for _ in range(n): x @ x
torch.cuda.synchronize(); dt = time.time() - t
print(f"{2 * 8192**3 * n / dt / 1e12:.0f} TFLOPS bf16", torch.cuda.get_device_name(0))
Ориентиры для плотного bf16 без разреженности:
| Карта | Паспорт, TFLOPS | Нормальный результат теста |
|---|---|---|
| RTX 3090 | 71 | 55–70 |
| RTX 4090 | 165 | 140–165 |
| RTX 5090 | 210 | 170–210 |
| A100 80 ГБ | 312 | 230–280 |
| H100 | 989 | 600–750 |
Если результат ниже нормы в полтора-два раза, карта, скорее всего, перегрета или ограничена по мощности. Посмотрите nvidia-smi -q -d PERFORMANCE: строки SW Thermal Slowdown и HW Slowdown со значением Active подтвердят троттлинг. В этом случае выгоднее сразу перезапустить сервер на другой машине, чем час платить за медленную карту.
Шаг 5. Запускайте долгие задачи в tmux
Обучение на несколько часов нельзя запускать прямо в SSH-сессии или в ячейке Jupyter, если вы собираетесь закрыть ноутбук. Оборвётся связь — оборвётся и процесс.
apt-get update -qq && apt-get install -y -qq tmux
tmux new -s train
python train.py 2>&1 | tee /workspace/train.log
Отключиться и оставить задачу работать: Ctrl+B, затем D. Вернуться: tmux attach -t train. Если tmux не нужен, хватит nohup python train.py > /workspace/train.log 2>&1 & и tail -f /workspace/train.log.
Пока задача идёт, держите в соседнем окне watch -n 2 nvidia-smi. Загрузка GPU ниже 70% почти всегда значит, что карта ждёт данные.
Шаг 6. Настройте загрузку данных и точность
Две настройки дают больше скорости, чем выбор более дорогой карты.
DataLoader. По умолчанию данные готовит один процесс, и быстрая карта простаивает:
from torch.utils.data import DataLoader
import os
loader = DataLoader(ds, batch_size=64, shuffle=True,
num_workers=min(8, os.cpu_count()), pin_memory=True,
persistent_workers=True)
Смешанная точность. На RTX 30, 40, 50, A100 и H100 обучение в bf16 идёт в 2–3 раза быстрее FP32 и занимает вдвое меньше памяти:
with torch.autocast("cuda", dtype=torch.bfloat16):
loss = model(x).loss
loss.backward()
После этого можно попробовать model = torch.compile(model): первые минуты уйдут на компиляцию, зато дальше шаг обычно ускоряется на 10–30%. Для задачи на 10 минут компиляция не окупится, для обучения на ночь — окупится.
Шаг 7. Сохраните результат и окружение до остановки
После нажатия «Остановить» контейнер и диск удаляются. Поэтому:
- сохраняйте чекпоинты каждые 30–60 минут, а не только в конце;
- выгружайте их во внешнее хранилище по ходу:
huggingface-cli upload,rclone copyв S3 илиrsyncна свой сервер; - перед остановкой скачайте логи и метрики;
- сохраните окружение:
pip freeze > /workspace/requirements.lockи закоммитьте файл в репозиторий.
С requirements.lock следующий сервер настраивается одной командой. А если установка занимает больше 10 минут, соберите свой Docker-образ и укажите его при запуске: окружение будет готово сразу, хотя сам запуск со своим образом занимает 8–15 минут вместо 2–5.
Итоговый чек-лист
| Шаг | Команда | Время |
|---|---|---|
| Проверка карты | nvidia-smi, torch.cuda.is_available() |
1 мин |
| Кэши на рабочий диск | HF_HOME, PIP_CACHE_DIR в ~/.bashrc |
1 мин |
| Зависимости без замены torch | pip install -r requirements.txt -c constraints.txt |
3–5 мин |
| Тест скорости | matmul в bf16 | 1 мин |
| Долгая задача | tmux new -s train |
— |
| Сохранение | чекпоинты во внешнее хранилище, pip freeze |
по ходу |
На арендованной GPU не нужно ставить ни CUDA, ни драйвер — всё уже согласовано в шаблоне. Десять минут уходят на то, чтобы не сломать готовое: зафиксировать torch, перенести кэши, проверить скорость карты и запустить задачу в tmux. Эти шаги экономят часы оплаченного времени, которые иначе уходят на обучение на процессоре или на перезапуск после обрыва связи.
Под обучение и дообучение подберите карту на странице аренды GPU для обучения моделей, для первых экспериментов достаточно аренды RTX 3090 за 26 ₽ в час. А чтобы не платить за забытый сервер, прочитайте, как не платить за простой GPU.