随身GPU服务器:Kaggle中kernels的快速入门指南

944 阅读9分钟

关于本文章的最新更新请查看:oldpan博客

前言

对于很多入门深度学习领域的小伙伴来说啊,拥有一款合适的显卡是必要的,只有拥有好的装备才能更好更快地进行神经网络的训练、调试网络结构、改善我们的代码,进而更快地产出结果。

也就是说,显卡可以代表生产力,显卡越好,生产力越强。程序训练的速度越快,我们也就可以更方便地看到结果从而进行下一步。大家可以回顾一下我在之前发布的几篇关于显卡的文章:

但是显卡这玩意儿的价格可是并不美好啊,假如没有实验室的经费和老师的“慷慨资助”,我们一般是消费不起高端显卡的。但是我们笔记本中的965M、1050TI等入门级显卡对于稍微繁重点的深度学习任务来说,根本带不动呀,就问你怕不怕。

嘿嘿,当然不怕,就算我们暂时没有可以派上用场的显卡(1080TI、2080TI),我们也可以撸一些大公司的羊毛嘛,毕竟是免费的,不用白不用,这里我就推荐一个比较好用的免费的网上GPU服务器:Kaggle下的kernels

拥有GPU的kernels

那么什么是kernels

这里的kernels说白了就类似于一个可以在浏览器上间接(本质上是在Kaggle的GPU服务器上)运行的一个环境,这个环境里包含了我们基本需要的各种软件,当然我们也可以自己去安装一些软件,然后去运行我们的训练程序。类似于Google Colab,但是相比Google Colab也有个巨大的优势,即不用科学上网!不用翻墙!不用翻墙!不用翻墙!

这个kernels因为是一个虚拟环境,和我们在其他平台上直接使用的GPU云服务器还有点区别,不用我们去耗费精力搭建环境,我们直接使用即可。

那什么又是是Kaggle呢,Kaggle只要大家稍微Google一下就可以知道,Kaggle是一个专门致力于机器学习方面比赛的平台,一些大公司将一些机器学习任务通过Kaggle发布到网上,大家可以在Kaggle上进行比赛,而Kaggle为了让那些没有服务器的新手更好地参加比赛,提供了免费的GPU让大家用,可以说是很实在了。

好了,说了这么多,让我们开始使用吧!

登录创建kernels

首先我们进入Kaggle的官网:www.kaggle.com/

创建自己的Kaggle账户,然后点击网站最上方的Kernels即可创建kernels。

这时会出现两个选项,我们选择右边的Notebook:

这样我们就进入了kernels界面:

左面是运行代码的区域,使用方式类似于Jupyter Notebook,而在右方我们可以看到这里开启了GPU,网络的没有连接。对于深度学习任务,我们一般开启GPU的支持,而网络连接当我们需要下一些额外的软件包的时候开启即可。

有一点需要注意,没有开启GPU时可以使用的总内存是17.2GB,开启后就变为14GB,磁盘容量是一定的,但是这个磁盘是交换数据时需要的,我们的数据集并不需要放到这个Disk里头。

开启GPU前:

开启GPU后:

另外,更多的帮助信息可以到Docs中查看,高级功能和API也可以直接点击查看。

配置

关于配置信息,我们只要在NoteBook中输入nvidia-smi即可看到,注意在前面加!号才可以执行:

然后我们就可以看到配置信息图,从图中可以得知我们此刻使用的显卡为Tesla K80,显存为12G,显卡驱动信息还是比较新,396.44。我们再看下CUDA的版本:

gcc版本:

整体来说,这个GPU服务器的硬件和软件配置都满足我们的一般需要了。

另外,Kaggle官方也贴心地为我们安装了Pytorch和fastai。

我们无需提前安装,直接使用即可,方便吧。

那么在回到显卡的配置,这款kernels中的K80属于什么水平呢,经过测试1080TI显卡比K80的速度快2倍左右,也就是说K80显卡的配置也算还不错了。

在美团云上的价格可以接受的服务器配置一般都是

M60、M40、K40
这三种配置,这三种为服务器显卡, M60拥有两个 GM204 核芯,每个 GM204 核芯拥有 2048 个计算单元,拥有8G显存,单精度浮点性能可达 4.85Tflops。在美团云上,一个 M60 的 GPU云主机是拥有一个 GM204 核芯的计算能力,售价为 1.2 元/时(仅GPU,不包括CPU、内存、网络、磁盘的价格)。 M40拥有一个 GM200 核芯,该核芯拥有 3072 个计算单元,拥有12G显存,单精度浮点性能可达 7Tflops。在美团云上,一个 M40 的 GPU云主机是拥有一个 GM200 核芯的计算能力,售价为 2.5 元/时(仅GPU,不包括CPU、内存、网络、磁盘的价格)。 K40 拥有一个 GK110 核芯,该核芯拥有 2880 个计算单元,拥有12GB显存,单精度浮点性能可达 4.29Tflops。出售时的价格是 1.8 元/时(仅GPU,不包括CPU、内存、网络、磁盘的价格)。 执行相同的CNN任务,M40云主机用的时间是 858s,M60云主机用的时间是 931s,K40云主机用的时间是1143s,可见在 CNN 训练时 M40 的性能是 M60 的 1.08倍,M60的性能是K40的1.23倍,M60几乎不逊色于M40。 综上所述,在K40、M40、M60中,M60拥有最高的性价比。

中规中矩,毕竟是免费的显卡资源,能这样撸羊毛我们已经很满足了。总之在这个虚拟环境中我们可以利用其中的软件和硬件实现训练任务。

上传数据

那么数据怎么上传呢?其实我们只要点击下图中的Add Data按钮即可。

此时会出现这样的界面,kernels中上传数据的方式是多种多样的,我们可以利用别人已经创建好的数据,或者一些比赛中共享的数据,当然我们也可以自己创建数据集,然后在使用的过程中选择使用即可:

这里举几个已经导入数据集的例子,其中第一个是船只识别的数据集,而第二个是Pytorch神经网络框架中的预训练模型,至于我们如何如何找到他们,其实也很简单。

因为整个kernel相当于一个虚拟的环境,自然会有路径之类的信息,我们通过在命令前面加上!(感叹号)来使用它,从下面的例子中我们可以看到船只数据集和预训练模型资源的位置:

然后我们就可以在代码中使用它们了。

代码提交

代码怎么运行呢?只要点击那个运行按钮即可,可以一步一步运行也可以点击快进键一下执行所有的代码。

但是需要注意,kernels运行代码有一个很大的限制,那就是运行代码不能超过6个小时,我们可以通过右上角的使用时间看到我们还剩多少时间可用了,为什么这样限制呢?原因很简单,如果不这样,大家都会成天训练自己的东西,服务器就不会闲置,很容易造成先来后到的情况,资源也无法合理的分配,所以这样的设定是合情合理的。

但是需要注意的一点是,我们如果离开kernels界面时间超过一个小时,这个kernels就会重启,不管其中是否已经正在执行你安排的训练任务,这样也是为了资源的合理利用…

那么我们如果有一个代码需要运行1个小时以上,我们不可能总在kernels界面上待着吧,那样多麻烦。当然有解决办法,我们可以看到在页面的右上角会有Commit按钮。也就是当我们在调试好kernels中的代码之后,发现这些代码按顺序可以正常运行,我们只需要点击这个按钮,将这批代码提交,那么这些代码就会在这个服务器的后端执行,当执行完毕后页面就会加载。执行过程中的一些输出信息也会呈现出来:

但是也要注意,Commit后的代码可执行时间也是最长6小时,所以说我们需要合理安排一下代码的运行时间,如果一次超过六个小时,自己试试能不能将训练拆分开来,分阶段保存模型权重(模型权重可以导出再读入),分开运行。对一般的任务来说,使用K80进行训练6个小时以内大部分都可以训练完成。

用途

说了这么多,我们主要拿这个免费的GPU服务器来做什么呢?因为其特殊性,并不适合作为我们的主力工具,最好还是使用自己购买的显卡去训练。这个服务器应该只适合于比较应急的情况,或者我们想要给别人远程展示你的代码成果:

上图中使用了GAN,需要在GPU上运行,如果我们想要给别人展示,直接发个网址是不够的,但是我们将你的代码放在kernels中运行,然后将你的kernels地址发给别人,其他人就可以直接通过你的kernels看到你的实现了。

上面的项目地址:github.com/SummitKwan/…

我们可以直接打开这个kernels进行尝试: www.kaggle.com/summitkwan/…