深度学习平台-Colab教程
Colab教程
本教程基于最新版编辑器和界面的Colab,此时TensorFlow2.0正式版已经支持。
简介
Colab(Colaboratory)是谷歌提供的一款基于Jupyter Notebook开发的免费深度学习云平台,尽管只是开放Notebook这样的交互式Python环境,依然可以通过魔法命令和shell命令执行Python脚本(使用和Jupyter Notebook一致,可以参照Jupyter教程)。和谷歌全家桶一样,Colab配合谷歌其他的应用如Google Drive(谷歌云盘)等共同使用。它预装了几乎所有主流的机器学习和深度学习框架以及常用的工具库,深度学习框架以TensorFlow为主,其他框架需要自行安装。同时,为了深度学习的应用,它不仅提供16G的内存,300G的临时存储空间,同时支持一张P100的16G显存的显卡。
启动方式
Colab主要有两种启动方式,一种是从Colab的官网主要打开Notebook(ipynb后缀文件),另一种是通过打开自己的Google Drive并关联Colaboratory直接从云盘打开。(个人喜欢后一种方式量,但是两种方式差别不大但也各有局限性)。
先看第一种方式,Google搜索Colab或者访问官网地址。如果你是第一次使用,只能看到一个完全用Jupyter Notebook写成的Welcome笔记本,你的笔记本可以来自硬盘(自行创建,如果直接新建notebook会在Google云盘中自动创建名为Colab Notebooks
的文件夹用于默认的Notebook文件存放路径),也可以来自Github(需要授权)或者当即上传(上传的位置决定是否会在时长到达是释放删除)。
第二种方式,没有太大扩展空间但是比较实用。在存放Notebook的文件夹中新建Notebook使用Colaboratory打开即可。当然,这种方式就不能打开Github等仓库Notebook。
Notebook配置
打开一个新建的Notebook,会看到Colab的工作界面。
有一些必要的配置内容,如文件名(点击文件名处即可修改,修改后Google云盘中的Notebook文件名会相应同步修改),GPU环境(默认使用CPU打开,点击导航栏的修改->笔记本设置->硬件加速器->GPU即可,点击保存会重新开启一个新的GPU的docker环境作为该Notebook的后端)以及编辑器环境(可以点击下图右上角标志修改新版或者旧版编辑器,最大的区别是tab键补全和新版的自动补全,本人不太适应新版)。
可以通过工作区相应的显示实时观察环境状态(如右上角服务器端状态,左下角临时存储空间大小等)。
更多时候,希望训练的一些结果被永久保存而不是存放在可能随时释放(因为Colab连续使用12小时,会自动释放后端)的临时区(300G),这是可以将训练过程的结果或者已经训练很多轮的模型存放到Google云盘中,Google云盘提供免费用户15G的空间。类似这样的操作需要挂载Google云盘到当前的工作环境下,可以点击左侧的装载Google云端硬盘
或者手动输入下图代码,需要获取授权码填入输入框回车即可。旧版本比较麻烦,需要使用一些Linux命令才能挂载。挂载后在左侧文件区域可以看到,并且右击复制文件路径用于代码填写。
Colab配置了代码自动折叠,只需要将代码的若干个cell放到一个标题(若干个#
开头)的markdown单元后即可。
模型训练
配置完成后,可以通过!nvidia-smi
命令(具体见文章简介提到的Jupyter教程)查看GPU配置。可以看到提供了一张16G的P100显卡,此前经历了K80到T4到P100的变化(过长时间使用,可能会自动释放P100环境然后改为K80环境)。
重点提一下如何使用TensorFlow2进行训练,不需要自己进行安装配置等操作,其实Colab已经默认安装了TF2,只需要通过封装的魔法命令(%tensorflow_version 2.x
)修改环境变量即可。
此时,就可以适应TensorFlow2.0作为深度学习框架训练了,下面编写TF2训练测试demo。
import tensorflow as tf
import tensorflow.keras.datasets as datasets
print(tf.test.is_gpu_available())
print(tf.test.gpu_device_name())
(x_train, y_train), (x_test, y_test) = datasets.cifar10.load_data()
def preprocess(x, y):
x = tf.image.resize(x, [224, 224])
x = tf.cast(x, dtype=tf.float32) / 255.
y = tf.convert_to_tensor(y)
y = tf.one_hot(y, depth=10)
return x, y
db_train = tf.data.Dataset.from_tensor_slices((x_train, y_train))
db_train = db_train.shuffle(1000).map(preprocess).batch(32)
db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.map(preprocess).batch(32)
net = tf.keras.applications.ResNet50(weights='imagenet', include_top=False, pooling='max')
resnet = tf.keras.Sequential([
net,
tf.keras.layers.Dense(10, activation='softmax')
]
)
resnet.build(input_shape=(None, 224, 224, 3))
resnet.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
resnet.fit(db_train, validation_data=db_test, epochs=10)
将这部分TF2训练代码同时作为Notebook Cell或者在新建一个临时空间的py文件(现在的版本的Colab可以编辑左侧文件区的代码文件了)分别执行训练。
注意事项
- Colab创建的Notebook是可以完全兼容Jupyter Notebook的,可以直接打开,但是,可能会丢失一些效果,如代码折叠等插件效果,因为这些效果是Colab自主安装的插件。
- Colab的默认快捷键和Jupyter的默认有冲突,这是为了解决一些浏览器快捷键的问题,其中最大的改变就是ESC+某键的操作修改为Ctrl+M+某键,不能习惯可以自行在导航栏的工具->快捷键中修改。(当然,Colab提供了丰富的图形界面,不修改完全足够使用。)
- 一般,比较大的深度学习项目都是由大量的脚本文件构成,一个Notebook是远远不够的,此时将项目push到Github然后Notebook中执行
!git clone url
,并!python train.py
即可训练,注意将模型输出地址修改为Google云盘,以防临时空间丢失。 - 注意,Colab环境的一次开放时间是12个小时,之后运行环境会被强制释放,一定要做好及时的保存。如果环境闲置时间超过90分钟,也会自动释放。
- 不要在Google云盘里运行项目,这样固然任何运行的中间文件都不会丢失,但是运行的后端GPU环境和Google Drive交互很费时间,训练会非常慢。
-
- 目前TensorFlow2.0对Colab的TPU环境支持不是很有效,据官方所说到TensorFlow2.1将会完善。
补充说明
更多推荐
所有评论(0)