Настройка Linux для обучения моделей с GPU

e291231b72dcb803134ca43f26c57a35.png

Ну что ж, сборка железа завершена! Мой стенд с GPU стоит и ждет команды к действию. Но, конечно, просто собрать ПК — это лишь начало пути. Теперь надо научить систему работать с этим зверем, установив Linux, драйвера, CUDA и остальные радости. А это, как мы знаем, может оказаться тем ещё квестом: если всё не заработает идеально сразу, то точно начнётся «шоу непредсказуемых проблем». Я не большой любитель настраивать и перенастраивать и не большой эксперт в linux, но периодически приходится прибегать к настройкам, поэтому решил что сразу напишу все в виде скриптов для упрощения процесса и возможности откатиться. Результат в виде скриптов, которые «сами всё сделают за вас» и описание к ним можно посмотреть здесь! Если повезёт, они даже не сломают систему (шутка, обязательно сломают).

Три шага к успеху

Установку Linux я не затрагиваю, она хорошо описана, скажу только, что за основу я выбрал Ubuntu 24.04 Desktop версию (иногда требуется окружение desktop). А дальше выполнял настройку системы под свои потребности.

Для удобства настройки я разделил установку на три части, каждая из которых решает конкретные задачи, делая процесс более гибким и удобным:

  1. Настройка удалённого доступа — включает SSH и безопасность, чтобы подключаться к машине.

  2. Установка драйверов и CUDA — это ключ для задействования мощности GPU, без которого ваше железо просто бесполезно.

  3. Инструменты разработки — 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 моделей.

© Habrahabr.ru