TGViewer
Adept | Машинное обучение | Открытое ПО Adept | Машинное обучение | Открытое ПО @adept_platform · 136 subscribers
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
More from @adept_platform
  1. Sep 25, 2026Доделал скрипты для сборки библиотеки под Android, исправил ошибки и немного в очередной р…
  2. Sep 22, 2026Это скриншот с моего телефона. Начал делать скрипты для крос-компиляции проекта с использо…
  3. Sep 17, 2026Проект стал доступен в индексе пакетов pypi.org. Установка стала проще: pip install adept-…
  4. Sep 14, 2026Привет! С радостью сообщаю что наконец-то вышел Релиз 0.2.0 Основные изменения: - Тензорны…
  5. Sep 11, 2026Привет! Я закончил реализацию и проверку всей функциональности которую планировал для публ…
  6. Sep 5, 2026Изменил подход к управлению памятью, что снизило потребление в 2 раза. А это в свою очеред…
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 →