機器學習框架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上
一篇關於Mayo的小paper我們發布在了今年的mobisys的一個workshop上,
paper link:
https://www.sigmobile.org/mobisys/2018/workshops/deepmobile18/papers/Mayo.pdf項目地址:
https://github.com/deep-fry/mayoby Team DeepFry:
Deep Fry推薦閱讀: