Машинное обучение

1. Удобный способ сравнения графового представления нейронных сетей на разных стадиях его подготовки и исполнения

Каждая нейронная сеть представляет из себя граф, вершинами которого являются слои, производящие нелинейные изменения над входными параметрами. В популярном фреймворке для оптимизации запуска нейронных сетей OpenVINO данный граф претерпевает различные трансформации по мере его подготовки к выполнению. Визуальное сравнение разных стадий графа является полезной функциональностью на фазе профилирования и анализа возможностей фреймворка. Студенту будет предоставлена возможность изучения внутреннего устройства графов нейронной сети и визуализации связей различный частей графа по мере его трансформации. Это достаточно уникальная возможность работы над проектом на стыке Deep Learning и Web технологий в компании Intel.

Требования:

  • Опыт программирования на JavaScript
  • Алгоритмы на графах

Будет плюсом:

  • Опыт разработки на Python

2. Разработка и оптимизация алгоритма графовой аналитики

Графы становятся всё более и более популярны для представления больших данных и при моделировании сложных структур данных и их взаимодействий. Необходимость хранения и анализа больших графов для решения реальных задач привела к новой волне разработки высокопроизводительного программного обеспечения.

В рамках задачи требуется разработать и оптимизировать один из популярных алгоритмов графовой аналитики с использованием программного стека библиотек Intel.

Решение задачи дает реальный шанс шагнуть в мир графовой аналитики и разработать быстрый алгоритм, который впоследствии может быть использован разработчиками по всему миру.

Требования:

  • Хорошее знание C++
  • Знание математики, понимание основных графовых алгоритмов и структур данных
  • Чтение технической документации на английском языке

Будет плюсом:

  • Опыт оптимизации (векторизация, многопоточность)

3. Разработка инструментов с открытым исходным кодом для подготовки данных для алгоритмов глубокого обучения

Алгоритмы глубокого обучения стали неотъемлемой частью повседневной жизни людей. Как правило, для их разработки требуется большое количество размеченных данных. Некоторые исследователи считают, что данные даже более важны, чем сами алгоритмы.

В данной задаче необходимо выбрать актуальную проблему, разработать и внедрить новую функциональность в один из проектов с открытым исходным кодом, разрабатываемых Intel:

Стажер станет частью команды, которая разрабатывает популярные инструменты с открытым исходным кодом для работы с данными, сможет внести свой вклад в разработку этих инструментов, получит навыки работы в команде над большими проектами.

Требования:

  • Опыт программирования на Python 3.x
  • Чтение технической документации на английском языке
  • Желание учиться

Будет плюсом:

  • Знания в области машинного и глубокого обучения
  • Опыт Web разработки (JavaScript, CSS, HTML)

4. Редактирование и анализ графовых представлений нейронных сетей для Movidius VPU

VPU это специализированный процессор от Movidius ( https://movidius.com ), предназначенный для встроенных систем и нейронных сетей. VPU плагин является частью фреймворка OpenVINO и отвечает за оптимизацию промежуточных графовых представлений (IR) сетей для дальнейшего инференса на VPU устройствах. Для разработки и отладки алгоритмов часто бывает необходимо изменить некоторые параметры, добавить или убрать слой, выделить подграф из изначального IR. Также бывает полезным проанализировать граф, полученный после оптимизаций и отобразить его. Студенту предлагается разработать инструментарий для выполнения вышеперечисленных задач.

Требования:

  • Уверенные знания С++
  • Опыт работы с Python
  • Понимание основных алгоритмов и структур данных
  • Чтение технической документации на английском языке

Будет плюсом:

  • Понимание алгоритмов компьютерного зрения, машинного и глубокого обучения

5. Разработка алгоритма выявления атак на систему распознавания лиц

В последнее время системы распознавания лиц, основанные на глубоком обучении, достигли продуктового уровня качества. Важным компонентом подобных систем является защита от разнообразных атак. Текущие подходы к детектированию лиц не отличают настоящие лица от масок или продемонстрированных перед камерой фотографий. В рамках данной задачи требуется разработать классификатор на основе глубокого обучения, отличающий лица живых людей от разнообразных подделок, демонстрируемых перед камерой. Далее требуется добавить поддержку работы работы с этим классификатором в демо-приложение для распознавания лиц, входящее в состав репозитория Intel Open Model Zoo (https://github.com/opencv/open_model_zoo).

Требования:

  • Уверенное владение Python
  • Знания в области машинного и глубокого обучения
  • Английский на уровне чтения научных статей

Будет плюсом:

  • Опыт работы с PyTorch
  • Стажировка в ITLab или похожих проектах
  • Участие в соревнованиях по машинному обучению: kaggle, topcoder, drivendata, yandexalgorithm, и т.д.
  • Чтение новых статей из http://www.arxiv-sanity.com

6. Исследование и разработка эффективной реализации этапа предсказания Tree-Based ML алгоритмов (XGBoost, Random Forest).

Алгоритмы основанные на решающих деревьях являются одними из самых популярных в машинном обучении. Особой популярностью за счёт высокой точности предсказания пользуюттся Gradient Boosting (XGBoost) и Random Forest, например среди участников соревнований по анализу данных, таких как Kaggle.

Однако для реальных пользовательских решений не менее важна скорость этапа предсказания.

Эффективные преобразования, такие как: объединение деревьев, вероятностная перебалансировка разделяющих узлов, компиляция деревьев - позволяют значительно ускорить этап предсказания без потери точности.

Примеры изветных решений: sklearn-porter, dmlc tree-lite.

Данная задача посвящена исследованию и поиску наилучшего из известных подходов решения этой проблемы для дальнейшей интеграции оптимизаций в библиотеку XGBoost.

Требования:

  • Умение программировать на C++
  • Хороший математический аппарат, знания алгоритмов и структур данных.
  • Базовые знания машинного обучения

Будет плюсом:

  • Знакомство с одной из библиотек XGBoost/LightGBM/CatBoost

7. Низкоуровневая оптимизация математических ядер для нейронных сетей для Movidius VPU

VPU это специализированный процессор от Movidius (https://movidius.com/) предназначенный для встроенных систем и для нейронных сетей (DNN).

Этот проект посвящён низкоуровневой оптимизации (написание кода для VLIW/SIMD/DMA) математических подпрограмм (иначе называемых "ядрами") на которые опираются нейронные сети, например: сортировка массива, транспозиция матрицы, свёртка изображения с фильтром, и т.п.

Требования:

  • Заинтересован писать математические функции
  • Хорошее знание C/C++, хотя бы небольшой опыт

Будет плюсом:

  • Опыт с нейронными сетями

8. Расширение открытого зоопарка моделей глубокого обучения Open Model Zoo.

Open Model Zoo – набор предобученных моделей глубокого обучения, являющийся частью фреймворка OpenVINO™ для решения задачи эффективного запуска нейронных сетей на Intel архитектурах.

Глубокое обучение – одна из самых быстро развивающихся областей науки о данных, которая никогда не стоит на месте, находя все больше и больше практических применений в реальной жизни, а значит есть необходимость в постоянном пополнении коллекции моделей новыми интересными алгоритмами.

В рамках стажировки кандидат имеет возможность поближе познакомиться с популярными алгоритмами глубокого обучения, а также получить опыт в разработке демонстрационных приложений и инструментов валидации для нейронных сетей.

Требования:

  • Уверенные знания Python
  • Опыт работы с системами контроля версий (git) и операционной системой Linux

Будет плюсом:

  • Знания в области компьютерного зрения, машинного и глубокого обучения
  • Знакомство с популярными инструментами для тренировки нейронных сетей (TensorFlow, PyTorch, Caffe, MXNet)
  • Английский на уровне чтения технической документации и научных статей

9. Разработка и оптимизация слоёв нейронных сетей для Intel CPU

CPU plugin - часть продукта OpenVINO; он предоставляет возможность для высокопроизводительного исполнения нейронных сетей на CPU с использованием библиотеки Deep Neural Network Library (DNNL). Данная задача посвящена разработке и низкоуровневой оптимизации вычислительных слоёв нейронных сетей для исполнения их на Intel СPU.

В ходе проекта студент приобретет навыки в области низкоуровневой оптимизации, а также опыт профессиональной разработки ПО.

Требования:

  • Хорошее знание C++
  • Знание алгоритмов и структур данных
  • Чтение технической документации на английском

Будет плюсом:

  • Опыт работы с Linux
  • Опыт программной оптимизации

10. Ускорение и интеграция алгоритмов машинного обучения в Intel Scikit-learn

Машинное обучение и анализ данных – это области науки с большим интересом со стороны бизнеса. Библиотеки, такие как Scikit-learn, предоставляют большой набор алгоритмов машинного обучения, но их реализации могут быть не достаточно оптимизированы для сущуствующих архитектур. Для решения этой проблемы Intel разрабатывает собственную версию Scikit-learn оптимизированную для архитектур Intel.

В рамках данной задачи рассматриваются как отдельные алгоритмы (например, Expectation-Maximization, Naïve Bayes и версии других алгоритмов для работы с разреженными или последовательно поступающими данными), так и строительные блоки для алгоритмов машинного обучения, такие как парные метрики расстояний, ядерные функции и нормализация данных. Задача состоит в их исследовании, имплементации, оптимизации и интеграции в Intel Scikit-learn.

Требования:

  • Умение программировать на C++ и Python
  • Базовые знания в области машинного обучения

Будет плюсом:

  • Опыт использования Scikit-learn или других библиотек машинного обучения.

11. Унификация демо-приложения по обнаружению объектов из Open Model Zoo

Open Model Zoo является частью инструментария OpenVINO и состоит из предварительно обученных моделей Deep Learning и демонстрационных приложений, демонстрирующих применимость моделей. Одной из важных задач, решаемых нейронными сетями, является обнаружение объектов различного типа. Различные подходы к решению этой задачи привели к появлению различных видов детекционных нейронных сетей.

Основная цель стажировки - создание единого демо-приложения для детектрирования обьектов,способное работать с различными типами детекционных сетей. В ходе работы предстоит разобраться в принципах работы имеющихся демо и на их основе разработать единый подход к решению подобной задачи

Стажер получит возможность узнать больше о детекционных нейронных сетей, выяснить различия в их подходах, разработать приложение, используя инструментарий OpenVINO.

Требования:

  • C++ или Python
  • Знание английского языка на среднем уровне
  • Знание OS Linux* хотя бы на уровне пользователя

Будет плюсом:

  • Знание основ глубокого или машинного обучения
  • Опыт работы с СКВ (Git, Mercurial и т.д.)
  • СMake (в случае работы с C++)

12. Разработка инструмента для визуализации результатов проверки точности нейронных сетей

В рамках задачи необходимо разработать инструмент, который позволит визуализировать результаты запуска нейронных сетей с помощью OpenVINO™ Toolkit для популярных задач компьютерного зрения.

OpenVINO - набор инструментов для высокопроизводительного запуска нейронных сетей на intel архитектурах. Помимо производительности, точность вычислений также является важной характеристикой для алгоритмов глубокого обучения, поэтому при разработке продукта большое внимание уделяется сохранению баланса между данными показателями. Возможность интерпретировать результат работы модели имеет высокую практическую ценность для обнаружения дефектов точности.

Accuracy, F1, mAP, IoU – метрики точности, которые можно встретить практически в каждой статье по машинному обучению. Но что же скрывается за хитрыми цифрами и как определить насколько данный показатель действительно хорошо описывает поведение модели в реальных условиях? Ответ на этот вопрос предлагается найти в ходе стажировки.

Требования:

  • Уверенные знания Python
  • Опыт работы с системами контроля версий (git) и операционной системой Linux
  • Желание учиться

Будет плюсом:

  • Знания основ в области компьютерного зрения, машинного и глубокого обучения
  • Опыт работы с OpenCV

13. Аппаратное ускорение конволюционных слоёв для нейронных сетей на Movidius VPU

Компания Intel разрабатывает фреймворк OpenVINO для эффективного инференса нейронных сетей на Intel архитектурах. Одной из целевых архитектур является Intel Movidius Myriad-X, которая требует использования аппаратного ускорителя для достижения высокой производительности. С этой целью разрабатывается компилятор, отображающий граф нейронной сети в примитивы аппаратного ускорителя. Задача студента - опробовать новый подход использования аппартаного ускорителя Intel Movidius Myriad-X: анализ текущего состояния, разработка оптимизаций и анализ производительности.

Требования:

  • Уверенные знания C++/C
  • Понимание основных алгоритмов и структур данных
  • Опыт работы в ОС Linux
  • Чтение технической документации на английском языке

Будет плюсом:

  • Знания в области компьютерно зрения/машинного и глубокого обучения

14. Разработка и оптимизация Pandas-like библиотеки на архитектуре Intel

Intel SDC является расширением JIT-компилятора Numba, используемый для компиляции Pandas API. Расширение автоматически векторизует и параллелизует код, включающий в себя вызовы Pandas API, используя современные аппаратные инструкции и все доступные ядра. Требуется расширять и оптимизировать Intel SDC.

Требования:

  • Хорошее знание Python

Будет плюсом:

  • Знание библиотеки Pandas, C++, LLVM

15. Разработка и поддержка ключевого компонента Intel OpenVINO для трансформации нейронных сетей в низкую точность (INT4 и INT8) для увеличения быстродействия исполнения моделей

OpenVINO является ключевым продуктом Intel в области глубокого обучения с целью запуска нейронных сетей на платформах Intel (CPU, GPU, Movidius, HDDL). Конвертирование и выполнение нейронных сетей с низкой точностью является обязательным условием для увеличения быстродействия исполнения нейронных сетей в несколько раз.

В рамках задачи предлагается изучение ключевых аспектов в области глубокого обучения и разработка компонентов для их реализации: изучение деталей выполнения нейронных сетей в ключевом продукте Интел для запуска нейронных сетей OpenVINO, изучение деталей трансформаций нейронных сетей в низкую точность и участие в полном цикле разработки компонента для трансформации нейронных моделей в низкую точность: анализ, разработка, тестирование.

Результат работы будет активно использоваться индустрией и будет доступен в официальном репозитории Intel OpenVINO: https://github.com/opencv/dldt

Требования:

  • Понимание основ в области глубокого обучения
  • C++
  • Желание учиться

 

Инструменты анализа ПО

16. Оптимизация системы предоставления рекомендаций Intel® Advisor.

Intel® Advisor – инструмент для создания приложений, эффективно использующих возможности современных вычислительных архитектур, входящий в состав Intel® oneAPI Base Toolkit (https://software.intel.com/en-us/oneapi/advisor).

Система предоставления рекомендаций по решению проблем производительности – один из ключевых компонентов Intel® Advisor.

В рамках данной задачи необходимо ускорить поиск проблем производительности в анализируемых приложениях.

Ожидаемые результаты:

  • Ускорение поиска проблем производительности, продемонстрированное на приложениях, используемых для тестирования Intel® Advisor.
  • Интеграция изменений в Intel® Advisor.

Требования:

  • Хорошее знание C++.

Будет плюсом:

  • Опыт использования инструментов для анализа производительности приложений.

17. Реализация поддержки LBR стеки в Intel VTune Profiler для профилировки динамического кода

В рамках задачи предлагается познакомиться с анализатором производительности Intel VTune Profiler, включая построение продукта из исходного кода. Изучить LBR фичу в процессоре Intel и как VTune Profiler использует ее для восстановления стека. Проверить, как это работает для критически важных для бизнеса управляемых сред выполнения (Java, .NET Core, Python) для динамического кода. Реализовать решение для приложений со смешанным стеком (например, Java/Python код вызывает С/C++ код) в VTune Profiler.

Требования:

  • Хорошее знание C++

Будет плюсом:

  • Опыт использования инструментов для анализа производительности приложений
  • Интерес в изучении аппаратных средств испрользуемыз в анализаторах производительности.

18. Разработка автоматизированной системы анализа данных для внедрения новых оптимизаций в области высокопроизводительных вычислений.

Наряду с ежегодным ростом интереса к сфере высокопроизводительных вычислений во всем мире, растет и конкуренция в этом сегменте. Чтобы оставаться конкурентноспособными и занимать лидирующие позиции в этой области требуется не только улучшать аппаратные средства, но и оптимизировать программное обеспечение. В связи с этим постоянно появляются новые оптимизации. Однако перед их внедрением необходимо определить, как часто применима данная оптимизация и принять решение, внедрять ее локально или на более низком уровне - Intel ICC/oneAPI компиляторах.

На данный момент данная задача решается ручным прогоном сотен бенчмарков, сбором профелей и последующим их анализом с помощью профилировщиков, таких как Intel® Advisor,Intel® Vtune™ Amplifier и инструментов для сравнения профилей созданных на основе выше обозначенных профилировщиков.

В рамках летней интернатуры студенту предстоит:

  1. Проанализировать некоторый набор приложений из мира высокопроизводительных вычислений.
  2. Разработать автоматизированную систему анализа данных для внедрения новых оптимизаций.
  3. Протестировать данную систему на реальных приложениях из HPC сферы.

Требования:

  • Уверенное знание Python
  • Опыт работы с операционной системой Linux(Bash)
  • Желание учиться

Будет плюсом:

  • Понимание принципов векторизации

19. Разработка рекомендации по оптимизации приложений, ограниченных пропускной способностью памяти, с использованием Intel® Advisor.

Intel® Advisor – инструмент для создания приложений, эффективно использующих возможности современных вычислительных архитектур, входящий в состав Intel® oneAPI Base Toolkit (https://software.intel.com/en-us/oneapi/advisor). Важной функциональностью продукта является Roofline - визуальная модель производительности С++ приложения, основанная на пропускной способности подсистемы памяти и вычислительных ресурсов компьютера (https://software.intel.com/en-us/articles/intel-advisor-roofline).

В рамках данной задачи необходимо исследовать проблему, связанную с производительностью приложения, ограниченного использованием подсистемой памяти, используя данные Roofline Analysis c включенной симуляцией кэш-памяти процессора, разработать алгоритмы её детектирования и интегрировать их в Intel® Advisor.

Требования:

  • Хорошее знание C++.

Будет плюсом:

  • Опыт использования инструментов для анализа производительности приложений.

20. Оптимизация системы диагностик Intel® Inspector.

Intel® Inspector – инструмент для динамического анализа корректности кода в плане использования памяти и потоков (обнаружение утечек памяти и конкуренции за доступ). Является частью Intel® Parallel Studio (https://software.intel.com/en-us/inspector).

Требуется улучшить скорость работы механизма фильтрации диагностик. В рамках задачи необходимо исследовать класс алгоритмов поиска соответствий строк образцу (регулярные выражения, алгоритм Кнута-Морриса-Пратта, Бойера-Мура и другие). Ожидается реализация этих алгоритмов на C++, тестирование при помощи юнит-тестов и тестов на производительность для того, чтобы выбрать самый быстрый.

В итоге, лучший алгоритм будет добавлен в Intel® Inspector.

Требования:

  • Хорошее знание C++.
  • Опыт реализации алгоритмов по описанию в статьях;
  • Знание английского достаточное, чтобы читать статьи;

Будет плюсом:

  • Опыт использования тест систем.
  • Опыт использования инструментов для анализа производительности приложений.

21. Анализ эффективности предварительной выборки с помощью Intel® VTune ™ Profiler

Intel VTune Profiler - это флагманский инструмент Intel для анализа производительности, предоставляющий широкий спектр методологий для выявления и устранения узких мест в производительности приложений, работающих на архитектурах Intel. Эта работа посвящена исследованию и разработке новых методов анализа производительности, которые с помощью VTune Profiler помогут скорректировать поведение аппаратных средств предварительной выборки данных (hardware data prefetchers).

На архитектурах Intel аппаратные средства предварительной выборки данных (hardware data prefetchers) обычно повышают производительность приложений, которые интенсивно используют подсистему памяти, снижая затраты на доступ к памяти. Но в некоторых практических случаях, например при шаблонах доступа к памяти с непостоянным шагом, аппаратные средства предварительной выборки могут вести себя неоптимально, а иногда могут даже ухудшать производительность приложения. Для решения таких проблем наборы команд Intel предоставляют prefetch инструкции. С помощью этих инструкций программное обеспечение может дать подсказку процессору и указать на часть памяти, которая должна быть принесена в кэш указанного уровня. Однако prefetch инструкции вносят накладные расходы. Чтобы увидеть преимущества от использования prefetch интрукций, следует использовать их в ограниченном количестве и обеспечивать своевременность их вызова, чтобы вовремя приносить данные как можно ближе к потребителю. К сожалению, на практике эти идеи не так легко реализовать.

В настоящем исследовании мы предлагаем разработать и опробовать метод для анализа эффективности предварительной выборки данных. Метод должен предоставлять количественные показатели эффективности предвыборки, укзывать области кода, вызывающие бесполезные предвыборки, и включать набор рабочих примеров решения проблем неэффективности предварительной выборки путем реорганизации шаблона доступа к памяти и / или правильного использования prefetch инструкций.

Требования:

  • Готовность и желание учиться и исследовать
  • Английский на уровне чтения технической документации и научных статей
  • C/C++ skills
  • Linux

Параллельное программирование

22. Разработка умного указателя для энергонезависимой памяти

Персистентная память - это тип энергонезависимой памяти с побайтовой адресацией, как и DRAM, и возможностью сохранять своё состояние во время перезапуска процесса или перезагрузки системы. PMDK - это набор библиотек, предоставляющих разработчикам приложений доступ к персистентной памяти. Новый тип памяти позволяет создавать структуры данных с временем жизни, превышающим время жизни процесса. Но существующие структуры данных, разработанные для энергозависимой оперативной памяти (STL или Intel TBB), не подходят для новой памяти и должны быть портированны. Обычные указатели (базовый элемент при проектировании структур данных) не могут быть использованы на персистентной памяти, так как виртуальные адреса меняются при перезапуске приложения. PMDK предоставляет умные указатели, которые хранят смещение относительно начала сегмента персистентной памяти, но такой подход вносит дополнительные накладные расходы при разыменовании указателя. В данной задаче мы разработаем умный указатель, который хранит смещение относительно себя самого, и внедрим его в структуры данных PMDK библиотеки. А также мы измерим влияние нового указателя на производительность структур данных.

Требования:

  • С++, структуры данных и алгоритмы, метапрограммирование, ООП

23. Реализация новых параллельных алгоритмов стандартной библиотеки С++ (Parallel STL)

Parallel STL (доступная в версии C++17) - это параллельные версии алгоритмов стандартной библиотеки шаблонов. Мы предлагаем написать реализацию параллельной и векторной версий алгоритмов std::shift_left, std::shift_right, базирующихся на библиотеке TBB и возможностях векторизации компилятора Intel.

Требования:

  • C++11
  • C++17
  • STL
  • Обобщенное программирование

24. Поддержка возможностей последних версий стандарта С++ в библиотеке TBB

Intel® Threading Building Blocks (TBB) — кроссплатформенная библиотека шаблонов С++, разработанная для параллельного программирования. TBB предоставляет параллельные алгоритмы, потокобезопасные контейнеры, аллокаторы и прочее для упрощения разработки параллельных программ. Постановка задачи:

Поддержать одну или несколько возможностей современного C++ в библиотеке TBB. Задача включает в себя: ознакомление с функционалом библиотеки TBB и последними версиями стандарта C++ (14/17/20), обсуждение и разработка одной (или нескольких) нововведений C++.

Примеры возможностей современного C++, рассматриваемые для поддержки: Concepts, Coroutines, Modules и другие.

Требования:

  • C++ (желательно C++11 и новее)
  • Шаблонное программирование
  • STL
  • Многопоточное программирование
  • Английский на уровне чтения технической документации

25. Разработка прототипа MPI приложения с поддержкой менеджеров ресурсов, характерных для облачных вычислений и поддержкой возможности запрашивать дополнительные вычислительные ресурсы на лету.

Message Passing Interface (MPI) – это стандартизированный интерфейс передачи сообщений, который позволяет обмениваться информацией между процессами, выполняющими одну задачу. Intel® MPI Library – оптимизированная под платформы Intel реализация MPI стандарта.

Приложения, основанные на стандарте MPI исторически создавались для выделенных кластеров с заранее, до запуска приложения, известными ресурсами для вычислений. В современном Облачном окружении ресурсы могут быть выделены динамически самой платформой, что усложняет запуск классических MPI приложений. Разработка прототипа MPI приложения с встроенной поддержкой запуска и нахождения ресурсов в облачном окружении будет отличной возможностью для стажера познакомиться с облачными менеджерами ресурсов (например Kubernetes), MPI стандартом и общими принципами высокопроизводительны вычислений.

В качестве дополнительно задачи предлагается разработать прототип механизма, который позволил бы запрашивать дополнительные вычислительные ресурсы для запуска новых рабочих процессов на лету. Это позволит избежать ситуаций переподписания и будет отличной возможностью для стажера познакомиться с менеджерами ресурсов (например SLURM).

Требования:

  • Linux
  • Язык программирования C
  • Базовый Английский
  • Опыт параллельного программирвоания (потоки / OpenMP / MPI / другое)

26. Разработка компонента приложения подсчета статистики для высоко-нагруженных операций библиотеки Collective Computation Library (oneCCL)

Подсчет функциональной статистики для многопоточного приложения - это нетривиальная задача, поскольку требует аккуратного и вдумчивого использования примитивов межпоточной синхронизации. В случае высоконагруженных систем введение дополнительной межпоточной синхронизации ведет к ухудшению показателей производительности приложения, поскольку требует либо использования дополнительных аппаратных ресурсов, либо сокращает объем полезной работы, совершаемый в единицу времени.

В случае библиотеки oneCCL требуется подсчитывать функциональную статистику не только для многопоточного случая в рамках одного экземпляра приложения, но и учитывать данные других экземпляров приложения, запускаемых в кластере. Под функциональной статистикой подразумеваются метрики, позволяющие косвенно судить о деталях работы приложения в некоторый интервал времени, например: частота вызовов специфических алгоритмов, частота обращений к хранилищу данных, количество элементов хранилища и процент загрузки ЦПУ при этом. Возможность добавления новых счетчиков в приложение должна быть простой и очевидной. Компонент подсчета функциональной статистики приложения должен агрегировать данные разных типов счетчиков статистики и периодически (с заданным периодом) записывать их в файл популярного формата. В качестве формата предлагается использовать "comma-separated-values" (CSV) формат.

Требования:

  • С/C++11/14
  • Структуры данных и алгоритмы
  • Шаблоны
  • Multithreading programming

Разработка и оптимизация под гетерогенные системы

27. Оптимизация производительности различных алгоритмов Parallel STL для GPU

Начиная со стандарта С++17, стандартная библиотека C++ содержит параллельные алгоритмы (Parallel STL). Intel имеет свою реализацию Parallel STL, которая также является частью стандартной библиотеки GCC.

В рамках задачи предлагается исследовать возможность эффективной реализации одного из алгоритмов Parallel STL для GPU и реализовать прототип алгоритма с использованием новой технологии для гетерогенного программирования.

Требования:

  • C++ (желательно C++11), STL, обобщенное программирование, алгоритмы и структуры данных, общие представления о параллелелизме, опыт программирования для GPU желателен, но не обязателен.

28. Разработка и оптимизация паттернов алгоритмов машинного обучения на GPU.

Intel(R) oneAPI Data Analytics Library (oneDAL) – это библиотека для высокопроизводительного анализа больших данных. Мы обеспечиваем быстродействие пользовательских приложений на всех уровнях: предобработка, трансформация, анализ, построение модели, валидация и принятие решений.

В настоящий момент искусственный интеллект активно применяется для анализа данных. Редукция - один из алгоритмических паттернов, часто применяющихся в методах машинного обучения, таких как Covariance, KMeans и других. Данный паттерн имеет важное значение для производительности приложений. Кандидату предлагается разработать прототип и ускорить его, используя такие технологии, как: С++14, DPC++ и асинхронные вычисления. Подсчет будет проводиться на различных GPU архитектурах.

Требования:

  • Хорошее знание C++
  • Базовые знания об алгоритмах и структурах данных
  • Базовое понимание архитектуры CPU/GPU
  • Базовое знание математики

Будет плюсом:

  • Опыт программирования для GPU

29. Портирование пакета создания реалистичной 3D графики Blender с OpenCL/CUDA на DPC++ (oneAPI)

Blender (www.blender.org) - бесплатный пакет с открытым кодом,объединяющий инструменты создания 3D графики профессионального уровня: 3D-моделирование, отрисовка, редактирование видео и многое другое.В настоящее время для распараллеливания вычислений Blender использует OpenCL (также имеется CUDA-версия). Предлагаемая задача состоит в создании прототипа использования DPC++ (часть Intel oneAPI) вместо OpenCL в Blender. Задача-минимум - портирование всей хостовой части OpenCL на DPC++ с вызовом существующих в оригинальном коде OpenCL ядер. Задача максимум - в дополнение к этому портировать 2-3 "горячих" OpenCL или CUDA ядер на DPC++. Еще одна важная часть задачи - сравнение производительности исходного OpenCL/CUDA кода с созданным на основе oneAPI в ходе выполнения задачи.

Требования:

  • Опыт программирования на С/C++ не менее двух лет
  • Знакомство с параллельным программированием в принципе и OpenCL в частности (не менее одного семестра)
  • Опыт разработки нативных приложений для Windows или Linux с использованием соответствующих инструментов\сред разработки.
  • Способность к самостоятельному обучению, включающая чтение технической документации на английском языке.

Будет плюсом:

  • Опыт работы с CUDA -Понимание основных принципов програмного создания реалистичной 3D-графики и искренний интерес к этой тематике

30. Разработка и оптимизация слоёв нейронных сетей для Intel GPU

Compute Library for Deep Neural Networks (clDNN) - это библиотека вычислительных ядер (подпрограмм), предназначенная для ускорения моделей глубокого обучения на Intel GPU. Основанные на OpenCL, эти ядра ускоряют множество существующих топологий (таких как AlexNet, Visual Geometry Group (VGG), GoogLeNet, ResNet, Faster-RCNN, SqueezeNet и т.д.)

Данная задача посвящена разработке и низкоуровневой оптимизации вычислительных слоёв нейронных сетей для исполнения их на Intel GPU.

Требования:

  • Хорошее знание C++/C
  • Знание алгоритмов и структур данных
  • Опыт программной оптимизации
  • Чтение технической документации на английском

Будет плюсом:

  • Опыт работы с Linux

31. Оптимизация HPC кернелов с использованием стандарта OpenMP-5.0 для запуска на диcкретных Intel GPU

В преддверии выхода новых Intel based дискретных GPU акселераторов (dGPU), существует большая бизнес задача по подготовке HPC (High Performance Computing) приложений к запуску на новой вычислительной архитектуре. Оффлоад - технология при которой происходит выгрузка вычислительной части приложения с хоста (CPU) на акселератор (например, дискретная GPU). Целью данного процесса является получение прироста в производительности приложения за счет дополнительного акселератора. Для реализации оффлоада используется станадрт для распараллеливания программ OpenMP версий 4.5 и 5.0. Существует набор мини-тестов сделанных из HPC-приложений (SPEC MPI ACCEL). В рамках летней интернатуры студент будет работать над портированием этих тестов на GPU используя OpenMP-4.5(5.0).

Требования:

  • Понимание концепции параллельного программирования;
  • Опыт использования OpenMP-3.0;
  • C/C++;
  • Опыт работы с ОС Linux;

Компьютерное зрение

32. Улучшения для алгоритмов онлайн-3d-реконструкции

В модуле rgbd OpenCV есть 2 алгоритма онлайн-3д-реконструкции: KinectFusion и DynamicFusion (в будущем, возможно, будет еще один, работающий на большом масштабе). Они принимают карты глубины с камер RealSense или Kinect и в реальном времени строят по ним трехмерную сцену.

С ними связано несколько задач на выбор:

  1. Ускорить KinectFusion и/или DynamicFusion. KinectFusion работает довольно быстро на дискретных видеокартах, но медленно на CPU. DynamicFusion работает медленно везде. После ускорения алгоритмы будут работать не только быстрее, но и точнее (быстрее работают -> меньше задержка между кадрами -> проще трекинг кадров). Для этого можно использовать более компактный тип данных. Это потребует переписать также код для SIMD и OpenCL.
  2. Добавить поддержку цветов в KinectFusion. Ни один из имеющихся алгоритмов не хранит ничего, кроме геометрии. Поддержка цвета даст алгоритму больше полезных применений.
  3. Заменить трекинг между кадрами на другой алгоритм, поддерживающий RGB. KinectFusion – это конвейер, каждая часть которого может быть изменена пользователем на свою. Замена трекера на поддерживающий RGB улучшит его точность и стабильность.

Требования:

  • Уверенное владение C++
  • Глубокие знания 3d математики
  • Опыт в оптимизации ПО
  • Опыт в использовании инструментов анализа производительности ПО

33. Разработка GStreamer плагина, реализующего семантическую сегментацию видео с помощью глубокого обучения

Как следствие высоких результатов, полученных путем применения глубокого обучения для анализа данных, выросла его популярность в области аналитики видео. Детектирование объектов, их классификация, а также сегментация видеокадров должны выполняться не только с высокой точностью, но и с большой скоростью. Наша цель – создать набор инструментов, которые бы производили быстрый и качественный анализ видеоданных.

В рамках летней интернатуры будет необходимо решить задачу семантической сегментации видео с помощью GStreamer фреймворка и OpenViNO. Во время решения данной задачи стажер познакомится с такими областями как обработка видео и изображений, глубоким обучением, разработкой продукта с открытым исходным кодом на С/С++ и Python, получит опыт работы с библиотекой OpenCV, OpenViNO toolkit и GStreamer фреймворком. Также будут приобретены навыки работы в команде, разработки программного обеспечения под Linux OS с помощью современных технологий (Docker, Git, TeamCity).

Требования:

  • Знание С/С++;
  • Знание алгоритмов и структур данных;
  • Хороший математический аппарат.

Будет плюсом:

  • Базовые знания в области машинного и глубокого обучения;
  • Базовые навыки в области обработки изображений и видео аналитики

Инфраструктура

34. Автоматическая валидация фрагментов кода из документации OpenVINO

OpenVINO - интенсивно развивающийся продукт, позволяющий эффективно исполнять нейронные сети на различных архитектурах Intel.

Документация к продукту содержит примеры кода, которые позволяют решать задачи компьютерного зрения и обработки естественных языков. Учитывая регулярные изменения в OpenVINO, важной становится задача автоматической проверки того, что фрагменты кода, содержащиеся в документации, отражают актуальное состояние интерфейсов библиотеки.

Для решения этой задачи вы присоединитесь к команде OpenVINO QA, познакомитесь с C, C++ и Python реализациями OpenVINO, системами непрерывной интеграции и автоматического тестирования, а также будете плотно взаимодействовать с другими командами - разработчиков продукта и технических писателей.

Финальный результат стажировки - создание инструмента автоматической проверки соответствия документации текущему состоянию интерфейсов и интеграция его запусков в повседневный процесс разработки продукта.

Требования:

  • Опыт разработки на Python
  • Знакомство с системами непрерывной интеграции (Jenkins) и сборки (cmake)

35. Инструмент для визуализации и анализа нейронных сетей используемых во время разработки и валидации

OpenVINO - интенсивно развивающийся продукт, позволяющий эффективно исполнять нейронные сети на различных архитектурах Intel. Множество нейронных сетей используется во время разработки, информация о них хранится в базе данных. Во время прохождения интернатуры предлагается создать удобный пользовательский интерфейс для поиска моделей по различным критериям и визуализации результатов включая внутреннее представление модели.

Требования:

  • Опыт разработки на JavaScript, Python

Будет плюсом:

  • Знакомство с современными Web фреймворкоми (Angular, React, Vue)

36. Разработка системы для сбора и аналитики тестовых данных для трех продуктов Intel (Intel® SDK for OpenCL™ applications, Intel® System Studio, Intel® oneAPI IoT Toolkit)

Должна быть создана система для сбора и аналитики результатов автоматических тестов на основе ReportPortal - сервиса, который предоставляет возможности для анализа и мониторинга поступающих в него данных. Конкретные тестовые случаи могут быть связаны с ошибкой продукта, проблемой автоматизации, системной проблемой. Для успешного выполения задачи, необходимо настроить ReportPortal таким образом, чтобы владелец продукта, авторы тестов и другие заинтересованные лица были своевременно уведомлены о соответствующей проблеме. При необходимости потребуется настроить интеграцию с другими сервисами, такими как TeamCity, GitLab CI, MS Teams.

Требования:

  • Знание языка Python;
  • Знание Windows и UNIX систем;
  • Начальные знания Web технологий (клиент-серверное взаимодействие);
  • Английский на уровне чтения документации.

Будет плюсом:

  • Умение работать с системой контроля версий (Git);
  • Умение работать с базами данных;
  • Опыт работы с Docker-контейнерами.

Разработка технической документации

37. Разработка документации для установочного фреймворка программного обеспечения Intel.

Разрабатываемое программное обеспечение должно надежно устанавливаться на различные платформы (Windows*, Linux*, мacOS*, FreeBSD*). Для этого в Intel разработан фреймворк (набор иструментов), который позволяет упростить и автоматизировать создание установочных пакетов. Необходимо разработать руководство пользователя, которое поможет разработчикам воспользоваться данным инструментарием (фреймворком).

Документ должен описывать:

  1. Подготовку продуктового контента, удовлетворяющего требованиям проверки целостности (спецификации BOM)
  2. Описание стандарта манифестов для установочных модулей
  3. Описание модели использования инструментов для создания установочных модулей
  4. Настройку фреймворка для создания и проверки установочного пакета.

Требования:

  • Отличное знание английского языка
  • Знание основ программирования и языков гипертекста (HTML, CSS)

Будет плюсом:

  • Знание программных продуктов Intel.

Обработка мультимедиа

38. Добавление поддержки звука в библиотеку OpenCV.

Библиотека OpenCV - библиотека компьютерного зрения, которая имеет огромное число алгоритмов и примеров свзанных с тематикой обработки изображений, 3d реконструкицей, обработкой видео и т. д., Увы, пока библиотека не может поддерживать звук ни в каких видах, но потребность в этом начинает возникать. Один из примеров - обработка ситуаций на видео, где анализируется и изображения, и звук.

Поэтому возникает задача написать pipeline для чтение аудифайлов и его воспроизведения.

Требования:

  • Уверенные знания С/C++ или Python
  • Уверенные знания базовых алгоритмов и структур данных
  • Опыт работы с системами контроля версий (git) и операционной системой Linux

Будет плюсом:

  • Знакомство с библиотекой OpenCV (знание модуля videoio)

39. Исследование свойств метрик качества видео, основанных на принципах искуственного интеллекта. Их интеграция в приложение для разработчиков видеокодеков

Сжатие видео достигается за счет потери части исходной информации. Для разработки качественных видеокодеков очень важно знать, насколько чувствительны зрители к различным искажениям, возникающим в процессе кодирования. Одним из результатов современных исследований в области искусственного интеллекта стало появление набора новых метрик для объективной оценки качества сжатых видеопоследовательностей. Задача студента будет исследовать свойства таких метрик, интегрирование кода в GUI-приложение, которое используется для оценки качества закодированных видео последовательностей многими командами как внутри, так и вне Intel, и другие связанные задачи.

Требования:

  • Базовые знания С++
  • Знание Windows и UNIX систем;
  • Знание структур данных, стандартной библиотеки.

Будет плюсом:

  • Опыт работы с Qt и знания в областях сжатия видео и анализа данных

40. Разработка и имплементация нового дизайна управления потоками в тестовом приложении, используемом для верификации работы Intel Media SDK библиотеки в многопоточном режиме

Intel Media SDK библиотека предоставляет интерфейс для аппаратно ускоренной обработки видео на графических платформах Intel. Для успешной интеграции библиотеки в финальные приложения важно проверить корректность ее работы в многопоточном окружении. У нас есть многопоточное тестовое приложение, для которого требуется предложить и реализовать новую архитектуру в части управления потоками.

Требования:

  • Многопоточное программирование и С++