Перейти к содержимому
Начало

Ваша лаборатория (4×GPU)

Что можно делать на вашей машине с 4× RTX 4080 32 ГБ и EPYC на каждой ступени курса, как её настроить и проверить.

У вас машина, на которой можно пройти весь курс без облаков. Ступени 0–3 идут на процессоре, а с 4-й видеокарты превращают «учебные игрушки» в настоящие эксперименты: свою LLM, LoRA на 7–14B-моделях, GRPO и сервер с моделью уровня 70B в 4-битном квантовании.

КомпонентЧто у васЧто это значит для ИИ
GPU4× NVIDIA RTX 4080, 32 ГБ каждая128 ГБ видеопамяти в сумме. Архитектура Ada Lovelace: BF16 и FP8 на тензорных ядрах
Связь GPUPCIe 4.0 x16, без NVLinkОбмен между картами идёт по PCIe (~32 ГБ/с в одну сторону теоретически). На GeForce прямой обмен P2P обычно отключён драйвером, поэтому данные часто идут через память процессора
CPUAMD EPYC 7H43, 48 ядер / 96 потоковБыстрая подготовка данных и токенизация. Инференс больших MoE-моделей частично на CPU
RAM128 ГБ DDR4-3200, 8 каналов~200 ГБ/с теоретической пропускной способности. Сюда можно выгрузить часть весов огромной модели
Диски3× Samsung 990 Pro 1 ТБ (NVMe)Быстрая загрузка датасетов и чекпоинтов. Держите данные и чекпоинты на разных дисках
СтупеньНа CPU (базовый путь курса)На вашей машине (GPU-трек)
0–3. ОсновыВсё: Python, NumPy, свой автоград, PyTorch на маленьких данныхGPU не обязателен. Можно сравнить скорость одного и того же обучения на CPU и GPU
4. ТрансформерGPT на ~1M параметров за минутыGPT на 10–50M параметров на русском корпусе за десятки минут на одной карте
5. Большие моделиКрошечные эксперименты с MLA/MoEСвой MiniMind (26–100M параметров) за часы. DDP и FSDP на 4 картах через torchrun. Опыты с FP8 (Ada поддерживает FP8)
6. Пост-трейнингЛогика LoRA/DPO/GRPO на игрушечных моделяхLoRA и QLoRA для Qwen 7–14B. Полное дообучение моделей 0.5–1.5B. GRPO для Qwen 0.5–3B: одна карта генерирует ответы (vLLM), три обучают
7. Инференсllama.cpp с маленькими моделямиvLLM/SGLang с тензорным параллелизмом на 4 картах: 32B в BF16 или ~70B в 4 битах. Замеры токенов/с
8. ПриложенияЧерез API (DeepSeek, Qwen)Свой локальный «ChatGPT» для RAG и агентов: Qwen3-30B-A3B или 32B-модели в 4 битах, эмбеддинги BGE-M3
10. ВыпускнойУпрощённая версияПолный цикл: токенизатор → претрейн → SFT → GRPO → квантование → сервер → агент

Какие открытые модели брать (октябрь 2026). Команды в уроках написаны для Qwen3 (апрель 2025): она поддерживается везде и хороша для учёбы. В тех же классах размеров есть модели новее: Qwen3.5 (от 0.8B до 9B, 27B, 35B-A3B), Qwen3.6-27B и Qwen3.6-35B-A3B, Qwen3.8-27B (QwenLM/Qwen3.8) и Gemma 4 от Google — E2B, E4B, 26B-A4B (MoE) и 31B (описание в Transformers). Qwen3.6, Qwen3.8-27B и Gemma 4 выпущены под Apache-2.0, их поддерживают vLLM и Ollama (qwen3.6, qwen3.8, gemma4). Команды курса те же, меняется имя модели; для вызова инструментов у Qwen3.5 и новее в vLLM нужен парсер qwen3_coder вместо hermes.

Сколько памяти занимают модели (только веса)

Заголовок раздела «Сколько памяти занимают модели (только веса)»

Правило: число параметров × байты на параметр.

МодельBF16 (2 байта)8 бит4 битаНа вашей машине
0.5B1 ГБ0.5 ГБ0.25 ГБлегко, даже полное обучение
7–8B14–16 ГБ7–8 ГБ~4 ГБодна карта: инференс и LoRA
14B28 ГБ14 ГБ~7 ГБодна карта в 8/4 битах, в BF16 — две
32B64 ГБ32 ГБ~16 ГБ4 карты в BF16, одна-две в 4 битах
70B140 ГБ70 ГБ~35–40 ГБв 4 битах на 2–4 картах

При обучении памяти нужно в разы больше, чем на одни веса: градиенты, состояния оптимизатора (Adam хранит ещё два числа на параметр) и активации. Поэтому полное обучение 7B-модели на вашей машине — уже на пределе. Для неё правильный инструмент — LoRA.

  1. Операционная система. Для нескольких GPU берите Linux (Ubuntu 22.04 или 24.04 LTS). Библиотека NCCL, через которую карты обмениваются данными при распределённом обучении, работает только на Linux.

  2. Драйвер NVIDIA. Установите проприетарный драйвер (в Ubuntu: «Программы и обновления → Дополнительные драйверы» или sudo ubuntu-drivers install). Перезагрузитесь и проверьте:

    Окно терминала
    nvidia-smi

    Вы должны увидеть 4 карты, объём памяти каждой и версию драйвера.

  3. Python-окружение с PyTorch. Отдельно ставить CUDA Toolkit не нужно: сборки PyTorch для Linux уже содержат нужные библиотеки CUDA.

    Окно терминала
    python3 -m venv ~/venvs/ai && source ~/venvs/ai/bin/activate
    pip install torch numpy
    python -c "import torch; print(torch.cuda.is_available(), torch.cuda.device_count(), torch.cuda.get_device_name(0))"

    Ожидаемый вывод: True 4 NVIDIA GeForce RTX 4080 (название может отличаться).

  4. Топология. Посмотрите, как карты соединены между собой:

    Окно терминала
    nvidia-smi topo -m

    В таблице увидите обозначения вроде PHB, NODE или SYS: связь через PCIe и процессор. NV# означало бы NVLink, на GeForce 40-й серии его нет.

  5. Проверка распределённого обмена. Сохраните скрипт ниже как ddp_check.py и запустите на всех 4 картах:

    Окно терминала
    torchrun --nproc_per_node=4 ddp_check.py
# ddp_check.py — проверка связи между GPU: all-reduce 256 МБ (то, что делает DDP на каждом шаге)
import time
import torch
import torch.distributed as dist
dist.init_process_group("nccl")
rank, world = dist.get_rank(), dist.get_world_size()
torch.cuda.set_device(rank)
x = torch.ones(64 * 1024 * 1024, device="cuda") # 64M float32 = 256 МБ
for _ in range(3): # прогрев
dist.all_reduce(x)
torch.cuda.synchronize()
n = 10
t0 = time.time()
for _ in range(n):
dist.all_reduce(x)
torch.cuda.synchronize()
dt = (time.time() - t0) / n
size = x.numel() * 4
bus_bw = size * 2 * (world - 1) / world / dt / 1e9 # «шинная» пропускная способность, как в nccl-tests
if rank == 0:
print(f"GPU: {world}, all_reduce 256 МБ: {dt * 1000:.1f} мс, bus bandwidth ≈ {bus_bw:.1f} ГБ/с")
dist.destroy_process_group()

Запишите полученную пропускную способность в журнал. В модуле 5.4 вы сравните её с NVLink в дата-центрах (сотни ГБ/с) и поймёте, почему обмен данными так важен при обучении больших моделей.

Команды из блоков «🖥 На вашей машине (4×GPU)» и оценки времени в уроках посчитаны по паспортным характеристикам RTX 4080 и формулам из уроков. На настоящей машине с четырьмя такими картами их ещё никто не запускал. Скрипт tools/lab_check.py из репозитория курса за несколько минут проверит, что всё настроено, измерит вашу машину и сравнит цифры с тем, что обещает курс. Отчёт нужен и вам (цифры для журнала и поправка к оценкам времени), и авторам курса: по нему они уточнят уроки.

Запускайте из корня репозитория, в окружении с PyTorch из шага 3:

Окно терминала
cd ~/ChinaAI # папка с курсом; у вас путь может быть другим
source ~/venvs/ai/bin/activate # окружение с PyTorch
python tools/lab_check.py

Скрипту нужны только Python и PyTorch. Пакеты transformers, peft, bitsandbytes, vLLM, flash-attn и Triton он проверяет, если они установлены, а если нет, так и пишет. Модели из интернета скрипт не скачивает: для тестов он создаёт маленькую Llama со случайными весами прямо в памяти.

КомандаЧто делаетСколько идёт (оценка)
python tools/lab_check.pyполная проверка: окружение, бенчмарки, all-reduce, смоук-тесты3–10 минут
python tools/lab_check.py --quickокружение и по одному короткому замеру, без смоук-тестовоколо минуты
python tools/lab_check.py --skip-distбез torch.distributed: пригодится, если all-reduce или DDP зависаетна пару минут меньше
python tools/lab_check.py --out ~/lab.mdсохранить отчёт в другое местокак полная
python tools/lab_check.py --json-onlyнапечатать только JSON, без таблиц и Markdownкак полная

Что проверяется, по порядку:

  1. Окружение. ОС, Python, версии PyTorch, CUDA и драйвера. Каждая карта: память, compute capability, число SM, поддержка BF16 и подключение по PCIe (по nvidia-smi). RAM, процессор, свободное место на диске с курсом и в кэше моделей Hugging Face, версии пакетов курса.
  2. Каждая карта отдельно. Умножение матриц в BF16 и FP16, пропускная способность памяти, копирование между процессором и картой, прямой обмен P2P и копирование между картами.
  3. Связь между картами. All-reduce через NCCL на всех картах (то, что DDP делает на каждом шаге) для сообщений от 1 до 256 МБ. Это ddp_check.py из шага 5, только по всем размерам, с проверкой правильности суммы и с тем, каким путём NCCL передаёт данные.
  4. Смоук-тесты курса. DDP и FSDP2 на всех картах: результат обязан совпасть с обучением в одном процессе. Llama в BF16 с замером токенов в секунду, LoRA, 4-битная загрузка и шаг QLoRA, FlashAttention, своё ядро на Triton, torch.compile и импорт vLLM. Каждый тест получает PASS, FAIL (с текстом ошибки и подсказкой) или SKIP (с причиной).

Таблицы печатаются в терминал, а полный отчёт сохраняется в journal/lab-report.md (его удобно читать и пересылать) и в journal/lab-report.json.

Главная таблица отчёта называется «Ожидалось в курсе → у вас». Ориентиры для 4× RTX 4080 по PCIe 4.0:

Строка отчётаЧто измеряетОриентирГде в курсе
Матмул BF16 и FP16, TFLOPSскорость тензорных ядер на умножении матриц 8192×8192паспорт 97.5; реально 68–83 (70–85% паспорта)уроки 5.7.1, 5.7.3
Память, ГБ/скопирование большого тензора внутри картыпаспорт 716.8; реально 570–650 (80–90%)урок 5.7.1
CPU→GPU и GPU→CPU, ГБ/сзагрузка данных в карту по PCIeпредел PCIe 4.0 x16 около 32; на практике обычно 20–26. Около 12–13 — признак PCIe 3.0 или x8эта страница
P2Pможет ли карта читать память соседней напрямуюна GeForce обычно «нет», это нормальноурок 5.7.4
GPU→GPU, ГБ/скопирование между двумя картамибез P2P данные идут через память процессора и обычно не быстрее, чем CPU→GPUурок 5.7.4
all-reduce, bus bandwidth, ГБ/сскорость синхронизации градиентов в DDPв расчётах уроков подставлено условное W = 10; предел PCIe около 32уроки 5.4.3, 5.7.4, 10.1.1
Обучение Llama, TFLOPSреальная скорость обучения модели на ~170M параметров в BF16 на одной картев оценках времени уроков 20–40урок 10.1.1

Bus bandwidth считается так же, как в ddp_check.py: размер сообщения × 2(n − 1)/n, делённый на время. Так цифры для двух и для четырёх карт можно сравнивать между собой и с NVLink из модуля 5.4.

В конце отчёта, в рекомендациях, скрипт печатает два коэффициента. Первый показывает, на сколько умножать оценки времени обучения в уроках: они посчитаны по формуле 6ND при 20–40 TFLOPS на карту. Второй делает то же для оценок времени обмена между картами, посчитанных при 10 ГБ/с. Запишите оба в journal/lab.md.

Что видитеЧто делать
«GPU не найдены», хотя nvidia-smi видит картыу вас PyTorch без CUDA или драйвер старше, чем нужно этой сборке: pip uninstall -y torch && pip install torch, при необходимости обновите драйвер (шаги 2–3)
PyTorch видит меньше 4 картпроверьте переменную CUDA_VISIBLE_DEVICES и вывод nvidia-smi
all-reduce, DDP или FSDP зависает либо падает с ошибкой NCCLскрипт сам повторит all-reduce с NCCL_P2P_DISABLE=1. Если так работает, добавьте строку export NCCL_P2P_DISABLE=1 в ~/.bashrc. Если нет, запустите ddp_check.py с NCCL_DEBUG=INFO и посмотрите, на чём останавливается NCCL. На машинах с EPYC частая причина — IOMMU и ACS (раздел Troubleshooting в документации NCCL)
all-reduce вернул неверную суммуданные портятся при обмене между картами, и обучение будет ломаться без ошибок. Запустите с NCCL_P2P_DISABLE=1 и проверьте настройки IOMMU
матмул сильно ниже ориентиракарта упирается в лимит мощности или перегревается: nvidia-smi -q -d PERFORMANCE покажет причину снижения частот, nvidia-smi -q -d POWER — лимит
CPU→GPU около 12–13 ГБ/скарта работает как PCIe 3.0 или x8: проверьте слот, райзер и настройки PCIe в BIOS
Llama и LoRA — SKIPpip install -r homework/requirements-llm.txt
4 бита — SKIP или ошибка undefined symbolpip install bitsandbytes; после обновления PyTorch переустановите его
Triton или torch.compile — ошибка про Python.h или компиляторsudo apt install build-essential python3-dev
vLLM — SKIPтак и задумано: курс ставит vLLM в отдельное окружение (урок 7.1.2). Активируйте его и запустите проверку оттуда, а сервер с моделью проверьте командой из отчёта
  1. Запишите главные цифры в journal/lab.md: TFLOPS, ГБ/с памяти, bus bandwidth all-reduce, токены в секунду. На ступени 5 вы сравните их с дата-центровыми GPU.

  2. Откройте journal/lab-report.md и посмотрите колонку «Расхождение > 2×» в таблице «Ожидалось в курсе → у вас».

  3. Если оценки времени в уроках расходятся с вашими цифрами больше чем в 2 раза, пришлите lab-report.md авторам: создайте issue в репозитории курса и приложите файл. Оценки поправят. Отчёт без расхождений тоже пригодится: он подтверждает, что ориентиры верны.

nvtop / nvidia-smi

Загрузка карт, память, температура в реальном времени: nvtop или watch -n 1 nvidia-smi.

htop / btop

Загрузка 96 потоков процессора. Полезно, когда узкое место в подготовке данных.

CUDA_VISIBLE_DEVICES

Выбор карт для процесса: CUDA_VISIBLE_DEVICES=0 python train.py — только первая карта. Так можно ставить четыре разных эксперимента параллельно.

tmux

Обучение идёт часами. Запускайте его в tmux, чтобы закрытие терминала не убило процесс.