相信很多人都看过这篇文章:
量子位:薅资本主义羊毛,用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