Совместный проект курса в МФТИ по методам эффективной реализации моделей искусственного интеллекта.
Цель проекта — реализовать библиотеку для обучения и инференса нейронной сети на CPU, GPU, NPU.
cmake -S . -B build
cmake --build buildcd build
ctestили
cd build
./testscd build
./exampleВам нужно сделать 2 вклада в проект: добавить новую функцию и оптимизировать существующую.
- Реализовать слои
- Pooling слои
-
Conv1d,Conv2d,Conv3d -
Softmax -
BatchNorm1d,BatchNorm2d,BatchNorm3d -
LayerNorm -
InstanceNorm1d,InstanceNorm2d,InstanceNorm3d -
RNN -
LSTM -
GRU -
Multihead Attention - Нелинейные функции активации
-
Bilinear - Любые другие слои
- Реализовать функции потерь
- Реализовать функции расстояния
- Алгоритмические методы ускорения matmul
- Аппаратные методы ускорения matmul
- Методы ускорения нейронных сетей
- Добавить параллельные вычисления в слой (
std::thread,OpenMP,CUDA,OpenСL, другие) - Gradient checkpointing
- Operator fusion
- Квантованый слой
- Специфические для слоев методы оптимизаций. Например, для Softmax есть оптимизация, повышающая стабильность вычислений
- Сэкономить память, сохраняя только необходимые промежуточные активации (
std::vector<Tensor> activations)
- Скрыть внутреннюю струкутуру
Tensorот пользователя - Добавить классу
Tensorвозможность работать не только сfloat - Добавить автоматическое форматирование кода
- Добавить автоматическую проверку кода статическими анализаторами
- Интегрировать функциональную часть из main.cpp в библиотеку
- Изменить схему владения объектов класса
Layer. Используя c++11 можно сделать код более читаемым и безопасным - Добавить в
CMakeLists.txtгибкую конфигурацию проекта. Например, при дебаге имеет смысл собирать тесты, компилировать с флагом-O0и санитайзерами, а в релизной версии для ускорения работы программы этого делать не стоит - Поработать с CI/CD. Можно добавить автоматическую генерацию документации и развертывание ее на github pages. Можно добавить автоматический отчет о проценте покрытия тестами кода через github actions
- Любые оптимизации на уровне C++, экономящие память, ускоряющие время работы, или делающие код более безопасным или расширяемым
- Нахождение багов/undefined behavior в программе
- Представленные выше пункты списка неравнозначны: какие-то требуют глубокого понимания и большого числа строчек кода, например, написание блока механизма внимания
MultiheadAttention. Какие-то задачи требуют только изменений в паре строк кода. Более сложные задачи = гарантия высокого балла и получение ценного опыта. Оценивается уровень понимания и вклад в проект, поэтому можете брать несколько задач. - Вопросы по задачам/предложение своих задач/вопосы по теории приветствуются. Задавайте их в чате курса или индивидуально @ckorikov, @Harper567, @GoshaSerbin
- При возможности использовать современный стандарт C++ (хотя бы C++11) вместо чистого C
- При добавлении функционального кода необходимо убедиться, что он имеет ожидаемое поведение, написав тесты
- Вайб-кодинг допускается, но с пониманием что и зачем было сделано
- Читаемые названия коммитов
- В описании пул-реквеста напишите какие задачи выполнили/как работает ваша оптимизация
- При создании пул-реквеста указывайте меня @GoshaSerbin в качестве reviewer и assignee, кидайте ссылку на реквест в личные сообщения, чтобы я точно увидел. Если замечаний нет я вливаю изменения в репозиторий, если есть - пишу их и отмечаю вас assignee. После исправления замечаний в том же реквесте укажите меня снова assignee и снова киньте ссылку. Процесс продолжается итеративно пока замечаний не останется