Распределённые системы 1-2021-2022 — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
м (add first sem materials' links)
м (final edit)
 
(не показаны 4 промежуточные версии этого же участника)
Строка 20: Строка 20:
 
==Материалы курса==
 
==Материалы курса==
 
Ссылка на плейлист курса на YouTube: https://www.youtube.com/playlist?list=PLmA-1xX7IuzCc_Jh9l9x6oWadW31XhDux
 
Ссылка на плейлист курса на YouTube: https://www.youtube.com/playlist?list=PLmA-1xX7IuzCc_Jh9l9x6oWadW31XhDux
 
Ссылка на GitHub с материалами курса: [[ GitHub]]
 
  
 
Описание проекта: [https://docs.google.com/document/d/1I4biVBGv_QUENxKm2ketMMBUOwmQf2HInvmdxjonN6A/edit GoogleDoc]
 
Описание проекта: [https://docs.google.com/document/d/1I4biVBGv_QUENxKm2ketMMBUOwmQf2HInvmdxjonN6A/edit GoogleDoc]
Строка 29: Строка 27:
 
  ! Неделя !! Тема !! Материалы для подготовки к занятию !! Дополнительные материалы  
 
  ! Неделя !! Тема !! Материалы для подготовки к занятию !! Дополнительные материалы  
 
|-
 
|-
| style="background:#eaecf0;" | '''1''' || Основы распределённых систем ||  
+
| style="background:#eaecf0;" | '''1''' || Основы распределённых систем. Координация через RabbitMQ ||  
  
 
Статья PhoenixNAP: [https://phoenixnap.com/kb/ssh-to-connect-to-remote-server-linux-or-windows "How to Use SSH to Connect to a Remote Server in Linux or Windows"],
 
Статья PhoenixNAP: [https://phoenixnap.com/kb/ssh-to-connect-to-remote-server-linux-or-windows "How to Use SSH to Connect to a Remote Server in Linux or Windows"],
Строка 46: Строка 44:
 
[[https://docs.google.com/presentation/d/1fPIendujCgB-CyHoYFXNzVi9oe8T_pdL/edit?usp=sharing&ouid=117076515595449849677&rtpof=true&sd=true Презентация с занятия]]  
 
[[https://docs.google.com/presentation/d/1fPIendujCgB-CyHoYFXNzVi9oe8T_pdL/edit?usp=sharing&ouid=117076515595449849677&rtpof=true&sd=true Презентация с занятия]]  
 
|-
 
|-
| style="background:#eaecf0;" | '''2''' || || ||
+
| style="background:#eaecf0;" | '''2''' || Консультация по RabbitMQ ДЗ || [https://www.geeksforgeeks.org/chandy-lamports-global-state-recording-algorithm/ Chandy–Lamport’s global state recording algorithm] ||
 
|-
 
|-
| style="background:#eaecf0;" | '''3''' || || ||
+
| style="background:#eaecf0;" | '''3''' || MapReduce. MPI. Data processing ||  
 +
[https://en.m.wikipedia.org/wiki/Message_Passing_Interface Message Passing Interface]
 +
 
 +
[https://en.wikipedia.org/wiki/MapReduce MapReduce]
 +
 
 +
||
 
|-
 
|-
| style="background:#eaecf0;" | '''4''' || || ||
+
| style="background:#eaecf0;" | '''4''' || Разбор MapReduce ДЗ. Препроцессинг целевого датасета ||
 +
Прогнать на сервере [https://drive.google.com/file/d/1uNegb8qWaq5tEM3_05pCPUmB9uFc3F5e/view?usp=sharing ноутбук "FMA: A Dataset For Music Analysis"]
 +
||
 
|-
 
|-
| style="background:#eaecf0;" | || || ||
+
| style="background:#eaecf0;" | '''5''' || Horovod ||
 +
[https://horovod.ai/]
 +
[https://github.com/horovod/horovod]
 +
[https://horovod.readthedocs.io/en/stable/summary_include.html#why-horovod]
 +
[https://paperswithcode.com/sota/image-classification-on-imagenet]
 +
||
 
|-
 
|-
| style="background:#eaecf0;" | '''...''' || || ||
+
| style="background:#eaecf0;" | '''6''' || Parallel training on FMA with Horovod. Enhancement & Inference ||
 +
[https://horovod.readthedocs.io/en/stable/timeline_include.html]
 +
||
 
|-
 
|-
| style="background:#eaecf0;" | || || ||
+
| style="background:#eaecf0;" | '''7''' || Telegram bot for music genre inference. More enhancements || ||
 +
 
 +
[https://github.com/AnastasiyaMax/MLDS_python_course_fall21/blob/main/class_6/bot_tutorial.ipynb Туториал по TG-боту]
 +
 
 +
Референсы хороших проектов (от самого легковесного к тем, что потяжелее): [https://github.com/Dora9000/Telegram_bot @Dora9000], [https://github.com/Cliefspring/hse-mlds-cbrf-telegram-bot @Cliefspring], [https://github.com/AlexeyMegley/advanced_python_course/tree/master/project @AlexeyMegley]
 +
 
 +
Наши референсы на [https://disk.yandex.ru/d/ouF-uOdrXtGNBw Я.Диске]
 
|-
 
|-
  
Строка 62: Строка 80:
  
 
== Задания ==
 
== Задания ==
# Реализовать в Python с помощью rabbitMQ алгоритм для снимка глобального состояния распределённой системы (см. [https://en.wikipedia.org/wiki/Chandy%E2%80%93Lamport_algorithm Chandy–Lamport algorithm on Wiki]). Рекомендуется библиотека [https://pika.readthedocs.io/en/stable/ pika]
+
# ['''0.1 от оценки'''] Реализовать в Python с помощью rabbitMQ алгоритм для снимка глобального состояния распределённой системы (см. [https://en.wikipedia.org/wiki/Chandy%E2%80%93Lamport_algorithm Chandy–Lamport algorithm on Wiki]). Рекомендуется библиотека [https://pika.readthedocs.io/en/stable/ pika]
 +
# Реализовать MapReduce решение, позволяющее построить обратный индекс с частотностью слов по коллекции предоставленных документов. Слова достаточно очистить от знаков пунктуации и привести к нижнему регистру. Результат - csv-таблица: по вертикали - слова (токены), по горизонтали - документы. Для каждой пары токен+документ написать количество вхождений. Сравнить время выполнения на одном и нескольких клиентах
 +
# ['''0.2 от оценки'''] Реализовать максимально возможное ускорение обработки датасета путём распараллеливания на MPI для обработки датасета на основе ноутбука /NEW_HDD/HDD_3TB/kosarev/HW3MPI/create_audio_features.ipynb . Данные в той же директории. Также лежит на всякий случай на https://disk.yandex.ru/d/ouF-uOdrXtGNBw
 +
# ['''0.3 от оценки'''] Новое домашнее задание по проекту, выполняем в командах. Реализация обучения свёрточной сети с помощью horovod на 4  видеокартах сервера для данных, полученных в результате предобработки, выполненной в предыдущем задании. Можно выполнить по аналогии с /NEW_HDD/HDD_3TB/kosarev/hvdExample/pytorch_mnist.py
 +
# ['''0.2 от оценки'''] Снова в командах:
 +
* Экспериментируем со слоями: пробуем убрать dropuot, сравниваем получившееся качество и скорость;
 +
* С помощью psutil.virtual_memory() (смотрите так же другие функции по желанию) балансируем загрузку данных, так чтобы при использовании [https://os.unil.cloud.switch.ch/fma/fma_medium.zip среднего] или [https://os.unil.cloud.switch.ch/fma/fma_large.zip большого] размера датасета вы всё равно могли произвести обучение на всех данных. Т.е. читаем по частям, пока есть capacity, зачем обучаемся, затем снова читаем, и т.д. Также предлагается сравнить по скорости и качеству обучение по частям, когда мы на каждой части сразу обучаем несколько (вплоть до всех желаемых) эпох, или же сначала проходим по всем данным одной эпохой, потом второй и т.д.
 +
* ['''Бонусное задание на 1 балл''']: загрузку промоделировать на несколько машин (по факту в любом случае обучаемся на одной) с разделением батча между машинами и суммированием градиентов через mapreduce.
 +
* С заданной частотой сбрасываем результаты обучения (веса) в файлик для сохранения прогресса
 +
    6. ['''До 0.2 от оценки'''] Улучшения:
 +
* обернуть решение в TG-бота, который сможет определять жанр отправленного трека
 +
* реализовать "распределённую" обработку батча с суммированием градиентов с помощью MapReduce
 +
* запроцессить исходный датасет в фичи "распределённо", закидывая сэмплы в RabbitMQ
 +
 
 +
* Реализовать "распределённую" обработку батча с суммированием градиента с помощью MapReduce + подсчёт распределения загрузки между инстансами через RabbitMQ
  
 
==Формула оценивания==
 
==Формула оценивания==

Текущая версия на 21:35, 14 августа 2022

О курсе

Этот курс является логическим продолжением курса "Обработка и анализ больших данных", проходившего в 4-5 модулях

Занятия проводятся в Zoom по четвергам в 18:00

Контакты

Канал курса в TG: HighLoad channel link

Чат курса в TG: HighLoad chat link

Преподаватель Контакты
Илья Косарев Telegram

Материалы курса

Ссылка на плейлист курса на YouTube: https://www.youtube.com/playlist?list=PLmA-1xX7IuzCc_Jh9l9x6oWadW31XhDux

Описание проекта: GoogleDoc

Неделя Тема Материалы для подготовки к занятию Дополнительные материалы
1 Основы распределённых систем. Координация через RabbitMQ

Статья PhoenixNAP: "How to Use SSH to Connect to a Remote Server in Linux or Windows",

Статья на doc-странице VSCode "Remote Development using SSH",

Splunk: "What are distributed systems",

Wiki: Message Passing Inetrface (MPI),

[генерируем SSH-ключ]

[Рабочий конфиг], должен лежать в папке .ssh

[Презентация с занятия]

2 Консультация по RabbitMQ ДЗ Chandy–Lamport’s global state recording algorithm
3 MapReduce. MPI. Data processing

Message Passing Interface

MapReduce

4 Разбор MapReduce ДЗ. Препроцессинг целевого датасета

Прогнать на сервере ноутбук "FMA: A Dataset For Music Analysis"

5 Horovod

[1] [2] [3] [4]

6 Parallel training on FMA with Horovod. Enhancement & Inference

[5]

7 Telegram bot for music genre inference. More enhancements

Туториал по TG-боту

Референсы хороших проектов (от самого легковесного к тем, что потяжелее): @Dora9000, @Cliefspring, @AlexeyMegley

Наши референсы на Я.Диске

Задания

  1. [0.1 от оценки] Реализовать в Python с помощью rabbitMQ алгоритм для снимка глобального состояния распределённой системы (см. Chandy–Lamport algorithm on Wiki). Рекомендуется библиотека pika
  2. Реализовать MapReduce решение, позволяющее построить обратный индекс с частотностью слов по коллекции предоставленных документов. Слова достаточно очистить от знаков пунктуации и привести к нижнему регистру. Результат - csv-таблица: по вертикали - слова (токены), по горизонтали - документы. Для каждой пары токен+документ написать количество вхождений. Сравнить время выполнения на одном и нескольких клиентах
  3. [0.2 от оценки] Реализовать максимально возможное ускорение обработки датасета путём распараллеливания на MPI для обработки датасета на основе ноутбука /NEW_HDD/HDD_3TB/kosarev/HW3MPI/create_audio_features.ipynb . Данные в той же директории. Также лежит на всякий случай на https://disk.yandex.ru/d/ouF-uOdrXtGNBw
  4. [0.3 от оценки] Новое домашнее задание по проекту, выполняем в командах. Реализация обучения свёрточной сети с помощью horovod на 4 видеокартах сервера для данных, полученных в результате предобработки, выполненной в предыдущем задании. Можно выполнить по аналогии с /NEW_HDD/HDD_3TB/kosarev/hvdExample/pytorch_mnist.py
  5. [0.2 от оценки] Снова в командах:
  • Экспериментируем со слоями: пробуем убрать dropuot, сравниваем получившееся качество и скорость;
  • С помощью psutil.virtual_memory() (смотрите так же другие функции по желанию) балансируем загрузку данных, так чтобы при использовании среднего или большого размера датасета вы всё равно могли произвести обучение на всех данных. Т.е. читаем по частям, пока есть capacity, зачем обучаемся, затем снова читаем, и т.д. Также предлагается сравнить по скорости и качеству обучение по частям, когда мы на каждой части сразу обучаем несколько (вплоть до всех желаемых) эпох, или же сначала проходим по всем данным одной эпохой, потом второй и т.д.
  • [Бонусное задание на 1 балл]: загрузку промоделировать на несколько машин (по факту в любом случае обучаемся на одной) с разделением батча между машинами и суммированием градиентов через mapreduce.
  • С заданной частотой сбрасываем результаты обучения (веса) в файлик для сохранения прогресса

    6. [До 0.2 от оценки] Улучшения:

  • обернуть решение в TG-бота, который сможет определять жанр отправленного трека
  • реализовать "распределённую" обработку батча с суммированием градиентов с помощью MapReduce
  • запроцессить исходный датасет в фичи "распределённо", закидывая сэмплы в RabbitMQ
  • Реализовать "распределённую" обработку батча с суммированием градиента с помощью MapReduce + подсчёт распределения загрузки между инстансами через RabbitMQ

Формула оценивания