天天看点

怎样判断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的羊毛