【摘要】 本文為MoXing系列文章第一篇,主要介紹什么是MoXing,MoXing API的優勢以及MoXing程序的基本結構。
MoXing的概念
MoXing是華為雲深度學習服務提供的網絡模型開發API。相對於TensorFlow和MXNet等原生API,MoXing API讓模型的代碼編寫更加簡單,允許用戶只需要關心數據輸入(input_fn)和模型構建(model_fn)的代碼,即可實現任意模型在多GPU和分布式下的高性能運行。
MoXing-TensorFlow支持原生TensorFlow、Keras、slim等API,可以構建圖像分類、物體檢測、生成對抗、自然語言處理、OCR等多種模型。
為什么取名“MoXing”?
首先,“MoXing”是“模型”一詞的漢語拼音。因為深度學習時代,中國的科研和工程團隊逐步成為行業的引領者,使用源於中文的名稱,彰顯了深度學習服務(DLS)研發團隊的自信,DLS研發團隊將努力把MoXing API打造為模型開發領域的業界標桿。
同時,“MoXing”也寓意“Model Crossing”。“Crossing”一方面具有“道路交匯口”的含義;Model Crossing代表MoXing API匯集了來自四面八方的經典模型,為用戶打通連接模型領域最新成果的道路。Crossing另一方面也具有“跨越式航行”的含義;Model Crossing代表MoXing API旨在實現模型的跨越式發展,為用戶提供了顯著優於原生API的性能,並且具有更強的易用性。
當然,腦洞大開的用戶也可以把MoXing理解成“魔性”,就算名稱噱頭再多,也蓋不了它的優秀。走近深度學習,認識MoXing,充分發掘它的潛力,MoXing API的魔性會為您的模型開發如虎添翼!
MoXing API的優勢
華為雲深度學習服務融合了混合並行、梯度壓縮、卷積加速、EASGD等技術,並且MoXing框架可將單機代碼自動分布式化,進行大規模的分布式訓練,極大的提高了模型訓練速度和效率。
以下是基於華為雲深度學習服務的實驗數據。
通過對比可以看出,MoXing在GPU=1時,吞吐量和加速比優勢並不明顯;但在GPU=4時,吞吐量和加速比已全面超越tensorflow;在GPU=8時,吞吐量相對於其他API有質的飛躍。
下面通過2個例子來介紹MoXing的性能。
1、以MoXing實現LARS訓練ResNet-50為例
LARS允許以超大的batch_size訓練神經網絡,其優勢在於能夠在增大batch_size的情況下不影響收斂精度,增加batch_size就意味着能夠使用更多的分布式節點對網絡進行訓練,從而降低訓練總時長(傳統方法在使用大規模節點時,會遇到大batch_size導致無法收斂的問題,所以無法使用傳統的方法進行訓練)。
使用MoXing中的LARS Optimizer可以實現batch_size=32k分布式訓練ResNet-50。
損失值曲線圖
正確率曲線圖
⊙ 綠色線條為單機版ResNet-50收斂曲線,使用4個GPU。
⊙ 灰色線條為在綠色線條同等下,使用FP-16時的收斂曲線,精度幾乎沒有影響。
⊙ 橙色線條為使用MoXing分布式訓練一個ResNet-50模型的收斂曲線。
⊙ 紅色線條為使用MoXing中LARS特性實現的batch_size=32k的ResNet-50收斂曲線。
LARS的核心代碼,定義一個基於LARS的optimizer:
完整代碼(基於TensorFlow-1.4):http://code.huawei.com/inforsight-dl/tf-models/blob/v1.x.x-tf-1.4/moxing/moxing/tensorflow/practice/image_classification/train_model_32k.py
2、MoXing實現DGC訓練ResNet-50
DGC能減少分布式訓練的通信量,有效降低由於網絡帶寬造成的瓶頸,在不影響收斂精度的情況下增加分布式訓練加速比。
對比傳統resnet_v1_50的訓練和應用DGC時的訓練:傳統收斂精度:top-1 = 74.4, top-5 = 91.7,DGC收斂精度:top-1 = 74.5, top-5 = 91.8。在吞吐量對比上,參見下面的圖標可知,在1Gbps的帶寬下,原生TF的加速比是0.4147,DGC的加速比是0.8670,加速比超過原生TF的一倍。
正確率曲線圖
梯度稀疏度變化曲線圖
由圖可知,深度梯度壓縮的梯度稀疏度在前5個epoch時是由75%逐漸上升到99.9%,所以在前5個epoch時,分布式加速比並一定比普通的分布式訓練高,但是從第5個epoch之后,加速比則有顯著提升,同時模型精度也沒有下降。從第5個epoch之后DGC在分布式運行中的加速比表現:
DGC的基本使用方法:在代碼中import moxing.tensorflow as mox,然后運行腳本時加入dgc的相關參數:
dgc_sparsity_strategy: 稀疏度策略
dgc_momentum_type: momentum策略
dgc_momentum: momentum數值
dgc_momentum_factor_masking: 是否應用factor masking
dgc_total_samples: 訓練集樣本數量
代碼(基於TensorFlow-1.4):http://code.huawei.com/inforsight-dl/tf-models/blob/v1.x.x-tf-1.4/moxing/moxing/tensorflow/practice/image_classification/train_model.py
MoXing程序基本結構
Moxing框架簡單易用,直接將代碼放在華為雲深度學習服務上就可以運行,單機分布式一套代碼,數據讀取都已優化,無需用戶再改動。代碼有很多情況,均基於TensorFlow-1.4,運行參數請參考代碼本身。
MoXing系列文章下期預告:基於Tensorflow運行參數教程。
HDC.Cloud 華為開發者大會2020 即將於2020年2月11日-12日在深圳舉辦,是一線開發者學習實踐鯤鵬通用計算、昇騰AI計算、數據庫、區塊鏈、雲原生、5G等ICT開放能力的最佳舞台。