天天看點

怎樣判斷keras模型是否使用了tpu_合理的薅谷歌TPU的羊毛

怎樣判斷keras模型是否使用了tpu_合理的薅谷歌TPU的羊毛

相信很多人都看過這篇文章:

量子位:薅資本主義羊毛,用Google免費GPU​zhuanlan.zhihu.com

怎樣判斷keras模型是否使用了tpu_合理的薅谷歌TPU的羊毛

去年10月份的時候,谷歌又上了新的TPU,以前12個小時斷以下的GPU終于不用忍受了(https://research.google.com/colaboratory/faq.html#gpu-availability)

官方也有GPU有時可用有時不可用的說明:

我可以如何使用 GPU?為什麼 GPU 有時不可用? Colaboratory 在使用時需要互動。系統可能會停止長時間運作的背景計算(尤其是在 GPU 上運作的計算)。請勿将 Colaboratory 用于加密貨币挖礦。此項操作不受支援,并且可能會導緻服務不可用。如果使用者希望通過 Colaboratory 界面運作連續或長時間運作的計算,我們建議他們使用本地運作時。

關于TPU的羊毛可以薅多久,至少官網還沒有說明,我在組的的伺服器實在搶不過來了,就用這個來多跑幾個模型。

首先,我隻做TPU方面以及一些其他的補充,不重複造輪子,其他的使用請參考量子位的文章。

  1. 運作環境與資料集。
怎樣判斷keras模型是否使用了tpu_合理的薅谷歌TPU的羊毛

這是運作的環境,資料集上傳到自己的google drive以後其實是不可見的,需要通過

from 
           

挂載,其中要授權一下。

注意google drive隻有15G。

2. TPU的調用

在setting中運作環境中選TPU就好了。

模型需要轉換以下,根據官方例子(Keras Fashion MNIST)

使用指令

tpu_model 
           

把模型轉換成TPU model,其中有一點要注意,keras的model是不可以用的,必須要是tf.keras的model才可以,修改代碼

#import keras
           

API略有不同,需要簡單修改下。

關于轉換的那個指令,多說兩句,我個人感覺還是有點bug的:

tf.contrib.tpu.keras_to_tpu_model是把keras model轉換成 TPU model,而tf.contrib.tpu.TPUDistributionStrategy是轉換的政策, 而tf.contrib.cluster_resolver.TPUClusterResolver是指定的TPU,當同時寫:

TPUClusterResolver = tf.contrib.cluster_resolver.TPUClusterResolver(tpu='grpc://' + os.environ['COLAB_TPU_ADDR'])
Model1 = tf.contrib.tpu.keras_to_tpu_model( model1, strategy=tf.contrib.tpu.TPUDistributionStrategy(TPUClusterResolver) )
Model2 = tf.contrib.tpu.keras_to_tpu_model( model2, strategy=tf.contrib.tpu.TPUDistributionStrategy(TPUClusterResolver) )
           

指定同一個TPU的時候,在第二條指定的時候會出錯,應該是指定到同一個TPU上面去了,但是到目前為止,我還沒有找到怎麼把Model1從TPU上面release的方法。

3. TPU效率

根據題圖可見,一共配置設定了1個worker,其中有8個TPU core,和我伺服器上雙1080TI的對比是:

一個Epoch

TPU:~30min

2*1080Ti:~20min

可以看出速度還是很客觀。

顯存的話,我本來的輸入是500*840,被TPU自動限制成了62*840,32bit,那麼計算下應該是62*840*4/1024=203MB,确實有點小。。。。。

羊毛可以薅起來了。

其他參考:

機器之心:Colab提供了免費TPU,機器之心幫你試了試​zhuanlan.zhihu.com

怎樣判斷keras模型是否使用了tpu_合理的薅谷歌TPU的羊毛