Skip to content

Для разработчиков: вычислительный кластер

Georgy Perevozchikov edited this page Feb 12, 2020 · 4 revisions

Вчислительный кластер

Благодарности

Не так давно у проекта 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. Полезный навык в жизни :-)

Создание аккаунта и получение доступа к кластеру

  1. Сообщите администраторам в slack канале (ei-grad, gosha20777, Kseniia) о том что вы зотите получить доступ к серверу
  2. перейдите по адресу http://176.99.130.188/
    1. логин должен совпадать с именем в slack канале маленькими буквами!
    2. задайте надежный пароль
    3. не соблюдение требований 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 доступа

      1. сгенерируйте пару ssh ключей (ссылка как это делать)
      2. напишите (gosha20777, ei-grad, Kseniia) о своем желании
      3. после получения доступа можете использовать `ssh [email protected] для полключения.

      Примечание: запрещается создание различного рода ssh тунелей и соеденений через прокси, анонимных соеденений, тор, i2p соеденений. Если будете нарушать правила - вы знаете - бан :-)

Установка и настройка окружения (tf+keras+lacmus)

$ 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 воркеров - хороший показатель.

Clone this wiki locally