成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用免費(fèi)TPU訓(xùn)練Keras模型,速度還能提高20倍!

IamDLY / 775人閱讀

摘要:本文介紹了如何利用上的免費(fèi)資源更快地訓(xùn)練模型。本文將介紹如何在上使用訓(xùn)練已有的模型,其訓(xùn)練速度是在上訓(xùn)練速度的倍。使用靜態(tài)訓(xùn)練模型,并將權(quán)重保存到文件。使用推理模型進(jìn)行預(yù)測。

本文介紹了如何利用 Google Colab 上的免費(fèi) Cloud TPU 資源更快地訓(xùn)練 Keras 模型。

很長一段時(shí)間以來,我在單個(gè) GTX 1070 顯卡上訓(xùn)練模型,其單精度大約為 8.18 TFlops。后來谷歌在 Colab 上啟用了免費(fèi)的 Tesla K80 GPU,配備 12GB 內(nèi)存,且速度稍有增加,為 8.73 TFlops。最近,Colab 的運(yùn)行時(shí)類型選擇器中出現(xiàn)了 Cloud TPU 選項(xiàng),其浮點(diǎn)計(jì)算能力為 180 TFlops。

本文將介紹如何在 Colab 上使用 TPU 訓(xùn)練已有的 Keras 模型,其訓(xùn)練速度是在 GTX 1070 上訓(xùn)練速度的 20 倍。

我們首先構(gòu)建一個(gè)易于理解但訓(xùn)練過程比較復(fù)雜的 Keras 模型,以便「預(yù)熱」Cloud TPU。在 IMDB 情感分類任務(wù)上訓(xùn)練 LSTM 模型是個(gè)不錯(cuò)的選擇,因?yàn)?LSTM 的計(jì)算成本比密集和卷積等層高。

流程如下所示:

構(gòu)建一個(gè) Keras 模型,可使靜態(tài)輸入 batch_size 在函數(shù)式 API 中進(jìn)行訓(xùn)練。

將 Keras 模型轉(zhuǎn)換為 TPU 模型。

使用靜態(tài) batch_size * 8 訓(xùn)練 TPU 模型,并將權(quán)重保存到文件。

構(gòu)建結(jié)構(gòu)相同但輸入批大小可變的 Keras 模型,用于執(zhí)行推理。

加載模型權(quán)重。

使用推理模型進(jìn)行預(yù)測。

讀者閱讀本文時(shí),可以使用 Colab Jupyter notebook Keras_LSTM_TPU.ipynb(https://colab.research.google.com/drive/1QZf1WeX3EQqBLeFeT4utFKBqq-ogG1FN)進(jìn)行試驗(yàn)。

首先,按照下圖的說明在 Colab 運(yùn)行時(shí)選項(xiàng)中選擇激活 TPU。

激活 TPU

靜態(tài)輸入 Batch Size

在 CPU 和 GPU 上運(yùn)行的輸入管道大多沒有靜態(tài)形狀的要求,而在 XLA/TPU 環(huán)境中,則對(duì)靜態(tài)形狀和 batch size 有要求。

Could TPU 包含 8 個(gè)可作為獨(dú)立處理單元運(yùn)行的 TPU 核心。只有八個(gè)核心全部工作,TPU 才算被充分利用。為通過向量化充分提高訓(xùn)練速度,我們可以選擇比在單個(gè) GPU 上訓(xùn)練相同模型時(shí)更大的 batch size。最開始較好設(shè)定總 batch size 為 1024(每個(gè)核心 128 個(gè))。

如果你要訓(xùn)練的 batch size 過大,可以慢慢減小 batch size,直到它適合 TPU 內(nèi)存,只需確??偟?batch size 為 64 的倍數(shù)即可(每個(gè)核心的 batch size 大小應(yīng)為 8 的倍數(shù))。

使用較大的 batch size 進(jìn)行訓(xùn)練也同樣有價(jià)值:通??梢苑€(wěn)定地提高優(yōu)化器的學(xué)習(xí)率,以實(shí)現(xiàn)更快的收斂。(參考論文:https://arxiv.org/pdf/1706.02677.pdf)

在 Keras 中,要定義靜態(tài) batch size,我們需使用其函數(shù)式 API,然后為 Input 層指定 batch_size 參數(shù)。請(qǐng)注意,模型在一個(gè)帶有 batch_size 參數(shù)的函數(shù)中構(gòu)建,這樣方便我們?cè)倩貋頌?CPU 或 GPU 上的推理運(yùn)行創(chuàng)建另一個(gè)模型,該模型采用可變的輸入 batch size。

import tensorflow as tf

from tensorflow.python.keras.layers import Input, LSTM, Bidirectional, Dense, Embedding

def make_model(batch_size=None):

? ? source = Input(shape=(maxlen,), batch_size=batch_size,

? ? ? ? ? ? ? ? ? ?dtype=tf.int32, name="Input")

? ? embedding = Embedding(input_dim=max_features,

? ? ? ? ? ? ? ? ? ? ? ? ? output_dim=128, name="Embedding")(source)

? ? lstm = LSTM(32, name="LSTM")(embedding)

? ? predicted_var = Dense(1, activation="sigmoid", name="Output")(lstm)

? ? model = tf.keras.Model(inputs=[source], outputs=[predicted_var])

? ? model.compile(

? ? ? ? optimizer=tf.train.RMSPropOptimizer(learning_rate=0.01),

? ? ? ? loss="binary_crossentropy",

? ? ? ? metrics=["acc"])

? ? return model

training_model = make_model(batch_size=128)

此外,使用 tf.train.Optimizer,而不是標(biāo)準(zhǔn)的 Keras 優(yōu)化器,因?yàn)?Keras 優(yōu)化器對(duì) TPU 而言還處于試驗(yàn)階段。

將 Keras 模型轉(zhuǎn)換為 TPU 模型

tf.contrib.tpu.keras_to_tpu_model 函數(shù)將 tf.keras 模型轉(zhuǎn)換為同等的 TPU 模型。

import os

import tensorflow as tf

# This address identifies the TPU we"ll use when configuring TensorFlow.

TPU_WORKER = "grpc://" + os.environ["COLAB_TPU_ADDR"]

tf.logging.set_verbosity(tf.logging.INFO)

tpu_model = tf.contrib.tpu.keras_to_tpu_model(

? ? training_model,

? ? strategy=tf.contrib.tpu.TPUDistributionStrategy(

? ? ? ? tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))

然后使用標(biāo)準(zhǔn)的 Keras 方法來訓(xùn)練、保存權(quán)重并評(píng)估模型。請(qǐng)注意,batch_size 設(shè)置為模型輸入 batch_size 的八倍,這是為了使輸入樣本在 8 個(gè) TPU 核心上均勻分布并運(yùn)行。

history = tpu_model.fit(x_train, y_train,

? ? ? ? ? ? ? ? ? ? ? ? epochs=20,

? ? ? ? ? ? ? ? ? ? ? ? batch_size=128 * 8,

? ? ? ? ? ? ? ? ? ? ? ? validation_split=0.2)

tpu_model.save_weights("./tpu_model.h5", overwrite=True)

tpu_model.evaluate(x_test, y_test, batch_size=128 * 8)

我設(shè)置了一個(gè)實(shí)驗(yàn),比較在 Windows PC 上使用單個(gè) GTX1070 和在 Colab 上運(yùn)行 TPU 的訓(xùn)練速度,結(jié)果如下。

GPU 和 TPU 都將輸入 batch size 設(shè)為 128,

GPU:每個(gè) epoch 需要 179 秒。20 個(gè) epoch 后驗(yàn)證準(zhǔn)確率達(dá)到 76.9%,總計(jì) 3600 秒。

TPU:每個(gè) epoch 需要 5 秒,第一個(gè) epoch 除外(需 49 秒)。20 個(gè) epoch 后驗(yàn)證準(zhǔn)確率達(dá)到 95.2%,總計(jì) 150 秒。

20 個(gè) epoch 后,TPU 上訓(xùn)練模型的驗(yàn)證準(zhǔn)確率高于 GPU,這可能是由于在 GPU 上一次訓(xùn)練 8 個(gè) batch,每個(gè) batch 都有 128 個(gè)樣本。

在 CPU 上執(zhí)行推理

一旦我們獲得模型權(quán)重,就可以像往常一樣加載它,并在 CPU 或 GPU 等其他設(shè)備上執(zhí)行預(yù)測。我們還希望推理模型接受靈活的輸入 batch size,這可以使用之前的 make_model() 函數(shù)來實(shí)現(xiàn)。

inferencing_model = make_model(batch_size=None)

inferencing_model.load_weights("./tpu_model.h5")

inferencing_model.summary()

可以看到推理模型現(xiàn)在采用了可變的輸入樣本。

_________________________________________________________________

Layer (type) Output Shape Param #

=================================================================

Input (InputLayer) (None, 500) 0

_________________________________________________________________

Embedding (Embedding) (None, 500, 128) 1280000

_________________________________________________________________

LSTM (LSTM) (None, 32) 20608

_________________________________________________________________

Output (Dense) (None, 1) 33

=================================================================

然后,你可以使用標(biāo)準(zhǔn) fit()、evaluate() 函數(shù)與推理模型。

結(jié)論

本快速教程介紹了如何利用 Google Colab 上的免費(fèi) Cloud TPU 資源更快地訓(xùn)練 Keras 模型。

原文鏈接:https://www.kdnuggets.com/2019/03/train-keras-model-20x-faster-tpu-free.html

聲明:本文版權(quán)歸原作者所有,文章收集于網(wǎng)絡(luò),為傳播信息而發(fā),如有侵權(quán),請(qǐng)聯(lián)系小編及時(shí)處理,謝謝!


歡迎加入本站公開興趣群

商業(yè)智能與數(shù)據(jù)分析群

興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)

QQ群:81035754

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/4868.html

相關(guān)文章

  • tpu加速tensorflow

    當(dāng)涉及到大規(guī)模的機(jī)器學(xué)習(xí)任務(wù)時(shí),加速處理速度是至關(guān)重要的。Tensor Processing Units(TPUs)是一種專門為機(jī)器學(xué)習(xí)任務(wù)設(shè)計(jì)的硬件加速器,可以在訓(xùn)練和推斷階段顯著提高TensorFlow模型的性能。 在本文中,我們將討論如何使用TPUs加速TensorFlow模型的訓(xùn)練過程。首先,我們將簡要介紹TPUs的工作原理,然后探討如何在TensorFlow中使用TPUs進(jìn)行訓(xùn)練。 ...

    henry14 評(píng)論0 收藏2846
  • 深度學(xué)習(xí)引擎的終極形態(tài)是什么?

    摘要:首先,我們一起來開一個(gè)腦洞想象一個(gè)最理想的深度學(xué)習(xí)引擎應(yīng)該是什么樣子的,或者說深度學(xué)習(xí)引擎的終極形態(tài)是什么看看這會(huì)給深度學(xué)習(xí)框架和專用芯片研發(fā)帶來什么啟發(fā)。眾所周知,現(xiàn)在是深度學(xué)習(xí)領(lǐng)域應(yīng)用最廣的計(jì)算設(shè)備,據(jù)說比更加強(qiáng)大,不過目前只有可以用。 首先,我們一起來開一個(gè)腦洞:想象一個(gè)最理想的深度學(xué)習(xí)引擎應(yīng)該是什么樣子的,或者說深度學(xué)習(xí)引擎的終極形態(tài)是什么?看看這會(huì)給深度學(xué)習(xí)框架和AI專用芯片研發(fā)帶...

    Cobub 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<