Разница между вычислениями fp16 и fp32 в Core ML - PullRequest
1 голос
/ 22 апреля 2019

Я хотел бы спросить, как работают вычисления на iPhone (iPhone X и iOS 12, с которыми я работаю) для моделей Core ML fp16 и fp32.У меня есть модель fp32, и я квантовал ее на fp16 с помощью coremltools.Размер уменьшается примерно до половины размера fp32, но время прогнозирования не уменьшается совсем, что я не совсем понимаю.

Я уже просматривал кадры GPU с помощью Xcode Shader Debugger.Кажется, все буферы показывают, что данные представлены в формате RGBA16Float, поэтому мне было интересно, были ли веса или смещения fp32 уже преобразованы в fp16?Также Pipeline Statistics показала сообщение, что «высокое отношение float к половине».Означает ли это, что перед вычислением GPU преобразует все в fp16?

Я сделал тест для MPSMatrixMultiplication с типами fp32 и fp16.fp16 в большинстве случаев на 60% быстрее, чем fp32.Так что я ожидаю, что с fp16 вычисления могут быть быстрее.Спасибо!

* Это изображение, упомянутое в ответе, которое показывает кадры графического процессора и сообщение. кадр GPU

1 Ответ

1 голос
/ 22 апреля 2019

Когда Core ML запускает модель на графическом процессоре, он делает это с fp16, потому что графические процессоры в iPhone оптимизированы для 16-разрядных операций с плавающей запятой.Если ваши веса равны fp32, они сначала преобразуются в fp16 при загрузке модели.

В CPU Core ML использует fp32.(Я не уверен насчет Neural Engine, но я ожидаю, что это тоже fp16.)

...