260просмотров
12 января 2026 г.
Score: 286
🎄 Новогодние каникулы прошли не только в кругу семьи и друзей, но и за кодом! Завершил рефакторинг системы управления ресурсами Vulkan-конвейера в нашем проекте. Что изменилось:
✅ Убрал необходимость ручной синхронизации в конце обработки пакета при обучении моделей
✅ Снизил нагрузку на аллокаторы ресурсов
✅ Сделал управление ресурсами более предсказуемым и «плавным» Провёл сравнительное нагрузочное тестирование — и результаты радуют:
📈 На задачах с LeNet и ResNet50 (CIFAR10/MNIST, FP32, Adam) производительность Adept теперь сопоставима с PyTorch, особенно в режимах с ограниченным worksize и детерминированными алгоритмами cuBLAS. Это означает, что для типичных свёрточных сетей, т.е. небольших размерностей матричного умножения, мы почти «на равных».
✨ При этом размер батча больше не оказывает заметного влияния на производительность конвейера, что раньше было одной из проблем. Но есть и над чем работать:
⚠️ В тестах с MLP (только матричное умножение, большие размеры) производительность начинает падать уже при размере матриц 128×128. Это связано с текущей реализацией GEMM-ядра — сейчас она соответствует субоптимальному варианту алгоритма, который я и показывал в статье на Хабре. Т.е. результат вполне объяснимый. Следующий шаг — переписать ядро matmul, чтобы интенсивнее использовать регистры и минимизировать обращения к локальной памяти, что позволит приблизиться к производительности cuBLAS даже на крупных матрицах. Подробные результаты измерений — в вики проекта. GPU-оптимизация — это марафон, а не спринт 😊 #Vulkan #GPU #GEMM #C++ #PyTorch