Исходный код вики Sandbox Test Page 1
Редактировал(а) Anton Krivchenkov 03.12.2024 14:12
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | # jupyterhub-cuda | ||
| 2 | # Развертывание JupyterHub с помощью Docker Compose | ||
| 3 | |||
| 4 | Данный проект описывает процесс развертывания JupyterHub с использованием Docker Compose. Решение включает настройку аутентификации через GitHub OAuth, поддержку GPU-вычислений и использование DockerSpawner для создания изолированных окружений для пользователей. | ||
| 5 | |||
| 6 | ~-~-- | ||
| 7 | |||
| 8 | ~#~# Содержание | ||
| 9 | ~1. [Общая информация](#общая-информация) | ||
| 10 | 2. [Структура проекта](#структура-проекта) | ||
| 11 | 3. [Настройка Dockerfile](#настройка-dockerfile) | ||
| 12 | 4. [Настройка docker-compose.yml](#настройка-docker-composeyml) | ||
| 13 | 5. [Конфигурация jupyterhub_config.py](#конфигурация-jupyterhub_configpy) | ||
| 14 | 6. [Запуск сервиса](#запуск-сервиса) | ||
| 15 | |||
| 16 | ~-~-- | ||
| 17 | |||
| 18 | ~#~# Общая информация | ||
| 19 | |||
| 20 | JupyterHub — это система управления многопользовательскими ноутбуками Jupyter. В данном решении используется Docker Compose для управления контейнерами, а также DockerSpawner для запуска индивидуальных серверов для каждого пользователя. Поддерживается аутентификация через GitHub OAuth и настройки GPU-окружения. | ||
| 21 | |||
| 22 | ~-~-- | ||
| 23 | |||
| 24 | ~#~# Структура проекта | ||
| 25 | |||
| 26 | ``` | ||
| 27 | . | ||
| 28 | ├── Dockerfile.jupyterhub # Файл для сборки образа JupyterHub | ||
| 29 | ├── docker-compose.yml # Конфигурация Docker Compose | ||
| 30 | ├── jupyterhub_config.py # Конфигурация JupyterHub | ||
| 31 | ├── requirements.txt # Зависимости Python | ||
| 32 | └── data/ # Директория для хранения данных | ||
| 33 | ``` | ||
| 34 | |||
| 35 | ~-~-- | ||
| 36 | |||
| 37 | ~#~# Настройка Dockerfile | ||
| 38 | |||
| 39 | `Dockerfile.jupyterhub` определяет базовый образ и устанавливает необходимые зависимости. | ||
| 40 | |||
| 41 | ```dockerfile | ||
| 42 | FROM jupyterhub/jupyterhub:5.2.1 | ||
| 43 | WORKDIR /srv/jupyterhub | ||
| 44 | |||
| 45 | # Создаем директорию для данных и изменяем владельца | ||
| 46 | RUN mkdir -p /srv/jupyterhub/data && \ | ||
| 47 | chown -R 1000:100 /srv/jupyterhub | ||
| 48 | |||
| 49 | # Обновляем систему и устанавливаем дополнительные библиотеки | ||
| 50 | RUN apt-get update -y && \ | ||
| 51 | python3 -m pip install ~-~-no-cache-dir \ | ||
| 52 | psycopg2-binary \ | ||
| 53 | dockerspawner \ | ||
| 54 | oauthenticator | ||
| 55 | |||
| 56 | # Копируем файл requirements.txt и устанавливаем зависимости | ||
| 57 | COPY requirements.txt /srv/jupyterhub/requirements.txt | ||
| 58 | RUN python3 -m pip install ~-~-no-cache-dir -r /srv/jupyterhub/requirements.txt | ||
| 59 | |||
| 60 | # Копируем конфигурационный файл JupyterHub | ||
| 61 | COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py | ||
| 62 | |||
| 63 | # Запускаем JupyterHub с указанным конфигурационным файлом | ||
| 64 | CMD ["jupyterhub", "-f", "/srv/jupyterhub/jupyterhub_config.py"] | ||
| 65 | ``` | ||
| 66 | |||
| 67 | ~-~-- | ||
| 68 | |||
| 69 | ~#~# Настройка docker-compose.yml | ||
| 70 | |||
| 71 | `docker-compose.yml` описывает параметры развертывания JupyterHub. | ||
| 72 | |||
| 73 | ```yaml | ||
| 74 | version: '3.8' | ||
| 75 | |||
| 76 | services: | ||
| 77 | jupyterhub: | ||
| 78 | build: | ||
| 79 | context: . | ||
| 80 | dockerfile: Dockerfile.jupyterhub | ||
| 81 | restart: always | ||
| 82 | image~: jupyterhub | ||
| 83 | container_name: jupyterhub | ||
| 84 | networks: | ||
| 85 | - jupyterhub-network | ||
| 86 | volumes: | ||
| 87 | # Привязываем конфигурационный файл | ||
| 88 | - "./jupyterhub_config.py:/srv/jupyterhub/jupyterhub_config.py" | ||
| 89 | # Привязываем сокет Docker для работы DockerSpawner | ||
| 90 | - "/var/run/docker.sock:/var/run/docker.sock:rw" | ||
| 91 | # Привязываем том для данных JupyterHub | ||
| 92 | - "jupyterhub-data:/srv/jupyterhub/data" | ||
| 93 | ports: | ||
| 94 | - "35001:8000" # Порт для доступа к JupyterHub | ||
| 95 | environment: | ||
| 96 | - JUPYTERHUB_BASE_URL=/hub | ||
| 97 | - JUPYTERHUB_URL=http:~/~/skayfaks.keenetic.pro:35001 | ||
| 98 | runtime: nvidia | ||
| 99 | privileged: true | ||
| 100 | deploy: | ||
| 101 | resources: | ||
| 102 | reservations: | ||
| 103 | devices: | ||
| 104 | - driver: nvidia | ||
| 105 | count: all | ||
| 106 | capabilities: [gpu] | ||
| 107 | |||
| 108 | volumes: | ||
| 109 | jupyterhub-data: | ||
| 110 | |||
| 111 | networks: | ||
| 112 | jupyterhub-network: | ||
| 113 | name: jupyterhub-network | ||
| 114 | ``` | ||
| 115 | |||
| 116 | ~#~## Основные параметры: | ||
| 117 | - ~*~*`build`~*~*: Указывает Dockerfile для сборки образа. | ||
| 118 | - ~*~*`volumes`~*~*: Монтирует конфигурационный файл и данные. | ||
| 119 | - ~*~*`ports`~*~*: Открывает порт `35001` для доступа к JupyterHub. | ||
| 120 | - ~*~*`runtime`~*~*: Использует NVIDIA runtime для поддержки GPU. | ||
| 121 | - ~*~*`privileged`~*~*: Предоставляет привилегии для работы с Docker внутри контейнера. | ||
| 122 | |||
| 123 | ~-~-- | ||
| 124 | |||
| 125 | ~#~# Конфигурация jupyterhub_config.py | ||
| 126 | |||
| 127 | `jupyterhub_config.py` содержит основные настройки JupyterHub. | ||
| 128 | |||
| 129 | ```python | ||
| 130 | from dockerspawner import DockerSpawner | ||
| 131 | from oauthenticator.github import GitHubOAuthenticator | ||
| 132 | import os | ||
| 133 | |||
| 134 | c = get_config() | ||
| 135 | |||
| 136 | # Основные настройки JupyterHub | ||
| 137 | c.JupyterHub.bind_url = 'http:~/~/:8000' | ||
| 138 | c.JupyterHub.hub_bind_url = 'http:~/~/0.0.0.0:8081' | ||
| 139 | c.JupyterHub.start_timeout = 360 | ||
| 140 | c.JupyterHub.shutdown_no_activity_timeout = 600 | ||
| 141 | c.JupyterHub.shutdown_on_logout = True | ||
| 142 | c.DockerSpawner.use_internal_ip = True | ||
| 143 | |||
| 144 | # Аутентификация через GitHub OAuth | ||
| 145 | c.JupyterHub.authenticator_class = GitHubOAuthenticator | ||
| 146 | c.GitHubOAuthenticator.client_id = '*' # Укажите ваш client_id | ||
| 147 | c.GitHubOAuthenticator.client_secret = '*' # Укажите ваш client_secret | ||
| 148 | c.GitHubOAuthenticator.oauth_callback_url = 'https:~/~/jupiter45.skayfaks.keenetic.pro/hub/oauth_callback' | ||
| 149 | c.OAuthenticator.admin_users = {'hek1412'} | ||
| 150 | c.GitHubOAuthenticator.allowed_organizations = {'1T45git'} | ||
| 151 | c.GitHubOAuthenticator.scope = ['read:user', 'user:email', 'read:org'] | ||
| 152 | |||
| 153 | # Настройка DockerSpawner | ||
| 154 | c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner' | ||
| 155 | c.DockerSpawner.image = 'quay.io/jupyter/pytorch-notebook:cuda12-python-3.11.8' | ||
| 156 | c.Spawner.http_timeout = 180 | ||
| 157 | c.DockerSpawner.network_name = "jupyterhub-network" | ||
| 158 | c.Spawner.start_timeout = 240 | ||
| 159 | c.DockerSpawner.notebook_dir = '/home/jovyan/work' | ||
| 160 | c.DockerSpawner.volumes = { 'jupyterhub-data_{username}': '/home/jovyan/work' } | ||
| 161 | c.DockerSpawner.remove = True | ||
| 162 | c.DockerSpawner.debug = True | ||
| 163 | c.DockerSpawner.cpu_limit = 4 | ||
| 164 | c.DockerSpawner.mem_limit = '16G' | ||
| 165 | c.JupyterHub.active_server_limit = 6 | ||
| 166 | |||
| 167 | # Настройки GPU | ||
| 168 | c.DockerSpawner.extra_create_kwargs = { | ||
| 169 | 'runtime': 'nvidia' | ||
| 170 | } | ||
| 171 | c.DockerSpawner.extra_host_config = { | ||
| 172 | 'device_requests': [ | ||
| 173 | { | ||
| 174 | 'Driver': 'nvidia', | ||
| 175 | 'Count': -1, | ||
| 176 | 'Capabilities': ~[~['gpu']], | ||
| 177 | } | ||
| 178 | ] | ||
| 179 | } | ||
| 180 | |||
| 181 | # Настройки безопасности | ||
| 182 | data_dir = '/srv/jupyterhub/data' | ||
| 183 | c.JupyterHub.cookie_secret_file = os.path.join(data_dir, 'jupyterhub_cookie_secret') | ||
| 184 | c.JupyterHub.db_url = "sqlite:~/~/~/~/srv/jupyterhub/data/jupyterhub.sqlite" | ||
| 185 | c.JupyterHub.log_level = 'DEBUG' | ||
| 186 | ``` | ||
| 187 | |||
| 188 | ~#~## Основные параметры: | ||
| 189 | - ~*~*Аутентификация~*~*: Используется GitHub OAuth с указанием `client_id`, `client_secret` и разрешенных организаций. | ||
| 190 | - ~*~*DockerSpawner~*~*: Настроен для создания изолированных контейнеров для каждого пользователя с поддержкой GPU. | ||
| 191 | - ~*~*Безопасность~*~*: Используется SQLite для хранения данных и секретов. | ||
| 192 | |||
| 193 | ~-~-- | ||
| 194 | |||
| 195 | ~#~# Запуск сервиса | ||
| 196 | |||
| 197 | ~1. ~*~*Создайте необходимые файлы~*~*: | ||
| 198 | - `Dockerfile.jupyterhub` | ||
| 199 | - `docker-compose.yml` | ||
| 200 | - `jupyterhub_config.py` | ||
| 201 | - `requirements.txt` | ||
| 202 | |||
| 203 | 2. ~*~*Соберите образ~*~*: | ||
| 204 | ```bash | ||
| 205 | docker-compose build | ||
| 206 | ``` | ||
| 207 | |||
| 208 | 3. ~*~*Запустите сервис~*~*: | ||
| 209 | ```bash | ||
| 210 | docker-compose up -d | ||
| 211 | ``` | ||
| 212 | |||
| 213 | 4. ~*~*Проверьте статус~*~*: | ||
| 214 | ```bash | ||
| 215 | docker-compose ps | ||
| 216 | ``` | ||
| 217 | 5. ~*~*Посмотреть логи~*~* | ||
| 218 | ```bash | ||
| 219 | docker logs jupyterhub | ||
| 220 | ``` | ||
| 221 | 6. ~*~*Доступ к JupyterHub~*~*: | ||
| 222 | Откройте браузер и перейдите по адресу: `http:~/~/skayfaks.keenetic.pro:35001/hub`. | ||
| 223 | |||
| 224 |  | ||
| 225 | |||
| 226 |  | ||
| 227 | |||
| 228 |  | ||
| 229 | |||
| 230 |  | ||
| 231 | |||
| 232 | 8. Дополнительные команды Docker | ||
| 233 | ```bash | ||
| 234 | docker volume ls -q | ||
| 235 | docker volume rm имя тома | ||
| 236 | docker system prune -a ~-~-volumes | ||
| 237 | docker logs jupyterhub | ||
| 238 | docker compose down | ||
| 239 | ``` | ||
| 240 | ~-~-- | ||
| 241 | |||
| 242 | ~#~# Первая часть выполнена) Возможные проблемы в GitHub решаются чтением инструкции по созданию приложения с сайта. Мы развернули JupyterHub с использованием Docker Compose. Решение включает поддержку GPU, аутентификацию через GitHub и возможность создания изолированных окружений для каждого пользователя. Перед установкой необходимо проверить наличие актуальных драйверов `nvidia` и установить `nvidia-container-toolkit`, инструкция ниже. | ||
| 243 | |||
| 244 | # Проверка драйвера nvidia | ||
| 245 | |||
| 246 | ~*~*Проверка установки драйверов NVIDIA:~*~* | ||
| 247 | - Убедитесь, что на вашей машине установлены драйверы NVIDIA. Вы можете проверить их установку и статус с помощью команды: | ||
| 248 | ```bash | ||
| 249 | nvidia-smi | ||
| 250 | ``` | ||
| 251 | Если команда возвращает информацию о вашей графической карте и cuda как на картинке ниже, значит драйверы установлены правильно. Можно переходить к установки `nvidia-container-toolkit` | ||
| 252 | |||
| 253 |  | ||
| 254 | |||
| 255 | |||
| 256 | ~#~# Установка драйверов NVIDIA | ||
| 257 | |||
| 258 | ~1. ~*~*Обновите систему~*~*: | ||
| 259 | ```bash | ||
| 260 | sudo apt-get update && sudo apt-get upgrade -y | ||
| 261 | ``` | ||
| 262 | |||
| 263 | 2. ~*~*Добавьте репозиторий NVIDIA~*~*: | ||
| 264 | - Для Ubuntu 20.04: | ||
| 265 | ```bash | ||
| 266 | sudo add-apt-repository ppa:graphics-drivers/ppa | ||
| 267 | sudo apt-get update | ||
| 268 | ``` | ||
| 269 | - Для Ubuntu 22.04 и выше рекомендуется использовать официальные репозитории. | ||
| 270 | |||
| 271 | 3. ~*~*Установите драйверы~*~*: | ||
| 272 | - Просмотрите доступные версии драйверов: | ||
| 273 | ```bash | ||
| 274 | ubuntu-drivers devices | ||
| 275 | ``` | ||
| 276 |  | ||
| 277 | |||
| 278 | - Установите рекомендуемую версию (например, `nvidia-driver-560`): | ||
| 279 | ```bash | ||
| 280 | sudo apt-get install nvidia-driver-525 | ||
| 281 | ``` | ||
| 282 | |||
| 283 | 4. ~*~*Установите дополнительные утилиты (по желанию, не обязательно)~*~*: | ||
| 284 | - Установите `nvidia-utils` для получения инструментов мониторинга: | ||
| 285 | ```bash | ||
| 286 | sudo apt-get install nvidia-utils-560 | ||
| 287 | ``` | ||
| 288 | |||
| 289 | 5. ~*~*Перезагрузите систему~*~*: | ||
| 290 | ```bash | ||
| 291 | sudo reboot now | ||
| 292 | ``` | ||
| 293 | |||
| 294 | ~-~-- | ||
| 295 | |||
| 296 | ~#~# Проверка работы драйверов | ||
| 297 | |||
| 298 | После перезагрузки системы проверьте, что драйверы успешно установлены и работают. | ||
| 299 | |||
| 300 | ~1. ~*~*Проверьте статус драйвера~*~*: | ||
| 301 | ```bash | ||
| 302 | nvidia-smi | ||
| 303 | ``` | ||
| 304 | - Команда должна вывести информацию о GPU, включая модель, температуру и использование памяти. | ||
| 305 | |||
| 306 |  | ||
| 307 | |||
| 308 | 2. ~*~*Проверьте журнал ядра~*~*: | ||
| 309 | ```bash | ||
| 310 | dmesg | grep nvidia | ||
| 311 | ``` | ||
| 312 | - Журнал должен содержать сообщения об успешной загрузке модуля ядра NVIDIA. | ||
| 313 | |||
| 314 | 3. ~*~*Проверьте модуль ядра~*~*: | ||
| 315 | ```bash | ||
| 316 | lsmod | grep nvidia | ||
| 317 | ``` | ||
| 318 | - Если модуль загружен, он будет отображен в списке. | ||
| 319 | |||
| 320 | ~-~-- | ||
| 321 | |||
| 322 | ~#~# Разрешение проблем | ||
| 323 | |||
| 324 | Если возникают проблемы при установке или работе драйверов, выполните следующие шаги: | ||
| 325 | |||
| 326 | ~1. ~*~*Проверьте логи системы~*~*: | ||
| 327 | - Просмотрите логи ядра: | ||
| 328 | ```bash | ||
| 329 | dmesg | grep -i error | ||
| 330 | ``` | ||
| 331 | - Просмотрите логи APT: | ||
| 332 | ```bash | ||
| 333 | cat /var/log/apt/history.log | ||
| 334 | ``` | ||
| 335 | |||
| 336 | 2. ~*~*Отключите Secure Boot~*~*: | ||
| 337 | - На некоторых системах Secure Boot может блокировать загрузку модулей NVIDIA. Отключите его в BIOS. | ||
| 338 | |||
| 339 | 3. ~*~*Убедитесь, что система поддерживает GPU~*~*: | ||
| 340 | - Проверьте совместимость вашей видеокарты с установленной версией драйвера: | ||
| 341 | [Матрица совместимости NVIDIA](https:~/~/www.nvidia.com/Download/Find.aspx) | ||
| 342 | |||
| 343 | 4. ~*~*Попробуйте другую версию драйвера~*~*: | ||
| 344 | - Иногда более новая или старая версия драйвера может решить проблемы. | ||
| 345 | |||
| 346 | 5. ~*~*Обратитесь к документации~*~*: | ||
| 347 | - [Официальная документация NVIDIA](https:~/~/docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html) | ||
| 348 | |||
| 349 | ~-~-- | ||
| 350 | |||
| 351 | ~#~# Наличие драйвера не гарантирует нормальную работу, нужно еще установить `nvidia-container-toolkit` и не забываем про сам отраз для ноутбуков (Обязательно наличие CUDA) и библиотек для питона в 'requirements'. | ||
| 352 | |||
| 353 | ~-~-- | ||
| 354 | |||
| 355 | # Установка и Настройка `nvidia-container-toolkit` | ||
| 356 | |||
| 357 | Для обеспечения поддержки GPU в контейнерах Docker необходимо установить и правильно настроить `nvidia-container-toolkit`. Этот инструмент позволяет контейнерам использовать ресурсы графических процессоров NVIDIA. Ниже описан пошаговый процесс установки и проверки конфигурации. | ||
| 358 | |||
| 359 | [Официальная документация](https:~/~/docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) | ||
| 360 | |||
| 361 | ~-~-- | ||
| 362 | |||
| 363 | ~#~# Содержание | ||
| 364 | ~1. [Общая информация](#общая-информация) | ||
| 365 | 2. [Установка nvidia-container-toolkit](#установка-nvidia-container-toolkit) | ||
| 366 | 3. [Настройка Docker для работы с NVIDIA](#настройка-docker-для-работы-с-nvidia) | ||
| 367 | 4. [Проверка конфигурации](#проверка-конфигурации) | ||
| 368 | 5. [Разрешение проблем](#разрешение-проблем) | ||
| 369 | |||
| 370 | ~-~-- | ||
| 371 | |||
| 372 | ~#~# Общая информация | ||
| 373 | |||
| 374 | `nvidia-container-toolkit` — это набор инструментов, который интегрирует NVIDIA GPU с Docker. Он позволяет контейнерам использовать ресурсы GPU без необходимости изменения кода приложения. После установки вы сможете запускать GPU-приложения внутри Docker-контейнеров. | ||
| 375 | |||
| 376 | ~-~-- | ||
| 377 | |||
| 378 | ~#~# Установка `nvidia-container-toolkit` | ||
| 379 | |||
| 380 | ~1. ~*~*Добавьте репозиторий NVIDIA~*~*: | ||
| 381 | - Определите ваше распределение Linux (например, Ubuntu 20.04): | ||
| 382 | ```bash | ||
| 383 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) | ||
| 384 | ``` | ||
| 385 | - Добавьте ключ GPG NVIDIA: | ||
| 386 | ```bash | ||
| 387 | curl -s -L https:~/~/nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - | ||
| 388 | ``` | ||
| 389 | - Добавьте репозиторий NVIDIA для вашего распределения: | ||
| 390 | ```bash | ||
| 391 | curl -s -L https:~/~/nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list | ||
| 392 | ``` | ||
| 393 | |||
| 394 | 2. ~*~*Обновите список пакетов~*~*: | ||
| 395 | ```bash | ||
| 396 | sudo apt-get update | ||
| 397 | ``` | ||
| 398 | |||
| 399 | 3. ~*~*Установите `nvidia-container-toolkit`~*~*: | ||
| 400 | ```bash | ||
| 401 | sudo apt-get install -y nvidia-container-toolkit | ||
| 402 | ``` | ||
| 403 | |||
| 404 | 4. ~*~*Настройте runtime Docker для использования NVIDIA~*~*: | ||
| 405 | ```bash | ||
| 406 | sudo nvidia-ctk runtime configure ~-~-runtime=docker | ||
| 407 | ``` | ||
| 408 | |||
| 409 | 5. ~*~*Перезапустите демон Docker~*~*: | ||
| 410 | ```bash | ||
| 411 | sudo systemctl restart docker | ||
| 412 | ``` | ||
| 413 | |||
| 414 | ~-~-- | ||
| 415 | |||
| 416 | ~#~# Настройка Docker для работы с NVIDIA | ||
| 417 | |||
| 418 | Чтобы Docker мог использовать GPU, убедитесь, что он настроен для работы с `nvidia-container-runtime`. | ||
| 419 | |||
| 420 | ~1. ~*~*Отредактируйте файл конфигурации Docker~*~*: | ||
| 421 | - Откройте файл `/etc/docker/daemon.json`: | ||
| 422 | ```bash | ||
| 423 | sudo nano /etc/docker/daemon.json | ||
| 424 | ``` | ||
| 425 | |||
| 426 | 2. ~*~*Добавьте следующую конфигурацию~*~*: | ||
| 427 | ```json | ||
| 428 | { | ||
| 429 | "runtimes": { | ||
| 430 | "nvidia": { | ||
| 431 | "path": "nvidia-container-runtime", | ||
| 432 | "runtimeArgs": [] | ||
| 433 | } | ||
| 434 | } | ||
| 435 | } | ||
| 436 | ``` | ||
| 437 | |||
| 438 | 3. ~*~*Сохраните файл и перезапустите Docker~*~*: | ||
| 439 | ```bash | ||
| 440 | sudo systemctl restart docker | ||
| 441 | ``` | ||
| 442 | |||
| 443 | ~-~-- | ||
| 444 | |||
| 445 | ~#~# Проверка конфигурации | ||
| 446 | |||
| 447 | После завершения установки и настройки проверьте, что Docker может использовать GPU. | ||
| 448 | |||
| 449 | ~1. ~*~*Запустите тестовый контейнер~*~*: | ||
| 450 | ```bash | ||
| 451 | sudo docker run ~-~-rm ~-~-runtime=nvidia ~-~-gpus all ubuntu nvidia-smi | ||
| 452 | ``` | ||
| 453 | - Если всё настроено правильно, команда выведет информацию о доступных GPU, аналогично тому, как работает `nvidia-smi` непосредственно на хост-машине. Пример на скрине ниже: | ||
| 454 | |||
| 455 |  | ||
| 456 | |||
| 457 | 2. ~*~*Проверьте логи Docker~*~*: | ||
| 458 | - Если возникают ошибки, проверьте логи Docker: | ||
| 459 | ```bash | ||
| 460 | sudo journalctl -u docker.service | ||
| 461 | ``` | ||
| 462 | |||
| 463 | ~-~-- | ||
| 464 | |||
| 465 | ~#~# Разрешение проблем | ||
| 466 | |||
| 467 | Если Docker не видит GPU или возникают другие проблемы, выполните следующие шаги: | ||
| 468 | |||
| 469 | ~1. ~*~*Убедитесь, что драйверы NVIDIA установлены~*~*: | ||
| 470 | - Проверьте версию драйвера: | ||
| 471 | ```bash | ||
| 472 | nvidia-smi | ||
| 473 | ``` | ||
| 474 | - Если драйверы не установлены, следуйте инструкциям из [официальной документации NVIDIA](https:~/~/docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html). | ||
| 475 | |||
| 476 | 2. ~*~*Проверьте права доступа к устройствам GPU~*~*: | ||
| 477 | - Убедитесь, что пользователь имеет права доступа к `/dev/nvidia*`: | ||
| 478 | ```bash | ||
| 479 | ls -l /dev/nvidia* | ||
| 480 | ``` | ||
| 481 | |||
| 482 | 3. ~*~*Перепроверьте конфигурацию Docker~*~*: | ||
| 483 | - Убедитесь, что `/etc/docker/daemon.json` содержит правильные настройки для `nvidia-container-runtime`. | ||
| 484 | |||
| 485 | 4. ~*~*Перезапустите систему~*~*: | ||
| 486 | - Иногда требуется перезагрузка системы для применения изменений: | ||
| 487 | ```bash | ||
| 488 | sudo reboot now | ||
| 489 | ``` | ||
| 490 | |||
| 491 | ~-~-- | ||
| 492 | После успешной установки и настройки `nvidia-container-toolkit`, Docker сможет работать с GPU, что особенно полезно для машинного обучения, обработки данных и других задач, требующих высокопроизводительных вычислений. Если у вас возникли сложности, обратитесь к [официальной документации NVIDIA](https:~/~/docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html) или сообществу разработчиков. | ||
| 493 | |||
| 494 | # jupyterhub-cuda | ||
| 495 | # Развертывание JupyterHub с помощью Docker Compose | ||
| 496 | |||
| 497 | Данный проект описывает процесс развертывания JupyterHub с использованием Docker Compose. Решение включает настройку аутентификации через GitHub OAuth, поддержку GPU-вычислений и использование DockerSpawner для создания изолированных окружений для пользователей. | ||
| 498 | |||
| 499 | ~-~-- | ||
| 500 | |||
| 501 | ~#~# Содержание | ||
| 502 | ~1. [Общая информация](#общая-информация) | ||
| 503 | 2. [Структура проекта](#структура-проекта) | ||
| 504 | 3. [Настройка Dockerfile](#настройка-dockerfile) | ||
| 505 | 4. [Настройка docker-compose.yml](#настройка-docker-composeyml) | ||
| 506 | 5. [Конфигурация jupyterhub_config.py](#конфигурация-jupyterhub_configpy) | ||
| 507 | 6. [Запуск сервиса](#запуск-сервиса) | ||
| 508 | |||
| 509 | ~-~-- | ||
| 510 | |||
| 511 | ~#~# Общая информация | ||
| 512 | |||
| 513 | JupyterHub — это система управления многопользовательскими ноутбуками Jupyter. В данном решении используется Docker Compose для управления контейнерами, а также DockerSpawner для запуска индивидуальных серверов для каждого пользователя. Поддерживается аутентификация через GitHub OAuth и настройки GPU-окружения. | ||
| 514 | |||
| 515 | ~-~-- | ||
| 516 | |||
| 517 | ~#~# Структура проекта | ||
| 518 | |||
| 519 | ``` | ||
| 520 | . | ||
| 521 | ├── Dockerfile.jupyterhub # Файл для сборки образа JupyterHub | ||
| 522 | ├── docker-compose.yml # Конфигурация Docker Compose | ||
| 523 | ├── jupyterhub_config.py # Конфигурация JupyterHub | ||
| 524 | ├── requirements.txt # Зависимости Python | ||
| 525 | └── data/ # Директория для хранения данных | ||
| 526 | ``` | ||
| 527 | |||
| 528 | ~-~-- | ||
| 529 | |||
| 530 | ~#~# Настройка Dockerfile | ||
| 531 | |||
| 532 | `Dockerfile.jupyterhub` определяет базовый образ и устанавливает необходимые зависимости. | ||
| 533 | |||
| 534 | ```dockerfile | ||
| 535 | FROM jupyterhub/jupyterhub:5.2.1 | ||
| 536 | WORKDIR /srv/jupyterhub | ||
| 537 | |||
| 538 | # Создаем директорию для данных и изменяем владельца | ||
| 539 | RUN mkdir -p /srv/jupyterhub/data && \ | ||
| 540 | chown -R 1000:100 /srv/jupyterhub | ||
| 541 | |||
| 542 | # Обновляем систему и устанавливаем дополнительные библиотеки | ||
| 543 | RUN apt-get update -y && \ | ||
| 544 | python3 -m pip install ~-~-no-cache-dir \ | ||
| 545 | psycopg2-binary \ | ||
| 546 | dockerspawner \ | ||
| 547 | oauthenticator | ||
| 548 | |||
| 549 | # Копируем файл requirements.txt и устанавливаем зависимости | ||
| 550 | COPY requirements.txt /srv/jupyterhub/requirements.txt | ||
| 551 | RUN python3 -m pip install ~-~-no-cache-dir -r /srv/jupyterhub/requirements.txt | ||
| 552 | |||
| 553 | # Копируем конфигурационный файл JupyterHub | ||
| 554 | COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py | ||
| 555 | |||
| 556 | # Запускаем JupyterHub с указанным конфигурационным файлом | ||
| 557 | CMD ["jupyterhub", "-f", "/srv/jupyterhub/jupyterhub_config.py"] | ||
| 558 | ``` | ||
| 559 | |||
| 560 | ~-~-- | ||
| 561 | |||
| 562 | ~#~# Настройка docker-compose.yml | ||
| 563 | |||
| 564 | `docker-compose.yml` описывает параметры развертывания JupyterHub. | ||
| 565 | |||
| 566 | ```yaml | ||
| 567 | version: '3.8' | ||
| 568 | |||
| 569 | services: | ||
| 570 | jupyterhub: | ||
| 571 | build: | ||
| 572 | context: . | ||
| 573 | dockerfile: Dockerfile.jupyterhub | ||
| 574 | restart: always | ||
| 575 | image~: jupyterhub | ||
| 576 | container_name: jupyterhub | ||
| 577 | networks: | ||
| 578 | - jupyterhub-network | ||
| 579 | volumes: | ||
| 580 | # Привязываем конфигурационный файл | ||
| 581 | - "./jupyterhub_config.py:/srv/jupyterhub/jupyterhub_config.py" | ||
| 582 | # Привязываем сокет Docker для работы DockerSpawner | ||
| 583 | - "/var/run/docker.sock:/var/run/docker.sock:rw" | ||
| 584 | # Привязываем том для данных JupyterHub | ||
| 585 | - "jupyterhub-data:/srv/jupyterhub/data" | ||
| 586 | ports: | ||
| 587 | - "35001:8000" # Порт для доступа к JupyterHub | ||
| 588 | environment: | ||
| 589 | - JUPYTERHUB_BASE_URL=/hub | ||
| 590 | - JUPYTERHUB_URL=http:~/~/skayfaks.keenetic.pro:35001 | ||
| 591 | runtime: nvidia | ||
| 592 | privileged: true | ||
| 593 | deploy: | ||
| 594 | resources: | ||
| 595 | reservations: | ||
| 596 | devices: | ||
| 597 | - driver: nvidia | ||
| 598 | count: all | ||
| 599 | capabilities: [gpu] | ||
| 600 | |||
| 601 | volumes: | ||
| 602 | jupyterhub-data: | ||
| 603 | |||
| 604 | networks: | ||
| 605 | jupyterhub-network: | ||
| 606 | name: jupyterhub-network | ||
| 607 | ``` | ||
| 608 | |||
| 609 | ~#~## Основные параметры: | ||
| 610 | - ~*~*`build`~*~*: Указывает Dockerfile для сборки образа. | ||
| 611 | - ~*~*`volumes`~*~*: Монтирует конфигурационный файл и данные. | ||
| 612 | - ~*~*`ports`~*~*: Открывает порт `35001` для доступа к JupyterHub. | ||
| 613 | - ~*~*`runtime`~*~*: Использует NVIDIA runtime для поддержки GPU. | ||
| 614 | - ~*~*`privileged`~*~*: Предоставляет привилегии для работы с Docker внутри контейнера. | ||
| 615 | |||
| 616 | ~-~-- | ||
| 617 | |||
| 618 | ~#~# Конфигурация jupyterhub_config.py | ||
| 619 | |||
| 620 | `jupyterhub_config.py` содержит основные настройки JupyterHub. | ||
| 621 | |||
| 622 | ```python | ||
| 623 | from dockerspawner import DockerSpawner | ||
| 624 | from oauthenticator.github import GitHubOAuthenticator | ||
| 625 | import os | ||
| 626 | |||
| 627 | c = get_config() | ||
| 628 | |||
| 629 | # Основные настройки JupyterHub | ||
| 630 | c.JupyterHub.bind_url = 'http:~/~/:8000' | ||
| 631 | c.JupyterHub.hub_bind_url = 'http:~/~/0.0.0.0:8081' | ||
| 632 | c.JupyterHub.start_timeout = 360 | ||
| 633 | c.JupyterHub.shutdown_no_activity_timeout = 600 | ||
| 634 | c.JupyterHub.shutdown_on_logout = True | ||
| 635 | c.DockerSpawner.use_internal_ip = True | ||
| 636 | |||
| 637 | # Аутентификация через GitHub OAuth | ||
| 638 | c.JupyterHub.authenticator_class = GitHubOAuthenticator | ||
| 639 | c.GitHubOAuthenticator.client_id = '*' # Укажите ваш client_id | ||
| 640 | c.GitHubOAuthenticator.client_secret = '*' # Укажите ваш client_secret | ||
| 641 | c.GitHubOAuthenticator.oauth_callback_url = 'https:~/~/jupiter45.skayfaks.keenetic.pro/hub/oauth_callback' | ||
| 642 | c.OAuthenticator.admin_users = {'hek1412'} | ||
| 643 | c.GitHubOAuthenticator.allowed_organizations = {'1T45git'} | ||
| 644 | c.GitHubOAuthenticator.scope = ['read:user', 'user:email', 'read:org'] | ||
| 645 | |||
| 646 | # Настройка DockerSpawner | ||
| 647 | c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner' | ||
| 648 | c.DockerSpawner.image = 'quay.io/jupyter/pytorch-notebook:cuda12-python-3.11.8' | ||
| 649 | c.Spawner.http_timeout = 180 | ||
| 650 | c.DockerSpawner.network_name = "jupyterhub-network" | ||
| 651 | c.Spawner.start_timeout = 240 | ||
| 652 | c.DockerSpawner.notebook_dir = '/home/jovyan/work' | ||
| 653 | c.DockerSpawner.volumes = { 'jupyterhub-data_{username}': '/home/jovyan/work' } | ||
| 654 | c.DockerSpawner.remove = True | ||
| 655 | c.DockerSpawner.debug = True | ||
| 656 | c.DockerSpawner.cpu_limit = 4 | ||
| 657 | c.DockerSpawner.mem_limit = '16G' | ||
| 658 | c.JupyterHub.active_server_limit = 6 | ||
| 659 | |||
| 660 | # Настройки GPU | ||
| 661 | c.DockerSpawner.extra_create_kwargs = { | ||
| 662 | 'runtime': 'nvidia' | ||
| 663 | } | ||
| 664 | c.DockerSpawner.extra_host_config = { | ||
| 665 | 'device_requests': [ | ||
| 666 | { | ||
| 667 | 'Driver': 'nvidia', | ||
| 668 | 'Count': -1, | ||
| 669 | 'Capabilities': ~[~['gpu']], | ||
| 670 | } | ||
| 671 | ] | ||
| 672 | } | ||
| 673 | |||
| 674 | # Настройки безопасности | ||
| 675 | data_dir = '/srv/jupyterhub/data' | ||
| 676 | c.JupyterHub.cookie_secret_file = os.path.join(data_dir, 'jupyterhub_cookie_secret') | ||
| 677 | c.JupyterHub.db_url = "sqlite:~/~/~/~/srv/jupyterhub/data/jupyterhub.sqlite" | ||
| 678 | c.JupyterHub.log_level = 'DEBUG' | ||
| 679 | ``` | ||
| 680 | |||
| 681 | ~#~## Основные параметры: | ||
| 682 | - ~*~*Аутентификация~*~*: Используется GitHub OAuth с указанием `client_id`, `client_secret` и разрешенных организаций. | ||
| 683 | - ~*~*DockerSpawner~*~*: Настроен для создания изолированных контейнеров для каждого пользователя с поддержкой GPU. | ||
| 684 | - ~*~*Безопасность~*~*: Используется SQLite для хранения данных и секретов. | ||
| 685 | |||
| 686 | ~-~-- | ||
| 687 | |||
| 688 | ~#~# Запуск сервиса | ||
| 689 | |||
| 690 | ~1. ~*~*Создайте необходимые файлы~*~*: | ||
| 691 | - `Dockerfile.jupyterhub` | ||
| 692 | - `docker-compose.yml` | ||
| 693 | - `jupyterhub_config.py` | ||
| 694 | - `requirements.txt` | ||
| 695 | |||
| 696 | 2. ~*~*Соберите образ~*~*: | ||
| 697 | ```bash | ||
| 698 | docker-compose build | ||
| 699 | ``` | ||
| 700 | |||
| 701 | 3. ~*~*Запустите сервис~*~*: | ||
| 702 | ```bash | ||
| 703 | docker-compose up -d | ||
| 704 | ``` | ||
| 705 | |||
| 706 | 4. ~*~*Проверьте статус~*~*: | ||
| 707 | ```bash | ||
| 708 | docker-compose ps | ||
| 709 | ``` | ||
| 710 | 5. ~*~*Посмотреть логи~*~* | ||
| 711 | ```bash | ||
| 712 | docker logs jupyterhub | ||
| 713 | ``` | ||
| 714 | 6. ~*~*Доступ к JupyterHub~*~*: | ||
| 715 | Откройте браузер и перейдите по адресу: `http:~/~/skayfaks.keenetic.pro:35001/hub`. | ||
| 716 | |||
| 717 |  | ||
| 718 | |||
| 719 |  | ||
| 720 | |||
| 721 |  | ||
| 722 | |||
| 723 |  | ||
| 724 | |||
| 725 | 8. Дополнительные команды Docker | ||
| 726 | ```bash | ||
| 727 | docker volume ls -q | ||
| 728 | docker volume rm имя тома | ||
| 729 | docker system prune -a ~-~-volumes | ||
| 730 | docker logs jupyterhub | ||
| 731 | docker compose down | ||
| 732 | ``` | ||
| 733 | ~-~-- | ||
| 734 | |||
| 735 | ~#~# Первая часть выполнена) Возможные проблемы в GitHub решаются чтением инструкции по созданию приложения с сайта. Мы развернули JupyterHub с использованием Docker Compose. Решение включает поддержку GPU, аутентификацию через GitHub и возможность создания изолированных окружений для каждого пользователя. Перед установкой необходимо проверить наличие актуальных драйверов `nvidia` и установить `nvidia-container-toolkit`, инструкция ниже. | ||
| 736 | |||
| 737 | # Проверка драйвера nvidia | ||
| 738 | |||
| 739 | ~*~*Проверка установки драйверов NVIDIA:~*~* | ||
| 740 | - Убедитесь, что на вашей машине установлены драйверы NVIDIA. Вы можете проверить их установку и статус с помощью команды: | ||
| 741 | ```bash | ||
| 742 | nvidia-smi | ||
| 743 | ``` | ||
| 744 | Если команда возвращает информацию о вашей графической карте и cuda как на картинке ниже, значит драйверы установлены правильно. Можно переходить к установки `nvidia-container-toolkit` | ||
| 745 | |||
| 746 |  | ||
| 747 | |||
| 748 | |||
| 749 | ~#~# Установка драйверов NVIDIA | ||
| 750 | |||
| 751 | ~1. ~*~*Обновите систему~*~*: | ||
| 752 | ```bash | ||
| 753 | sudo apt-get update && sudo apt-get upgrade -y | ||
| 754 | ``` | ||
| 755 | |||
| 756 | 2. ~*~*Добавьте репозиторий NVIDIA~*~*: | ||
| 757 | - Для Ubuntu 20.04: | ||
| 758 | ```bash | ||
| 759 | sudo add-apt-repository ppa:graphics-drivers/ppa | ||
| 760 | sudo apt-get update | ||
| 761 | ``` | ||
| 762 | - Для Ubuntu 22.04 и выше рекомендуется использовать официальные репозитории. | ||
| 763 | |||
| 764 | 3. ~*~*Установите драйверы~*~*: | ||
| 765 | - Просмотрите доступные версии драйверов: | ||
| 766 | ```bash | ||
| 767 | ubuntu-drivers devices | ||
| 768 | ``` | ||
| 769 |  | ||
| 770 | |||
| 771 | - Установите рекомендуемую версию (например, `nvidia-driver-560`): | ||
| 772 | ```bash | ||
| 773 | sudo apt-get install nvidia-driver-525 | ||
| 774 | ``` | ||
| 775 | |||
| 776 | 4. ~*~*Установите дополнительные утилиты (по желанию, не обязательно)~*~*: | ||
| 777 | - Установите `nvidia-utils` для получения инструментов мониторинга: | ||
| 778 | ```bash | ||
| 779 | sudo apt-get install nvidia-utils-560 | ||
| 780 | ``` | ||
| 781 | |||
| 782 | 5. ~*~*Перезагрузите систему~*~*: | ||
| 783 | ```bash | ||
| 784 | sudo reboot now | ||
| 785 | ``` | ||
| 786 | |||
| 787 | ~-~-- | ||
| 788 | |||
| 789 | ~#~# Проверка работы драйверов | ||
| 790 | |||
| 791 | После перезагрузки системы проверьте, что драйверы успешно установлены и работают. | ||
| 792 | |||
| 793 | ~1. ~*~*Проверьте статус драйвера~*~*: | ||
| 794 | ```bash | ||
| 795 | nvidia-smi | ||
| 796 | ``` | ||
| 797 | - Команда должна вывести информацию о GPU, включая модель, температуру и использование памяти. | ||
| 798 | |||
| 799 |  | ||
| 800 | |||
| 801 | 2. ~*~*Проверьте журнал ядра~*~*: | ||
| 802 | ```bash | ||
| 803 | dmesg | grep nvidia | ||
| 804 | ``` | ||
| 805 | - Журнал должен содержать сообщения об успешной загрузке модуля ядра NVIDIA. | ||
| 806 | |||
| 807 | 3. ~*~*Проверьте модуль ядра~*~*: | ||
| 808 | ```bash | ||
| 809 | lsmod | grep nvidia | ||
| 810 | ``` | ||
| 811 | - Если модуль загружен, он будет отображен в списке. | ||
| 812 | |||
| 813 | ~-~-- | ||
| 814 | |||
| 815 | ~#~# Разрешение проблем | ||
| 816 | |||
| 817 | Если возникают проблемы при установке или работе драйверов, выполните следующие шаги: | ||
| 818 | |||
| 819 | ~1. ~*~*Проверьте логи системы~*~*: | ||
| 820 | - Просмотрите логи ядра: | ||
| 821 | ```bash | ||
| 822 | dmesg | grep -i error | ||
| 823 | ``` | ||
| 824 | - Просмотрите логи APT: | ||
| 825 | ```bash | ||
| 826 | cat /var/log/apt/history.log | ||
| 827 | ``` | ||
| 828 | |||
| 829 | 2. ~*~*Отключите Secure Boot~*~*: | ||
| 830 | - На некоторых системах Secure Boot может блокировать загрузку модулей NVIDIA. Отключите его в BIOS. | ||
| 831 | |||
| 832 | 3. ~*~*Убедитесь, что система поддерживает GPU~*~*: | ||
| 833 | - Проверьте совместимость вашей видеокарты с установленной версией драйвера: | ||
| 834 | [Матрица совместимости NVIDIA](https:~/~/www.nvidia.com/Download/Find.aspx) | ||
| 835 | |||
| 836 | 4. ~*~*Попробуйте другую версию драйвера~*~*: | ||
| 837 | - Иногда более новая или старая версия драйвера может решить проблемы. | ||
| 838 | |||
| 839 | 5. ~*~*Обратитесь к документации~*~*: | ||
| 840 | - [Официальная документация NVIDIA](https:~/~/docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html) | ||
| 841 | |||
| 842 | ~-~-- | ||
| 843 | |||
| 844 | ~#~# Наличие драйвера не гарантирует нормальную работу, нужно еще установить `nvidia-container-toolkit` и не забываем про сам отраз для ноутбуков (Обязательно наличие CUDA) и библиотек для питона в 'requirements'. | ||
| 845 | |||
| 846 | ~-~-- | ||
| 847 | |||
| 848 | # Установка и Настройка `nvidia-container-toolkit` | ||
| 849 | |||
| 850 | Для обеспечения поддержки GPU в контейнерах Docker необходимо установить и правильно настроить `nvidia-container-toolkit`. Этот инструмент позволяет контейнерам использовать ресурсы графических процессоров NVIDIA. Ниже описан пошаговый процесс установки и проверки конфигурации. | ||
| 851 | |||
| 852 | [Официальная документация](https:~/~/docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) | ||
| 853 | |||
| 854 | ~-~-- | ||
| 855 | |||
| 856 | ~#~# Содержание | ||
| 857 | ~1. [Общая информация](#общая-информация) | ||
| 858 | 2. [Установка nvidia-container-toolkit](#установка-nvidia-container-toolkit) | ||
| 859 | 3. [Настройка Docker для работы с NVIDIA](#настройка-docker-для-работы-с-nvidia) | ||
| 860 | 4. [Проверка конфигурации](#проверка-конфигурации) | ||
| 861 | 5. [Разрешение проблем](#разрешение-проблем) | ||
| 862 | |||
| 863 | ~-~-- | ||
| 864 | |||
| 865 | ~#~# Общая информация | ||
| 866 | |||
| 867 | `nvidia-container-toolkit` — это набор инструментов, который интегрирует NVIDIA GPU с Docker. Он позволяет контейнерам использовать ресурсы GPU без необходимости изменения кода приложения. После установки вы сможете запускать GPU-приложения внутри Docker-контейнеров. | ||
| 868 | |||
| 869 | ~-~-- | ||
| 870 | |||
| 871 | ~#~# Установка `nvidia-container-toolkit` | ||
| 872 | |||
| 873 | ~1. ~*~*Добавьте репозиторий NVIDIA~*~*: | ||
| 874 | - Определите ваше распределение Linux (например, Ubuntu 20.04): | ||
| 875 | ```bash | ||
| 876 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) | ||
| 877 | ``` | ||
| 878 | - Добавьте ключ GPG NVIDIA: | ||
| 879 | ```bash | ||
| 880 | curl -s -L https:~/~/nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - | ||
| 881 | ``` | ||
| 882 | - Добавьте репозиторий NVIDIA для вашего распределения: | ||
| 883 | ```bash | ||
| 884 | curl -s -L https:~/~/nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list | ||
| 885 | ``` | ||
| 886 | |||
| 887 | 2. ~*~*Обновите список пакетов~*~*: | ||
| 888 | ```bash | ||
| 889 | sudo apt-get update | ||
| 890 | ``` | ||
| 891 | |||
| 892 | 3. ~*~*Установите `nvidia-container-toolkit`~*~*: | ||
| 893 | ```bash | ||
| 894 | sudo apt-get install -y nvidia-container-toolkit | ||
| 895 | ``` | ||
| 896 | |||
| 897 | 4. ~*~*Настройте runtime Docker для использования NVIDIA~*~*: | ||
| 898 | ```bash | ||
| 899 | sudo nvidia-ctk runtime configure ~-~-runtime=docker | ||
| 900 | ``` | ||
| 901 | |||
| 902 | 5. ~*~*Перезапустите демон Docker~*~*: | ||
| 903 | ```bash | ||
| 904 | sudo systemctl restart docker | ||
| 905 | ``` | ||
| 906 | |||
| 907 | ~-~-- | ||
| 908 | |||
| 909 | ~#~# Настройка Docker для работы с NVIDIA | ||
| 910 | |||
| 911 | Чтобы Docker мог использовать GPU, убедитесь, что он настроен для работы с `nvidia-container-runtime`. | ||
| 912 | |||
| 913 | ~1. ~*~*Отредактируйте файл конфигурации Docker~*~*: | ||
| 914 | - Откройте файл `/etc/docker/daemon.json`: | ||
| 915 | ```bash | ||
| 916 | sudo nano /etc/docker/daemon.json | ||
| 917 | ``` | ||
| 918 | |||
| 919 | 2. ~*~*Добавьте следующую конфигурацию~*~*: | ||
| 920 | ```json | ||
| 921 | { | ||
| 922 | "runtimes": { | ||
| 923 | "nvidia": { | ||
| 924 | "path": "nvidia-container-runtime", | ||
| 925 | "runtimeArgs": [] | ||
| 926 | } | ||
| 927 | } | ||
| 928 | } | ||
| 929 | ``` | ||
| 930 | |||
| 931 | 3. ~*~*Сохраните файл и перезапустите Docker~*~*: | ||
| 932 | ```bash | ||
| 933 | sudo systemctl restart docker | ||
| 934 | ``` | ||
| 935 | |||
| 936 | ~-~-- | ||
| 937 | |||
| 938 | ~#~# Проверка конфигурации | ||
| 939 | |||
| 940 | После завершения установки и настройки проверьте, что Docker может использовать GPU. | ||
| 941 | |||
| 942 | ~1. ~*~*Запустите тестовый контейнер~*~*: | ||
| 943 | ```bash | ||
| 944 | sudo docker run ~-~-rm ~-~-runtime=nvidia ~-~-gpus all ubuntu nvidia-smi | ||
| 945 | ``` | ||
| 946 | - Если всё настроено правильно, команда выведет информацию о доступных GPU, аналогично тому, как работает `nvidia-smi` непосредственно на хост-машине. Пример на скрине ниже: | ||
| 947 | |||
| 948 |  | ||
| 949 | |||
| 950 | 2. ~*~*Проверьте логи Docker~*~*: | ||
| 951 | - Если возникают ошибки, проверьте логи Docker: | ||
| 952 | ```bash | ||
| 953 | sudo journalctl -u docker.service | ||
| 954 | ``` | ||
| 955 | |||
| 956 | ~-~-- | ||
| 957 | |||
| 958 | ~#~# Разрешение проблем | ||
| 959 | |||
| 960 | Если Docker не видит GPU или возникают другие проблемы, выполните следующие шаги: | ||
| 961 | |||
| 962 | ~1. ~*~*Убедитесь, что драйверы NVIDIA установлены~*~*: | ||
| 963 | - Проверьте версию драйвера: | ||
| 964 | ```bash | ||
| 965 | nvidia-smi | ||
| 966 | ``` | ||
| 967 | - Если драйверы не установлены, следуйте инструкциям из [официальной документации NVIDIA](https:~/~/docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html). | ||
| 968 | |||
| 969 | 2. ~*~*Проверьте права доступа к устройствам GPU~*~*: | ||
| 970 | - Убедитесь, что пользователь имеет права доступа к `/dev/nvidia*`: | ||
| 971 | ```bash | ||
| 972 | ls -l /dev/nvidia* | ||
| 973 | ``` | ||
| 974 | |||
| 975 | 3. ~*~*Перепроверьте конфигурацию Docker~*~*: | ||
| 976 | - Убедитесь, что `/etc/docker/daemon.json` содержит правильные настройки для `nvidia-container-runtime`. | ||
| 977 | |||
| 978 | 4. ~*~*Перезапустите систему~*~*: | ||
| 979 | - Иногда требуется перезагрузка системы для применения изменений: | ||
| 980 | ```bash | ||
| 981 | sudo reboot now | ||
| 982 | ``` | ||
| 983 | |||
| 984 | ~-~-- | ||
| 985 | После успешной установки и настройки `nvidia-container-toolkit`, Docker сможет работать с GPU, что особенно полезно для машинного обучения, обработки данных и других задач, требующих высокопроизводительных вычислений. Если у вас возникли сложности, обратитесь к [официальной документации NVIDIA](https:~/~/docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html) или сообществу разработчиков. |