Получение более быстрых выводов тем быстрее, чем быстрее я вызываю функцию ⇐ Python
Получение более быстрых выводов тем быстрее, чем быстрее я вызываю функцию
Я использую PyTorch для быстрого вывода изображения. Я заметил (и это скорее проблема измерения Python): чем быстрее я пропускаю изображения через свой конвейер, тем быстрее в среднем происходит каждый вывод.
Ниже опубликован код и то, как я измеряю время, необходимое для выполнения каждого вывода. При работе на частоте 10 Гц или около того среднее время на 1000 выводов составляет около 1 мс. При работе на частоте 1000 Гц среднее время на 1000 выводов составляет 500-600 мкс. Так что есть существенный прирост. Это происходит как при выводе процессора, так и графического процессора.
Я думаю, это должно быть одно из трёх:
[*]Я измеряю неправильно [*]Более быстрый вызов вывода дает некоторое повышение производительности. [*]Какой-то другой фрагмент кода в том же мультипроцессе использует GIL, но только когда он работает медленнее? (последнее для меня не имеет смысла)
Есть идеи?
попробуйте: self.new_img = image_queue.get(False) t1 = timeit.default_timer() решение = self.inference_model(self.new_img) self.total_time += timeit.default_timer() - t1 self._counter += 1 если self._counter % 1000 == 0: print("Среднее время:", self.total_time/1000) self.total_time = 0 кроме очереди.Пусто: проходить def inference_model(self, img): выходные данные = self.model(img) _, прогноз = torch.max(outputs.data, 1) self.output = outputs.data.tolist()[0] вернуть предсказанный.item() Изменить:
Основываясь на комментарии здесь, я вернулся и понял, что, возможно, проблема вызвана моей попыткой/исключением в очереди. Вот как выглядит код (отредактировано выше)
Редактировать2:
Изменено на get() с get(False), поведение осталось прежним
Я использую PyTorch для быстрого вывода изображения. Я заметил (и это скорее проблема измерения Python): чем быстрее я пропускаю изображения через свой конвейер, тем быстрее в среднем происходит каждый вывод.
Ниже опубликован код и то, как я измеряю время, необходимое для выполнения каждого вывода. При работе на частоте 10 Гц или около того среднее время на 1000 выводов составляет около 1 мс. При работе на частоте 1000 Гц среднее время на 1000 выводов составляет 500-600 мкс. Так что есть существенный прирост. Это происходит как при выводе процессора, так и графического процессора.
Я думаю, это должно быть одно из трёх:
[*]Я измеряю неправильно [*]Более быстрый вызов вывода дает некоторое повышение производительности. [*]Какой-то другой фрагмент кода в том же мультипроцессе использует GIL, но только когда он работает медленнее? (последнее для меня не имеет смысла)
Есть идеи?
попробуйте: self.new_img = image_queue.get(False) t1 = timeit.default_timer() решение = self.inference_model(self.new_img) self.total_time += timeit.default_timer() - t1 self._counter += 1 если self._counter % 1000 == 0: print("Среднее время:", self.total_time/1000) self.total_time = 0 кроме очереди.Пусто: проходить def inference_model(self, img): выходные данные = self.model(img) _, прогноз = torch.max(outputs.data, 1) self.output = outputs.data.tolist()[0] вернуть предсказанный.item() Изменить:
Основываясь на комментарии здесь, я вернулся и понял, что, возможно, проблема вызвана моей попыткой/исключением в очереди. Вот как выглядит код (отредактировано выше)
Редактировать2:
Изменено на get() с get(False), поведение осталось прежним
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
VtkextractunstructuredGrid не производит никаких выводов в оболочке ParaView Python
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему моя программа, чтобы найти основные номера, не возвращают никаких выводов?
Anonymous » » в форуме C# - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-