JupyterHab+Cuda+nvidia-container-toolkit
# jupyterhub-cuda
# Развертывание JupyterHub с помощью Docker Compose
Данный проект описывает процесс развертывания JupyterHub с использованием Docker Compose. Решение включает настройку аутентификации через GitHub OAuth, поддержку GPU-вычислений и использование DockerSpawner для создания изолированных окружений для пользователей.
---
## Содержание
1. [Общая информация](#общая-информация)
2. [Структура проекта](#структура-проекта)
3. [Настройка Dockerfile](#настройка-dockerfile)
4. [Настройка docker-compose.yml](#настройка-docker-composeyml)
5. [Конфигурация jupyterhub_config.py](#конфигурация-jupyterhub_configpy)
6. [Запуск сервиса](#запуск-сервиса)
---
## Общая информация
JupyterHub — это система управления многопользовательскими ноутбуками Jupyter. В данном решении используется Docker Compose для управления контейнерами, а также DockerSpawner для запуска индивидуальных серверов для каждого пользователя. Поддерживается аутентификация через GitHub OAuth и настройки GPU-окружения.
---
## Структура проекта
```
.
├── Dockerfile.jupyterhub # Файл для сборки образа JupyterHub
├── docker-compose.yml # Конфигурация Docker Compose
├── jupyterhub_config.py # Конфигурация JupyterHub
├── requirements.txt # Зависимости Python
└── data/ # Директория для хранения данных
```
---
## Настройка Dockerfile
`Dockerfile.jupyterhub` определяет базовый образ и устанавливает необходимые зависимости.
```dockerfile
FROM jupyterhub/jupyterhub:5.2.1
WORKDIR /srv/jupyterhub
# Создаем директорию для данных и изменяем владельца
RUN mkdir -p /srv/jupyterhub/data && \
chown -R 1000:100 /srv/jupyterhub
# Обновляем систему и устанавливаем дополнительные библиотеки
RUN apt-get update -y && \
python3 -m pip install --no-cache-dir \
psycopg2-binary \
dockerspawner \
oauthenticator
# Копируем файл requirements.txt и устанавливаем зависимости
COPY requirements.txt /srv/jupyterhub/requirements.txt
RUN python3 -m pip install --no-cache-dir -r /srv/jupyterhub/requirements.txt
# Копируем конфигурационный файл JupyterHub
COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py
# Запускаем JupyterHub с указанным конфигурационным файлом
CMD ["jupyterhub", "-f", "/srv/jupyterhub/jupyterhub_config.py"]
```
---
## Настройка docker-compose.yml
`docker-compose.yml` описывает параметры развертывания JupyterHub.
```yaml
version: '3.8'
services:
jupyterhub:
build:
context: .
dockerfile: Dockerfile.jupyterhub
restart: always
image: jupyterhub
container_name: jupyterhub
networks:
- jupyterhub-network
volumes:
# Привязываем конфигурационный файл
- "./jupyterhub_config.py:/srv/jupyterhub/jupyterhub_config.py"
# Привязываем сокет Docker для работы DockerSpawner
- "/var/run/docker.sock:/var/run/docker.sock:rw"
# Привязываем том для данных JupyterHub
- "jupyterhub-data:/srv/jupyterhub/data"
ports:
- "35001:8000" # Порт для доступа к JupyterHub
environment:
- JUPYTERHUB_BASE_URL=/hub
- JUPYTERHUB_URL=http://skayfaks.keenetic.pro:35001
runtime: nvidia
privileged: true
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
jupyterhub-data:
networks:
jupyterhub-network:
name: jupyterhub-network
```
### Основные параметры:
- **`build`**: Указывает Dockerfile для сборки образа.
- **`volumes`**: Монтирует конфигурационный файл и данные.
- **`ports`**: Открывает порт `35001` для доступа к JupyterHub.
- **`runtime`**: Использует NVIDIA runtime для поддержки GPU.
- **`privileged`**: Предоставляет привилегии для работы с Docker внутри контейнера.
---
## Конфигурация jupyterhub_config.py
`jupyterhub_config.py` содержит основные настройки JupyterHub.
```python
from dockerspawner import DockerSpawner
from oauthenticator.github import GitHubOAuthenticator
import os
c = get_config()
# Основные настройки JupyterHub
c.JupyterHub.bind_url = 'http://:8000'
c.JupyterHub.hub_bind_url = 'http://0.0.0.0:8081'
c.JupyterHub.start_timeout = 360
c.JupyterHub.shutdown_no_activity_timeout = 600
c.JupyterHub.shutdown_on_logout = True
c.DockerSpawner.use_internal_ip = True
# Аутентификация через GitHub OAuth
c.JupyterHub.authenticator_class = GitHubOAuthenticator
c.GitHubOAuthenticator.client_id = '*' # Укажите ваш client_id
c.GitHubOAuthenticator.client_secret = '*' # Укажите ваш client_secret
c.GitHubOAuthenticator.oauth_callback_url = 'https://jupiter45.skayfaks.keenetic.pro/hub/oauth_callback'
c.OAuthenticator.admin_users = {'hek1412'}
c.GitHubOAuthenticator.allowed_organizations = {'1T45git'}
c.GitHubOAuthenticator.scope = ['read:user', 'user:email', 'read:org']
# Настройка DockerSpawner
c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner'
c.DockerSpawner.image = 'quay.io/jupyter/pytorch-notebook:cuda12-python-3.11.8'
c.Spawner.http_timeout = 180
c.DockerSpawner.network_name = "jupyterhub-network"
c.Spawner.start_timeout = 240
c.DockerSpawner.notebook_dir = '/home/jovyan/work'
c.DockerSpawner.volumes = { 'jupyterhub-data_{username}': '/home/jovyan/work' }
c.DockerSpawner.remove = True
c.DockerSpawner.debug = True
c.DockerSpawner.cpu_limit = 4
c.DockerSpawner.mem_limit = '16G'
c.JupyterHub.active_server_limit = 6
# Настройки GPU
c.DockerSpawner.extra_create_kwargs = {
'runtime': 'nvidia'
}
c.DockerSpawner.extra_host_config = {
'device_requests': [
{
'Driver': 'nvidia',
'Count': -1,
'Capabilities': [['gpu']],
}
]
}
# Настройки безопасности
data_dir = '/srv/jupyterhub/data'
c.JupyterHub.cookie_secret_file = os.path.join(data_dir, 'jupyterhub_cookie_secret')
c.JupyterHub.db_url = "sqlite:////srv/jupyterhub/data/jupyterhub.sqlite"
c.JupyterHub.log_level = 'DEBUG'
```
### Основные параметры:
- **Аутентификация**: Используется GitHub OAuth с указанием `client_id`, `client_secret` и разрешенных организаций.
- **DockerSpawner**: Настроен для создания изолированных контейнеров для каждого пользователя с поддержкой GPU.
- **Безопасность**: Используется SQLite для хранения данных и секретов.
---
## Запуск сервиса
1. **Создайте необходимые файлы**:
- `Dockerfile.jupyterhub`
- `docker-compose.yml`
- `jupyterhub_config.py`
- `requirements.txt`
2. **Соберите образ**:
```bash
docker-compose build
```
3. **Запустите сервис**:
```bash
docker-compose up -d
```
4. **Проверьте статус**:
```bash
docker-compose ps
```
5. **Посмотреть логи**
```bash
docker logs jupyterhub
```
6. **Доступ к JupyterHub**:
Откройте браузер и перейдите по адресу: `http://skayfaks.keenetic.pro:35001/hub`.




8. Дополнительные команды Docker
```bash
docker volume ls -q
docker volume rm имя тома
docker system prune -a --volumes
docker logs jupyterhub
docker compose down
```
---
## Первая часть выполнена) Возможные проблемы в GitHub решаются чтением инструкции по созданию приложения с сайта. Мы развернули JupyterHub с использованием Docker Compose. Решение включает поддержку GPU, аутентификацию через GitHub и возможность создания изолированных окружений для каждого пользователя. Перед установкой необходимо проверить наличие актуальных драйверов `nvidia` и установить `nvidia-container-toolkit`, инструкция ниже.
# Проверка драйвера nvidia
**Проверка установки драйверов NVIDIA:**
- Убедитесь, что на вашей машине установлены драйверы NVIDIA. Вы можете проверить их установку и статус с помощью команды:
```bash
nvidia-smi
```
Если команда возвращает информацию о вашей графической карте и cuda как на картинке ниже, значит драйверы установлены правильно. Можно переходить к установки `nvidia-container-toolkit`

## Установка драйверов NVIDIA
1. **Обновите систему**:
```bash
sudo apt-get update && sudo apt-get upgrade -y
```
2. **Добавьте репозиторий NVIDIA**:
- Для Ubuntu 20.04:
```bash
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
```
- Для Ubuntu 22.04 и выше рекомендуется использовать официальные репозитории.
3. **Установите драйверы**:
- Просмотрите доступные версии драйверов:
```bash
ubuntu-drivers devices
```

- Установите рекомендуемую версию (например, `nvidia-driver-560`):
```bash
sudo apt-get install nvidia-driver-525
```
4. **Установите дополнительные утилиты (по желанию, не обязательно)**:
- Установите `nvidia-utils` для получения инструментов мониторинга:
```bash
sudo apt-get install nvidia-utils-560
```
5. **Перезагрузите систему**:
```bash
sudo reboot now
```
---
## Проверка работы драйверов
После перезагрузки системы проверьте, что драйверы успешно установлены и работают.
1. **Проверьте статус драйвера**:
```bash
nvidia-smi
```
- Команда должна вывести информацию о GPU, включая модель, температуру и использование памяти.

2. **Проверьте журнал ядра**:
```bash
dmesg | grep nvidia
```
- Журнал должен содержать сообщения об успешной загрузке модуля ядра NVIDIA.
3. **Проверьте модуль ядра**:
```bash
lsmod | grep nvidia
```
- Если модуль загружен, он будет отображен в списке.
---
## Разрешение проблем
Если возникают проблемы при установке или работе драйверов, выполните следующие шаги:
1. **Проверьте логи системы**:
- Просмотрите логи ядра:
```bash
dmesg | grep -i error
```
- Просмотрите логи APT:
```bash
cat /var/log/apt/history.log
```
2. **Отключите Secure Boot**:
- На некоторых системах Secure Boot может блокировать загрузку модулей NVIDIA. Отключите его в BIOS.
3. **Убедитесь, что система поддерживает GPU**:
- Проверьте совместимость вашей видеокарты с установленной версией драйвера:
[Матрица совместимости NVIDIA](https://www.nvidia.com/Download/Find.aspx)
4. **Попробуйте другую версию драйвера**:
- Иногда более новая или старая версия драйвера может решить проблемы.
5. **Обратитесь к документации**:
- [Официальная документация NVIDIA](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html)
---
## Наличие драйвера не гарантирует нормальную работу, нужно еще установить `nvidia-container-toolkit` и не забываем про сам отраз для ноутбуков (Обязательно наличие CUDA) и библиотек для питона в 'requirements'.
---
# Установка и Настройка `nvidia-container-toolkit`
Для обеспечения поддержки GPU в контейнерах Docker необходимо установить и правильно настроить `nvidia-container-toolkit`. Этот инструмент позволяет контейнерам использовать ресурсы графических процессоров NVIDIA. Ниже описан пошаговый процесс установки и проверки конфигурации.
[Официальная документация](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)
---
## Содержание
1. [Общая информация](#общая-информация)
2. [Установка nvidia-container-toolkit](#установка-nvidia-container-toolkit)
3. [Настройка Docker для работы с NVIDIA](#настройка-docker-для-работы-с-nvidia)
4. [Проверка конфигурации](#проверка-конфигурации)
5. [Разрешение проблем](#разрешение-проблем)
---
## Общая информация
`nvidia-container-toolkit` — это набор инструментов, который интегрирует NVIDIA GPU с Docker. Он позволяет контейнерам использовать ресурсы GPU без необходимости изменения кода приложения. После установки вы сможете запускать GPU-приложения внутри Docker-контейнеров.
---
## Установка `nvidia-container-toolkit`
1. **Добавьте репозиторий NVIDIA**:
- Определите ваше распределение Linux (например, Ubuntu 20.04):
```bash
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
```
- Добавьте ключ GPG NVIDIA:
```bash
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
```
- Добавьте репозиторий NVIDIA для вашего распределения:
```bash
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
```
2. **Обновите список пакетов**:
```bash
sudo apt-get update
```
3. **Установите `nvidia-container-toolkit`**:
```bash
sudo apt-get install -y nvidia-container-toolkit
```
4. **Настройте runtime Docker для использования NVIDIA**:
```bash
sudo nvidia-ctk runtime configure --runtime=docker
```
5. **Перезапустите демон Docker**:
```bash
sudo systemctl restart docker
```
---
## Настройка Docker для работы с NVIDIA
Чтобы Docker мог использовать GPU, убедитесь, что он настроен для работы с `nvidia-container-runtime`.
1. **Отредактируйте файл конфигурации Docker**:
- Откройте файл `/etc/docker/daemon.json`:
```bash
sudo nano /etc/docker/daemon.json
```
2. **Добавьте следующую конфигурацию**:
```json
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
```
3. **Сохраните файл и перезапустите Docker**:
```bash
sudo systemctl restart docker
```
---
## Проверка конфигурации
После завершения установки и настройки проверьте, что Docker может использовать GPU.
1. **Запустите тестовый контейнер**:
```bash
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
```
- Если всё настроено правильно, команда выведет информацию о доступных GPU, аналогично тому, как работает `nvidia-smi` непосредственно на хост-машине. Пример на скрине ниже:

2. **Проверьте логи Docker**:
- Если возникают ошибки, проверьте логи Docker:
```bash
sudo journalctl -u docker.service
```
---
## Разрешение проблем
Если Docker не видит GPU или возникают другие проблемы, выполните следующие шаги:
1. **Убедитесь, что драйверы NVIDIA установлены**:
- Проверьте версию драйвера:
```bash
nvidia-smi
```
- Если драйверы не установлены, следуйте инструкциям из [официальной документации NVIDIA](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html).
2. **Проверьте права доступа к устройствам GPU**:
- Убедитесь, что пользователь имеет права доступа к `/dev/nvidia*`:
```bash
ls -l /dev/nvidia*
```
3. **Перепроверьте конфигурацию Docker**:
- Убедитесь, что `/etc/docker/daemon.json` содержит правильные настройки для `nvidia-container-runtime`.
4. **Перезапустите систему**:
- Иногда требуется перезагрузка системы для применения изменений:
```bash
sudo reboot now
```
---
После успешной установки и настройки `nvidia-container-toolkit`, Docker сможет работать с GPU, что особенно полезно для машинного обучения, обработки данных и других задач, требующих высокопроизводительных вычислений. Если у вас возникли сложности, обратитесь к [официальной документации NVIDIA](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html) или сообществу разработчиков.
# jupyterhub-cuda
# Развертывание JupyterHub с помощью Docker Compose
Данный проект описывает процесс развертывания JupyterHub с использованием Docker Compose. Решение включает настройку аутентификации через GitHub OAuth, поддержку GPU-вычислений и использование DockerSpawner для создания изолированных окружений для пользователей.
---
## Содержание
1. [Общая информация](#общая-информация)
2. [Структура проекта](#структура-проекта)
3. [Настройка Dockerfile](#настройка-dockerfile)
4. [Настройка docker-compose.yml](#настройка-docker-composeyml)
5. [Конфигурация jupyterhub_config.py](#конфигурация-jupyterhub_configpy)
6. [Запуск сервиса](#запуск-сервиса)
---
## Общая информация
JupyterHub — это система управления многопользовательскими ноутбуками Jupyter. В данном решении используется Docker Compose для управления контейнерами, а также DockerSpawner для запуска индивидуальных серверов для каждого пользователя. Поддерживается аутентификация через GitHub OAuth и настройки GPU-окружения.
---
## Структура проекта
```
.
├── Dockerfile.jupyterhub # Файл для сборки образа JupyterHub
├── docker-compose.yml # Конфигурация Docker Compose
├── jupyterhub_config.py # Конфигурация JupyterHub
├── requirements.txt # Зависимости Python
└── data/ # Директория для хранения данных
```
---
## Настройка Dockerfile
`Dockerfile.jupyterhub` определяет базовый образ и устанавливает необходимые зависимости.
```dockerfile
FROM jupyterhub/jupyterhub:5.2.1
WORKDIR /srv/jupyterhub
# Создаем директорию для данных и изменяем владельца
RUN mkdir -p /srv/jupyterhub/data && \
chown -R 1000:100 /srv/jupyterhub
# Обновляем систему и устанавливаем дополнительные библиотеки
RUN apt-get update -y && \
python3 -m pip install --no-cache-dir \
psycopg2-binary \
dockerspawner \
oauthenticator
# Копируем файл requirements.txt и устанавливаем зависимости
COPY requirements.txt /srv/jupyterhub/requirements.txt
RUN python3 -m pip install --no-cache-dir -r /srv/jupyterhub/requirements.txt
# Копируем конфигурационный файл JupyterHub
COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py
# Запускаем JupyterHub с указанным конфигурационным файлом
CMD ["jupyterhub", "-f", "/srv/jupyterhub/jupyterhub_config.py"]
```
---
## Настройка docker-compose.yml
`docker-compose.yml` описывает параметры развертывания JupyterHub.
```yaml
version: '3.8'
services:
jupyterhub:
build:
context: .
dockerfile: Dockerfile.jupyterhub
restart: always
image: jupyterhub
container_name: jupyterhub
networks:
- jupyterhub-network
volumes:
# Привязываем конфигурационный файл
- "./jupyterhub_config.py:/srv/jupyterhub/jupyterhub_config.py"
# Привязываем сокет Docker для работы DockerSpawner
- "/var/run/docker.sock:/var/run/docker.sock:rw"
# Привязываем том для данных JupyterHub
- "jupyterhub-data:/srv/jupyterhub/data"
ports:
- "35001:8000" # Порт для доступа к JupyterHub
environment:
- JUPYTERHUB_BASE_URL=/hub
- JUPYTERHUB_URL=http://skayfaks.keenetic.pro:35001
runtime: nvidia
privileged: true
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
jupyterhub-data:
networks:
jupyterhub-network:
name: jupyterhub-network
```
### Основные параметры:
- **`build`**: Указывает Dockerfile для сборки образа.
- **`volumes`**: Монтирует конфигурационный файл и данные.
- **`ports`**: Открывает порт `35001` для доступа к JupyterHub.
- **`runtime`**: Использует NVIDIA runtime для поддержки GPU.
- **`privileged`**: Предоставляет привилегии для работы с Docker внутри контейнера.
---
## Конфигурация jupyterhub_config.py
`jupyterhub_config.py` содержит основные настройки JupyterHub.
```python
from dockerspawner import DockerSpawner
from oauthenticator.github import GitHubOAuthenticator
import os
c = get_config()
# Основные настройки JupyterHub
c.JupyterHub.bind_url = 'http://:8000'
c.JupyterHub.hub_bind_url = 'http://0.0.0.0:8081'
c.JupyterHub.start_timeout = 360
c.JupyterHub.shutdown_no_activity_timeout = 600
c.JupyterHub.shutdown_on_logout = True
c.DockerSpawner.use_internal_ip = True
# Аутентификация через GitHub OAuth
c.JupyterHub.authenticator_class = GitHubOAuthenticator
c.GitHubOAuthenticator.client_id = '*' # Укажите ваш client_id
c.GitHubOAuthenticator.client_secret = '*' # Укажите ваш client_secret
c.GitHubOAuthenticator.oauth_callback_url = 'https://jupiter45.skayfaks.keenetic.pro/hub/oauth_callback'
c.OAuthenticator.admin_users = {'hek1412'}
c.GitHubOAuthenticator.allowed_organizations = {'1T45git'}
c.GitHubOAuthenticator.scope = ['read:user', 'user:email', 'read:org']
# Настройка DockerSpawner
c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner'
c.DockerSpawner.image = 'quay.io/jupyter/pytorch-notebook:cuda12-python-3.11.8'
c.Spawner.http_timeout = 180
c.DockerSpawner.network_name = "jupyterhub-network"
c.Spawner.start_timeout = 240
c.DockerSpawner.notebook_dir = '/home/jovyan/work'
c.DockerSpawner.volumes = { 'jupyterhub-data_{username}': '/home/jovyan/work' }
c.DockerSpawner.remove = True
c.DockerSpawner.debug = True
c.DockerSpawner.cpu_limit = 4
c.DockerSpawner.mem_limit = '16G'
c.JupyterHub.active_server_limit = 6
# Настройки GPU
c.DockerSpawner.extra_create_kwargs = {
'runtime': 'nvidia'
}
c.DockerSpawner.extra_host_config = {
'device_requests': [
{
'Driver': 'nvidia',
'Count': -1,
'Capabilities': [['gpu']],
}
]
}
# Настройки безопасности
data_dir = '/srv/jupyterhub/data'
c.JupyterHub.cookie_secret_file = os.path.join(data_dir, 'jupyterhub_cookie_secret')
c.JupyterHub.db_url = "sqlite:////srv/jupyterhub/data/jupyterhub.sqlite"
c.JupyterHub.log_level = 'DEBUG'
```
### Основные параметры:
- **Аутентификация**: Используется GitHub OAuth с указанием `client_id`, `client_secret` и разрешенных организаций.
- **DockerSpawner**: Настроен для создания изолированных контейнеров для каждого пользователя с поддержкой GPU.
- **Безопасность**: Используется SQLite для хранения данных и секретов.
---
## Запуск сервиса
1. **Создайте необходимые файлы**:
- `Dockerfile.jupyterhub`
- `docker-compose.yml`
- `jupyterhub_config.py`
- `requirements.txt`
2. **Соберите образ**:
```bash
docker-compose build
```
3. **Запустите сервис**:
```bash
docker-compose up -d
```
4. **Проверьте статус**:
```bash
docker-compose ps
```
5. **Посмотреть логи**
```bash
docker logs jupyterhub
```
6. **Доступ к JupyterHub**:
Откройте браузер и перейдите по адресу: `http://skayfaks.keenetic.pro:35001/hub`.




8. Дополнительные команды Docker
```bash
docker volume ls -q
docker volume rm имя тома
docker system prune -a --volumes
docker logs jupyterhub
docker compose down
```
---
## Первая часть выполнена) Возможные проблемы в GitHub решаются чтением инструкции по созданию приложения с сайта. Мы развернули JupyterHub с использованием Docker Compose. Решение включает поддержку GPU, аутентификацию через GitHub и возможность создания изолированных окружений для каждого пользователя. Перед установкой необходимо проверить наличие актуальных драйверов `nvidia` и установить `nvidia-container-toolkit`, инструкция ниже.
# Проверка драйвера nvidia
**Проверка установки драйверов NVIDIA:**
- Убедитесь, что на вашей машине установлены драйверы NVIDIA. Вы можете проверить их установку и статус с помощью команды:
```bash
nvidia-smi
```
Если команда возвращает информацию о вашей графической карте и cuda как на картинке ниже, значит драйверы установлены правильно. Можно переходить к установки `nvidia-container-toolkit`

## Установка драйверов NVIDIA
1. **Обновите систему**:
```bash
sudo apt-get update && sudo apt-get upgrade -y
```
2. **Добавьте репозиторий NVIDIA**:
- Для Ubuntu 20.04:
```bash
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
```
- Для Ubuntu 22.04 и выше рекомендуется использовать официальные репозитории.
3. **Установите драйверы**:
- Просмотрите доступные версии драйверов:
```bash
ubuntu-drivers devices
```

- Установите рекомендуемую версию (например, `nvidia-driver-560`):
```bash
sudo apt-get install nvidia-driver-525
```
4. **Установите дополнительные утилиты (по желанию, не обязательно)**:
- Установите `nvidia-utils` для получения инструментов мониторинга:
```bash
sudo apt-get install nvidia-utils-560
```
5. **Перезагрузите систему**:
```bash
sudo reboot now
```
---
## Проверка работы драйверов
После перезагрузки системы проверьте, что драйверы успешно установлены и работают.
1. **Проверьте статус драйвера**:
```bash
nvidia-smi
```
- Команда должна вывести информацию о GPU, включая модель, температуру и использование памяти.

2. **Проверьте журнал ядра**:
```bash
dmesg | grep nvidia
```
- Журнал должен содержать сообщения об успешной загрузке модуля ядра NVIDIA.
3. **Проверьте модуль ядра**:
```bash
lsmod | grep nvidia
```
- Если модуль загружен, он будет отображен в списке.
---
## Разрешение проблем
Если возникают проблемы при установке или работе драйверов, выполните следующие шаги:
1. **Проверьте логи системы**:
- Просмотрите логи ядра:
```bash
dmesg | grep -i error
```
- Просмотрите логи APT:
```bash
cat /var/log/apt/history.log
```
2. **Отключите Secure Boot**:
- На некоторых системах Secure Boot может блокировать загрузку модулей NVIDIA. Отключите его в BIOS.
3. **Убедитесь, что система поддерживает GPU**:
- Проверьте совместимость вашей видеокарты с установленной версией драйвера:
[Матрица совместимости NVIDIA](https://www.nvidia.com/Download/Find.aspx)
4. **Попробуйте другую версию драйвера**:
- Иногда более новая или старая версия драйвера может решить проблемы.
5. **Обратитесь к документации**:
- [Официальная документация NVIDIA](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html)
---
## Наличие драйвера не гарантирует нормальную работу, нужно еще установить `nvidia-container-toolkit` и не забываем про сам отраз для ноутбуков (Обязательно наличие CUDA) и библиотек для питона в 'requirements'.
---
# Установка и Настройка `nvidia-container-toolkit`
Для обеспечения поддержки GPU в контейнерах Docker необходимо установить и правильно настроить `nvidia-container-toolkit`. Этот инструмент позволяет контейнерам использовать ресурсы графических процессоров NVIDIA. Ниже описан пошаговый процесс установки и проверки конфигурации.
[Официальная документация](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)
---
## Содержание
1. [Общая информация](#общая-информация)
2. [Установка nvidia-container-toolkit](#установка-nvidia-container-toolkit)
3. [Настройка Docker для работы с NVIDIA](#настройка-docker-для-работы-с-nvidia)
4. [Проверка конфигурации](#проверка-конфигурации)
5. [Разрешение проблем](#разрешение-проблем)
---
## Общая информация
`nvidia-container-toolkit` — это набор инструментов, который интегрирует NVIDIA GPU с Docker. Он позволяет контейнерам использовать ресурсы GPU без необходимости изменения кода приложения. После установки вы сможете запускать GPU-приложения внутри Docker-контейнеров.
---
## Установка `nvidia-container-toolkit`
1. **Добавьте репозиторий NVIDIA**:
- Определите ваше распределение Linux (например, Ubuntu 20.04):
```bash
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
```
- Добавьте ключ GPG NVIDIA:
```bash
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
```
- Добавьте репозиторий NVIDIA для вашего распределения:
```bash
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
```
2. **Обновите список пакетов**:
```bash
sudo apt-get update
```
3. **Установите `nvidia-container-toolkit`**:
```bash
sudo apt-get install -y nvidia-container-toolkit
```
4. **Настройте runtime Docker для использования NVIDIA**:
```bash
sudo nvidia-ctk runtime configure --runtime=docker
```
5. **Перезапустите демон Docker**:
```bash
sudo systemctl restart docker
```
---
## Настройка Docker для работы с NVIDIA
Чтобы Docker мог использовать GPU, убедитесь, что он настроен для работы с `nvidia-container-runtime`.
1. **Отредактируйте файл конфигурации Docker**:
- Откройте файл `/etc/docker/daemon.json`:
```bash
sudo nano /etc/docker/daemon.json
```
2. **Добавьте следующую конфигурацию**:
```json
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
```
3. **Сохраните файл и перезапустите Docker**:
```bash
sudo systemctl restart docker
```
---
## Проверка конфигурации
После завершения установки и настройки проверьте, что Docker может использовать GPU.
1. **Запустите тестовый контейнер**:
```bash
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
```
- Если всё настроено правильно, команда выведет информацию о доступных GPU, аналогично тому, как работает `nvidia-smi` непосредственно на хост-машине. Пример на скрине ниже:

2. **Проверьте логи Docker**:
- Если возникают ошибки, проверьте логи Docker:
```bash
sudo journalctl -u docker.service
```
---
## Разрешение проблем
Если Docker не видит GPU или возникают другие проблемы, выполните следующие шаги:
1. **Убедитесь, что драйверы NVIDIA установлены**:
- Проверьте версию драйвера:
```bash
nvidia-smi
```
- Если драйверы не установлены, следуйте инструкциям из [официальной документации NVIDIA](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html).
2. **Проверьте права доступа к устройствам GPU**:
- Убедитесь, что пользователь имеет права доступа к `/dev/nvidia*`:
```bash
ls -l /dev/nvidia*
```
3. **Перепроверьте конфигурацию Docker**:
- Убедитесь, что `/etc/docker/daemon.json` содержит правильные настройки для `nvidia-container-runtime`.
4. **Перезапустите систему**:
- Иногда требуется перезагрузка системы для применения изменений:
```bash
sudo reboot now
```
---
После успешной установки и настройки `nvidia-container-toolkit`, Docker сможет работать с GPU, что особенно полезно для машинного обучения, обработки данных и других задач, требующих высокопроизводительных вычислений. Если у вас возникли сложности, обратитесь к [официальной документации NVIDIA](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html) или сообществу разработчиков.