-
Notifications
You must be signed in to change notification settings - Fork 29
Для разработчиков: вычислительный кластер
Благодарности
Не так давно у проекта lacmus появился кластер в ЦОД-е компании DTL - https://immers.cloud/. Команда Lacmus благодарит компанию DTL за предоставленные ресурсы.
immers.cloud - это первый в россии цод использующий иммерсионное охлаждение. Это надежный, экологичный, мошьный и тихий ЦОД, которым можно легко управлять. Команда Lacmus рекомендует использование immers.cloud для ваших вычислительных задач. Также компания DTL производит постройку ЦОД-ов. Если вашей компании нужны собственные сервера - DTL и иммерсинное охлаждение - лучший выбор!
О чем эта статья?
В этой статье собраны основные положения, правила и рекомендации по использованию вычеслительного кластера. Мы мобрали в том числе некоторые рекомендации по использованию Linux так что эта сатья может быть полезна и за рамками проекта Lacmus.
- для использование терминала лучше всего использовать
tmux
. Tmux держит вашу сессию в демоне - то есть даже если ssh подключение потеряется вы все равно не потеряете прогресс.-
tmux new -s <имя сессии>
- для создания новой сессии -
tmux attach -s <имя сессии>
- для подключения к существующей сесии -
man tmux
- справка - https://habr.com/ru/post/327630/ - шпоргалка по tmux на хабре
-
- список утилит предустановленных на сервере
- htop - позволяет мониторить ресурсы сервера
- nvtop - позволяет посмотреть какие gpu сейчас загружены, а также оценить утилизацию гпу
- vim - текстовый редактор
- mc - файловый менеджер
- conda - менеджер пакетов python
- Все данные хранятся в
/data
дериктории- дериктория доступна только на чтение
- не надо копировать данные отуда в свою домашнюю директорию и забивать диск - иначе бан :-)
- если вам нужно как то изме5нить данные или загрузить новые пишите админам в slack канале
- gosha20777
- ei-grad
- Kseniia
$ ls /data
LADD_V4_spring.zip LADD_V4_winter.zip full sdd-lacmus-version summer
LADD_V4_summer.zip cloud-mail-ru-downloader.sh readme.md spring winter
Примечание 1:
Перед тем как начать обучать модель убедитесь какие из gpu заняты, а какие свободны. Это можно проверить командой nvtop
Примечание 2:
Мониторьте ресурсы во время обучения! (tmux + screen split + htop + nvtop):
$ tmux new -s monitop-session
(in tmux) [ctrl+b]+[shft+'] # split
htop
───────────────────────────────────────────────────────────────────────
nvtop
[monitop-session] 0:bash* "jupyterhub" 14:33 11-Feb-20
Примечание 3:
Следите за памятью GPU. Если ваша сетка увала или завершила работу некорректно то память gpu не всегда может быть очизена. в таком сучае нудно убить процесс ручками по PID kill -SIGKILL PID
Примечание 3:
Изучайте Linux и bash. Полезный навык в жизни :-)
- Сообщите администраторам в slack канале (ei-grad, gosha20777, Kseniia) о том что вы зотите получить доступ к серверу
- перейдите по адресу http://176.99.130.188/
- логин должен совпадать с именем в slack канале маленькими буквами!
- задайте надежный пароль
- не соблюдение требований 1-2 означает бан:-)
-
через jupyter lab
-
можно создавать jupyter тетрадки
-
можно поздавать терминальную сессию (new - terminal)
Примечание 1:
Jupyter тетрадки создаются в $HOME дериктории вашего пользователя.Примечание 2:
доступны следующие Jupyter ядра:- Jupyter + python2 + tf + keras + pythorch
- Jupyter + python3.7 + pythorch. tf + keras скоро завезем. а пока можете поставить из через conda в виртуальное окружение (см. раздел ниже).
-
-
через ssh
-
для получения ssh доступа
- сгенерируйте пару ssh ключей (ссылка как это делать)
- напишите (gosha20777, ei-grad, Kseniia) о своем желании
- после получения доступа можете использовать `ssh [email protected] для полключения.
Примечание:
запрещается создание различного рода ssh тунелей и соеденений через прокси, анонимных соеденений, тор, i2p соеденений. Если будете нарушать правила - вы знаете - бан :-)
-
$ cd # go to home dir
$ mkdir projects && cd projects
$ git clone https://github.com/lacmus-foundation/lacmus.git
$ cd lacmus
$ conda create -n lacmusenv python=3.7 anaconda
$ source activate lacmusenv
(lacmusenv) $ conda install tensorflow-gpu==1.14
(lacmusenv) $ pip install numpy --user
(lacmusenv) $ pip install . --user
(lacmusenv) $ python setup.py build_ext --inplace
- сарайтесь эффективно испозьзовать GPU (забивать их на 100%)
- будет лучше, если вы как то отметите в слак канале что вы заняли такой-то ГПУ
- Обучать момжно только модели связаные с lacmus. Если вы будете тренить что то свое - бан :-) Для этих целей вы можете обратиться к DTL и купить у них. Они крутые ребята.
- Следите за утилизацией!
- Изучите мануал к скрипту запуска.
keras_retinanet/bin/train.py -h - изучите ман
пример запуска
keras_retinanet/bin/train.py --backbone mobilenet224_1.0 --weights snapshots/mobilenet224_1.0_csv_01.h5 --config config.ini --gpu 0 --multiprocessing --workers 6 --max-queue-size 10 --batch-size 6 csv /data/sdd-lacmus-version/train_annotations_pedestrian.csv labels.csv --val-annotations /data/sdd-lacmus-version/val_annotations_pedestrian.csv
-
для утилизации GPU стоит учесть такие параметры:
-
--batch-size
- позволяет задать размер батча. чем больше батч тем больше фотографий гпу обрабатывает за раз, тем лучше считается градиент и тем скорее сходимость. Размер батча ограничен памятью GPU. Размер батча должен быть кратным 2 или равен 1. В нашем случае для картинок 4000*3000 стоит брать размер 2 или 4 в зависимости от конфигурации сети и используемого бекбоуна. Если размер батча больше чем может влезть в память GPU, то программа упадет с ошибкай runtime error. Понизте ращмер батча и попробуйте снова. Минимальный размер батча - 1. Значение по умолчанию - 1. -
--gpu
- то на какой gpu считается сеть. Посмотрите свободную GPU используяnvtop
. -
--multiprocessing
- включает режим многопоточной загрузки данных. По умолчанию мультитрейдинг отключен и процессор подготавливает данные для загрузки в гпу в 1 поток. В результате чего GPU может простаивать какое-то время, а график ее загрузки во время обучения будет выглядеть так: 0 - 100 - 0 - 100. Это уменьшает скорость обучения и хуже утилизирует GPU. При включении режима multiprocessing data loader создает несколько воркеров и грузит данные в несколько потоков, складывая их в очередь в RAM. Соответстыенно чтобы лучше утилизировать gpu нам нужно сделать так, чтобы воркеры загружали и готовели данные для ведиокарты примерно с той же скоростью, с которой GPU их обрабатывает.Если скорость загрузки слишком большая (GPU не справляется с потоком данных) то вчередь в RAM будет расти и память в скоре забьется. В таком случае процесс будет убит системой.
Если скорость загрузки слишком маленькая то GPU будет работать не в полную силу и скорость обучения будет медленной. Нуден баланс.
-
--workers
- чисо воркеров. (по умолчанию 1, макс размер ограничен ядрами CPU) -
--max-queue-size
- размер очереди в фотографиях (по умолчанию - 10). Чем больше размер очереди - тем больше памяти занимает процесс. не делайте больших очередей!
Примечание:
Рекомендуется задавать следующие параметры--batch-size 4 - 6
--workers == batch-size
--max-queue-size 10
Хороший показатель утилизации:
- GPU - память 80-95% (пусть будет некоторый запас, на случай если алокатор запросит еще несколько мб)
- GPU load - 75 - 100% (будет колебаться в этих пределах)
Примечание 2:
не отдавайте все ядра под worker - ы. Вы забьете CPU и во первых процессор не сможет считать производную, во вторых - другой участник не сможет обучать сеть. 4-6 воркеров - хороший показатель. -
-
Last update | Обновлено: 15.05.2020
The Lacmus project is distributed under the GNU license. All rights reserved. | Проект Lacmus распостраняется под лицензией GNU. Все права зищищены.