В последнее время я работал с API обнаружения объектов Tensorflow, я обучил ssd_mobilenet_v2 , используя свои собственные данные, и модель работает, как и ожидалось.
Я хотел улучшить производительность, используя несколько процессорных ядер для определенных операций.В настоящее время Tensorflow использует рабочую нагрузку, используя небольшую долю каждого ядра, доступного в моей системе (я не знаю, как это происходит в бэкэнде).
Я попытался добавить параметры device_count={ "CPU": n_cpus }, inter_op_parallelism_threads=n_inter, intra_op_parallelism_threads=n_intra,
в методе tf.Sessions()
.Моя цель состояла в том, чтобы указать количество используемых ядер и количество потоков, которые будут созданы для ускорения, но это не повлияло на производительность.
После этого я также попытался закрепитьопределенные процессы для определенных ядер, используя следующий метод: with tf.device('/cpu:0'):
.
Использование with tf.device('/cpu:0'):
с такими тривиальными операциями, как tf.matmul
, действительно повышает производительность.Я также мог видеть производительность и загрузку процессора, напр.CPU: 0 использовался на уровне 98-99% (это было то, что я искал).
Однако, когда я попробовал тот же подход tf.device()
с выводом модели, загрузка ЦП вернулась к настройке по умолчанию, где каждая рабочая нагрузка распределяется между всеми ядрами (один оператор распределяется между ядрами).
Я хочу знать, может ли часть вывода работать параллельно на нескольких ядрах ЦП.Мой интерес заключается в параллельном выполнении разных операций вывода на разных ядрах.До сих пор мне не удавалось сделать эту работу, возможно, моя логика неверна, я был бы признателен за некоторые рекомендации :)
Дополнительная информация: Я использую TensorFlow 1.11.0, версия процессора