TGViewer
Channel Public Channel
Adept | Машинное обучение | Открытое ПО

Adept | Машинное обучение | Открытое ПО

@adept_platform

Меня зовут Кирилл Колодяжный этом канале я буду рассказывать про разработку открытой платформы машинного обучения Adept.
https://adept-platform.gitverse.site/adept-docs/
Subscribers
136
Photos
15
Videos
0
Links
34
Recent Posts 16 shown
Post #71 48
Доделал скрипты для сборки библиотеки под Android, исправил ошибки и немного в очередной раз оптимизировал свёртку. Всё уже на мастер ветке.

Выложил проект с демкой для Android, там в релизах можно скачать apk и попробовать. В приложении веса самой маленькой модели YOLOv11 получившиеся тренировкой на урезанном для балансировке датасете MS COCO. Тренировка длилась 200 эпох на 4х GPU(3 AMD + 1 Nivida), конечно же с реализацией на Adept.

В результате получилось ~7 FPS на CPU и ~5 FPS на GPU. Что вполне сравнимо с NCNN и мобильным libtorch для YOLOv5, особенно учитывая существенно более тяжелую архитектуру в 11 версии с блоком внимания и работу в FP32.
  • 👍 3
Post #70 79
Это скриншот с моего телефона.
Начал делать скрипты для крос-компиляции проекта с использованием Android SDK/NDK и заниматься интеграцией библиотеки в мобильное приложение.
  • 🔥 3
  • 🤩 1
Post #68 157
Привет!

С радостью сообщаю что наконец-то вышел Релиз 0.2.0

Основные изменения:
- Тензорный движок переработан с использованием смещений и представлений(strides and views).
- Добавлена индексация в стиле PyTorch.
- Типизированные скалярные аргументы.
- Упрощен API редукции.
- Переработан формат записи checkpoints.
- Переработана система сборки.
- Использование Python 3.12.
- Переработано управление памятью в Vulkan.
- MVP для импорта моделей ONNX.
- Распределенное обучение.
- Централизованное логирование.
- И много новых операций.
Больше деталей в описании релиза.

Установить новую версию для Linux x86_64 можно так:
pip install https://storage.yandexcloud.net/adept-releases/adept-0.2.0-cp312-cp312-manylinux_2_34_x86_64.whl


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

Новый адрес проекта:
https://gitverse.ru/adept-platform/adept

В связи с этим тем кто работает с кодом надо изменить remote origin для рабочей копии в git:
git remote set-url origin git@gitverse.ru:adept-platform/adept.git


#Release #Updates #NewFeatures
  • ❤ 2
  • 🫡 1
Post #67 124
Привет!
Я закончил реализацию и проверку всей функциональности которую планировал для публикации следующего релиза Adept! 🎉

Помимо основных задач, провел важное кросс-платформенное тестирование:
✅ Успешно протестировал распределённое обучение (DDP) на связке из двух RTX 2080Ti.
✅ Проверил сборку и работу на Android с GPU Adreno 650 и Snapdragon 870.
💡 Также в планах на новый релиз: помимо стандартных Python wheel, мы подготовим RPM-пакет для Alt Linux.

📝 Что нового с 6 сентября:

🎮 GPU / Vulkan Backend
• Перешли на сегментированный аллокатор памяти для GPU устройств (`vksegalloc`) вместо выделения буферов на каждый тензор. Добавили отдельные абстракции staging-буферов.
• Интегрировали это в Vulkan device/manager, GPU API и Python-биндинги.
• Реализовали graceful fallback для устройств без поддержки опциональных расширений (на уровнях device, shader и submit).

🎯 YOLO v11 и распределённое обучение
• Добавили опцию выбора Device-ID в Python CLI и C++ примере для инференса YOLO.
• Реализовали поддержку распределённого обучения (DDP) для YOLO v11, включая корректировки функций потерь под распределённые вычисления.

📦 Сборка и пакетирование
• OpenMPI runtime теперь бандлится в wheel, добавлен лаунчер adeptrun.
• Настроили пайплайн сборки manylinux wheel.
• ⚠️ Важно: Минимальная требуемая версия Python повышена с 3.11 до 3.12.
• Починили зависимости MPI и добавили возможность сборки под Android с помощью clang.

🧹 Очистка и адаптация API
• Удалили легаси и неструктурированные примеры.
• Адаптировали актуальные примеры (LeNet, MLP, ResNet, импорт ONNX) под свежее API.

В ближайшее время всё залью в основную ветку, сделаю тег 0.2.0 и опубликую Python пакет для x86_64 в GitVerse 🛠

#Adept #MachineLearning #Vulkan #YOLOv11 #DistributedTraining #AltLinux #Android #OpenSource #C++ #Python #GPU
  • ❤ 3
  • 👍 2
Post #62 123
Изменил подход к управлению памятью, что снизило потребление в 2 раза. А это в свою очередь позволило тренировать на большем разрешении и увеличить размер пакета. На изображениях результат 24 часов тренировки. Утечек памяти не было.
Post #61 124
Привет!
Последнюю неделю я продолжаю занимался реализацией обучениея модели YOLOv11. Основная проблема - обучение упорно не сходилось, после нескольких эпох лосс начинал катастрофически разваливаться.
Потратил немало времени на поиски причины, пока не вскрылись две большие проблемы: критический баг в ядре фреймворка и классическая боль с датасетом.

🚨 Главный фикс: баг с накоплением градиентов
Это и было основной причиной расхождения. Оказалось, что backward passes для conv2d, conv_transpose2d и batchnorm2d писали напрямую в input.grad(). В результате градиенты просто перезаписывались, вместо того чтобы суммироваться с разных путей(ребер вычислительного графа) для одного входного тензора.
Решение: Заменил прямую запись на add_grad. Теперь вклад от всех операций корректно суммируется. Обучение наконец-то поехало!

📊 Борьба с несбалансированным MS COCO и YOLOv11 туллинг
Вторая головная боль — сам датасет MS COCO. В нём сильный перекос в сторону класса 0 (person). Чтобы нивелировать этот дисбаланс и упростить жизнь при обучении, я добавил в туллинг YOLOv11:
• Class-weighted loss: взвешивание по классам для классификационного BCE.
• Balanced subset builder: утилита для создания сбалансированных сабсетов COCO.
• CSV logging: логирование лосса по батчам с поддержкой resume/append.
• Loss-curve viewer: интерактивный вьювер для отрисовки этих CSV-логов - это позволило лучше наблюдать за динамикой обучения.

🛠 Другие важные фиксы в ядре Adept:
Vulkan push-constant packing. Буфер shader-constants паковался без std430 alignment padding. Из-за этого 64-битные скаляры могли попадать на невалидные оффсеты. Выровнял по спецификации.
Misc: В Python-биндингах тензоров теперь корректно экспортируются bool значения в protocols buffer интерфейсе.

🔮 Что дальше: оптимизация памяти
Следующая большая задача — потребление памяти. Сейчас Adept расходует почти в 4 раза больше памяти GPU по сравнению с зеркальной реализацией на PyTorch. Причина кроется в неоптимальной политике memory pool. При обучении YOLO генерируется огромное количество тензоров переменной длины — из-за разного количества anchors на каждом изображении. Простой пул аллокаторов приходится сильно раздувать, чтобы сократить число аллокаций, и это убивает эффективность по памяти. Нужно переработывать стратегию пула — это в планах на ближайшее время.

💡 Вывод
Решение реальной комплексной задачи вроде обучения YOLOv11 вскрыло массу проблем, которые просто невозможно было обнаружить на отдельных юнит-тестах и простых моделях. Баг с перезаписью градиентов, проблемы с non-contiguous тензорами, перерасход памяти — всё это всплыло только когда пайплайн был собран целиком и поставлен под нагрузку. Хорошее напоминание о том, что integration testing и реальные нагрузки - незаменимы.

#Adept #YOLOv11 #DeepLearning #ComputerVision #MachineLearning #Vulkan #C++ #Python #MLOps #ModelTraining
Post #60 88
Тренировка перестала расходится после первых эпох и есть заметная тенденция к сходимости.
  • ❤ 1
Post #59 127
Привет!
После первых запусков конвейера тренировки YOLO11 я сосредоточился на устранении узких мест в производительности, стабилизации процесса обучения и реализации модели и инференса на С++ API.

⚡️ Производительность: два существенных улучшения

1. Прямые групповые свертки (Vulkan)
Ранее групповые свертки — основа depthwise-separable блоков backbone'а YOLO — выполнялись на GPU циклом по парам (batch, group). Для каждой пары отдельно диспатчились im2col и GEMM. На малых тензорах оверхед от запусков ядер доминировал в общем времени вычислений.
Я реализовал single-dispatch прямую свертку для groups > 1. Добавлены три новых compute shader'а (forward, input-grad, weight-grad), которые аккумулируют свертку напрямую, без использования im2col. Это существенно сократило количество запусков ядер и ускорило работу backbone'а.

2. Оптимизация функции потерь
Здесь было два критических узких места:
• Distributed-focus loss: ранее считался через dot, который диспатчил batched GEMM и выполнял итерации по хосту для каждого среза (batch, anchor, 4). Заменил на broadcast-multiply и редукцию по оси дистрибуции - получилось ускорение в несколько раз. В Adpet пока есть проблемы с эффективным пакетным GEMM.
• Синхронизации с хостом: тензоры anchor points, stride и input-size теперь кэшируются между шагами. Гистограмму label-assignment переписал с unique() + scatter_add_ (требовала синхронизации) на прямой per-batch scatter_add_. Сумму target-score теперь считает GPU max вместо чтения .cpu().item(). Вычисление loss теперь ставится в очередь асинхронно и не блокирует пайплайн.

🔧 Vulkan backend и фреймворк
• Выделил отдельный fence pool для host-read copies, чтобы трансфер данных не блокировал основной поток сабмишена.
• Устранил edge-cases в strided reductions для случаев, когда размер не кратен размеру рабочей группы.
• Добавил поддержку broadcasting для операторов eq/ne.
• Убрал проверки границ индексов в scatter из fast path, снизив поэлементный оверхед.
• Добавил Sequential и ModuleList для компоновки C++ моделей.
• Сделал wheel-пакет relocatable (через $ORIGIN), чтобы он корректно работал из любой директории установки.

🧠 Обучение и инференс
• Чекпоинты: полностью переписал сериализацию — теперь это словарь именованных тензоров. Можно сохранить и восстановить полное состояние (модель, оптимизатор, эпоху, шаг) и возобновить обучение.
• C++ инференс: реализован standalone инструмент (apps/cpp/yolo11) с JPEG decode/encode через libjpeg, letterbox, NMS и визуализацией результатов. В Python-инференсе также скорректировал масштабирование bounding box'ов обратно к исходным координатам изображения.

🎯 Планы
Валидировать end-to-end скорость обучения на GPU, протестировать поток восстановления из чекпоинтов. Тестирование распределенного обучения пока отложил, надо довести до ума реализацию в целом.

#YOLO11 #Adept #DeepLearning #ComputerVision #Vulkan #CPlusPlus #Performance
  • 👍 2
  • 🔥 1
Post #58 146
Результат 12ти часов тренировки на локальном ноутбуке с RTX 4070 8GB на датасете MS COCO с 80 классами.

Кажется что тренировка может сойтись к чему-то полезному, пусть продолжается.

Я пока исследую облачные сервисы с более мощным оборудованием чтобы быстрее тренировать и проверить распределённое обучение на нескольких GPU.
  • ❤ 1
Post #57 139
Привет!

Я уже несколько недель работаю над тем, чтобы фреймворк Adept мог обучать YOLOv11 полностью на GPU и без NumPy. Я наконец-то довёл Adept до состояния, в котором он может полностью тренировать YOLOv11 на GPU без NumPy. Делюсь тем, что пришлось починить и дописать.

🛠 Ядро и Автоград
• In-place broadcast: a -= b больше не падает, левый операнд корректно ресайзится.
• Редукция градиентов: при broadcast для + - * / градиенты теперь сворачиваются к форме операндов.
• Matmul backward: поддержка 1D тензоров (вектор-матрица и т.д.).
• Vulkan Convs: переписал накопление bias-градиента (считается один раз, без лишних аллокаций).

🧩 API для YOLO-loss (прощай, CPU)
Чтобы IoU и assigner работали на GPU, реализовал:
• Индексация: gather, scatter/add, masked_select/fill, where, topk, unique.
• Форма: expand, permute, flatten, cat, stack, reshape.
• Математика: clamp, pow, arctan, min/max, argmax.
• Скаляры: перегрузки операторов типа 2 * tensor
• Создание: arange, detach.

📉 Loss, Оптимизатор и Модули
• Добавлены BCE (для DFL) и CE без усреднения (per-position loss).
• Фикс Python-операторов: a + b теперь возвращает новый тензор, а не мутирует a (сохраняет граф!).
• SGD с momentum и weight decay.
• BatchNorm: инициализация дисперсии = 1 (убрал деление на ноль).
• Чекпоинты: префиксы имён корректно пробрасываются во вложенные модули.

⚙️ Пайплайн тренировки
• Loss, IoU и assigner переведены на нативный clamp`/`min`/`max. Сетки координат - через adept.arange.
• Warmup + Cosine LR, логирование box/cls/dfl loss.
• Упаковка нескольких GT через scatter_add (меньше синков).
• Инференс: новый CLI (`--image`, --weights и т.д.). Починил letterbox — confidence вернулась с 0.08 до 0.61.

📊 Результаты и Перф
Тренировал на синтетике (геометрические фигуры). Eval total loss стабильно упал с 13.2 (эпоха 1) до 6.5 (эпоха 24). Градиенты сходятся, детектор учится.
⚡ Оптимизировал Vulkan memory pool: выравнивание 4096, кэш 10000 буферов - заметно меньше аллокаций в train-loop.

🎯 Планы
Стек от ядра до высокоуровневого API готов. Следующий шаг - полноценное обучение на MS COCO, сбор метрик AP и дальнейший тюнинг скорости. Теперь есть инструмент для настоящих экспериментов!

#Adept #YOLO #DeepLearning #Vulkan #MachineLearning #MSCOCO
  • 👍 5
Post #56 172
Привет!
Последние две недели занимаюсь расширением тензорного API и развитием функциональности, необходимой для обучения YOLOv11.

Часть времени на прошлой неделе ушла на подготовку к конференции, поэтому темп оказался ниже, чем планировал. Но, несмотря на это, работа над задачами для YOLOv11 продолжается.

Что сделано:

🔹 Тензорные операции
Добавил arange для генерации последовательностей, утилиты создания тензоров и element-wise min/max. Реализовал clamp с forward/backward и Python-биндингами. Для sum() и mean() добавил keepdim, чтобы поведение было ближе к привычным ML-фреймворкам.

🔹 Скаляры и типы
Перешёл от явных типов в аргументах к более гибкому std::variant для поддержки всего набора используемых типов. Сделал типизированную поддержку скаляров в Tensor::full() и Tensor::item(), включая динамический вывод формы. Это уменьшило количество неявных преобразований и сделало API более предсказуемым.

🔹 Boolean и unsigned integer
Отдельная история — поддержка boolean. Сначала она выглядела как небольшая задача, но на практике потребовала заметно больше времени. Нужно было аккуратно продумать хранение bool в тензорах, взаимодействие со скалярами, приведение типов, проверки на уровне backend и корректный проброс в Python.

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

🔹 Контроль памяти
Добавил проверки на contiguous-тензоры в backend-операциях. Это помогает раньше ловить ошибки, связанные с layout и памятью, и делает поведение операций более явным.

🔹 Python bindings
Продолжаю приводить в порядок Python-слой. Добавил биндинги для новых операций, и сделал skill создания Python-биндингов для LLM агентов.

🔹 GPU backend
Подготовил skills для разработки GPU-шейдеров и регистрации dispatcher. Это больше инфраструктурная работа, поэтому неплохо автоматизируется агентами.

🔹 YOLOv11
Продолжаю двигаться к обучению YOLOv11: обновил план реализации, добавил прототип loss-функции и подготовил inference pipeline с учётом нового tensor API.

Итог: Базовый tensor API становится более зрелым, появляются элементы, необходимые для обучения моделей, и YOLOv11 уже выглядит как вполне достижимая цель 🚀

#tensor #cpp #python #machinelearning #deeplearning #yolo #yolov11 #gpu #autograd #computervision
  • 🔥 3
Post #55 176
Привет!
На этой неделе, 1 августа, в Москве будет проходить конференция Back to Back.
Я с коллегой в 16:30-19:00 буду проводить воркшоп «Реализация CUDA-расширения для PyTorch: ускоряем работу LLM».
Кто будет на конференции присоединяйтесь, участие бесплатное но надо зарегистрироваться, на офлайн часть это можно сделать до конца завтрашнего дня.

На воркшопе участники на практике познакомятся созданием расширения для популярного фреймворка PyTorch использующего CUDA ядра. В качестве примера мы запустим локальную LLM и измерим её производительность в реальном тесте.
Начнём с краткой теории GPU, узнаем немного про работу LLM и познакомимся с инфраструктурой PyTorch для создания расширений на С++ и связыванием их с Python API. После чего реализуем оптимизации для работы модели как расширение для PyTorch.

Участники:

- напишут CUDA-ядра для функции активации GeLU
- познакомятся с реализацией матричного умножения для GPU
- реализуют расширение для PyTorch на С++ с интегрированными CUDA ядрами
- используют созданное расширение в реализации LLM модели GPT2 написанной на Python API

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

Требования: уверенное владение C++, CMake и понимание Python.
Back to Back | Москва Бэкенд-конференция от инженеров для инженеров
  • 🔥 7
Post #54 158
⚡ Forward pass YOLOv11 — готов!

За неделю с лишним закончил сквозной forward pass для модели YOLOv11 на Adept! 🚀

Добил тензорный движок до состояния, когда его можно использовать для реальных нейросетей. Основные изменения — по коммитам:


🧠 Core Tensor Operations
- N-мерный transpose, concatenation, stacking — теперь и на CPU, и на Vulkan;
- chunk / split с автоградом;
- софтмакс на произвольной размерности с autograd;

🔧 Backend и Python-биндинги
- reshape и view теперь принимают вариадик (можно писать view(1, -1, 4) как в PyTorch);
- новые биндинги для тензоров и параметров Linear/Conv2d;
- переработал контейнеры — Sequential, ModuleList стали ближе к torch;

📦 Neural Networks & Models
- починил перенос внутренних индексов в MaxPool2d между устройствами;
- адаптировал модель YOLO под обновлённое API тензоров.


🧩 Что было самым сложным
Главная боль — изначально я не заложил в тензор полноценную поддержку slices, то есть смещения и шагов (strides). И реализовал базовые операции transpose, concat, stack только для одномерных случаев (по сути, только dim=1). Этого хватало для простых экспериментов, но для полноценного YOLO с многомерными тензорами потребовалась поддержка произвольных размерностей. Если бы я добавил strides с самого начала, то реализация этих операций и chunk / split для произвольных размерностей была бы существенно проще через использование slices и ядер типа scatter и gather.
Теперь всё на месте и операции работают для любых размерностей — код стал проще и единообразнее.

По биндингам — их тоже пришлось расширять, потому что без полноценного Python API удобный интерфейс не построить. Хотелось, чтобы модель на Adept писалась так же естественно, как на PyTorch и NumPy. Вроде получилось.

🎯 Что дальше

Следующая остановка — функция потерь и цикл тренировки. Нужно:
- реализовать loss (скорее всего, комбинация box + cls + dfl, как в оригинальном YOLO);
- собрать тренировочный пайплайн с батчами.


Дальше — больше. Всем удачи в ваших проектах! 💪

#YOLOv11 #Adept #TensorEngine #MachineLearning #PythonBindings
  • ❤ 3
Post #53 155
Привет! За неделю в ветке yolo-impl мы расширили набор слоёв в Adept. Новая функциональность: групповые свёртки, Winograd на CPU и GPU, транспонированная свёртка и апсемплинг. Всё — с поддержкой CPU и Vulkan GPU, без фолбэков, с автоградом и Python-биндингами.

🚀 Групповые свёртки
Добавили параметр groups в Conv2d. Теперь можно эффективно резать каналы на группы — и на CPU (per-group im2col + GEMM), и на Vulkan (аналогичные шейдеры). ONNX-импорт и Python-биндинги — на месте. Тесты покрывают forward/backward для разных конфигураций.

⚡ Winograd: CPU с группами, GPU для 3x3
Доработали CPU-версию Winograd, чтобы она поддерживала групповые свёртки — вынесли буферы за цикл по группам, избежав лишних аллокаций (это критично для depthwise с большим числом групп).
А следом завезли Vulkan-шейдеры для Winograd с ядром 3x3: три шейдера (преобразование входа, весов и обратное). Это даёт выигрыш в количестве умножений против im2col. Выбор пути — динамический, под капотом на основе аргументов операции.

🔄 Транспонированная свёртка (ConvTranspose2d)
Нужна для апскейлинга в декодерах — в первую очередь для UNet и подобных архитектур. Реализована через im2col/col2im и GEMM с транспонированными весами. Оба прохода (forward/backward) — на CPU и на Vulkan. Инициализация Kaiming-He, тесты с наивной референсной реализацией, Python-биндинги.

📐 Upsample (Nearest + Bilinear)
Два режима интерполяции, поддержка align_corners. Реализация - 4 Vulkan-шейдера (forward/backward для каждого метода) и оптимизированный CPU-код. Биндинги в Python — есть, так что можно использовать в питоновских скриптах.

Итог: Мы закрыли ключевые потребности детекторов (YOLO) и добавили фундамент для генеративных/сегментационных сетей (UNet). Code review и идеи по оптимизации приветствуются! 👨‍💻

#YOLO #UNet #Conv2d #ConvTranspose2d #Upsample
  • 🔥 1
Older posts →

About this channel

How can I read @adept_platform without a Telegram account?
TGViewer shows the public web preview Telegram publishes for Adept | Машинное обучение | Открытое ПО: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does Adept | Машинное обучение | Открытое ПО have?
Adept | Машинное обучение | Открытое ПО (@adept_platform) has 136 subscribers on Telegram, refreshed roughly every 30 minutes.
Does Adept | Машинное обучение | Открытое ПО know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →