Почему пайплайн в облаке может работать хуже, чем у заказчика на железе?
В нашем случае итерация была сильно дольше, чем у клиента на собственной инфраструктуре. Чтение батча данных, его подготовка, forward-шаг, расчёт метрик, backward-шаг, сохранение промежуточных весов модели — все эти процессы шли сильно медленнее, чем ожидалось…
Пошли разбираться, в чём же причина. При просмотре утилизации ядер GPU заметили, что она скачет, улетая в ноль. Советы в стиле «увеличить размер батча» никак не помогали её стабилизировать, и, соответственно, время итерации тоже никак не улучшилось.
Как пофиксить утилизацию? Можно ли обойтись какими-то твиками в коде, или проблема в том числе в железе? Как вообще подходить к анализу такой проблемы? Спойлер — профилирование кода.
В докладе рассмотрим, какие есть инструменты профилирования и какие у них области применения, ограничения.