前几天看网上说Google推出了免费的GPU专门给机器学习的穷孩子们用!顿时让我激动了起来,马上去试用了一下。(哦,自备梯子...) 参考教程: 但是因为自己的项目跟教程中的不太一样,有一些细节没有说清楚,查了很多资料终于解决,决定这里把我自己的使用过程记录下来: Google Colaboratory直接Google一下: 点击进去看看: 发现是Colaboratory的简介,里面附有一些简单的代码告诉你怎么使用这个玩意儿。你会发现它跟Jupyternotebook很像,因为它就是在jupyter notebook基础上开发的: 所以很好理解,Google给你准备了一个云端的jupyter notebook,你把你的代码搬过来,在云端运行你的代码,耗费的不是你自己电脑的计算力,而是Google Colaboratory的计算力,而Google Colaboratory配备了Tesla K80 GPU!这可是贵族用的玩意儿呀,哎呀捡着大便宜了! 但是这个GPU不是默认开启的,需要你设置一下notebook,很简单: 点击笔记本上的“修改(edit)-->笔记本设置(notebook setting)”: 就出现了下面的窗口,在“硬件加速器”中选择“GPU”即可: 吼吼,就好了! 上面介绍的是Colaboratory的简单使用和怎么开启GPU,下面介绍怎么把本地的项目放到云端运行: Google drive+Colaboratory 运行你的项目Google Colaboratory是基于Google云端硬盘(drive)的,你的所有代码文件都会保存在Google Drive中,所有我们首先需要Google drive。 先说说我自己的是什么项目吧: 我在本地的notebook中有这样的一个做“神经网络风格迁移(neural style transfer)”的项目,目录如下: .ipynb就是我的jupyter notebook文件, imagenet-vgg-verydeep-19是我下载的VGG神经网络模型, nst_utils.py里面有一些功能函数,也需要在.ipynb中调用。 什么是neural style transfer呢?就是做这个: 这个神经网络跑起来可是相当费时的,我自己的电脑,生成一个400×300大小的图片,跑200个epoch需要30分钟!所以虽然这个项目很激动人心,但是等一次结果真的很急人! 好了,现在我们开始把这个本地项目转移到Google drive上,并通过Colaboratory来运行!: 1.把文件夹上传到Google drive图中的NST文件夹就是我上传的。目录结构跟我本地的一样: image 文件不能直接打开,但是Google drive里面有Colaboratory插件,可以打开.ipybn文件: 右键选择打开方式: 我的这个文件里面,需要import我的NST文件夹中的nst_utils.py文件,因为里面写了很多重要函数,但运行一下程序,肯定会报错,说找不到nst_utils.py文件。 为啥呢?因为Colaboratory并没有关联你的Google drive!所以,接着设置: 2.安装必要的库,授权,连接你的Google drive这个Colaboratory很牛逼的一点就是,它不光是一个notebook,还可以当命令行用! 我们在所有代码前面,加一个单元格,粘贴如下命令: !apt-get install -y -qq software-properties-common python-software-properties module-init-tools !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null !apt-get update -qq 2>&1 > /dev/null !apt-get -y install -qq google-drive-ocamlfuse fuse from google.colab import auth auth.authenticate_user() from oauth2client.client import GoogleCredentials creds = GoogleCredentials.get_application_default() import getpass !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL vcode = getpass.getpass() !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} 运行!你应该看到类似下面这种结果: 点击结果里面的验证链接,会跳到一个网页,显示一长串验证码, 将验证码复制粘贴到上面的框框中,回车! 好了,然后再在一个新单元格中输入下面命令: !mkdir -p drive !google-drive-ocamlfuse drive 再运行!就设置好了! 这样,Google drive就和Google Colaboratory连接好了,基本就可以像操作本地文件一样来操作云端的代码了。 3.如何导入Google drive中的文件现在如果直接写: from nst_utils import * 还是会报错,说找不到!这个地方折磨了我好久,不知道怎么回事儿。 后来发现,Colaboratory好像是单独创建了一个虚拟机,在虚拟机中只有我运行的ipybn文件,而没有NST文件夹中的其他文件。 from drive.NST.nst_utils import * drive就是我们的根目录,通过“ . ”来进入下一层目录,这样就可以导入我们的drive文件了! 同样的,后面我们需要导入NST文件夹中的imagenet-vgg-verydeep-19.mat文件,也就是我们的神经网络模型,这样写是错误的: model = load_vgg_model("imagenet-vgg-verydeep-19.mat") 正确的写法是: model = load_vgg_model("drive/NST/imagenet-vgg-verydeep-19.mat") 同样的,只要是要导入drive中的文件,都按照类似的绝对路径的方法来导入就可以了。 4.看看这个GPU效果如何具体代码就不展示了,只给大家看看模型运行的结果: 运行了200个epoch,共耗时46秒! 而我在本地运行,花了30分钟左右~ 可见这个速度提升地多块!Google大法好啊~ 下面附上每20次迭代的结果: 最开始的图片是这两张: 左边是陆家嘴照片,右边是现代派风格图片 最后生成的图片是: 现代派风格的陆家嘴 好了,关于Colaboratory的使用就先介绍到这里,主要我目前只知道这么多。。。日后有新的经验会继续更新! 8月1号更新:这几天在使用中发现,挂载google drive的那两段命令,在每一次新建一个notebook时都需要运行一次,所以大家可以把那两段命令放在一个方便查看的地方,随时复制粘贴。 而且,一个项目可能到了第二天就不能连接drive了,这个时候需要再运行一下命令。反正我的项目都是第二天早上起来就需要重新连接drive了。 另外,第一次运行命令的时候,跳出来一个链接,点击然后输入验证码之后,可能它又会跳出来一个一模一样的链接,同时整个版面像被清空了一样,这个时候,只要再次点击链接,再次输入验证码然后回车,看到“Access token retrieved correctly.” 就说明可以了。 !mkdir -p drive !google-drive-ocamlfuse drive 然后就可以连接drive了。 |
|