如何使用Kaggle?

Tensor Processing Units (TPUs)

現(xiàn)在可以在Kaggle上免費(fèi)使用TPU。 TPU是專門用于深度學(xué)習(xí)任務(wù)的硬件加速器。Tensorflow 2.1通過(guò)Keras高級(jí)API以及較低級(jí)別的使用自定義訓(xùn)練循環(huán)的模型都支持它們。

您每個(gè)星期最多可以使用30個(gè)小時(shí)的TPU,一次最多可以使用3個(gè)小時(shí)。

本頁(yè)說(shuō)明如何: 1) 在Tensorflow和Keras中啟用TPU, 2) 調(diào)整批次大小和學(xué)習(xí)率, 3) 優(yōu)化數(shù)據(jù)管道以實(shí)現(xiàn)快速加速器

TPUs in Keras

將筆記本中的“ Accelerator”開(kāi)關(guān)切換到“ TPU v3-8”后,這就是在Tensorflow Keras中啟用TPU訓(xùn)練的方法:

# detect and init the TPU
tpu = tf.distribute.cluster_resolver.TPUClusterResolver()
tf.config.experimental_connect_to_cluster(tpu)
tf.tpu.experimental.initialize_tpu_system(tpu)

# instantiate a distribution strategy
tpu_strategy = tf.distribute.experimental.TPUStrategy(tpu)

# instantiating the model in the strategy scope creates the model on the TPU
with tpu_strategy.scope():
    model = tf.keras.Sequential( … ) # define your model normally
    model.compile( … )

# train model normally
model.fit(training_dataset, epochs=EPOCHS, steps_per_epoch=…)

TPU是網(wǎng)絡(luò)連接的加速器,您必須首先在網(wǎng)絡(luò)上找到它們。這就是TPUClusterResolver()所做的。

兩條額外的樣板行,您可以定義一個(gè)TPUStrategy。該對(duì)象包含必要的分布式培訓(xùn)代碼,這些代碼將在具有8個(gè)計(jì)算核心的TPU上工作(請(qǐng)參閱下面的硬件部分)。

最后,通過(guò)在策略范圍內(nèi)實(shí)例化模型來(lái)使用TPUStrategy。這將在TPU上創(chuàng)建模型。模型大小僅受TPU RAM限制,不受運(yùn)行Python代碼的VM上可用的內(nèi)存量限制。模型創(chuàng)建和模型訓(xùn)練使用常規(guī)的Keras API。

Batch size, learning rate

要快速使用TPU,請(qǐng)?jiān)黾优未笮?。?jīng)驗(yàn)法則是每核使用128個(gè)元素的批處理(例如:對(duì)于具有8個(gè)核的TPU,批處理大小為128 * 8 = 1024)。在這種尺寸下,TPU的128x128硬件矩陣乘法器(請(qǐng)參閱下面的硬件部分)最有可能保持忙碌狀態(tài)。不過(guò),您開(kāi)始看到有趣的加速效果(批處理大小為每核8個(gè))。在上面的示例中,通過(guò)以下代碼行,批處理大小隨核心數(shù)量縮放:

BATCH_SIZE = 16 * tpu_strategy.num_replicas_in_sync

在單個(gè)TPU v3-8上運(yùn)行TPUStrategy時(shí),核心數(shù)量為8。這是Kaggle上可用的硬件。在Google Cloud上可用的稱為TPU Pod的較大配置上可能更多。

批量較大時(shí),TPU將更快地處理訓(xùn)練數(shù)據(jù)。這僅在較大的培訓(xùn)批次產(chǎn)生更多“培訓(xùn)工作”并使模型更快地達(dá)到所需精度時(shí)才有用。這就是為什么經(jīng)驗(yàn)法則還要求隨著批次大小提高學(xué)習(xí)率。您可以從成比例的增加開(kāi)始,但是可能需要進(jìn)行其他調(diào)整才能找到給定模型和加速器的最佳學(xué)習(xí)率時(shí)間表。

tf.data.Dataset and TFRecords

由于TPU的速度非???,因此許多移植到TPU的型號(hào)最終都會(huì)出現(xiàn)數(shù)據(jù)瓶頸。 TPU處于閑置狀態(tài),等待每個(gè)訓(xùn)練時(shí)期的大部分時(shí)間的數(shù)據(jù)。 TPU僅從GCS(Google云存儲(chǔ))讀取培訓(xùn)數(shù)據(jù)。如果GCS持續(xù)并行地從多個(gè)文件中流式傳輸,則可以維持相當(dāng)大的吞吐量。遵循幾個(gè)最佳實(shí)踐將優(yōu)化吞吐量:

如果文件太少,GCS將沒(méi)有足夠的流來(lái)獲得最大吞吐量。如果文件太多,訪問(wèn)每個(gè)文件都會(huì)浪費(fèi)時(shí)間。

用于TPU訓(xùn)練的數(shù)據(jù)通常會(huì)分?jǐn)偟竭m當(dāng)數(shù)量的較大文件中。通常的容器格式是TFRecords。您可以通過(guò)編寫(xiě)以下內(nèi)容從TFRecords文件加載數(shù)據(jù)集:

# On Kaggle you can also use KaggleDatasets().get_gcs_path() to obtain the GCS path of a Kaggle dataset
filenames = tf.io.gfile.glob("gs://flowers-public/tfrecords-jpeg-512x512/*.tfrec") # list files on GCS
dataset = tf.data.TFRecordDataset(filenames)
dataset = dataset.map(...) # TFRecord decoding here...

要從多個(gè)TFRecord文件啟用并行流,請(qǐng)修改如下代碼:

AUTO = tf.data.experimental.AUTOTUNE
ignore_order = tf.data.Options()
ignore_order.experimental_deterministic = False

# On Kaggle you can also use KaggleDatasets().get_gcs_path() to obtain the GCS path of a Kaggle dataset
filenames = tf.io.gfile.glob("gs://flowers-public/tfrecords-jpeg-512x512/*.tfrec") # list files on GCS
dataset = tf.data.TFRecordDataset(filenames, num_parallel_reads=AUTO)
dataset = dataset.with_options(ignore_order)
dataset = dataset.map(...) # TFRecord decoding here...

這里有兩個(gè)設(shè)置:

  • num_parallel_reads = AUTO指示API從多個(gè)文件讀取(如果有)。它會(huì)自動(dòng)計(jì)算出多少。
  • Experiment_deterministic = False禁用數(shù)據(jù)順序強(qiáng)制實(shí)施。無(wú)論如何,我們將對(duì)數(shù)據(jù)進(jìn)行混洗,因此順序并不重要。通過(guò)此設(shè)置,API可以在流入后立即使用任何TFRecord。

這些代碼段中省略了一些詳細(xì)信息,因此請(qǐng)檢查樣本以獲取完整的數(shù)據(jù)管道代碼。在Keras和TensorFlow 2.1中,還可以將訓(xùn)練數(shù)據(jù)作為內(nèi)存中的numpy數(shù)組發(fā)送到TPU。盡管對(duì)內(nèi)存中適合的數(shù)據(jù)集來(lái)說(shuō),這可以,但它并不是最有效的方法。

TPU hardware

TPU v3-8板約20英寸(50厘米),是一塊相當(dāng)大的硬件。它具有4個(gè)雙核TPU芯片,總共8個(gè)TPU內(nèi)核。

每個(gè)TPU內(nèi)核都有一個(gè)傳統(tǒng)的矢量處理部分(VPU)以及能夠處理128x128矩陣的專用矩陣乘法硬件。這是專門加速機(jī)器學(xué)習(xí)工作負(fù)載的部分。

TPU配備128GB的高速內(nèi)存,可以進(jìn)行更大批量,更大型號(hào)以及更大的訓(xùn)練輸入。在上面的示例中,您可以嘗試使用數(shù)據(jù)集中也提供的512x512 px輸入圖像,并查看TPU v3-8輕松處理它們。

TPU monitor

當(dāng)您在Kaggle上運(yùn)行TPU工作負(fù)載時(shí),單擊TPU標(biāo)尺時(shí)會(huì)出現(xiàn)性能監(jiān)視器。

MXU百分比表示TPU計(jì)算硬件的利用效率。越高越好。

“空閑時(shí)間”百分比衡量TPU空閑等待數(shù)據(jù)的頻率。您應(yīng)該優(yōu)化數(shù)據(jù)管道,以使其盡可能低。

測(cè)量大約每10秒刷新一次,僅在TPU運(yùn)行計(jì)算時(shí)才出現(xiàn)。

More information and tutorial

此處提供了包含更多信息,最佳實(shí)踐和示例的動(dòng)手TPU教程:Keras and modern convnets, on TPUs

TPU playground competition

我們準(zhǔn)備了一個(gè)13,000張花朵圖像的數(shù)據(jù)集,供您使用。您可以在以下付費(fèi)競(jìng)賽中嘗試TPU:Flower Classification with TPUs

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容