機器學習框架Mayo: 自動生成針對硬體優化的神經網路

機器學習框架Mayo: 自動生成針對硬體優化的神經網路

7 人贊了文章

概括:

Mayo 是一個用於壓縮DNN的工具,Mayo可以支持不同的壓縮演算法來優化DNN。

Mayo可以壓縮神經網路的不同部分(weights, biases, gradients, activations),並且在每一個部分都可以逐層來定製壓縮方法。

我們在Mayo上實現了不同的壓縮方法:

1. 剪枝演算法 (dns, network slimming ...)

2. 量化演算法 (log, shift, fixed-point ...)

這些壓縮方法可以被用在:

1. weights, biases

2. activations

3. gradients

Mayo現在有mnist, cifar10和 imagenet三個數據集上的眾多網路,並且我們提供已經訓練好的checkpoints。 同時,我們也提供我們通過剪枝演算法和量化演算法壓縮後的一些checkpoints.

What does Mayo do:

Mayo 可以被視作和Keras, Tensorpack等工具一樣的上層優化工具。Mayo目前使用的後端是Tensorflow (TF大法好)。但是,我們使用了YAML語言來定義你所有的需要!

譬如說,我們定義幾層卷積?

conv0: &conv type: convolution kernel_size: 3 num_outputs: 20conv1: {<<: *conv, num_outputs: 50}conv2: {<<: *conv, num_outputs: 50}

哇,是不是很強,我們支持了代碼的復用,這樣你就不用寫無數多重複定義了!

你還可以用YAML寫出複雜的聯繫,因為我們支持graph-like definition。

dsconvolution: &dsconv type: module kwargs: {stride: null, num_outputs: null} layers: depthwise: <<: *conv type: depthwise_convolution stride: ^(stride) pointwise: <<: *conv kernel_size: [1, 1] stride: 1 num_outputs: ^(num_outputs)

Boom! 一個mobilenet depthwise-separable的layer就寫好啦。

我們的module definition 可以讓你隨意在yaml層面上定義網路,連python都不用碰了。。

如何訓練呢?

這就更簡單了,一起來command line里拼湊幾個yaml就可以了

./my datasets/mnist.yaml models/lenet5.yaml trainers/lenet5.yaml train

同樣,你可以看看你的網路在test data上表現如何

./my datasets/mnist.yaml models/lenet5.yaml trainers/lenet5.yaml eval

Special Features:

Mayo裡面有overriding功能,各種各樣的壓縮技巧都可以用overrider來表達。譬如我要定義一個Dynamic Surgery Pruning [1]:

weights: dns: type: mayo.override.DynamicNetworkSurgeryPruner alpha: 0 should_update: True true_priority: 100

就是如此的簡單,我們就定義了一個對於網路中所有weights 的overrider。

更加厲害的是,我們可以通過overrider來任意組合不同的壓縮技巧。

weights: dns: type: mayo.override.DynamicNetworkSurgeryPruner alpha: 0 should_update: True true_priority: 100 quantize: type: mayo.override.FixedPointQuantizer width: 8 point: 2

在這一段代碼里,我定義了一個剪枝的pruner以及一個fixed-point quantiation.

更加複雜的用法請參考我們的documentation。

同時,我們的mayo工具還支持自動壓縮你的神經網路

./my datasets/mnist.yaml models/override/lenet5.yaml models/override/prune/dns.yaml trainers/lenet5.yaml trainers/search/example.yaml search

當然, 這樣的自動壓縮是一個類似暴力的搜索。

Performances

首先,我們對Mayo上的各種model使用了剪枝演算法。有意思的是,在業界目前認為非常compact的 mobilenet 和 resnet18上,我們的剪枝依然可以有很高的壓縮率(CR: compression ratio).

剪枝演算法

同樣的,我們結合剪枝與不同的量化優化,以下的結果是在cifarnet上

在剪枝前和剪枝後的CifarNet上使用各種量化演算法,其中包括定點,自定義浮點,shift和dfp。

一篇關於Mayo的小paper我們發布在了今年的mobisys的一個workshop上,

paper link:

https://www.sigmobile.org/mobisys/2018/workshops/deepmobile18/papers/Mayo.pdf?

www.sigmobile.org

項目地址

https://github.com/deep-fry/mayo?

github.com

by Team DeepFry:

Deep Fry?

github.com圖標
推薦閱讀:

TAG:機器學習 | 硬體 | AI技術 |