0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過 TensorFlow模型優(yōu)化工具包TF MOT剪枝API

硬件三人行 ? 來源:TensorFlow ? 作者:TensorFlow ? 2021-08-16 17:26 ? 次閱讀

發(fā)布人:Yunlu Li 和 Artsiom Ablavatski

簡(jiǎn)介

剪枝是 TensorFlow 模型優(yōu)化工具包 (TF MOT) 中提供的核心優(yōu)化技術(shù)之一。該技術(shù)不僅有助于減小模型尺寸,還可用于加速移動(dòng)設(shè)備和網(wǎng)絡(luò)上的 CPU 處理。隨著現(xiàn)代計(jì)算密集型模型的出現(xiàn),剪枝(作為一種模型優(yōu)化技術(shù))領(lǐng)域已經(jīng)引起了極大關(guān)注。目前開發(fā)者可以輕松地對(duì)密集網(wǎng)絡(luò)進(jìn)行剪枝(即將一部分權(quán)重設(shè)置為零),所導(dǎo)致的質(zhì)量下降可以忽略不計(jì)。

減小

https://arxiv.org/abs/1911.0972

今天,我們很高興地發(fā)布了對(duì) TF MOT 剪枝 API 的一系列更新。這些更新將簡(jiǎn)化剪枝技術(shù),讓開發(fā)者能夠構(gòu)建稀疏模型,以便快速開展設(shè)備端推理。

剪枝 API

https://tensorflow.google.cn/model_optimization/guide/pruning

TF MOT 的更新

TensorFlow 通過 TensorFlow 模型優(yōu)化工具包 (TF MOT) 剪枝 API,為神經(jīng)網(wǎng)絡(luò)剪枝提供長期支持。該 API 于 2019 年推出,并引入了剪枝的基本基元,讓世界各地的研究人員都能使用這一新的優(yōu)化技術(shù)。如今,我們很高興地發(fā)布此 API 的實(shí)驗(yàn)性更新,進(jìn)一步推動(dòng)剪枝模型發(fā)展。我們將會(huì)發(fā)布一些工具,來簡(jiǎn)化剪枝的控制,并減少設(shè)備端推理延遲的時(shí)間。

TF MOT 剪枝 API 功能廣泛,為用戶提供了操縱模型的工具:

prune_low_magnitude 函數(shù)負(fù)責(zé)將 PruneLowMagnitude 封裝容器應(yīng)用至模型的每一層中

PruneLowMagnitude 封裝容器負(fù)責(zé)處理低層級(jí)的剪枝邏輯

PruningSchedule 負(fù)責(zé)控制應(yīng)用剪枝的時(shí)機(jī)

PruningSummaries 負(fù)責(zé)回調(diào)剪枝進(jìn)程的日志

這些抽象概念便于用戶幾乎控制剪枝模型的任何方面(即,如何剪枝 ( PruneLowMagnitude )、何時(shí)剪枝 ( PruningSchedule ),以及如何跟蹤剪枝的進(jìn)程 ( PruningSummaries ))。但“ PruneLowMagnitude 封裝容器的應(yīng)用位置”這一剪枝內(nèi)容除外。如今發(fā)布了一個(gè) TF MOT PruningPolicy 擴(kuò)展程序,我們感到很高興。因?yàn)檫@個(gè)類可以用來控制 PruneLowMagnitude 封裝容器應(yīng)用于模型的部分。PruningPolicy 的實(shí)例則會(huì)被用作 prune_low_magnitude 函數(shù)的一個(gè)參數(shù),包含以下功能:

通過 allow_pruning 函數(shù)來控制每個(gè)層上,用于應(yīng)用剪枝封裝容器的位置

通過 ensure_model_supports_pruning 函數(shù)檢查整個(gè)模型是否支持剪枝

PruningPolicy 是抽象的接口,根據(jù)特定應(yīng)用的不同而存在多種實(shí)施方式。為了通過 XNNPACK 優(yōu)化 CPU 的延遲時(shí)間,在具體實(shí)施時(shí),PruneForLatencyOnXNNPack 將只對(duì)模型中可以通過設(shè)備端稀疏推理加速的部分應(yīng)用剪枝封裝容器,而對(duì)網(wǎng)絡(luò)的其他部分不作處理。這種選擇性的剪枝便于保證模型的質(zhì)量,同時(shí)關(guān)注模型中可以通過稀疏性加速的部分。

下面的例子展示了 PruneForLatencyOnXNNPack 策略在 MobileNetV2 上的應(yīng)用情況(完整示例請(qǐng)參閱最近推出的 colab):

import tensorflow as tf

import tensorflow_model_optimization as tfmot

prune_low_magnitude = tfmot.sparsity.keras.prune_low_magnitude

# 請(qǐng)參閱以下函數(shù)的實(shí)現(xiàn)實(shí)施情況。

model = load_model_for_pruning()

model_for_pruning = prune_low_magnitude(

model, pruning_policy=tfmot.sparsity.keras.PruneForLatencyOnXNNPack())

MobileNetV2

https://arxiv.org/abs/1801.04381

colab

https://tensorflow.google.cn/model_optimization/guide/pruning/pruning_for_on_device_inference

為了遵循 XNNPACK 稀疏推理的約束,在 MobileNetV2 模型上執(zhí)行 Keras 需要對(duì)第一次卷積的填充操作進(jìn)行稍微修改:

def load_model_for_pruning():

input_tensor = tf.keras.layers.Input((224, 224, 3))

input_tensor = tf.keras.layers.ZeroPadding2D(1)(input_tensor)

model = tf.keras.applications.MobileNetV2(input_tensor=input_tensor)

def clone_fn(layer):if layer.name == ‘Conv1’:

# 第一次卷積的默認(rèn)填充“SAME”與# XNNPACK 稀疏推理不兼容。

layer.padding = ‘valid’# 我們要求模型重新構(gòu)建,因?yàn)槲覀兏淖兞颂畛鋮?shù)。

layer.built = Falsereturn layer

return tf.keras.models.clone_model(model, clone_function=clone_fn)

約束

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/xnnpack/README.md#sparse-inference

執(zhí)行 Keras

https://github.com/keras-team/keras-applications/blob/master/keras_applications/mobilenet_v2.py

PruneForLatencyOnXNNPack 策略只對(duì)具有 1x1 內(nèi)核大小的卷積應(yīng)用剪枝封裝容器,因?yàn)橹挥羞@些層可以通過使用 XNNPACK,讓 CPU 在速度上的提升高達(dá) 2 倍。該策略不會(huì)對(duì)其余層進(jìn)行處理,這將便于網(wǎng)絡(luò)在剪枝步驟的質(zhì)量下降后得到恢復(fù)。

此外,該策略通過使用 ensure_model_supports_pruning 方法來驗(yàn)證模型是否支持剪枝。在對(duì)稀疏模型進(jìn)行訓(xùn)練和轉(zhuǎn)換后,我們建議在調(diào)試模式下使用 TensorFlow Lite 基準(zhǔn)實(shí)用程序,以便確認(rèn)最終的模型是否與 XNNPack 的稀疏推理后端兼容。

速度上的提升

https://arxiv.org/abs/1911.09723

實(shí)用程序

https://tensorflow.google.cn/lite/performance/measurement

我們希望這個(gè)新引入的實(shí)驗(yàn)性 API 可以發(fā)揮實(shí)際作用,并在未來繼續(xù)提高其穩(wěn)定性和靈活性。

改善壓縮和延遲時(shí)間

模型壓縮是對(duì)模型應(yīng)用剪枝的另一大好處。使用智能壓縮格式可以高效地存儲(chǔ)模型權(quán)重,從而顯著減小模型的大小。

格式

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/schema/schema.fbs#L94

TFLite 采用 TACO 格式來編碼稀疏張量。與廣泛使用的格式(如 CSR 和 CSC)相比,TACO 格式具有以下幾個(gè)優(yōu)勢(shì):

1. 支持靈活的遍歷順序,輕松存儲(chǔ)以行或列為主張量。

2. 支持如卷積算子的 4-D 過濾器等多維度稀疏張量。

3. 可以將塊結(jié)構(gòu)表示為張量的內(nèi)部維度(例如將 2x2 的內(nèi)部塊結(jié)構(gòu)表示為 4x4 的張量)。

CSR

https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html

CSC

https://scipy-lectures.org/advanced/scipy_sparse/csc_matrix.html

例如

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/testdata/sparse_tensor.json

我們還調(diào)整了格式,為存儲(chǔ)非零元素索引的元數(shù)據(jù)使用提供靈活的數(shù)據(jù)類型。對(duì)于小型張量或具有 int8_t 等緊湊數(shù)據(jù)類型的張量而言,這可以減少其存儲(chǔ)開銷。

靈活的數(shù)據(jù)類型

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/schema/schema.fbs#L125-L135

為了在模型轉(zhuǎn)換過程中實(shí)現(xiàn)實(shí)際大小的減小,需要應(yīng)用 tf.lite.Optimize.EXPERIMENTAL_SPARSITY 進(jìn)行優(yōu)化。這項(xiàng)優(yōu)化可以對(duì)稀疏張量模型進(jìn)行檢查,并將其轉(zhuǎn)換為高效的存儲(chǔ)格式。它還能與量化無縫銜接,您可以將兩者結(jié)合使用,進(jìn)一步實(shí)現(xiàn)模型壓縮。這種轉(zhuǎn)換的完整示例如下:

# 從模型中移除剪枝封裝容器。

model = tfmot.sparsity.keras.strip_pruning(model)

converter = tf.lite.TFLiteConverter.from_keras_model(model)

# 結(jié)合使用 float16 量化與稀疏優(yōu)化# 后者可緊湊地存儲(chǔ)經(jīng)過剪枝的權(quán)重。

converter.optimizations = [

tf.lite.Optimize.EXPERIMENTAL_SPARSITY, # 啟用大小減小優(yōu)化。

tf.lite.Optimize.DEFAULT # 啟用轉(zhuǎn)換量化。

converter.target_spec.supported_types = [tf.float16]

tflite_buffer = converter.convert()

在應(yīng)用 tf.lite.Optimize.EXPERIMENTAL_SPARSITY 優(yōu)化和 PruneForLatencyOnXNNPack 剪枝策略后,可以將大小縮減 2 倍,如圖 1 所示:

除了減小大小,剪枝還可以通過 XNNPACK 為 CPU 提供推理加速。在 PruneForLatencyOnXNNPack 剪枝策略的助力下,我們?cè)趩⒂?use_xnnpack 選項(xiàng)時(shí),使用 TensorFlow Lite 基準(zhǔn)對(duì) Pixel 4 上的 MobileNetV2 模型進(jìn)行了 CPU 推理延遲時(shí)間的消減研究:

圖 2 中的這項(xiàng)研究表明,在使用 XNNPACK 的移動(dòng)設(shè)備上運(yùn)行時(shí),延遲時(shí)間改善了 1.7x。訓(xùn)練稀疏 MobileNetV2 模型的策略以及超參數(shù)和預(yù)訓(xùn)練的檢查點(diǎn)已在 Elsen 等人的研究中有所描述。

Elsen 等人

https://arxiv.org/abs/1911.09723

剪枝技巧及提示

剪枝意識(shí)訓(xùn)練是模型優(yōu)化的關(guān)鍵步驟之一。訓(xùn)練中涉及許多超參數(shù),其中一些參數(shù)(如剪枝計(jì)劃和學(xué)習(xí)率)會(huì)對(duì)模型的最終質(zhì)量產(chǎn)生巨大的影響。雖然已經(jīng)提出了許多策略,但一個(gè)簡(jiǎn)單而有效的 3 步策略(參見表 1)在大多數(shù)用例中均展現(xiàn)出了強(qiáng)大的性能。該策略構(gòu)建在 Zhu & Gupta 的成熟方法之上,無需廣泛的再訓(xùn)練即可產(chǎn)生良好的效果:

Zhu & Gupta

https://arxiv.org/abs/1710.01878

這個(gè)策略所導(dǎo)致的訓(xùn)練時(shí)間大幅增加(約 3 倍)是不可避免的。然而,在搭配使用 PolynomialDecay 剪枝計(jì)劃的情況下,就經(jīng)過顯著剪枝 (》70%) 的神經(jīng)網(wǎng)絡(luò)而言,這個(gè) 3 步策略的效果下降是有限,有時(shí)甚至沒有下降。

MediaPipe 中的剪枝模型

隨著 TF MOT 剪枝 API 的更新,我們很激動(dòng)地為一些 MediaPipe 解決方案發(fā)布剪枝模型。發(fā)布的模型包括姿勢(shì)和面部檢測(cè)器,以及剪枝后的手部跟蹤模型。所有這些模型都利用新引入的功能,通過 3 步剪枝策略進(jìn)行了訓(xùn)練。與密集型基線相比,發(fā)布的剪枝模型在大小方面得到了明顯的減小,通過 XNNPACK 在 CPU 上運(yùn)行時(shí)甚至呈現(xiàn)了出卓越的性能。在質(zhì)量方面,剪枝模型達(dá)到了類似的指標(biāo),包括在我們的公平數(shù)據(jù)集上的評(píng)估(詳見模型卡)。解決方案的并行演示如下:

GPU 的剪枝

雖然在 GPU 上利用稀疏性可能具有挑戰(zhàn)性,但近期的研究已經(jīng)在提升這些平臺(tái)上的稀疏操作性能方面取得了進(jìn)展。在流行的框架中添加對(duì)稀疏矩陣和稀疏操作的強(qiáng)力支持的勢(shì)頭已經(jīng)出現(xiàn),一流的 GPU 最近也為某些形式的結(jié)構(gòu)化稀疏性增加了硬件加速支持。展望未來,在訓(xùn)練和推理中對(duì)支持稀疏性的軟硬件的改進(jìn)將是該領(lǐng)域進(jìn)步的一個(gè)關(guān)鍵因素。

對(duì)稀疏矩陣和稀疏操作的強(qiáng)力支持

https://github.com/tensorflow/community/blob/master/rfcs/20200519-csr-sparse-matrix.md

未來方向

TF MOT 提供了多種模型優(yōu)化方法。經(jīng)過證明,其中許多方法都對(duì)高效的設(shè)備端模型推理至關(guān)重要。除了低量級(jí)剪枝算法外,我們將繼續(xù)擴(kuò)展 TF MOT 剪枝 API,同時(shí)研究剪枝和量化技術(shù)的結(jié)合,來實(shí)現(xiàn)更好的設(shè)備端推理結(jié)果。敬請(qǐng)期待!

致謝

衷心感謝參與此項(xiàng)目的所有人員:Karthik Raveendran、Ethan Kim、Marat Dukhan、Trevor Gale、Utku Evci、Erich Elsen、Frank Barchard、Yury Kartynnik、Valentin Bazarevsky、Matsvei Zhdanovich、Juhyun Lee、Chuo-Ling Chang、Ming Guang Yong、Jared Duke 和 Matthias Grundmann。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11003

    瀏覽量

    214989
  • 封裝
    +關(guān)注

    關(guān)注

    128

    文章

    8352

    瀏覽量

    144381
  • CSR
    CSR
    +關(guān)注

    關(guān)注

    3

    文章

    118

    瀏覽量

    69979
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1552

    瀏覽量

    63251
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    963

    瀏覽量

    55310

原文標(biāo)題:應(yīng)用最新的 TF MOT 剪枝 API 構(gòu)建快速且稀疏的設(shè)備端模型

文章出處:【微信號(hào):yingjiansanrenxing,微信公眾號(hào):硬件三人行】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 1人收藏
  • RobinDong1

評(píng)論

相關(guān)推薦

為什么無法使用OpenVINO?模型優(yōu)化器轉(zhuǎn)換TensorFlow 2.4模型?

已下載 ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8 型號(hào)。 使用將模型轉(zhuǎn)換為中間表示 (IR) ssd_support_api
發(fā)表于 03-05 09:07

無法轉(zhuǎn)換TF OD API掩碼RPGA模型怎么辦?

無法轉(zhuǎn)換重新訓(xùn)練的 TF OD API 掩碼 RPGA 模型,該模型使用以下命令在 GPU 上工作: mo > --saved_model_dir
發(fā)表于 03-06 06:44

使用LabView SIT工具包鏈接Simulink模型的方法

Simulink模型,直接打開VI點(diǎn)運(yùn)行它會(huì)自動(dòng)打開Simulink模型這樣就不報(bào)錯(cuò)了。附件是SIT工具包的下載器和注冊(cè)機(jī)
發(fā)表于 04-10 14:31

NI LabVIEW 模型接口工具包

哪位大神有有 LabVIEW 模型接口工具包 ?跪求!
發(fā)表于 02-15 00:44

TensorFlow常用Python擴(kuò)展

TensorFlow 能夠?qū)崿F(xiàn)大部分神經(jīng)網(wǎng)絡(luò)的功能。但是,這還是不夠的。對(duì)于預(yù)處理任務(wù)、序列化甚至繪圖任務(wù),還需要更多的 Python 。下面列出了一些常用的 Python :Numpy:這是用
發(fā)表于 07-28 14:35

TensorFlow將神經(jīng)網(wǎng)絡(luò)量化為8位

使用CoreML量化工具優(yōu)化模型以進(jìn)行部署。查看34T蘋果開發(fā)者34Twebsite了解更多更新。 請(qǐng)注意,目前無法在iOS上通過CoreML部署8位量化
發(fā)表于 08-10 06:01

為什么無法使用POT優(yōu)化TensorflowTF)或MXNet模型?

無法使用 POT 優(yōu)化 TensorflowTF) 或 MXNet 模型,以便在 英特爾凌動(dòng)? 平臺(tái)上使用 OpenVINO? 工具套件
發(fā)表于 08-15 08:05

固件工具包

固件工具包 修改工具包 高興向大家公布這個(gè)信息! 首先介紹一下這個(gè)工具地用途: 1、修改固件 - 通過工具能夠修改固件中絕大多數(shù)地信息及
發(fā)表于 03-16 14:49 ?71次下載

TensorFlow官方發(fā)布消息稱將引入一個(gè)新的優(yōu)化工具包

內(nèi)存、算力、功耗,這是模型量化的主要優(yōu)化對(duì)象,而在實(shí)踐中,最能從中收益的自然是在各種移動(dòng)端設(shè)備上使用機(jī)器學(xué)習(xí)模型的開發(fā)人員,尤其是TensorFlow Lite的用戶。
的頭像 發(fā)表于 09-21 08:53 ?2689次閱讀

Microchip推出軟件開發(fā)工具包和神經(jīng)網(wǎng)絡(luò)IP

這一高度靈活的工具包能夠以TensorFlow和開放神經(jīng)網(wǎng)絡(luò)交換(ONNX)的格式執(zhí)行模型,最大程度地提升框架的互操作性。ONNX支持Caffe2、MXNet、PyTorch和MATLAB等眾多框架。
的頭像 發(fā)表于 06-03 09:30 ?2902次閱讀

LabView工具包WebSocket-API主機(jī)下載

LabView工具包WebSocket-API主機(jī)下載
發(fā)表于 09-19 09:15 ?70次下載

使用NVIDIA TAO工具包和Appen實(shí)現(xiàn)AI模型微調(diào)

NVIDIA?TAO 工具包與 Appen 的數(shù)據(jù)平臺(tái)相結(jié)合,使您能夠訓(xùn)練、微調(diào)和優(yōu)化預(yù)訓(xùn)練模型,以更快地啟動(dòng)人工智能解決方案。在不犧牲質(zhì)量的情況下,將開發(fā)時(shí)間縮短十倍。在NVIDIA 和 Appen 的綜合專業(yè)知識(shí)和
的頭像 發(fā)表于 04-13 15:29 ?1561次閱讀
使用NVIDIA TAO<b class='flag-5'>工具包</b>和Appen實(shí)現(xiàn)AI<b class='flag-5'>模型</b>微調(diào)

使用NVIDIA QAT工具包實(shí)現(xiàn)TensorRT量化網(wǎng)絡(luò)的設(shè)計(jì)

  目前, TensorFlow 在其開源軟件 模型優(yōu)化工具包 中提供非對(duì)稱量化。他們的量化方法包括在所需層的輸出和權(quán)重(如果適用)處插入 QDQ 節(jié)點(diǎn),并提供完整模型或部分層類類型的
的頭像 發(fā)表于 06-21 16:54 ?4490次閱讀
使用NVIDIA QAT<b class='flag-5'>工具包</b>實(shí)現(xiàn)TensorRT量化網(wǎng)絡(luò)的設(shè)計(jì)

OneInstall工具包

電子發(fā)燒友網(wǎng)站提供《OneInstall工具包.exe》資料免費(fèi)下載
發(fā)表于 08-18 14:54 ?0次下載
OneInstall<b class='flag-5'>工具包</b>

如何使用Tensorflow保存或加載模型

TensorFlow是一個(gè)廣泛使用的開源機(jī)器學(xué)習(xí)庫,它提供了豐富的API來構(gòu)建和訓(xùn)練各種深度學(xué)習(xí)模型。在模型訓(xùn)練完成后,保存模型以便將來使用
的頭像 發(fā)表于 07-04 13:07 ?2292次閱讀

電子發(fā)燒友

中國電子工程師最喜歡的網(wǎng)站

  • 2931785位工程師會(huì)員交流學(xué)習(xí)
  • 獲取您個(gè)性化的科技前沿技術(shù)信息
  • 參加活動(dòng)獲取豐厚的禮品