Comments 7
Было бы неплохо ещё увидеть информацию по реальной производительности и поддержке в массовых видеокартах. Например, в GTX 1050/1080 FP16, фактически, нету. А в 2080 есть как FP16 с нормальной производительностью, так и tensor cores. Теоретически tensor cores может дать выигрыш в 6 раз, но как обстоят дела на практике?
Спасибо за вопрос.
TensorRT для float16 inference использует Tensor cores. Да, тут важно говорить как ускорение для 1 потока в 2 раза за счет float16 вычислений, так и про увеличение пропускной способности памяти с особенностями вычислений в tensor cores.
Наш опыт такой — при работе в 1 потоке мы получаем ускорение 2х. Однако, если говорить про многопоточную обработку, то ситуация интереснее. Во float32 на TF мы можем обрабатывать параллельно 2.5 потока видео 30 fps. При переходе на float16 в TensorRT производительность вырастает до 8 потоков 30 fps. Т.е. фактически при полной утилизации tensor cores мы получили увеличение производительности в 3.2 раза — несколько меньше теоретически максимальной. Скорее всего, это связано с тем, что мы обрабатываем потоки с батчем = 1, чтобы не увеличивать latency прихода данных по каждому кадр.
TensorRT для float16 inference использует Tensor cores. Да, тут важно говорить как ускорение для 1 потока в 2 раза за счет float16 вычислений, так и про увеличение пропускной способности памяти с особенностями вычислений в tensor cores.
Наш опыт такой — при работе в 1 потоке мы получаем ускорение 2х. Однако, если говорить про многопоточную обработку, то ситуация интереснее. Во float32 на TF мы можем обрабатывать параллельно 2.5 потока видео 30 fps. При переходе на float16 в TensorRT производительность вырастает до 8 потоков 30 fps. Т.е. фактически при полной утилизации tensor cores мы получили увеличение производительности в 3.2 раза — несколько меньше теоретически максимальной. Скорее всего, это связано с тем, что мы обрабатываем потоки с батчем = 1, чтобы не увеличивать latency прихода данных по каждому кадр.
Большое спасибо за статью!
Несколько вопросов:
1) Почему не решились писать кастомные слои под trt? Легче было написать свой слой на tf, чем на trt?
2) Встретились ли проблемы с другими слоями при конвертации из tf в uff? Насколько я понимаю, поддержка uff заканчивается, он мало обновляется и все потихоньку переходят на onnx, который поддерживает гораздо больше слоёв.
3) Если был BatchNorm, пробовали ли делать BatchNorm Folding или конвертировали напрямую? Насколько я знаю, у uff проблемы с BatchNorm-слоями.
4) Картинки при инференсе отдаёте батчами или по одной? Есть ли относительное ускорение на одну картину при батче==1 и батче==N?
5) Использовали ли Triton или используете что-то своё?
Несколько вопросов:
1) Почему не решились писать кастомные слои под trt? Легче было написать свой слой на tf, чем на trt?
2) Встретились ли проблемы с другими слоями при конвертации из tf в uff? Насколько я понимаю, поддержка uff заканчивается, он мало обновляется и все потихоньку переходят на onnx, который поддерживает гораздо больше слоёв.
3) Если был BatchNorm, пробовали ли делать BatchNorm Folding или конвертировали напрямую? Насколько я знаю, у uff проблемы с BatchNorm-слоями.
4) Картинки при инференсе отдаёте батчами или по одной? Есть ли относительное ускорение на одну картину при батче==1 и батче==N?
5) Использовали ли Triton или используете что-то своё?
Хорошие вопросы! Добавил UDP2 с ответами на них
Мы у себя стандартную yolov3 вообще не смогли сконвертировать в uff. Пришлось перебираться в onnx. Версия TRT - 7.2
Насколько я понял, формат входных данных у одной и той же модели скомпиленой из uff и из onnx - отличается. У меня в процессе миграции с uff на onnx выяснилось, что для uff нужно загружать картинку представленую в буфере планарными BGR-плоскостями, а для onnx - RGB-триадами.
Sign up to leave a comment.
Quantization Aware Training. Или как правильно использовать fp16 inference в TensorRT