0 Голосов

Исходный код вики Sandbox Test Page 1

Редактировал(а) Виталий Александров 04.02.2025 21:02

Последние авторы
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 ![image](https:~/~/github.com/user-attachments/assets/e1927c3d-1e36-4f4a-9b4d-454b3b4c830d)
225
226 ![image](https:~/~/github.com/user-attachments/assets/90f228bb-a654-45c5-b3fc-6554348d6f24)
227
228 ![image](https:~/~/github.com/user-attachments/assets/b55b65ed-79d6-4383-8fb2-29b4d813de3e)
229
230 ![image](https:~/~/github.com/user-attachments/assets/1c27d617-95da-4703-ae7e-13fcf88d62dc)
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 ![image](https:~/~/github.com/user-attachments/assets/6c8c711d-8f36-47ce-adf8-da61a9059ebf)
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 ![image](https:~/~/github.com/user-attachments/assets/d49cd66d-233c-41be-90e7-49f384e264df)
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 ![image](https:~/~/github.com/user-attachments/assets/6c8c711d-8f36-47ce-adf8-da61a9059ebf)
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 ![image](https:~/~/github.com/user-attachments/assets/6c8c711d-8f36-47ce-adf8-da61a9059ebf)
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 ![image](https:~/~/github.com/user-attachments/assets/e1927c3d-1e36-4f4a-9b4d-454b3b4c830d)
718
719 ![image](https:~/~/github.com/user-attachments/assets/90f228bb-a654-45c5-b3fc-6554348d6f24)
720
721 ![image](https:~/~/github.com/user-attachments/assets/b55b65ed-79d6-4383-8fb2-29b4d813de3e)
722
723 ![image](https:~/~/github.com/user-attachments/assets/1c27d617-95da-4703-ae7e-13fcf88d62dc)
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 ![image](https:~/~/github.com/user-attachments/assets/6c8c711d-8f36-47ce-adf8-da61a9059ebf)
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 ![image](https:~/~/github.com/user-attachments/assets/d49cd66d-233c-41be-90e7-49f384e264df)
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 ![image](https:~/~/github.com/user-attachments/assets/6c8c711d-8f36-47ce-adf8-da61a9059ebf)
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 ![image](https:~/~/github.com/user-attachments/assets/6c8c711d-8f36-47ce-adf8-da61a9059ebf)
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) или сообществу разработчиков.