Изменения документа Sandbox Test Page 1
Редактировал(а) Виталий Александров 04.02.2025 21:02
От версии 1.1
отредактировано Anton Krivchenkov
на 03.12.2024 14:12
на 03.12.2024 14:12
Изменить комментарий:
Install extension [org.xwiki.platform:xwiki-platform-sandbox/16.10.0]
К версии 2.1
отредактировано Виталий Александров
на 04.02.2025 21:02
на 04.02.2025 21:02
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (3 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Название
-
... ... @@ -1,1 +1,1 @@ 1 - Тестовая страница песочницы 11 +JupyterHab+Cuda+nvidia-container-toolkit - Автор документа
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. Anton_Krivchenkov1 +XWiki.Vitaliy - Содержимое
-
... ... @@ -1,5 +1,985 @@ 1 -Нажмите **"Правка"** и измените содержимое этой страницы, затем нажмите **"Сохранить и просмотреть"**, чтобы увидеть как выглядят изменения на вашей странице! 1 +# jupyterhub-cuda 2 +# Развертывание JupyterHub с помощью Docker Compose 2 2 3 - =Здесьпростопримертекста,чтобы показатьвамкакможетвыглядеть страница=4 +Данный проект описывает процесс развертывания JupyterHub с использованием Docker Compose. Решение включает настройку аутентификации через GitHub OAuth, поддержку GPU-вычислений и использование DockerSpawner для создания изолированных окружений для пользователей. 4 4 5 -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 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) или сообществу разработчиков.