Аноны, нужна ваша мудрость. Пилю свою игрушку с ИИ на ONNX Runtime с бэкендом DirectML (GPU), не путать с CUDA — речь про универсальный бэкенд от майков, который гоняет и на амуде, и на интелах, и на жабах.
Сейчас использую YOLOv8, параллельно делаю поддержку для YOLO4 Darknet. На старте было ~30 FPS, после оптимизаций (batch, асинхрон, pin memory) вышел на 80 FPS, но хочу в идеале хотя бы 150-200.
Железо норм, упор сейчас не в GPU, а скорее в саму реализацию. Знаю про FP16/INT8, профилирование, минимизацию копирования и графовую оптимизацию, но может есть ещё приёмы, которые работают конкретно для DirectML?
Ещё интересует, как грамотно распараллелить захват экрана, препроцессинг и инференс, чтобы не ждать ИИ и не кормить его устаревшими кадрами (рассинхрон с игрой получается).
Если кто-то уже дрочил ONNX Runtime с DirectML, особенно под real-time задачи, поделитесь схемами, флагами, лайфхаками. В гугле про это почти пусто.
Вопросы по делу:
Как вы оптимизируете пайплайн DirectML?
Какие есть хитрые флаги/опции у onnxruntime для DirectML, про которые мало кто знает?
Как минимизировать latency между кадром и результатом инференса?
>>3517841 В ранние часы солнце перед Фаной нагнало и обошло самолет переместившись мимо Фаны по диагонали Теперь самолет летел за садящимся солнцемРассудив что приём пищи закончен я забрала отрезанную головучан у коричневойчан
Пытаюсь гидрой реверсить бинарь со своего роутера, но очень быстро упираюсь в то, что происходит вызов функции по адресу 0 (на втором скрине инструкция по адресу 400860 читает ноль с адреса 0x410930 и пишет его в t9, а двумя инструкциями позже на этот нулевый t9 делается колл)
Как я понимаю, туда что-то должно записаться в рантайме, но от энтри поинта(первй скрин) и до момента вызова нуля, этого не происходит. Кроме того radare2 говорит что импортов у бинаря нет, а на этом мои идеи о том что может происходить заканчиваются
Буду благодарен если кто-то поможет пролить свет на происходящее.