在Colab 上使用免費TPU

文章推薦指數: 80 %
投票人數:10人

我是使用Colab Pro (USD 9.99/月), 已經有比較快的GPU了,但是TPU 跑起來大概快個5 倍,讓我原本訓練一個模型要大概5 天(而且會一直斷線XD),現在只 ... HomeNotificationsListsStoriesWrite在Colab上使用免費TPUColab上現在可以使用免費TPU了(雖然不是真的完全免費)數據儲存費用是USD0.02/GB。

擔心花太多錢的話可以看詳細的價目表。

另外這裡可以申請新客戶免費USD300,可以用超久對想自己練習建模或做side-project的人就是天上掉下來的午餐對免費仔來說,TPU真的快、超快,甚至可能比很多學校實驗室提供的GPU還好用,但是寫法不太直覺。

我在用TPU的過程中踩了很多坑,而且發現網路上很難找到完整的入門教學文章。

我憑著極有限的技術能力一路拼拼湊湊、跌跌撞撞,這篇文章就是想記錄這些內容,讓大家建立起一個能動的模型(能動最重要了,其它再說吧)關於ColabGoogle提供的免費類JupyterNotebook介面,付費版本可以優先使用比較快的GPU,並且提供更長的運行時長。

不過如果只是想做POC或練習訓練一些小模型的人,用免費的就好了。

但我必須要說ColabPro真的很好用,可以提升訓練時長到12小時左右,而且GPU也快不少,而且一個月才USD9.99。

比較麻煩的是需要填一個美國地址,我是找朋友幫掛了一個地址。

(最近又出了ColabPro+,這邊有定價)關於TPUGoogle架設的運算資源集叢,真的很快,爬一些文章看大家的心得發現比單核GPU快3-9倍不等。

我是使用ColabPro(USD9.99/月),已經有比較快的GPU了,但是TPU跑起來大概快個5倍,讓我原本訓練一個模型要大概5天(而且會一直斷線XD),現在只需要一個晚上,真的大碗又滿意前置作業—把資料放上雲端作為GoogleCloud生態系的一部分,TPU大部分應該是企業用戶在用。

現在開放比較舊的TPU版本給Colab使用,但是在開始訓練之前,資料要全部放在GoogleCloud的GCS(GoogleCloudStorage)中,而把資料放在這上面需要花一點點錢。

要注意的是這邊是不能用GoogleDrive,一定要用GCS但是收費很低,不太需要擔心(儲存費用是USD0.026/GB)。

如果資料量真的很大擔心花太多錢的話可以看詳細的價目表如果你以前沒有用過GoogleCloud,可以在這裡申請新客戶免費額度,這樣就有USD300可以用了,可以用超久首先在GoogleCloudConsole打開一個新project2.在新project頁面搜尋GoogleCloudStorage3.GCS上的基本單位是Bucket,所以先創建一個新的Bucket,取好名字後用預設選項一路選下去然後按create就可以了。

右邊可以估算花費創建好之後會進入Bucket頁面,把要用的資料都上傳到這邊。

我的做法是直接把已經分好train-val-test的資料夾上傳GoogleColab好了之後就可以進到Colab裡面了,在「執行階段」裡的「變更執行階段類型」選擇確認版本(Tensorflow)這邊有個坑,Colab上的Tensorflow版本要跟TPU上的Tensorflow版本一樣。

但問題是我怎麼會知道TPU上的Tensorflow是什麼版本?總之,在這篇文章產出的當下(2021/8/20)是2.5,而Colab預裝的Tensorflow也是2.5,所以不需要做任何事但是在幾個月前,TPU的版本是2.4,所以就要先執行!pipinstalltensorflow==2.4如果遇到問題,真的找不出bug的話,可以試著更換Tensorflow版本至於PyTorch的話…我就不知道了,大家可以看看這個針對PyTorch官方教程2.權限設定首先要先讓Colab可以存取GCS。

另外,推薦將訓練好的模型存在GoogleDrive,所以可以同時提供GCS和GoogleDrive的權限要留意的是,Colab的授權方式是,運行這一格之後,會出現一個授權頁面,裡面會有一串代碼。

把這串代碼貼到Colaboutput上之後就算授權完成。

所以這兩個授權要寫在不同的兩格,不然在output就只會出現第二個授權GoogleDrive授權#AccessGoogleDrivefromgoogle.colabimportdrivedrive.mount(‘/content/drive’)GCS授權#AccessGCSfromgoogle.colabimportauthauth.authenticate_user()3.分散式運算咒語這一串是讓Tensorflow使用分散式運算。

3和4都是參照官方教程try:tpu=tf.distribute.cluster_resolver.TPUClusterResolver()#TPUdetectionprint(‘RunningonTPU‘,tpu.cluster_spec().as_dict()[‘worker’])exceptValueError:raiseBaseException(‘ERROR:NotconnectedtoaTPUruntime;pleaseseethepreviouscellinthisnotebookforinstructions!’)tf.config.experimental_connect_to_cluster(tpu)tf.tpu.experimental.initialize_tpu_system(tpu)tpu_strategy=tf.distribute.experimental.TPUStrategy(tpu)4.設定BatchSize和路徑根據TPU文件,BatchSize建議為64的倍數,可以從比較大的BatchSize(1024之類的)開始試。

另外,因為TPU算力很強,如果餵資料不夠快,運算瓶頸就會在datapipeline那邊,所以一次餵多一點資料也是想充分運用TPUbatch_size=1024gcs_path=“gs://new-bucket/”#在GCS上的bucketnametrain_pattern=gcs_path+“train/*.tfrecords”train_files=tf.io.gfile.glob(train_pattern)val_pattern=gcs_path+“val/*.tfrecords”val_files=tf.io.gfile.glob(val_pattern)這邊跑完之後如果不放心可以把train_files印出來檢查5.資料和初始化模型大致上就跟平常的做法一樣,但使用TPU時要把這些東西都包成函數,所以我的做法就只是這樣:deftrain_data():#就是普通的trainingdatareturntraindefcreate_model():#就是普通的kerasmodelreturnmodel另外在建立模型時有一點要注意,有時候大家在指定維度的時候會習慣使用-1來代表最後一個維度,或是在reshape的時候會把最後一個數字寫成-1.在TPU架構上這是不行的,一定要把數字明確地寫出來6.開始訓練withtpu_strategy.scope():m=create_model()m.save("/content/drive/MyDrive/")#儲存模型架構m.fit(train_data(),....)最後訓練好的參數可以儲存在GoogleDrive上跟著這些步驟的話,應該就可以順利用上TPU了,不過當然還是要附上:7.如何debug用TPU會遇到超多bug,所以這邊提供一個debug的清單,可以先從這個清單上開始檢查GoogleCloudStorage有沒有授權成功餵資料和模型有沒有包成函數模型裡的維度有沒有被「明確指出」(不可以寫-1)初始化模型有沒有在tpu_strategy.scope()底下使用Tensorflow的話,不需要特別指定Eager/Graphmode最好的debug手冊:TPU官方文件TPUinColab官方範例→推薦大家可以從這個範例開始改code如果你已經有一個能動的模型了,可以試試看進階的PerformanceProfiling透過Tensorboard可以看到模型訓練的瓶頸點在哪,由於TPU運算能力很強,所以大部分的瓶頸都會是在餵資料那一端,在Tensorboard上可以看到TPU有多長時間是閒置的。

如果瓶頸是在餵資料那邊,就要想辦法優化datapipeline祝大家善用快速又超低價的TPU資源,擺脫訓練的等待時間MorefromTerryKuoFollowDataEngineer/RecruitmentConsultant@Copenhagen.WriteaboutDatatechnologiesandlifeinNordic.Lovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableGetstartedTerryKuo251FollowersDataEngineer/RecruitmentConsultant@Copenhagen.WriteaboutDatatechnologiesandlifeinNordic.FollowRelatedClassifyingClothingItemsusingArtificialNeuralNetworksonCainvasPlatformImplementingDeepConvolutionalGenerativeAdversarialNetwork(DCGAN)usingcelebadatasetImageclustering(filtering)usingpre-trainedConvolutionalNeuralNetworksandclustering…UnderlineandHighlightAugmentation — AugraphyHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable



請為這篇文章評分?