0
本文作者: 楊鯉萍 | 2019-08-09 11:31 |
雷鋒網(wǎng) AI 開發(fā)者按:近日,TensorFlow 強(qiáng)勢推出能將模型規(guī)模壓縮卻幾乎不影響精度的半精度浮點(diǎn)量化(float16 quantization)工具。小體積、高精度,還能夠有效的改善 CPU 和硬件加速器延遲。TensorFlow 發(fā)出相應(yīng)的文章對該工具做了簡要的說明,雷鋒網(wǎng) AI 開發(fā)者將其整理編譯如下。
我們非常高興能夠?qū)⒂?xùn)練后的 float16 quantization 作為模型優(yōu)化工具包(Model Optimization Toolkit)的一部分。這套工具包括了:
混合量化(https://medium.com/tensorflow/introducing-the-model-optimization-toolkit-for-tensorflow-254aca1ba0a3 )
全整數(shù)量化(https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-post-training-integer-quantization-b4964a1ea9ba )
修剪(https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-pruning-api-42cac9157a6a )
在計(jì)算中,半精度是二進(jìn)制浮點(diǎn)計(jì)算機(jī)數(shù)字格式,占用計(jì)算機(jī)存儲器中的 16 位。在 IEEE 754-2008 標(biāo)準(zhǔn)中,16 位 base-2 格式稱為 binary16。它用于在高精度對于執(zhí)行算術(shù)計(jì)算不是必需的應(yīng)用中存儲浮點(diǎn)值,并且 IEEE 754 標(biāo)準(zhǔn)將 binary16 指定為具有以下格式:
Sign bit(符號位): 1 bit
Exponent width(指數(shù)位寬): 5 bits
Significand precision(尾數(shù)精度): 11 bits (有10位被顯式存儲)
圖 1 IEEE 754 標(biāo)準(zhǔn)下 binary16 的格式
訓(xùn)練后的 float16 quantization 減少了 TensorFlow Lite 模型的大?。ǜ哌_(dá) 50%),同時(shí)以少量的精度損失為代價(jià)。它將模型常量(如權(quán)重和偏差值)從全精度浮點(diǎn)(32 位)量化為減少精度的浮點(diǎn)數(shù)據(jù)類型(IEEE FP16)。
訓(xùn)練后的 float16 quantization 是量化 TensorFlow Lite 模型很好的方法,因?yàn)樗鼘鹊挠绊憳O小并且能夠使得模型大小顯著減小。在這里可以通過查看該文檔(包括一個(gè)新的浮動圖表,https://www.tensorflow.org/lite/performance/post_training_quantization),以幫助你了解不同的量化選項(xiàng)和場景。
圖 2 幫助確定合適量化場景的決策樹
尤其是在部署到邊緣時(shí),降低精度將產(chǎn)生很大的收益。
模型尺寸減少 2 倍。模型中的所有常量值都存儲在 16 位浮點(diǎn)數(shù)而不是 32 位浮點(diǎn)數(shù)中;由于這些常量值通常在整個(gè)模型尺寸中占主導(dǎo)地位,因此通常會將模型的尺寸減小約一半。
精確度損失可忽略不計(jì)。深度學(xué)習(xí)模型通常能夠在使用相較于最初訓(xùn)練時(shí)更少精確度的情況下,產(chǎn)生良好的推理結(jié)果。并且在我們對多個(gè)模型的實(shí)驗(yàn)中,我們發(fā)現(xiàn)推理質(zhì)量幾乎沒有損失。例如圖 4 中,MobileNet V2 top 1 的測試結(jié)果顯示,其精度降低值小于 0.03%。
模型尺寸測試結(jié)果
訓(xùn)練后的 float16 quantization 對精度的影響很小,并可以使得深度學(xué)習(xí)模型的大小減小約 2 倍。
以下是在 MobileNet V1 和 V2 模型以及 MobileNet SSD 模型的一些測試結(jié)果。其中,MobileNet v1 和 v2 的結(jié)果基于 ImageNet 圖像識別任務(wù)測得,而 MobileNet SSD 模型則在 COCO 目標(biāo)檢測任務(wù)上評估而得。
圖 3 不同模型下模型大小變化
模型精度測試結(jié)果
在 ILSVRC 2012 圖像分類任務(wù)中,我們評估了標(biāo)準(zhǔn) Mobilenet Float32 模型(和 FP16 變體)。在 COCO 目標(biāo)檢測任務(wù)中,我們對 Mobilenet SSD float32 模型及其 fp16 變體進(jìn)行了評估。
圖 4 不同模型下精度損失測試結(jié)果
用戶可以在 TensorFlow Lite converter 上指定訓(xùn)練后的 float16 quantization,即使用經(jīng)過訓(xùn)練的 float32 模型,將優(yōu)化設(shè)置為 DEFAULT,然后再將目標(biāo)規(guī)范支持的類型設(shè)置為 float16 常量。
圖 5 模型參數(shù)相關(guān)設(shè)置
轉(zhuǎn)換模型后,用戶就可以像任何其它 TensorFlow Lite 模型那樣直接運(yùn)行該模型了。默認(rèn)情況下,模型將在 CPU 上運(yùn)行,通過將 16 位參數(shù)「上采樣」為 32 位,然后在標(biāo)準(zhǔn) 32 位浮點(diǎn)運(yùn)算中執(zhí)行操作。在今后的優(yōu)化過程中,我們也希望能夠有更多的硬件支持加速 fp16 計(jì)算,這樣半精度值就不再需要進(jìn)行「上采樣」的操作,而是直接進(jìn)行計(jì)算。
同時(shí),用戶還可以在 GPU 上運(yùn)行模型。我們已經(jīng)增強(qiáng)了 TensorFlow Lite GPU 代理,以接收 16 位精度參數(shù)并直接運(yùn)行(而無需像在 CPU 上那樣先進(jìn)行轉(zhuǎn)換)。
在應(yīng)用程序中,用戶可以通過 TfLiteGpuDelegateCreate 函數(shù)(文檔)創(chuàng)建 GPU 代理。需要注意的是在為代理指定選項(xiàng)時(shí),請確保將 precision_loss_allowed 設(shè)置為 1,從而使其能夠在 GPU 上直接使用 float16 操作。
圖 6 在 GUP 上運(yùn)行模型的參數(shù)設(shè)置
有關(guān) GPU 委托的概述,可以參閱我們之前的帖子(https://medium.com/tensorflow/tensorflow-lite-now-faster-with-mobile-gpus-developer-preview-e15797e6dee7);如果想進(jìn)一步了解該工具,可以在 CoLab 教程中查看 float16 quantization 工具的使用示例。
原文鏈接:
CoLab 教程:
雷鋒網(wǎng) AI 開發(fā)者
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。