首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

怎么“薅”Google的“羊毛”——Colaboratory免费 GPU使用笔记

上周经过小石头同学的提点,找到了Colaboratory这个神奇的地方,小试几天后发现这真是个良心之作,完全对得起Google的“不做恶”的信条,既然是免费的,那么不好好利用就对不起Google的程序猿们了,你们说是不是,哈哈

下面是我这几天的一点小小的总结,欢迎指点,大家有什么经验的可以拿出来一起交流交流,

1,Colab免费GPU的基本使用方法就详细写了,很简单,去下面的教程自行学习吧

https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d

2,我们希望使Colab与Google Drive互联互通

这样方便我们上传下载相关文件

===执行如下代码===

!apt-getinstall -y -qq software-properties-common python-software-propertiesmodule-init-tools

!add-apt-repository-y ppa:alessandro-strada/ppa 2>&1 > /dev/null

!apt-getupdate -qq 2>&1 > /dev/null

!apt-get-y install -qq google-drive-ocamlfuse fuse

fromgoogle.colab import auth

auth.authenticate_user()

fromoauth2client.client import GoogleCredentials

creds= GoogleCredentials.get_application_default()

importgetpass

!google-drive-ocamlfuse-headless -id= -secret= &1 | grep URL

vcode= getpass.getpass()

!echo | google-drive-ocamlfuse -headless -id=-secret=

==================

===设置工作目录===

!mkdir-p /content/drive

!google-drive-ocamlfusedrive #其实这就是在虚拟机里创建了一个网络硬盘并映射到Drive这个目录

importos

os.chdir("drive")#指定drive为当前的工作文件夹

==================

3,Python命令在Colab下直接执行,只要注意不用用和Window桌面端有关的代码就行了

4,Colab下Linux命令行的使用方法总结

1)多数命令在程序名字前面加“!“就行了

如果你在网上的文件或别的地方看到在LinuxConcole里面执行的是:

gitclone https://github.com/cysmith/neural-style-tf

那么在Colab里面就是在前面加感叹号:

!git clonehttps://github.com/cysmith/neural-style-tf

还有一种两条命令连续执行的话(中间用|分隔)只要在第一条前面加!,第二条命令前面不能加!,如下:

!./deepmatching-static$file1 $file2 -nt 0 | ./deepflow2-static $file1 $file2 $forward_name -match

2)部分文件及目录操作相关的命令,在前面加%,如:

%cd/drive:current directory把工作路径设置为指定的目录

%rm*.jpg:remove删除文件

%rm-rf /drive/temp:remove删除目录

%rn*.jpg *.jpeg:rename改名

3) Linux命令调用之前代码中申明的变量在其前面加$:

temp_dir=’/drive/temp’

%rm-rf $temp_dir

4) Colab下执行Linux命令,路径中如果没有空格,就不用带引号

%cd/drive/temp

5)由于bash xx.sh批处理文件在Colab里面执行问题很多,不能正确执行.sh里面的的批处理命令(写法不是规范的Colab里面的写法),所以需要花时间翻译成Colab里面的格式,然后直接在Colab下执行(研究这个事情干掉了我上周末的大部份时间。。。),下面例子比较典型:

例1:

.sh文件内的写法:

$(ffprobe-v error -of flat=s=_ -select_streams v:0 -show_entries stream=width,height"$1")

Colab里面的写法:

第一步:把$(xxxxx)改成!xxxxx:

!ffprobe-v error -of flat=s=_ -select_streams v:0 -show_entries stream=width,height"$1"

第二步,”$xx”,这是sh里面引用变量xx的方法,改成$xx

!ffprobe-v error -of flat=s=_ -select_streams v:0 -show_entries stream=width,height $1

第三步,$1, $2, $3这些是在执行sh时带的参数,1,2,3是引用的顺序,需要替换成外面真正的变量名字

如:本来是这样引用的:bash xxx.sh ,那么就是sh文件里面的$1

在你的Colab主代码里面是变量fn

那么上面的代码就变成了

!ffprobe-v error -of flat=s=_ -select_streams v:0 -show_entries stream=width,height $fn

大功告成!把这个代码复制到Colab里面执行就不会出错了

下面再举两个例子大家感受一下:

例2:

.sh文件内的写法:

mkdir-p "$temp_dir"

Colab里面的写法:

!mkdir-p $temp_dir

例3:

.sh文件内的写法:

$ffmpeg-v quiet -i "$1" "$/frame_%04d.ppm"

Colab里面的写法:

!ffmpeg-v quiet -i $fn $temp_dir/frame_%04d.ppm

这里$变成了$temp_dir,因为temp_dir是个变量。

Sh里面的条件语句的语法与python差别也比较大,这里没有什么公式可以转换,只能先理解sh文件的逻辑关系后用Python语句重新写出来,一般也复杂。

例:

Sh文件内写法:

if[ "$width" -gt "$height" ]; then

max_size="$width"

else

max_size="$height"

fi

Python里的写法:

ifwidth >= height:

max_size=width

else:

mex_size=height

5,运行效率问题

虽然Google Drive映射到了的虚拟机里面,但是和所有网络映射目录一样,读写效率低下,所以所以除了一次性写入或读取的东西以及想永久保留的在drive目录下东西建议在Drive目录下操作外,其它可以在虚拟机上系统目录下操作的尽量都在虚拟机上操作,可以建个临时目录,把代码产生的大量过程文件都放到那里,运行完成后清理掉就行了。

- END -

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180723G0U2E200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券