0 Голосов

Изменения документа Sandbox Test Page 1

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

От версии 2.1
отредактировано Виталий Александров
на 04.02.2025 21:02
Изменить комментарий: К данной версии нет комментариев
К версии 1.1
отредактировано Anton Krivchenkov
на 03.12.2024 14:12
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-sandbox/16.10.0]

Сводка

Подробности

Свойства страницы
Название
... ... @@ -1,1 +1,1 @@
1 -JupyterHab+Cuda+nvidia-container-toolkit
1 +Тестовая страница песочницы 1
Автор документа
... ... @@ -1,1 +1,1 @@
1 -XWiki.Vitaliy
1 +XWiki.Anton_Krivchenkov
Содержимое
... ... @@ -1,985 +1,5 @@
1 -# jupyterhub-cuda
2 -# Развертывание JupyterHub с помощью Docker Compose
1 +Нажмите **"Правка"** и измените содержимое этой страницы, затем нажмите **"Сохранить и просмотреть"**, чтобы увидеть как выглядят изменения на вашей странице!
3 3  
4 -Данный проект описывает процесс развертывания JupyterHub с использованием Docker Compose. Решение включает настройку аутентификации через GitHub OAuth, поддержку GPU-вычислений и использование DockerSpawner для создания изолированных окружений для пользователей.
3 += Здесь просто пример текста, чтобы показать вам как может выглядеть страница =
5 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) или сообществу разработчиков.
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.