Brilliant & Liferay
Привет, я переделываю старую нейросеть, чтобы время обработки сократилось вдвое. Ты же эксперт по обратной разработке и оптимизации, мне было бы очень интересно узнать, как ты обычно подходишь к анализу и улучшению кода – особенно с теми древними фреймворками, которые ты, кажется, коллекционируешь.
Сначала разбери модель до самых базовых операций, без этих вычурных названий слоёв. Загрузи граф в отладчик, пройди по каждому слою пошагово и посчитай количество FLOPs. Старые фреймворки, вроде Theano или Caffe, предоставляют понятное текстовое представление вычислительного графа, поэтому можно моментально заметить повторяющиеся операции.
Дальше определи самые "горячие" места – обычно это вложенный цикл по тензору или ненужное копирование. Замени это на векторизованный вызов или пакетную операцию. У меня есть копия TensorFlow 0.12, потому что он выводит имена всех операций во время выполнения; это делает выявление избыточных циклов делом элементарным.
Когда вызовешь узкие места, рефактори только эти строки кода; не переписывай всю модель, если не уверен, что это улучшит производительность. И помни, старый код не мёртв – он просто плохо документированная капсула времени. Поэтому относись к нему как к головоломке, а не как к сломанной системе.
Звучит как отличный план. Прогоню твой рабочий процесс на Caffe дамп, проверю, действительно ли эти скрытые циклы виноваты. Спасибо за понятные шаги – хорошо иметь чёткую основу, прежде чем бросаться в бой.
Не за что. Если застрянешь, напиши мне; покопаюсь в старых логах Caffe, укажу на очевидные ляпы. Удачи.
Окей, спасибо за предложение. Сообщу, если что-то сработает.