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
🚀 Небольшие оптимизации в adept: Linear layer и sum()
Привет! Наконец-то после 3х недель написания документации в виде статей удалось вернуться к разработке. Сделал ряд улучшений в библиотеке, которые немного улучшили производительность операций обратного распространения градиента.
1. Обобщённая операция sum(dim)
Раньше операция суммирования работала только для всего тензора или только по первой оси (sum_dim0). И по оси была наивная реализация которая в цикле суммировала все значения по 0му измерению, что приводило к существенным задержкам при большом пакете. Теперь:
- sum(dim) — суммирование по любой оси
- Поддержка отрицательных индексов
- Оптимизированные шейдеры для на основе subgroups
- Работает с тензорами до 4D включительно
2. Небольшая оптимизация Linear layer backward
В обратном проходе линейного слоя убрал одно матричное транспонирование. Что сокращает количество операций с памятью и немного ускоряет расчёт градиентов.
3. Тестирование через naive implementation
Добавлена эталонная реализация линейного слоя для валидации точности вычислений в тестах. Это гарантирует, что оптимизации не влияют на корректность вычислений.
Что дальше?
Есть задел для дальнейшего ускорения (~10%) — реализация поддержки смещений(strides) в тензоре. Это позволит избежать реальных транспонирований матриц в некоторых случаях, работая с данными “на лету”. Дальнейшие оптимизации matmul должны уже наверное использовать специальные матричные расширения, например Tensor Cores в NVIDIA.
Реализация смещений в тензоре для работы с памятью также позволит реализовать функциональность срезов(slices). Что откроет возможность для импортирования уже реальных моделей, например YOLO.
#adept #deeplearning #performance #vulkan #cpp
Привет! Наконец-то после 3х недель написания документации в виде статей удалось вернуться к разработке. Сделал ряд улучшений в библиотеке, которые немного улучшили производительность операций обратного распространения градиента.
1. Обобщённая операция sum(dim)
Раньше операция суммирования работала только для всего тензора или только по первой оси (sum_dim0). И по оси была наивная реализация которая в цикле суммировала все значения по 0му измерению, что приводило к существенным задержкам при большом пакете. Теперь:
- sum(dim) — суммирование по любой оси
- Поддержка отрицательных индексов
- Оптимизированные шейдеры для на основе subgroups
- Работает с тензорами до 4D включительно
2. Небольшая оптимизация Linear layer backward
В обратном проходе линейного слоя убрал одно матричное транспонирование. Что сокращает количество операций с памятью и немного ускоряет расчёт градиентов.
3. Тестирование через naive implementation
Добавлена эталонная реализация линейного слоя для валидации точности вычислений в тестах. Это гарантирует, что оптимизации не влияют на корректность вычислений.
Что дальше?
Есть задел для дальнейшего ускорения (~10%) — реализация поддержки смещений(strides) в тензоре. Это позволит избежать реальных транспонирований матриц в некоторых случаях, работая с данными “на лету”. Дальнейшие оптимизации matmul должны уже наверное использовать специальные матричные расширения, например Tensor Cores в NVIDIA.
Реализация смещений в тензоре для работы с памятью также позволит реализовать функциональность срезов(slices). Что откроет возможность для импортирования уже реальных моделей, например YOLO.
#adept #deeplearning #performance #vulkan #cpp
👍2
Здравствуйте, на фоне ухудшения работы telegram завёл канал в МАХ где буду дублировать посты. Там же сделал соответствующий чат. Возможно кому-то такой альтернативный канал коммуникации будет удобен.
Пока работаю над добавлением смещений(strides) к механике адресации памяти тензора чтобы реализовать срезы(slices). Для этой задачи решил попробовать использовать coding агента. Пока впечатления неоднозначные, на следующей неделе расскажу подробнее.
Пока работаю над добавлением смещений(strides) к механике адресации памяти тензора чтобы реализовать срезы(slices). Для этой задачи решил попробовать использовать coding агента. Пока впечатления неоднозначные, на следующей неделе расскажу подробнее.
🤡4👌3
Привет! Как и обещал, делюсь опытом использования coding-агента в этом проекте. Признаюсь, в последнее я был очень скептичен к генерации кода для C++, но практика показала: времена изменились, и LLM вполне неплохо с этим справляются.
✅ Что получилось неожиданно хорошо:
• Исследование кода. Удобно получать описание логики — работает надежно.
• CPU-оптимизации. После совместной проработки спецификации в чате агент реализовал zero-copy для матричного умножения траспонированных матриц. Думаю, успех в том, что он знаком с интерфейсом OpenBLAS и трюками перестановки аргументов в памяти.
• Собственно ленивое транспонирование с перестановкой смещений агент тоже упешно сделал.
• GPU и GEMM. Удалось полноценно отрефакторить matmul: т.е.реализовать стандартный интерфейс GEMM: добавить leading dimensions и коэффициенты.
• Работа со смещениями (strides). Агент реализовал contiguous(), ravel, unravel. Более того, сам написал compute shader для копирования элементов тензора в последовательном порядке с учётом смещений (часть правда уже была сделана вручную).
• Тесты. Очень удивило, но он добавляет тесты для Catch2, несмотря на всю шаблонную магию в макросах и параметризированные тесты.
❌ Где агент забуксовал:
• Глобальные задачи. На сложном (например, zero-copy сразу для CPU + GPU) часто уходит в цикл: долго пробует, откатывается, опять пробует и в конце говорит, что не вышло.
• Im2Col алгоритм. Не получилось решить задачу по рефакторингу под новый GEMM API. Долго объяснял, делал спецификацию, давал рабочий пример на CPU — всё равно не вышло. В итоге вручную поправил несколько строчек сам.
• Шаблоны генерации. Шейдеры в проете реализованы как шаблоны для генератора под работы с разными типами. Агент сходу не понял «магию» подстановки, пока я явно не добавил в спецификацию проекта, что значат паттерны подстановки для типов.
💡 Как заставить это работать ( мои инсайты):
Просто сказать «сделай вот это» пока не работает. Нужен процесс:
- Спецификация — живой документ. Особенно важно описывать нестандартные моменты проекта. Регулярно добавляйте туда секции, на которых агент спотыкается.
- Режим чата. Используйте его для исследования и уточнения задачи перед генерацией. Постановка должна быть такой подробной, как будто вы объясняете коллеге.
- Обязательное ревью. Всегда проверяйте сгенерированный код и просите агента поправить замечания. Есть вопросы к эффективности и корректности кода, поэтому контроль нужен.
🎯 Вердикт
Умение пользоваться агентами для кодогенерации становится необходимым навыком. Это существенно ускоряет разработку, если понимать, как управлять инструментом.
По крайней мере, с бесплатным QwenCoder вы получаете дополнительного разработчика среднего уровня. Главное — грамотно ставить задачу и вести документацию.
#СPP #AI #QwenCoder #Development #Experience
✅ Что получилось неожиданно хорошо:
• Исследование кода. Удобно получать описание логики — работает надежно.
• CPU-оптимизации. После совместной проработки спецификации в чате агент реализовал zero-copy для матричного умножения траспонированных матриц. Думаю, успех в том, что он знаком с интерфейсом OpenBLAS и трюками перестановки аргументов в памяти.
• Собственно ленивое транспонирование с перестановкой смещений агент тоже упешно сделал.
• GPU и GEMM. Удалось полноценно отрефакторить matmul: т.е.реализовать стандартный интерфейс GEMM: добавить leading dimensions и коэффициенты.
• Работа со смещениями (strides). Агент реализовал contiguous(), ravel, unravel. Более того, сам написал compute shader для копирования элементов тензора в последовательном порядке с учётом смещений (часть правда уже была сделана вручную).
• Тесты. Очень удивило, но он добавляет тесты для Catch2, несмотря на всю шаблонную магию в макросах и параметризированные тесты.
❌ Где агент забуксовал:
• Глобальные задачи. На сложном (например, zero-copy сразу для CPU + GPU) часто уходит в цикл: долго пробует, откатывается, опять пробует и в конце говорит, что не вышло.
• Im2Col алгоритм. Не получилось решить задачу по рефакторингу под новый GEMM API. Долго объяснял, делал спецификацию, давал рабочий пример на CPU — всё равно не вышло. В итоге вручную поправил несколько строчек сам.
• Шаблоны генерации. Шейдеры в проете реализованы как шаблоны для генератора под работы с разными типами. Агент сходу не понял «магию» подстановки, пока я явно не добавил в спецификацию проекта, что значат паттерны подстановки для типов.
💡 Как заставить это работать ( мои инсайты):
Просто сказать «сделай вот это» пока не работает. Нужен процесс:
- Спецификация — живой документ. Особенно важно описывать нестандартные моменты проекта. Регулярно добавляйте туда секции, на которых агент спотыкается.
- Режим чата. Используйте его для исследования и уточнения задачи перед генерацией. Постановка должна быть такой подробной, как будто вы объясняете коллеге.
- Обязательное ревью. Всегда проверяйте сгенерированный код и просите агента поправить замечания. Есть вопросы к эффективности и корректности кода, поэтому контроль нужен.
🎯 Вердикт
Умение пользоваться агентами для кодогенерации становится необходимым навыком. Это существенно ускоряет разработку, если понимать, как управлять инструментом.
По крайней мере, с бесплатным QwenCoder вы получаете дополнительного разработчика среднего уровня. Главное — грамотно ставить задачу и вести документацию.
#СPP #AI #QwenCoder #Development #Experience
🔥5🤝1
Channel name was changed to «Adept | Машинное обучение | Открытое ПО»
Привет, я делал доклад на тему «Эмуляция запуска GPU-ядер на CPU или нестандартные приёмы отладки». Выкладываю презентацию, в которой рассказываю про реализацию симулятора, воспроизводящего модель выполнения GPU (Grid → Block → Thread) с полной интеграцией в GDB.
В отличие от CUDA, где есть много иструментов для отладки и анализа, экосистема Vulkan и OpenCL практически лишена инструментов пошаговой отладки общего назначения. Презентация показывает трюки, позволяющие разрабатывать и отлаживать ядра без физического ускорителя.
Ключевые архитектурные решения:
• Lockstep-исполнение на корутинах (C++23): Каждый поток реализуется через std::generator. Вызов co_yield эмулирует аппаратный барьер, а внешний диспетчер синхронно продвигает все генераторы, обеспечивая детерминированное блокирующее выполнение, идентичное __syncthreads().
• Иерархия контекста и памяти: Контекст инкапсулирует координаты потоков и размеры сетки/блока. Выделяются именованные области разделяемой памяти с семантикой, повторяющей shared, для кооперативной работы потоков внутри блока.
• Трекер доступа к памяти: Прокси-обёртка над буферами логирует каждое чтение/запись с привязкой к координатам потока. Постобработка группирует доступы, проверяет последовательность адресов для соседних потоков и рассчитывает метрику эффективности группировки и распределение шагов (strides).
• GDB Python-инфраструктура: Кастомные pretty-printers и специализированные команды позволяют инспектировать состояния блоков, разделяемую память и визуализировать линейные буферы как 2D-матрицы прямо в сеансе отладки.
Презентация
Код проекта
#VulkanCompute #Cpp #Coroutines #GDB #GPUDebugging #SIMT
В отличие от CUDA, где есть много иструментов для отладки и анализа, экосистема Vulkan и OpenCL практически лишена инструментов пошаговой отладки общего назначения. Презентация показывает трюки, позволяющие разрабатывать и отлаживать ядра без физического ускорителя.
Ключевые архитектурные решения:
• Lockstep-исполнение на корутинах (C++23): Каждый поток реализуется через std::generator. Вызов co_yield эмулирует аппаратный барьер, а внешний диспетчер синхронно продвигает все генераторы, обеспечивая детерминированное блокирующее выполнение, идентичное __syncthreads().
• Иерархия контекста и памяти: Контекст инкапсулирует координаты потоков и размеры сетки/блока. Выделяются именованные области разделяемой памяти с семантикой, повторяющей shared, для кооперативной работы потоков внутри блока.
• Трекер доступа к памяти: Прокси-обёртка над буферами логирует каждое чтение/запись с привязкой к координатам потока. Постобработка группирует доступы, проверяет последовательность адресов для соседних потоков и рассчитывает метрику эффективности группировки и распределение шагов (strides).
• GDB Python-инфраструктура: Кастомные pretty-printers и специализированные команды позволяют инспектировать состояния блоков, разделяемую память и визуализировать линейные буферы как 2D-матрицы прямо в сеансе отладки.
Презентация
Код проекта
#VulkanCompute #Cpp #Coroutines #GDB #GPUDebugging #SIMT
🔥4
Привет! Небольшая сводка изменений за последние 3 недели. Вышло 3 фичи, которые делают работу с библиотекой удобнее. Вот что теперь может сделать Python-разработчик:
🖥 Детекция GPU через Vulkan
Теперь можно программно узнать, какой GPU доступен на машине:
Зачем:
• Запускать инференс на GPU с автоматическим fallback на CPU
• Логировать модель видеокарты для телеметрии и дебага
• Строить device selection UI, как в других ML-фреймворках
🔍 Фильтрация параметров модели по имени
Два новых метода в классе Module:
Зачем:
• Selective fine-tuning — заморозить одни слои, разморозить другие
• Группы параметров в оптимизаторе — разный learning rate для весов и смещений
• Weight decay только для weight-тензоров — исключить bias и batch-norm running stats
• Быстрая инспекция модели — не нужно руками обходить все child-модули
⚡ Оптимизация autograd
Теперь при выключенном авто-дифференцировании (no_grad) не создаются лишние объекты для хранения градиентов. Это затронуло все основные слои: Linear, Conv2d, BatchNorm2d, MaxPool2d, AvgPool2d, активации и loss-функции.
Зачем:
• Меньше расход памяти — no-grad mode больше не аллоцирует ненужные autograd-ноды
• Быстрее инференс — нет накладных расходов на создание и удаление временных объектов
• Predictable performance — поведение no_grad ближе к «bare metal», как и ожидается
#gpu #autograd #changelog #python #inference #optimization
🖥 Детекция GPU через Vulkan
Теперь можно программно узнать, какой GPU доступен на машине:
import adept
if adept.vulkan.is_available():
print(f"GPU: {adept.vulkan.get_device_name(0)}")
model = model.gpu()
Зачем:
• Запускать инференс на GPU с автоматическим fallback на CPU
• Логировать модель видеокарты для телеметрии и дебага
• Строить device selection UI, как в других ML-фреймворках
🔍 Фильтрация параметров модели по имени
Два новых метода в классе Module:
# подстрока
for name, p in model.named_parameters("weight"):
...
# Регулярное выражение
for name, p in model.named_parameters_regex(".*layer[23].*bias"):
...
Зачем:
• Selective fine-tuning — заморозить одни слои, разморозить другие
• Группы параметров в оптимизаторе — разный learning rate для весов и смещений
• Weight decay только для weight-тензоров — исключить bias и batch-norm running stats
• Быстрая инспекция модели — не нужно руками обходить все child-модули
⚡ Оптимизация autograd
Теперь при выключенном авто-дифференцировании (no_grad) не создаются лишние объекты для хранения градиентов. Это затронуло все основные слои: Linear, Conv2d, BatchNorm2d, MaxPool2d, AvgPool2d, активации и loss-функции.
Зачем:
• Меньше расход памяти — no-grad mode больше не аллоцирует ненужные autograd-ноды
• Быстрее инференс — нет накладных расходов на создание и удаление временных объектов
• Predictable performance — поведение no_grad ближе к «bare metal», как и ожидается
#gpu #autograd #changelog #python #inference #optimization
🔥5👍1
Привет!
Я открыл PR который добавляет реализацию срезов и изменяет API индексации тензоров. Он вносит существенные изменения в движок обработки тензоров и затрагивает больше 150 файлов. Я начинал реализацию вручную потом использовал coding агентов.
Буду благодарен сообществу за помощь с code review, комментарии и предложения. Также есть возможность посмотреть какой С++ код сегодня генерирую агенты с использованием моделей Qwen Coder 3.5, GLM-5.1, Grok Code fast 1.
Основные изменения:
Изменено внутреннее представление тензоров для поддержки срезов:
- Добавлено смещение(offset) для буфера данных
- Добавлены смещения по размерностям(strides)
API индексации тензоров:
- Тип Slice для гибкого слайсинга с параметрами начала, конца и шага
- Тип Index для целочисленной индексации (сокращение размерности)
- Поддержка Ellipsis и None для продвинутых паттернов индексации
- Синтаксис, совместимый с NumPy и PyTorch: tensor[1:5], tensor[::2], tensor[:, 1]
Операции сбора (gather) для копирования данных с учётом срезов:
- SIMD ядра и шейдеры для Vulkan
- Поддержка отрицательных индексов для обоих бэкендов
GEMM API вместо matmul:
- BLAS совместимый API для CPU и GPU
- Добавлены параметры alpha и beta
Python-привязки:
- Полная поддержка срезов через getitem и setitem
- Автоматическое создание представлений и управление непрерывностью
- Многомерная индексация с правильной обработкой форм
Пример кода:
Я открыл PR который добавляет реализацию срезов и изменяет API индексации тензоров. Он вносит существенные изменения в движок обработки тензоров и затрагивает больше 150 файлов. Я начинал реализацию вручную потом использовал coding агентов.
Буду благодарен сообществу за помощь с code review, комментарии и предложения. Также есть возможность посмотреть какой С++ код сегодня генерирую агенты с использованием моделей Qwen Coder 3.5, GLM-5.1, Grok Code fast 1.
Основные изменения:
Изменено внутреннее представление тензоров для поддержки срезов:
- Добавлено смещение(offset) для буфера данных
- Добавлены смещения по размерностям(strides)
API индексации тензоров:
- Тип Slice для гибкого слайсинга с параметрами начала, конца и шага
- Тип Index для целочисленной индексации (сокращение размерности)
- Поддержка Ellipsis и None для продвинутых паттернов индексации
- Синтаксис, совместимый с NumPy и PyTorch: tensor[1:5], tensor[::2], tensor[:, 1]
Операции сбора (gather) для копирования данных с учётом срезов:
- SIMD ядра и шейдеры для Vulkan
- Поддержка отрицательных индексов для обоих бэкендов
GEMM API вместо matmul:
- BLAS совместимый API для CPU и GPU
- Добавлены параметры alpha и beta
Python-привязки:
- Полная поддержка срезов через getitem и setitem
- Автоматическое создание представлений и управление непрерывностью
- Многомерная индексация с правильной обработкой форм
Пример кода:
import adept as ad
# Создание тензора
t = ad.Tensor([1, 2, 3, 4, 5])
# Базовый срез
sliced = t[1:4]
# Многомерная индексация
matrix = ad.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
row = matrix[1]
col = matrix[:, 1]
🔥1
Привет!
Я на днях делал доклад "Актуальность и области применения языка С++ в современном ML" на конференции "Современные технологии в теории и практике программирования" в Санкт-Петербургском Политехническом Университете. К сожалению записи с мероприятия нет, но я делюсь видео с подготовки доклада. Надеюсь кому-то будет полезно.
https://rutube.ru/video/bc863eb9180b8cf67d118bb4b2ab1cb7/
Я на днях делал доклад "Актуальность и области применения языка С++ в современном ML" на конференции "Современные технологии в теории и практике программирования" в Санкт-Петербургском Политехническом Университете. К сожалению записи с мероприятия нет, но я делюсь видео с подготовки доклада. Надеюсь кому-то будет полезно.
https://rutube.ru/video/bc863eb9180b8cf67d118bb4b2ab1cb7/
RUTUBE
С++ в современном ML
Доклад "Актуальность и области применения языка С++ в современном ML" прочитанный на конференции "Современные технологии в теории и практике программирования" в Санкт-Петербургском Политехническом Университете.
❤6
Привет!
Закончилась ежегодная конференция C++ Russia. В этом году я продолжил знакомить участников с проектом Adept, рассказывал про устройство работы конвейера запуска вычислительных шейдеров.
А ещё мы провели мастер-класс где участники познакомились с основами разработки для GPU и попробовали сами создать расширение для PyTorch.
Закончилась ежегодная конференция C++ Russia. В этом году я продолжил знакомить участников с проектом Adept, рассказывал про устройство работы конвейера запуска вычислительных шейдеров.
А ещё мы провели мастер-класс где участники познакомились с основами разработки для GPU и попробовали сами создать расширение для PyTorch.
🔥13
Появляются новые вычислительные бекэнды на Vulkan.
В рамках секции Open Source на DataFest 2026 будет доклад
"ggmlR:Vulkan GPU-бэкенд для R"
Юрия Барамыкова старшего руководителя проекта Иннотех.
Код проекта:
https://github.com/cran/ggmlR
В рамках секции Open Source на DataFest 2026 будет доклад
"ggmlR:Vulkan GPU-бэкенд для R"
Юрия Барамыкова старшего руководителя проекта Иннотех.
Код проекта:
https://github.com/cran/ggmlR
❤2
Думаю должен быть интересный доклад про EdgeAI на FPGA
🤩1
Forwarded from Научный опенсорс (Nikolay Nikitin)
Вкину анонс весеннего слета FPGA-сообщества от YADRO.
От ИТМО на нем выступит Иван Дейнека: к.т.н, доцент Высшей инженерно-технической школы и автор open-source "Руководства по реализации Edge AI на FPGA" .
Почитать руководство (или даже законтрибьютить в него) можно тут: https://github.com/debreti/nirsii-fpgai
Подробности про мероприятие:
26 мая в 19:00 приглашаем вас присоединиться к онлайн-трансляции. В этот раз поговорим об RTL-разработке и синтезе, документировании RTL и применении ИИ в FPGA/ASIC-разработке. Среди тем выступлений:
🔸 open-source-инструмент Yosys,
🔸 применение и преобразование SystemRDL в читаемую документацию,
🔸 реализация Edge AI на программируемой логике,
🔸 CLI-инструмент для анализа вейвформ с помощью LLM.
Своим опытом поделятся эксперты YADRO, ИТМО и независимые RTL-разработчики. Чтобы получить ссылку на трансляцию и все материалы, зарегистрируйтесь.
Доклад Ивана будет про "Edge AI на ПЛИС: тенденции и руководство по размещению".
Аннотация следующая: "В докладе расскажу о преимуществах реализации концепции Edge AI на программируемой логике. Продемонстрирую практическое руководство по размещению нейросетей на FPGA и разберу реализацию полносвязной сети на языке описания аппаратуры, а также свёрточной сети через высокоуровневый синтез."
От ИТМО на нем выступит Иван Дейнека: к.т.н, доцент Высшей инженерно-технической школы и автор open-source "Руководства по реализации Edge AI на FPGA" .
Почитать руководство (или даже законтрибьютить в него) можно тут: https://github.com/debreti/nirsii-fpgai
Подробности про мероприятие:
26 мая в 19:00 приглашаем вас присоединиться к онлайн-трансляции. В этот раз поговорим об RTL-разработке и синтезе, документировании RTL и применении ИИ в FPGA/ASIC-разработке. Среди тем выступлений:
Своим опытом поделятся эксперты YADRO, ИТМО и независимые RTL-разработчики. Чтобы получить ссылку на трансляцию и все материалы, зарегистрируйтесь.
Доклад Ивана будет про "Edge AI на ПЛИС: тенденции и руководство по размещению".
Аннотация следующая: "В докладе расскажу о преимуществах реализации концепции Edge AI на программируемой логике. Продемонстрирую практическое руководство по размещению нейросетей на FPGA и разберу реализацию полносвязной сети на языке описания аппаратуры, а также свёрточной сети через высокоуровневый синтез."
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥2
Привет! В очередной раз решил сделать Docker образ с Vulkan-бэкендом для сборки проекта. Дело в том что публичные образы (например, localai/localai:latest-gpu-vulkan или j3soon/vulkan-runtime) устарели: в них либо старая версия SDK, либо отсутствует актуальный toolchain (CMake, Python, Node.js), либо нет актуальной поддержки X11/Wayland. Использовать их без существенных доработок не получилось, из-за чего я переключил CI сборку чисто на хост систему. И в последних PR мы получили проблемы с использованием различных сред разработки.
Решение: собственный многостадийный Dockerfile.
- Base toolchain — устанавливается всё для компиляции и линтинга (clang, ccache, doxygen, Python 3.11, Node.js 20 LTS). Без Vulkan.
- Vulkan SDK — загружается и настраивается конкретная версия SDK (1.4.341.0) с runtime-зависимостями.
- Финальный образ, куда копируются только нужные артефакты от предыдущих стадий. Это сокращает размер образа и исключает «мусор» из промежуточных слоёв.
Как используем:
В VS Code DevContainer — в devcontainer.json пробрасываются GPU (--gpus all, /dev/dri), X11 и сеть хоста. Разработчик работает в изолированной среде, идентичной CI.
В CI (self-hosted) — в YAML-описании указывается предварительно собранный образ (экономим время на установке зависимостей при каждом запуске) и те же флаги рантайма: --gpus all, --device=/dev/dri, --network=host. Это гарантирует, что Vulkan-тесты реально выполнятся на GPU.
Результат: воспроизводимые сборки, отсутствие «у меня работает» на машине разработчика, а CI ловит проблемы со средой сборки на начальных этапах.
Рекомендую использовать контейнеризацию для разработки всегда когда это возможно, хотя с GPU это бывает непросто.
#Docker #Vulkan #CI #DevOps #Cpp #DevContainer
Решение: собственный многостадийный Dockerfile.
- Base toolchain — устанавливается всё для компиляции и линтинга (clang, ccache, doxygen, Python 3.11, Node.js 20 LTS). Без Vulkan.
- Vulkan SDK — загружается и настраивается конкретная версия SDK (1.4.341.0) с runtime-зависимостями.
- Финальный образ, куда копируются только нужные артефакты от предыдущих стадий. Это сокращает размер образа и исключает «мусор» из промежуточных слоёв.
Как используем:
В VS Code DevContainer — в devcontainer.json пробрасываются GPU (--gpus all, /dev/dri), X11 и сеть хоста. Разработчик работает в изолированной среде, идентичной CI.
В CI (self-hosted) — в YAML-описании указывается предварительно собранный образ (экономим время на установке зависимостей при каждом запуске) и те же флаги рантайма: --gpus all, --device=/dev/dri, --network=host. Это гарантирует, что Vulkan-тесты реально выполнятся на GPU.
Результат: воспроизводимые сборки, отсутствие «у меня работает» на машине разработчика, а CI ловит проблемы со средой сборки на начальных этапах.
Рекомендую использовать контейнеризацию для разработки всегда когда это возможно, хотя с GPU это бывает непросто.
#Docker #Vulkan #CI #DevOps #Cpp #DevContainer
❤4
Привет!
Извините что не по теме канала, но думаю кому-то может быть интересно.
Большинство демок ИИ-агентов — это либо обёртки над готовыми фреймворками (LangChain, CrewAI), либо простые демки с одним тулом. Я решил пойти другим путём: написать агента с нуля, на голом OpenAI API, без использования «агентных фреймворков».
Что получилось: агент, который сочиняет стихи на русском языке. Но суть не в стихах, а в архитектуре.
Проект состоит из модулей:
— цикл агента (до 1000 итераций «мысль → вызов тула → ответ») с потоковым взаимовоздействием
— регистратор инструментов с использованием OpenAI-совместимых JSON-схем
— менеджер контекста (контроль количества токенов и трёхстадийная компрессия)
— системный промпт с полным описанием алгоритма
Инструменты, которые агент использует:
- веб-поиск (с фильтрацией доменов)
- векторная память (ChromaDB + bge-m3, дедупликация по хешу)
- чтение/запись/поиск-замена в файлах (песочница в рабочей директории)
- расстановка ударений в русском тексте — для проверки стихотворного размера
- управление собственной «креативностью» меняя температуру при выводе
Что мне кажется самым важным — алгоритм действий агента описан прямо в системном промпте, это как привила и умения. То что он реализован не в коде, позволяет легко изменить агента для других задач. Агент читает много-фазную инструкцию и выполняет её, переключая креативность в зависимости от этапа: 0.4 для поиска → 1.0 для синтеза → 1.2 для генерации строк → 0.3 для валидации метра стихов.
При этом:
- каждая строфа проходит несколько попыток создания
- пользователь утверждает план на каждую строфу и полный вариант
- если агент «застрял» — он просит совета у пользователя
Используйте что бы разобраться как работают те же KiloCode, Claude Code на базовом уровне, или как основу для своих специализированных агентов.
Код: https://gitflic.ru/project/kolkir/lmagent
#agent #llm #AI #opensource #python
Извините что не по теме канала, но думаю кому-то может быть интересно.
Большинство демок ИИ-агентов — это либо обёртки над готовыми фреймворками (LangChain, CrewAI), либо простые демки с одним тулом. Я решил пойти другим путём: написать агента с нуля, на голом OpenAI API, без использования «агентных фреймворков».
Что получилось: агент, который сочиняет стихи на русском языке. Но суть не в стихах, а в архитектуре.
Проект состоит из модулей:
— цикл агента (до 1000 итераций «мысль → вызов тула → ответ») с потоковым взаимовоздействием
— регистратор инструментов с использованием OpenAI-совместимых JSON-схем
— менеджер контекста (контроль количества токенов и трёхстадийная компрессия)
— системный промпт с полным описанием алгоритма
Инструменты, которые агент использует:
- веб-поиск (с фильтрацией доменов)
- векторная память (ChromaDB + bge-m3, дедупликация по хешу)
- чтение/запись/поиск-замена в файлах (песочница в рабочей директории)
- расстановка ударений в русском тексте — для проверки стихотворного размера
- управление собственной «креативностью» меняя температуру при выводе
Что мне кажется самым важным — алгоритм действий агента описан прямо в системном промпте, это как привила и умения. То что он реализован не в коде, позволяет легко изменить агента для других задач. Агент читает много-фазную инструкцию и выполняет её, переключая креативность в зависимости от этапа: 0.4 для поиска → 1.0 для синтеза → 1.2 для генерации строк → 0.3 для валидации метра стихов.
При этом:
- каждая строфа проходит несколько попыток создания
- пользователь утверждает план на каждую строфу и полный вариант
- если агент «застрял» — он просит совета у пользователя
Используйте что бы разобраться как работают те же KiloCode, Claude Code на базовом уровне, или как основу для своих специализированных агентов.
Код: https://gitflic.ru/project/kolkir/lmagent
#agent #llm #AI #opensource #python
🔥5👌1