глубокое обучение — Как выполнить вывод с половинной точностью в модели TensorRT, написанной с использованием TensorRT C ++ API?

Я пытаюсь выполнить вывод с половинной точностью с моделью, изначально написанной на TensorRT C ++ API (не анализируемой в других средах, например, caffe, tenorflow);
Насколько мне известно, нет публично работающего примера этой проблемы; самая близкая вещь, которую я нашел, это образец кода sampleMLP, выпущенный с TensorRT 4.0.0.3, все же заметки о выпуске скажем нет поддержки fp16;

Пример кода моей игрушки можно найти в это репо. Он содержит реализованную API-архитектуру и подпрограмму вывода, а также скрипт python, который я использую для преобразования своего словаря обученных весов в формат wtd TensorRT.

Моя игрушечная архитектура состоит только из одной свертки; цель состоит в том, чтобы получить аналогичные результаты между fp32 и fp16, за исключением некоторой разумной потери точности; кажется, что код работает с fp32, тогда как в случае вывода fp16 я получаю значения совершенно разных порядков (~ 1e40); похоже, я что-то не так делаю во время конверсии;

Буду признателен за любую помощь в понимании проблемы.

Спасибо,

е

1

Решение

Быстро прочитав ваш код, я вижу, что вы сделали больше, чем необходимо, чтобы получить оптимизированную сеть с половинной точностью. Вы не должны вручную конвертировать загруженные веса из float32 в float16 сам. Вместо этого вы должны создать свою сеть, как обычно, и позвонить nvinfer1::IBuilder::setFp16Mode(true) с вашим nvinfer1::IBuilder возражать против того, чтобы TensorRT делал преобразования для вас, где это необходимо.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]