相信很多人都看過這篇文章:
量子位:薅資本主義羊毛,用Google免費GPUzhuanlan.zhihu.com
去年10月份的時候,谷歌又上了新的TPU,以前12個小時斷以下的GPU終于不用忍受了(https://research.google.com/colaboratory/faq.html#gpu-availability)
官方也有GPU有時可用有時不可用的說明:
我可以如何使用 GPU?為什麼 GPU 有時不可用? Colaboratory 在使用時需要互動。系統可能會停止長時間運作的背景計算(尤其是在 GPU 上運作的計算)。請勿将 Colaboratory 用于加密貨币挖礦。此項操作不受支援,并且可能會導緻服務不可用。如果使用者希望通過 Colaboratory 界面運作連續或長時間運作的計算,我們建議他們使用本地運作時。
關于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