0
本文作者: 孔令雙 | 2018-05-23 16:43 |
雷鋒網(wǎng) AI 研習(xí)社按,近期,AWS 表示 MXNet 支持 Keras 2,開發(fā)者可以使用 Keras-MXNet 更加方便快捷地實(shí)現(xiàn) CNN 及 RNN 分布式訓(xùn)練。AI 研習(xí)社將 AWS 官方博文編譯如下。
Keras-MXNet 深度學(xué)習(xí)后端現(xiàn)在可用,這要?dú)w功于 Keras 和 Apache MXNet(孵化)開源項(xiàng)目的貢獻(xiàn)者。Keras 是用 Python 編寫的高級(jí)神經(jīng)網(wǎng)絡(luò) API,以快速簡(jiǎn)單的 CNN 和 RNN 原型而聞名。
Keras 開發(fā)人員現(xiàn)在可以使用高性能 MXNet 深度學(xué)習(xí)引擎進(jìn)行 CNN 和遞歸神經(jīng)網(wǎng)絡(luò) RNN 的分布式訓(xùn)練。通過(guò)更新幾行代碼,Keras 開發(fā)人員可以使用 MXNet 的多 GPU 分布式訓(xùn)練功能來(lái)提高訓(xùn)練速度。保存 MXNet 模型是該發(fā)行版本一個(gè)極具價(jià)值的功能。開發(fā)者可以在 Keras 中進(jìn)行設(shè)計(jì),使用 Keras-MXNet 進(jìn)行訓(xùn)練,并且在生產(chǎn)中用 MXNet 進(jìn)行大規(guī)模推算。
本文介紹如何安裝 Keras-MXNet 并演示如何訓(xùn)練 CNN 和 RNN。如果您之前嘗試過(guò)使用其他深度學(xué)習(xí)引擎做分布式訓(xùn)練,那么您應(yīng)該知道這過(guò)程可能很乏味而且很困難?,F(xiàn)在,讓我們看看用 Keras-MXNet 訓(xùn)練會(huì)怎樣。
部署 AWS Deep Learning AMI
安裝 Keras-MXNet
配置 Keras-MXNet
1.部署 AWS Deep Learning AMI
按照此教程部署 AWS Deep Learning AMI(DLAMI)。要利用多 GPU 訓(xùn)練示例,請(qǐng)啟動(dòng)一個(gè) p3.8xlarge 或類似的多 GPU 實(shí)例類型。
想要自己安裝依賴來(lái)運(yùn)行 CUDA,Keras,MXNet 和其他框架(比如 TensorFlow)? 請(qǐng)按照 Keras-MXNet 安裝指南來(lái)安裝。
2.安裝 Keras-MXNet
將 Keras-MXnet 及其依賴項(xiàng)安裝在您 DLAMI 上的 MXNet Conda 環(huán)境中。 由于它已經(jīng)有Keras 1.0,所以你需要首先卸載它。登錄您的 DLAMI 并運(yùn)行以下命令:
# Activate the MXNet Python 3 environment on the DLAMI
$ source activate mxnet_p36
# Install a dependency needed for Keras datasets
$ pip install h5py
# Uninstall older versions Keras-MXNet
$ pip uninstall keras-mxnet
# Install Keras-MXNet v2.1.6
$ pip install keras-mxnet
Keras-MXnet 及其依賴現(xiàn)已安裝在 DLAMI 的 MXNet Conda 環(huán)境中。
3.驗(yàn)證 Keras-MXNet 安裝
使用以下方式運(yùn)行 MXNet 后端來(lái)驗(yàn)證你的 Keras:
$ python
>>>import keras as k
Using MXNet backend
現(xiàn)在讓我們?cè)?CIFAR-10 數(shù)據(jù)集上訓(xùn)練一個(gè) ResNet 模型以確定 10 個(gè)分類:飛機(jī)、汽車、鳥、貓、鹿、狗、青蛙、馬、船和卡車。
我們可以使用 Keras-MXNet 存儲(chǔ)庫(kù)的示例的部分 Keras 2 腳本。用 MXNet 作為 Keras 的后端只需要對(duì)腳本進(jìn)行非常少的更新。
首先從 Keras-MXNet 庫(kù)文件中下載示例腳本。
$ wget https://raw.githubusercontent.com/awslabs/keras-apache-mxnet/master/examples/cifar10_resnet_multi_gpu.py
該腳本調(diào)用 multi_gpu_model API 并傳遞要使用的 GPU 數(shù)量。
其次,在終端窗口中運(yùn)行 nvidia-smi 以確定 DLAMI 上可用的 GPU 數(shù)量。 在下一步中,如果您有四個(gè) GPU,您將按原樣運(yùn)行腳本,否則運(yùn)行以下命令打開腳本進(jìn)行編輯。
$ vi cifar10_resnet_multi_gpu.py
該腳本以下行可以定義 GPU 的數(shù)量,如果有必要的話可以更新它:
model = multi_gpu_model(model, gpus=4)
訓(xùn)練:
$ python cifar10_resnet_multi_gpu.py
(可選)在訓(xùn)練運(yùn)行期間,使用 nvidia-smi 命令檢查 GPU 利用率和內(nèi)存使用情況。
Keras-MXNet 目前提供 RNN 實(shí)驗(yàn)性的支持。 在使用帶有 MXNet 后端的 RNN 時(shí)存在一些限制。更多相關(guān)信息,請(qǐng)查閱 Keras-MXNet 文檔。 這里的例子包括你需要的解決方法,以便使用 LSTM 層訓(xùn)練 IMDB 數(shù)據(jù)集。盡管有解決方法,但在多 GPU AMI 上訓(xùn)練此 RNN 將比你習(xí)慣的要容易和快速。
使用 imdb_lstm 示例腳本。 在嵌入層中傳遞輸入長(zhǎng)度,并按如下所示設(shè)置 unroll = True。
首先,在 DLAMI 的終端會(huì)話中,從 Keras-MXNet repo 文件夾下載示例腳本。
$ wget https://raw.githubusercontent.com/awslabs/keras-apache-mxnet/master/examples/imdb_lstm.py
其次,打開腳本并跳轉(zhuǎn)到下面一行來(lái)查看它:
model.add(Embedding(max_features, 128, input_length=maxlen))
model.add(LSTM(128, unroll=True))
第三,示例腳本已被修改為與 MXNet 后端兼容,因此您可以運(yùn)行它:
$ python imdb_lstm.py
(可選)在訓(xùn)練運(yùn)行期間,使用 nvidia-smi 命令檢查 GPU 利用率和內(nèi)存使用情況。 為此打開另一個(gè)終端會(huì)話。
為幫助您評(píng)估不同 Keras 后端的性能,我們?yōu)?Keras-MXNet 添加了基準(zhǔn)測(cè)試模塊。通過(guò)在該表中描述的 CPU,單 GPU 和多 GPU 機(jī)器上使用各種模型和數(shù)據(jù)集,您可以看到 Keras-MXNet 具有更快的 CNN 訓(xùn)練速度,以及跨多個(gè) GPU 的高效縮放, 這將顯示在訓(xùn)練速度的條形圖中。有關(guān)如何運(yùn)行基準(zhǔn)腳本并生成詳細(xì)基準(zhǔn)測(cè)試結(jié)果的信息,請(qǐng)參閱 Keras 基準(zhǔn)測(cè)試自述文件。
基準(zhǔn)配置:
Keras Version 2.1.6
MXNet Version 1.2.0
Image Data Format: Channel first
由于數(shù)據(jù)集圖像本身較小,因此對(duì) CIFAR10 數(shù)據(jù)集進(jìn)行訓(xùn)練會(huì)導(dǎo)致子線性縮放。該數(shù)據(jù)集由 50,000 個(gè)尺寸為 32×32 像素的圖像組成,傳送這些小圖像的通信開銷高于從四個(gè)跳轉(zhuǎn)到八個(gè) GPU 所提供的計(jì)算能力。
與 Keras-MXNet 的圖像處理速度比較
嘗試一些額外的 Keras-MXNet 教程或閱讀發(fā)行說(shuō)明中的詳細(xì)信息。
Via:AWS Blog
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。