Привет, я снова с проблемой: собрал Python-пакет, зависящий от нативных библиотек (C/C++), а на другой системе он отказывается работать? «glibc не той версии!» — кому-то знакомо?
Оказывается есть проект manylinux от PyPA (Python Packaging Authority) который создан именно для решения головоломки 🧩 с подбором относительно универсальных системных библиотек.
Проект предоставляет набор Docker-образов на основе старых, но широко распространённых версий glibc, других системных библиотек, компиляторов и средств для сборки. Пакет собранный внутри manylinux-контейнера, практически гарантированно будет работать на большинстве современных Linux-дистрибутивов.
Вот пример как создать рабочее окружение:
Теперь CPU версию Adept можно использовать в Google Collab, вот ссылка на небольшой пример: тренировки LeNet для распознавания MNIST.
#python #packaging #docker #linux #pypi
Оказывается есть проект manylinux от PyPA (Python Packaging Authority) который создан именно для решения головоломки 🧩 с подбором относительно универсальных системных библиотек.
Проект предоставляет набор Docker-образов на основе старых, но широко распространённых версий glibc, других системных библиотек, компиляторов и средств для сборки. Пакет собранный внутри manylinux-контейнера, практически гарантированно будет работать на большинстве современных Linux-дистрибутивов.
Вот пример как создать рабочее окружение:
docker pull quay.io/pypa/manylinux_2_34
docker run -v /development/gitverse/adept:/adept -it quay.io/pypa/manylinux_2_34 /bin/bash
...
python3.11 -m build
Теперь CPU версию Adept можно использовать в Google Collab, вот ссылка на небольшой пример: тренировки LeNet для распознавания MNIST.
#python #packaging #docker #linux #pypi
👍1
Вышел релиз v0.1.3
В котором добавлено:
- Поддержка Float64, Int32 and Int8 типов данных.
- Поддержка различных Vulkan устройств (проверено на NVIDIA RTX 4070 8Gb, Adreno (TM) 650, Intel(R) Graphics (RPL-S)).
- Использование Float64 для аккумуляторов на устройствах которые поддерживают этот тип.
- Изменение системы кэша подсистемы Vulkan с учётом статических параметров шейдера.
- Глубокая переработка конвейера запуска шейдеров Vulkan для устранения конфликтов синхронизации.
- Исправление множества ошибок.
https://gitverse.ru/kolkir/adept/releases/tag/v0.1.3
#release
В котором добавлено:
- Поддержка Float64, Int32 and Int8 типов данных.
- Поддержка различных Vulkan устройств (проверено на NVIDIA RTX 4070 8Gb, Adreno (TM) 650, Intel(R) Graphics (RPL-S)).
- Использование Float64 для аккумуляторов на устройствах которые поддерживают этот тип.
- Изменение системы кэша подсистемы Vulkan с учётом статических параметров шейдера.
- Глубокая переработка конвейера запуска шейдеров Vulkan для устранения конфликтов синхронизации.
- Исправление множества ошибок.
https://gitverse.ru/kolkir/adept/releases/tag/v0.1.3
#release
🔥2
Привет!
Мы активно работаем проекта и хотим поделиться нашими ближайшими планами и текущими работами. Многие из этих улучшений станут возможны благодаря вкладу студентов-разработчиков!
Что в разработке:
1. Умное управление ресурсами Vulkan 🔧
- Проблема: Сейчас ресурсы (буферы, наборы дескрипторов) накапливаются, и для их очистки требуется принудительная синхронизация с хост-системой, что тормозит выполнение.
- Решение: Мы работаем над усовершенствованием системы, чтобы ресурсы освобождались пакетами и по мере накопления, минимизируя простои и повышая эффективность.
2. Импорт моделей ONNX 📥
- В мастер скоро будет залит минимально рабочий прототип для импорта моделей в формате ONNX!
- Эта важная функциональность была реализована студентом НГУ в рамках практической работы в лаборатории ФИТ. Большое спасибо за этот вклад!
- Дальше мы планируем развивать и расширять эту возможность.
3. Распределённое обучение (Data Parallelism) ⚙️
- Ведутся работы по реализации распределённого обучения с параллелизацией по данным. Это позволит значительно ускорить обучение больших моделей на нескольких GPU.
4. Большая эволюция вычислительного графа 🧠
- Запланирована серьёзная переработка архитектуры вычислительного графа.
- Цель: сделать граф максимально гибким для проведения сложных оптимизаций, а также для конвертации в другие промежуточные представления, такие как ONNX или различные диалекты MLIR. Это откроет путь к интеграции с другими экосистемами и инструментами.
Важно отметить: Работы по пунктам 3 и 4 (распределённое обучение и новая архитектура графа) также ведутся в рамках студенческих проектов и практик. Мы рады поддерживать новое поколение инженеров и исследователей!
Следите за обновлениями в репозитории, и, как всегда, ждём ваших вопросов, идей и участия!
Ссылка на репозиторий: https://gitverse.ru/kolkir/adept
#Adept #MachineLearning #OpenSource #Vulkan #ONNX #DistributedTraining #MLIR #Разработка #НГУ #Студенты
Мы активно работаем проекта и хотим поделиться нашими ближайшими планами и текущими работами. Многие из этих улучшений станут возможны благодаря вкладу студентов-разработчиков!
Что в разработке:
1. Умное управление ресурсами Vulkan 🔧
- Проблема: Сейчас ресурсы (буферы, наборы дескрипторов) накапливаются, и для их очистки требуется принудительная синхронизация с хост-системой, что тормозит выполнение.
- Решение: Мы работаем над усовершенствованием системы, чтобы ресурсы освобождались пакетами и по мере накопления, минимизируя простои и повышая эффективность.
2. Импорт моделей ONNX 📥
- В мастер скоро будет залит минимально рабочий прототип для импорта моделей в формате ONNX!
- Эта важная функциональность была реализована студентом НГУ в рамках практической работы в лаборатории ФИТ. Большое спасибо за этот вклад!
- Дальше мы планируем развивать и расширять эту возможность.
3. Распределённое обучение (Data Parallelism) ⚙️
- Ведутся работы по реализации распределённого обучения с параллелизацией по данным. Это позволит значительно ускорить обучение больших моделей на нескольких GPU.
4. Большая эволюция вычислительного графа 🧠
- Запланирована серьёзная переработка архитектуры вычислительного графа.
- Цель: сделать граф максимально гибким для проведения сложных оптимизаций, а также для конвертации в другие промежуточные представления, такие как ONNX или различные диалекты MLIR. Это откроет путь к интеграции с другими экосистемами и инструментами.
Важно отметить: Работы по пунктам 3 и 4 (распределённое обучение и новая архитектура графа) также ведутся в рамках студенческих проектов и практик. Мы рады поддерживать новое поколение инженеров и исследователей!
Следите за обновлениями в репозитории, и, как всегда, ждём ваших вопросов, идей и участия!
Ссылка на репозиторий: https://gitverse.ru/kolkir/adept
#Adept #MachineLearning #OpenSource #Vulkan #ONNX #DistributedTraining #MLIR #Разработка #НГУ #Студенты
🔥1
Привет! Столкнулся с интересной ситуацией, которая хорошо иллюстрирует важность внимательного чтения документации.
❌ Проблемный код
У меня был
И... неожиданно обнаружил нулевые указатели в списке!
🔍 Что пошло не так?
Ошибка №1: Нарушение контракта предиката
Сигнатура
Из документации:
>The expression p(v) must be convertible to bool for every argument v of type (possibly const) VT, where VT is the value type of ForwardIt, regardless of value category, and must not modify v.
Мой
Ошибка №2: Неопределённое состояние после
После работы
Из документации:
> Each element of [result, last) has a valid but unspecified state, because move assignment can eliminate elements by moving from elements that were originally in that range.
📚 Выводы
1. Используйте
3. Читайте документацию и стандарт, в частности cppreference
#cpp #stl #cplusplus #bugs
❌ Проблемный код
У меня был
std::list<std::unique_ptr<Item>>, и я хотел переместить завершённые элементы в другой список. Написал, казалось бы, логичный код:auto it = std::remove_if(active.begin(), active.end(), [](auto& item) {
if (item->is_completed()) {
item->reset();
return true;
}
return false;
});
// Перенос в другой список
stopped_submits_.splice(stopped.begin(), active, it, active.end());
И... неожиданно обнаружил нулевые указатели в списке!
🔍 Что пошло не так?
Ошибка №1: Нарушение контракта предиката
Сигнатура
std::remove_if требует, чтобы предикат не модифицировал элементы:template< class ForwardIt, class UnaryPred >
ForwardIt remove_if(ForwardIt first, ForwardIt last, UnaryPred p );
Из документации:
>The expression p(v) must be convertible to bool for every argument v of type (possibly const) VT, where VT is the value type of ForwardIt, regardless of value category, and must not modify v.
Мой
item.reset() явно нарушает это требование.Ошибка №2: Неопределённое состояние после
remove_ifПосле работы
std::remove_if элементы в диапазоне [result, last) могут находятся в неопределённом состоянии. Для std::unique_ptr это означает, что они могут стать нулевыми в результате перемещения!Из документации:
> Each element of [result, last) has a valid but unspecified state, because move assignment can eliminate elements by moving from elements that were originally in that range.
📚 Выводы
1. Используйте
std::remove/remove_if в рамках идиомы remove-erase3. Читайте документацию и стандарт, в частности cppreference
#cpp #stl #cplusplus #bugs
🔥5
🎄 С наступающим Новым годом!
Спасибо всем подписчикам, за ваш интерес, вопросы, идеи и вклад в развитие нашего открытого проекта. Ваша поддержка — лучшая мотивация для движения вперёд.
Пусть в наступающем году сбудутся все ваши профессиональные и личные планы, а в коде будет меньше багов и больше интересных решений! Желаем вам сил на новые свершения, вдохновения для смелых экспериментов и времени на любимые проекты.
Отдыхайте, набирайтесь сил и ярких впечатлений!
До встречи в новом году! 🥂
Спасибо всем подписчикам, за ваш интерес, вопросы, идеи и вклад в развитие нашего открытого проекта. Ваша поддержка — лучшая мотивация для движения вперёд.
Пусть в наступающем году сбудутся все ваши профессиональные и личные планы, а в коде будет меньше багов и больше интересных решений! Желаем вам сил на новые свершения, вдохновения для смелых экспериментов и времени на любимые проекты.
Отдыхайте, набирайтесь сил и ярких впечатлений!
До встречи в новом году! 🥂
❤4🎉2
🎄 Новогодние каникулы прошли не только в кругу семьи и друзей, но и за кодом! Завершил рефакторинг системы управления ресурсами Vulkan-конвейера в нашем проекте.
Что изменилось:
✅ Убрал необходимость ручной синхронизации в конце обработки пакета при обучении моделей
✅ Снизил нагрузку на аллокаторы ресурсов
✅ Сделал управление ресурсами более предсказуемым и «плавным»
Провёл сравнительное нагрузочное тестирование — и результаты радуют:
📈 На задачах с LeNet и ResNet50 (CIFAR10/MNIST, FP32, Adam) производительность Adept теперь сопоставима с PyTorch, особенно в режимах с ограниченным worksize и детерминированными алгоритмами cuBLAS. Это означает, что для типичных свёрточных сетей, т.е. небольших размерностей матричного умножения, мы почти «на равных».
✨ При этом размер батча больше не оказывает заметного влияния на производительность конвейера, что раньше было одной из проблем.
Но есть и над чем работать:
⚠️ В тестах с MLP (только матричное умножение, большие размеры) производительность начинает падать уже при размере матриц 128×128. Это связано с текущей реализацией GEMM-ядра — сейчас она соответствует субоптимальному варианту алгоритма, который я и показывал в статье на Хабре. Т.е. результат вполне объяснимый.
Следующий шаг — переписать ядро
Подробные результаты измерений — в вики проекта.
GPU-оптимизация — это марафон, а не спринт 😊
#Vulkan #GPU #GEMM #C++ #PyTorch
Что изменилось:
✅ Убрал необходимость ручной синхронизации в конце обработки пакета при обучении моделей
✅ Снизил нагрузку на аллокаторы ресурсов
✅ Сделал управление ресурсами более предсказуемым и «плавным»
Провёл сравнительное нагрузочное тестирование — и результаты радуют:
📈 На задачах с LeNet и ResNet50 (CIFAR10/MNIST, FP32, Adam) производительность Adept теперь сопоставима с PyTorch, особенно в режимах с ограниченным worksize и детерминированными алгоритмами cuBLAS. Это означает, что для типичных свёрточных сетей, т.е. небольших размерностей матричного умножения, мы почти «на равных».
✨ При этом размер батча больше не оказывает заметного влияния на производительность конвейера, что раньше было одной из проблем.
Но есть и над чем работать:
⚠️ В тестах с MLP (только матричное умножение, большие размеры) производительность начинает падать уже при размере матриц 128×128. Это связано с текущей реализацией GEMM-ядра — сейчас она соответствует субоптимальному варианту алгоритма, который я и показывал в статье на Хабре. Т.е. результат вполне объяснимый.
Следующий шаг — переписать ядро
matmul, чтобы интенсивнее использовать регистры и минимизировать обращения к локальной памяти, что позволит приблизиться к производительности cuBLAS даже на крупных матрицах.Подробные результаты измерений — в вики проекта.
GPU-оптимизация — это марафон, а не спринт 😊
#Vulkan #GPU #GEMM #C++ #PyTorch
🔥4👍2
Привет, немного информации о проекте про разработку которого я рассказываю в этом канале:
Adept(Automatic Differentiation Engine for Tensor Processing) — это библиотека на Python и C++ для построения и обучения нейросетей, созданная с упором на кроссплатформенность, гибкость и образовательную ценность.
⚙️ Основные возможности:
• Динамические графы — как в PyTorch: отладка, условия, циклы «из коробки».
• Тензоры + Autograd — автоматическое дифференцирование и GPU-ускорение.
• Vulkan backend — работает на GPU от NVIDIA, AMD, Intel, Qualcomm и даже на мобильных устройствах.
• Единая семантика Python/C++ — легко переносить прототип в production.
🎯 Зачем это нужно?
В российской экосистеме почти нет open-source ML-платформ общего назначения, сравнимых с PyTorch или TensorFlow. Возможно это связано как с нехваткой специалистов, сочетающих глубокое понимание машинного обучения и системного программирования, так и доступностью зрелых альтернатив. Adept создан как экспериментальная площадка для накопления такого опыта — как исследовательского, так и образовательного.
🧠 Почему это полезно для обучения?
Проект охватывает все ключевые уровни ML-стека: от математических абстракций (тензоры, градиенты) до низкоуровневой работы с GPU. Это делает его подходящей основой для:
• Изучения архитектуры современных ML-фреймворков
• Курсовых, дипломных и исследовательских работ
• Практических заданий по deep learning, системному программированию и кроссплатформенной разработке
🔗 Код открыт — приглашаем студентов, преподавателей, энтузиастов и всех, кто хочет разобраться, как устроены ML-платформы изнутри.
#MachineLearning #OpenSource #Education #Vulkan #Python #Cpp #Adept #MLPlatform
Adept(Automatic Differentiation Engine for Tensor Processing) — это библиотека на Python и C++ для построения и обучения нейросетей, созданная с упором на кроссплатформенность, гибкость и образовательную ценность.
⚙️ Основные возможности:
• Динамические графы — как в PyTorch: отладка, условия, циклы «из коробки».
• Тензоры + Autograd — автоматическое дифференцирование и GPU-ускорение.
• Vulkan backend — работает на GPU от NVIDIA, AMD, Intel, Qualcomm и даже на мобильных устройствах.
• Единая семантика Python/C++ — легко переносить прототип в production.
🎯 Зачем это нужно?
В российской экосистеме почти нет open-source ML-платформ общего назначения, сравнимых с PyTorch или TensorFlow. Возможно это связано как с нехваткой специалистов, сочетающих глубокое понимание машинного обучения и системного программирования, так и доступностью зрелых альтернатив. Adept создан как экспериментальная площадка для накопления такого опыта — как исследовательского, так и образовательного.
🧠 Почему это полезно для обучения?
Проект охватывает все ключевые уровни ML-стека: от математических абстракций (тензоры, градиенты) до низкоуровневой работы с GPU. Это делает его подходящей основой для:
• Изучения архитектуры современных ML-фреймворков
• Курсовых, дипломных и исследовательских работ
• Практических заданий по deep learning, системному программированию и кроссплатформенной разработке
🔗 Код открыт — приглашаем студентов, преподавателей, энтузиастов и всех, кто хочет разобраться, как устроены ML-платформы изнутри.
#MachineLearning #OpenSource #Education #Vulkan #Python #Cpp #Adept #MLPlatform
👍7🔥2
Adept | Машинное обучение | Открытое ПО pinned «Привет, немного информации о проекте про разработку которого я рассказываю в этом канале: Adept(Automatic Differentiation Engine for Tensor Processing) — это библиотека на Python и C++ для построения и обучения нейросетей, созданная с упором на кроссплатформенность…»
🛠️ На каких Linux-дистрибутивах проверена сборка Adept
Проект успешно собирается и запускается на следующих системах:
🔹 Manjaro Linux 26.0.1 — основная платформа разработки
🔹 Ubuntu 22.04
🔹 Ubuntu 25.10 (development release)
А также на отечественных дистрибутивах:
🔹 Astra Linux Smolensk 1.8.3
🔹 ALT Linux StarterKit 11 «Slavia»
Особенности:
- В ALT Linux по умолчанию включён
- Сборка под Astra Linux была протестирована участником канала — отдельное спасибо! Использовался GCC 12.2.
⚠️ В этом компиляторе есть ложные срабатывания
Мы продолжаем расширять список поддерживаемых платформ и документировать нюансы сборки — ваш опыт тоже важен!
#Linux #GCC #AstraLinux #ALT #Build #Cplusplus
Проект успешно собирается и запускается на следующих системах:
🔹 Manjaro Linux 26.0.1 — основная платформа разработки
🔹 Ubuntu 22.04
🔹 Ubuntu 25.10 (development release)
А также на отечественных дистрибутивах:
🔹 Astra Linux Smolensk 1.8.3
🔹 ALT Linux StarterKit 11 «Slavia»
Особенности:
- В ALT Linux по умолчанию включён
_FORTIFY_SOURCE в GCC, что мешает сборке oneTBB. Обход описан в Wiki проекта. - Сборка под Astra Linux была протестирована участником канала — отдельное спасибо! Использовался GCC 12.2.
⚠️ В этом компиляторе есть ложные срабатывания
-Warray-bounds при сборке в отладочном режиме, из-за чего сборка может не завершиться. В режиме Release проблем не возникает.Мы продолжаем расширять список поддерживаемых платформ и документировать нюансы сборки — ваш опыт тоже важен!
#Linux #GCC #AstraLinux #ALT #Build #Cplusplus
❤🔥1
🔍 Как стабилизировать систему перед нагрузочным тестированием
Если вы сравниваете производительность (например, как я наш Vulkan-бэкенд vs PyTorch), важно обеспечить воспроизводимость бенчмарков, исключив влияние системных факторов. Например динамическое управление частотами или рандомизации памяти. Вот минимальный набор команд для Linux-систем с NVIDIA GPU с которых можно начать:
🖥️ GPU (NVIDIA)
> ⚠️ Значения частот подбирайте под вашу модель GPU. Их можно найти в выводе
⚙️ CPU
> Это позволяет задать более-менее предсказуемый диапазон частот для процессора.
🧠 Дополнительно: уменьшаем системный «шум»
>Это повышает воспроизводимость времени запуска и распределения памяти — особенно важно при микро-бенчмарках.
💡 Другие рекомендации:
- Закройте фоновые приложения
- Отключите энергосбережение в BIOS/UEFI (C-states, P-states)
- Запускайте тесты несколько раз и берите медиану
- Используйте
- Для серверных GPU: отключите коррекцию ошибок ECC (`nvidia-smi -e 0`), если это не критично.
Такой подход позволяет добиться воспроизводимых результатов — без него сравнение «на глаз» может ввести в заблуждение.
P.S. Эти настройки временные — после перезагрузки всё вернётся к стандартному поведению. ⚠️ Не применяйте их на продакшен-машинах без понимания последствий!
#GPU #Benchmarking #Vulkan #PyTorch #ML #Linux #Performance #Adept
Если вы сравниваете производительность (например, как я наш Vulkan-бэкенд vs PyTorch), важно обеспечить воспроизводимость бенчмарков, исключив влияние системных факторов. Например динамическое управление частотами или рандомизации памяти. Вот минимальный набор команд для Linux-систем с NVIDIA GPU с которых можно начать:
🖥️ GPU (NVIDIA)
# Включить persistence mode (чтобы драйвер не «усыплял» GPU)
sudo nvidia-smi --persistence-mode=1
# Зафиксировать частоты (пример для RTX 4070)
sudo nvidia-smi --lock-gpu-clocks=3105 # MHz (core)
sudo nvidia-smi --lock-memory-clocks=8001 # MHz (VRAM)
> ⚠️ Значения частот подбирайте под вашу модель GPU. Их можно найти в выводе
nvidia-smi -q -d SUPPORTED_CLOCKS.⚙️ CPU
# Переключиться в режим максимальной производительности
sudo cpupower frequency-set -g performance
# Зафиксировать минимальную частоту (например, 3.9 ГГц)
sudo cpupower frequency-set -d 3900000
> Это позволяет задать более-менее предсказуемый диапазон частот для процессора.
🧠 Дополнительно: уменьшаем системный «шум»
# Отключить ASLR (Address Space Layout Randomization)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
>Это повышает воспроизводимость времени запуска и распределения памяти — особенно важно при микро-бенчмарках.
💡 Другие рекомендации:
- Закройте фоновые приложения
- Отключите энергосбережение в BIOS/UEFI (C-states, P-states)
- Запускайте тесты несколько раз и берите медиану
- Используйте
taskset или numactl, чтобы изолировать ядра CPU- Для серверных GPU: отключите коррекцию ошибок ECC (`nvidia-smi -e 0`), если это не критично.
Такой подход позволяет добиться воспроизводимых результатов — без него сравнение «на глаз» может ввести в заблуждение.
P.S. Эти настройки временные — после перезагрузки всё вернётся к стандартному поведению. ⚠️ Не применяйте их на продакшен-машинах без понимания последствий!
#GPU #Benchmarking #Vulkan #PyTorch #ML #Linux #Performance #Adept
👍2
Привет! Небольшой анонс: я буду делать доклад про реализацию конвейера для запуска вычислительных шейдеров в Adept на конференции С++ Russia 2026 которая будет проходить 16-17 мая в Москве, приходите послушать.
https://cppconf.ru/talks/823852ac77f1480c8276b17b1736bb5f/
https://cppconf.ru/talks/823852ac77f1480c8276b17b1736bb5f/
C++ Russia 2026. Конференция по C++ и системному программированию
Эффективный запуск compute-шейдеров в Adept | Доклад на C++ Russia 2026
Поделюсь опытом создания эффективной среды выполнения compute-шейдеров в рамках open-source проекта Adept.
🔥6
Привет, в работе над проектом постоянно сменяются периоды активной разработки и этапы отладки, тестирования и оптимизации.
На прошлой неделе основное внимание было уделено тестированию и доработке ядра матричного умножения (matmul). Благодаря увеличению нагрузки на потоки и изменению размера тайла удалось добиться заметного ускорения на средних размерах — это подтверждается графиком сравнения Adept и PyTorch с разными режимами использования cuBLAS .
Однако начиная с размеров 512×1024 производительность Adept начинает значительно отставать, см. график. А это критично: особенно в современных LLM. Например, в модели Qwen-7B, которую можно запускать локально, типичные операции включают умножения вида:
- 4096 × 4096 (линейные слои),
- 4096 × 11008 (expansion в MLP блоках).
Теперь надо определиться что же делать дальше. Есть несколько важных направлений:
1. Продолжать оптимизировать matmul. Например внедрить транспонирование одной из входных матриц (обычно B). Это позволит:
- организовать сгруппированный доступ к данным (все потоки в warp’е читают соседние адреса),
- использовать прямоугольные тайлы (например, 64×128),
- лучше распределить работу между потоками и повысить occupancy.
Да, такой подход требует дополнительной памяти для хранения транспонированной матрицы — но это стандартная практика: даже cuBLAS выделяет рабочую память, управляемую через параметры worksize.
2. Оптимизация операций свёртки, которые критичны для CNN и гибридных архитектур. Тут надо реализовать быстрые свёртки с использованием алгоритма Winograd. Алгоритм Implicit GEMM для работы в стиле im2col но без промежуточных матриц.
3. Также крайне важно завершить реализацию функциональности срезов тензоров — без неё невозможно поддерживать широкий спектр моделей машинного обучения, включая те, что используют динамические формы или сложные attention-маски.
🚀 Приглашаем всех заинтересованных принять участие в развитии Adept!
Ваш вклад — будь то тестирование, код, идеи по оптимизации или документация — напрямую ускорит появление полноценного Vulkan-бэкенда для ML.
#Adept #Vulkan #GPU #GEMM #LLM #TensorSlicing
На прошлой неделе основное внимание было уделено тестированию и доработке ядра матричного умножения (matmul). Благодаря увеличению нагрузки на потоки и изменению размера тайла удалось добиться заметного ускорения на средних размерах — это подтверждается графиком сравнения Adept и PyTorch с разными режимами использования cuBLAS .
Однако начиная с размеров 512×1024 производительность Adept начинает значительно отставать, см. график. А это критично: особенно в современных LLM. Например, в модели Qwen-7B, которую можно запускать локально, типичные операции включают умножения вида:
- 4096 × 4096 (линейные слои),
- 4096 × 11008 (expansion в MLP блоках).
Теперь надо определиться что же делать дальше. Есть несколько важных направлений:
1. Продолжать оптимизировать matmul. Например внедрить транспонирование одной из входных матриц (обычно B). Это позволит:
- организовать сгруппированный доступ к данным (все потоки в warp’е читают соседние адреса),
- использовать прямоугольные тайлы (например, 64×128),
- лучше распределить работу между потоками и повысить occupancy.
Да, такой подход требует дополнительной памяти для хранения транспонированной матрицы — но это стандартная практика: даже cuBLAS выделяет рабочую память, управляемую через параметры worksize.
2. Оптимизация операций свёртки, которые критичны для CNN и гибридных архитектур. Тут надо реализовать быстрые свёртки с использованием алгоритма Winograd. Алгоритм Implicit GEMM для работы в стиле im2col но без промежуточных матриц.
3. Также крайне важно завершить реализацию функциональности срезов тензоров — без неё невозможно поддерживать широкий спектр моделей машинного обучения, включая те, что используют динамические формы или сложные attention-маски.
🚀 Приглашаем всех заинтересованных принять участие в развитии Adept!
Ваш вклад — будь то тестирование, код, идеи по оптимизации или документация — напрямую ускорит появление полноценного Vulkan-бэкенда для ML.
#Adept #Vulkan #GPU #GEMM #LLM #TensorSlicing
Telegram
adept
Сравнение производительности matmul в Adept и PyTorch: количество пакетов в секунду при тренировке.
Обратите внимание что производительность PyTorch c отключенным и включенным cuDNN практически одинаковая - так как используются только линейные слои т.е.…
Обратите внимание что производительность PyTorch c отключенным и включенным cuDNN практически одинаковая - так как используются только линейные слои т.е.…
👍2🔥2👌1
Привет, приходите на Scientific Open Source meetup.
Про опыт участия в нашем проекте расскажет Андрей Зверев студент 3го курса НГУ.
Про опыт участия в нашем проекте расскажет Андрей Зверев студент 3го курса НГУ.
Forwarded from Научный опенсорс (Nikolay Nikitin)
А тем временем, начинаем публикацию программы нашего митапа, который пройдет 12.02 в 18-00. Вот перечень докладов с авторскими аннотациями:
- Школа-конкурс EDGE AI 2025: как мы первыми в России представили флагманский китайский стек для работы с ИИ-моделями на EDGE устройствах c OpenScaler OS // Владимир Павлов - Технический комитет сообщества OpenScaler
В докладе мы поделимся опытом сообщества OpenScaler по проведению соревнований в новом формате: студенческие ИИ-команды из ведущих вузов страны сначала проходили обучение у наших менторов, а затем соревновались на лучшую реализацию различных ИИ-моделей на краевых устройствах Orange Pi на базе чипов Ascend и ОС OpenScaler. Расскажем о самом конкурсе, командах и проектах студентов, которые были представлены в финале. Все учебные материалы были опубликованы в открытом доступе, а проекты финалистов размещены на платформе GitVerse.
- [Секретный доклад] // Олег Чирухин - владелец продукта GigaIDE Cloud
Как понятно из названия - подробности будут раскрыты только в самый последний момент!
- OpenSource по-пекински, или почему фонд OpenAtom - это прекрасно, но не в наших реалиях // Аристов Константин - Скала^р (группа Рубитех), руководитель направления RnD системного ПО
Поговорим о том, какой дивный симбиоз между собором и базаром (openSource и Кговавым Ынтырпрайзом) получился в КНР, попробуем прикинуть тамошние реалии на наши, придем к парадоксальному выводу насчет пользы конкуренции.
- Студенческий open-source в ML - опыт внедрения поддержки ONNX // Зверев Андрей - студент 3 курса Новосибирского Государственного Университета, стажер-разработчик в Яндексе
Как превратить скучную учебную практику в реальный проект, которым не стыдно гордиться и который добавляет ценности в резюме? Расскажу на личном примере участия в лаборатории YADRO при НГУ.
Поясню, что такое формат лаборатории: как туда попасть, какие возможности она дает студентам. На практическом кейсе покажу, как выглядят рабочие процессы изнутри: постановка задач, планирование, работа через issues/PR, тестирование и выпуск; с какими трудностями столкнулся и как их решал при поддержке наставников из реальной компании-партнера.
В технической части объясню простыми словами: что такое ONNX и почему стандарт обмена моделями важен для переносимости и воспроизводимости, чем его поддержка усилила проект Adept и какие результаты получились на практике.
- Simple Deep Research - открытый фреймворк для мультиагентного поиска // Алан Газзаев - аспирант ИТМО, NLP researcher at MWS AI
Simple Deep Research - это простая система для поиска информации в интернете с помощью мультиагентного подхода. Система работает в двух режимах: lite и full. В первом режиме агент посещает несколько сайтов, сжимает информацию и выдает отчет. Во втором режиме агент определяет сложность запроса, разбивает его на подзапросы, а затем другие агенты ищут и суммируют информацию по каждому запросу. Одна из основных идей данного фреймворка заключается в том, что он не содержит таких зависимостей как langchain и smolagents и быстро запускается с локальными моделями через vLLM/llama.cpp. Также фреймворк модульный, можно заменить поисковой движок и агентов по необходимости.
Ссылка на регистрацию прежняя - https://openmeetup.ru/
Места на площадке конечны, так что не откладывайте!
- Школа-конкурс EDGE AI 2025: как мы первыми в России представили флагманский китайский стек для работы с ИИ-моделями на EDGE устройствах c OpenScaler OS // Владимир Павлов - Технический комитет сообщества OpenScaler
В докладе мы поделимся опытом сообщества OpenScaler по проведению соревнований в новом формате: студенческие ИИ-команды из ведущих вузов страны сначала проходили обучение у наших менторов, а затем соревновались на лучшую реализацию различных ИИ-моделей на краевых устройствах Orange Pi на базе чипов Ascend и ОС OpenScaler. Расскажем о самом конкурсе, командах и проектах студентов, которые были представлены в финале. Все учебные материалы были опубликованы в открытом доступе, а проекты финалистов размещены на платформе GitVerse.
- [Секретный доклад] // Олег Чирухин - владелец продукта GigaIDE Cloud
Как понятно из названия - подробности будут раскрыты только в самый последний момент!
- OpenSource по-пекински, или почему фонд OpenAtom - это прекрасно, но не в наших реалиях // Аристов Константин - Скала^р (группа Рубитех), руководитель направления RnD системного ПО
Поговорим о том, какой дивный симбиоз между собором и базаром (openSource и Кговавым Ынтырпрайзом) получился в КНР, попробуем прикинуть тамошние реалии на наши, придем к парадоксальному выводу насчет пользы конкуренции.
- Студенческий open-source в ML - опыт внедрения поддержки ONNX // Зверев Андрей - студент 3 курса Новосибирского Государственного Университета, стажер-разработчик в Яндексе
Как превратить скучную учебную практику в реальный проект, которым не стыдно гордиться и который добавляет ценности в резюме? Расскажу на личном примере участия в лаборатории YADRO при НГУ.
Поясню, что такое формат лаборатории: как туда попасть, какие возможности она дает студентам. На практическом кейсе покажу, как выглядят рабочие процессы изнутри: постановка задач, планирование, работа через issues/PR, тестирование и выпуск; с какими трудностями столкнулся и как их решал при поддержке наставников из реальной компании-партнера.
В технической части объясню простыми словами: что такое ONNX и почему стандарт обмена моделями важен для переносимости и воспроизводимости, чем его поддержка усилила проект Adept и какие результаты получились на практике.
- Simple Deep Research - открытый фреймворк для мультиагентного поиска // Алан Газзаев - аспирант ИТМО, NLP researcher at MWS AI
Simple Deep Research - это простая система для поиска информации в интернете с помощью мультиагентного подхода. Система работает в двух режимах: lite и full. В первом режиме агент посещает несколько сайтов, сжимает информацию и выдает отчет. Во втором режиме агент определяет сложность запроса, разбивает его на подзапросы, а затем другие агенты ищут и суммируют информацию по каждому запросу. Одна из основных идей данного фреймворка заключается в том, что он не содержит таких зависимостей как langchain и smolagents и быстро запускается с локальными моделями через vLLM/llama.cpp. Также фреймворк модульный, можно заменить поисковой движок и агентов по необходимости.
Ссылка на регистрацию прежняя - https://openmeetup.ru/
Места на площадке конечны, так что не откладывайте!
Привет, сделал декомпозицию задач про ускорение свёрточных операций — сердце современных CNN:
• https://gitverse.ru/kolkir/adept/tasktracker/TSKDPT3-90
• https://gitverse.ru/kolkir/adept/tasktracker/TSKDPT3-79
Есть три основных задачи:
🔥 Быстрые свёртки для инференса (CPU/GPU)
Цель: Максимально ускорить вывод моделей за счёт оптимизированных алгоритмов свёрток.
Что делать:
Исследовать подходы (включая Winograd и альтернативы)
Учесть ограничения: поддержка batch, channels, padding
Реализовать ядра:
• CPU — через SIMD-библиотеку Highway
• GPU — через compute-шейдеры Vulkan
Сравнить результат с текущим im2col
💡 Идеально, если хочешь разобраться в алгоритмах свёрток и хочешь «выжать» максимум из железа.
⚙️ Умная диспетчеризация режимов
Цель: Автоматически выбирать алгоритм в зависимости от сценария.
Логика:
Инференс: быстрые свёртки для ядер 3×3–7×7 → иначе im2col
Тренировка: всегда im2col (работа с большими матрицами)
🎥 Как устроена наша диспетчеризация
🚀 Implicit GEMM для тренировки
Цель: Ускорить обучение за счёт сокращения аллокаций памяти.
Почему это круто:
Минимум промежуточных буферов
Эффективный тайлинг — строим только нужный фрагмент матрицы свёртки «на лету»
Лучшее распараллеливание → выше производительность на тренировке
Этапы: дизайн → реализация (CPU/GPU) → бенчмарки против im2col → замена при профите.
👉 Готов браться? Читай правила участия, пиши— обсудим детали и подберём задачу под твои скиллы!
#opensource #machinelearning #optimization #vulkan #simd #cpp
• https://gitverse.ru/kolkir/adept/tasktracker/TSKDPT3-90
• https://gitverse.ru/kolkir/adept/tasktracker/TSKDPT3-79
Есть три основных задачи:
🔥 Быстрые свёртки для инференса (CPU/GPU)
Цель: Максимально ускорить вывод моделей за счёт оптимизированных алгоритмов свёрток.
Что делать:
Исследовать подходы (включая Winograd и альтернативы)
Учесть ограничения: поддержка batch, channels, padding
Реализовать ядра:
• CPU — через SIMD-библиотеку Highway
• GPU — через compute-шейдеры Vulkan
Сравнить результат с текущим im2col
💡 Идеально, если хочешь разобраться в алгоритмах свёрток и хочешь «выжать» максимум из железа.
⚙️ Умная диспетчеризация режимов
Цель: Автоматически выбирать алгоритм в зависимости от сценария.
Логика:
Инференс: быстрые свёртки для ядер 3×3–7×7 → иначе im2col
Тренировка: всегда im2col (работа с большими матрицами)
🎥 Как устроена наша диспетчеризация
🚀 Implicit GEMM для тренировки
Цель: Ускорить обучение за счёт сокращения аллокаций памяти.
Почему это круто:
Минимум промежуточных буферов
Эффективный тайлинг — строим только нужный фрагмент матрицы свёртки «на лету»
Лучшее распараллеливание → выше производительность на тренировке
Этапы: дизайн → реализация (CPU/GPU) → бенчмарки против im2col → замена при профите.
👉 Готов браться? Читай правила участия, пиши— обсудим детали и подберём задачу под твои скиллы!
#opensource #machinelearning #optimization #vulkan #simd #cpp
🔥2
Привет, на Хабре вышла моя статья про C++ в ML. По сути там описаны базовые архитектурные подходы используемые в проекте. Будет ещё одна часть.
https://habr.com/ru/companies/yadro/articles/994326/
https://habr.com/ru/companies/yadro/articles/994326/
Хабр
Используем паттерны C++ в ML: пишем тензор с factory, выделяем память и управляем динамическими типами
Привет, Хабр! Я Кирилл Колодяжный, разработчик систем хранения данных в YADRO, ML-энтузиаст и автор книги "Hands-on Machine Learning with C++". В своих материалах я развеиваю миф о том, что машинное...
🔥5❤3
Привет, рад сообщить что для проекта начали появляться дополнительные внешние инструменты, знакомьтесь:
SBcontrol - HTTP API + веб-дашборд для удалённого управления фреймворком Adept на Windows с GPU-ускорением через Vulkan.
https://gitverse.ru/Sohoroom/SBcontrol
SBcontrol - HTTP API + веб-дашборд для удалённого управления фреймворком Adept на Windows с GPU-ускорением через Vulkan.
https://gitverse.ru/Sohoroom/SBcontrol
gitverse.ru
Sohoroom/SBcontrol: Training & Inference API for Adept NN Framework — HTTP API + web dashboard for remote training management with…
Sohoroom/SBcontrol: Training & Inference API for Adept NN Framework — HTTP API + web dashboard for remote training management with Vulkan GPU acceleration. Up-to-date files and descriptions. Branches and discussions on the developer platform GitVerse.
🔥4
Привет, продолжаю писать документацию проекта в статьях. Вышел второй материал цикла про применение C++ в ML.
https://habr.com/ru/companies/yadro/articles/997006/
https://habr.com/ru/companies/yadro/articles/997006/
Хабр
Динамический полиморфизм для свободных функций: еще одна практика из С++ для машинного обучения
Привет, Хабр! Я Кирилл Колодяжный, разработчик систем хранения данных в YADRO и ML-энтузиаст. Продолжаю рассказывать о паттернах С++, которые легко адаптировать под задачи машинного обучения. В этой...
🔥5👍1
Добрый день, представляю последнюю статью из мини-серии про С++ в ML. Где я рассказываю про то как можно реализовать вычислительный граф и как его использовать с методом обратного распространения ошибки.
По большому счёту это то как сейчас данная функциональность реализована в Adept. Но мы работаем над более универсальной архитектурой графа которая позволит выполнять оптимизации и преобразования для тензорных компиляторов.
https://habr.com/ru/companies/yadro/articles/1002784/
По большому счёту это то как сейчас данная функциональность реализована в Adept. Но мы работаем над более универсальной архитектурой графа которая позволит выполнять оптимизации и преобразования для тензорных компиляторов.
https://habr.com/ru/companies/yadro/articles/1002784/
Хабр
Автодифференцирование на C++: обратное распространение через лямбды и std::function
Привет, Хабр! Меня зовут Кирилл Колодяжный, я разрабатываю системы хранения данных в YADRO . Это третья, заключительная часть моего цикла о паттернах C++, которые я применяю для решения задач...
🔥2