Настройка Linux для обучения моделей с GPU
Ну что ж, сборка железа завершена! Мой стенд с GPU стоит и ждет команды к действию. Но, конечно, просто собрать ПК — это лишь начало пути. Теперь надо научить систему работать с этим зверем, установив Linux, драйвера, CUDA и остальные радости. А это, как мы знаем, может оказаться тем ещё квестом: если всё не заработает идеально сразу, то точно начнётся «шоу непредсказуемых проблем». Я не большой любитель настраивать и перенастраивать и не большой эксперт в linux, но периодически приходится прибегать к настройкам, поэтому решил что сразу напишу все в виде скриптов для упрощения процесса и возможности откатиться. Результат в виде скриптов, которые «сами всё сделают за вас» и описание к ним можно посмотреть здесь! Если повезёт, они даже не сломают систему (шутка, обязательно сломают).
Три шага к успеху
Установку Linux я не затрагиваю, она хорошо описана, скажу только, что за основу я выбрал Ubuntu 24.04 Desktop версию (иногда требуется окружение desktop). А дальше выполнял настройку системы под свои потребности.
Для удобства настройки я разделил установку на три части, каждая из которых решает конкретные задачи, делая процесс более гибким и удобным:
Настройка удалённого доступа — включает SSH и безопасность, чтобы подключаться к машине.
Установка драйверов и CUDA — это ключ для задействования мощности GPU, без которого ваше железо просто бесполезно.
Инструменты разработки — Docker, Jupyter и другие приятные мелочи, чтобы писать и тестировать код было комфортно и безопасно.
Для каждого шага я написал скрипты который устанавливают и удаляют или управляют установленными компонентами. Настройки для каждого шага в config.env файлах. Более подробный readme.
Первый шаг: удалённый доступ
ПК я использую как домашний сервер, но иногда использую его desktop окружение, иначе можно было бы установить серверную версию линукс. Вообщем ПК стоит в темноте без монитора и все что на нем крутится должно быть доступно удаленно. Поэтому на первом шаге настроим удаленный доступ. Для этого предусмотрены:
SSH — для безопасного подключения к серверу.
UFW (Uncomplicated Firewall) — для защиты сети.
RDP — для удалённого рабочего стола.
VNC — так же для графического доступа.
Samba — для общего доступа к файлам в сети.
Подробный readme к первому этапу.
Второй шаг: драйверы NVIDIA и CUDA
Теперь давайте рассмотрим момент, ради которого всё затевалось. Ведь мне был нужен GPU, а раз так, не обойтись без NVIDIA драйверов.
Итак, что устанавливаем:
NVIDIA драйверы — чтобы видеокарта наконец-то поняла, что от нее хотят.
CUDA — магия параллельных вычислений без CUDA не обойтись с обучением сеточек.
cuDNN — библиотека cuDNN для задач глубокого обучения.
Python —для разработки, в моем случае, дистрибутив Ubuntu уже содержал Python 3.12, но нужно было установить вторую версию до 3.11.
Корректируем конфиг и запускаем скрипты, если повезёт, то вы не получите внезапную перезагрузку с чёрным экраном (который, к слову, тоже выглядит довольно минималистично и стильно). Если, все же, такое случится, то может вы просто Малевич?
Идем дальше с теми, у кого установка прошла успешно. Проверям установку софта nvidia:
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0
Если вывод следующей команды показывает именно ваш GPU, — значит, карма чиста и все только впереди, если нет, время пересмотреть жизненные приоритеты. Мне повезло.
$ nvidia-smi
Fri Sep 27 17:01:20 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 3090 Ti Off | 00000000:01:00.0 Off | Off |
| 0% 41C P8 15W / 450W | 4552MiB / 24564MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 2441 C python 4546MiB |
+---------------------------------------------------------------------------------------+
Ну и вишенка на торте — проверим, действительно ли ваш GPU готов работать на благо науки. Используйте следующий код (не забудьте установить предварительно pytorсh):
import torch
print("CUDA доступна: ", torch.cuda.is_available())
print("Количество доступных GPU: ", torch.cuda.device_count())
Результат должен быть:
python test_gpu.py
CUDA доступна: True
Количество доступных GPU: 1
Если вывод подтверждает, что CUDA доступна, значит, настройка прошла удачно, и все готово, чтобы погрузиться в мир глубокого обучения на скорости GPU. Ну, или по крайней мере начать разбираться, что ещё пошло не так.
Подробный readme ко второму этапу.
Третий шаг: инструменты для разработки
После первых двух этапов у имеем настроен удалённый доступ, установленые драйверы, CUDA работает. Что дальше? А дальше нужно окружение для работы, чтобы можно было обучать свои модели, запускать их для тестирования и вообще загрузить по полной все эти cpu/gpu ядра и память, которые доступны в железе. Тут помогут скрипты, которые в моем случае устанавливают минимум нужных мне компонент, а именно устанавливаем:
Git: Система управления версиями.
Docker: Платформа контейнеризации.
Jupyter — разве не мечта каждого разработчика — видеть свои ошибки сразу в браузере?
Ray — платформа для тех, кто решил, что один GPU это скучно, и пора масштабироваться.
Подробный readme к третьему этапу.
Заключение
Наверняка можно сделать лучше, круче и так далее, но надеюсь, что мои скрипты кому то помогут сэкономить время на подготовку ПК к обучению моделей, а у кого-то вызовут здоровую или нездоровую реакцию. Порадуюсь за первых, поблагодарю вторых и пожалею третьих. В следующий раз планирую рассказать про установку LLM моделей.