google colab挂载google driver并设置环境变量
如题。
Google Colab(也称为Colaboratory)是Google Research开发的一款免费Jupyter笔记本环境,用于机器学习研究。它无需设置即可在云端运行,用户可以通过浏览器直接访问和编写代码。最重要的是它为免费用户提供了Nvidia T4 GPU和TPU两种运行时环境,允许用户在其上调试需要GPU和cuda加速的深度学习项目,这为数据科学研究者带来了许多方便。然而,由于每一次连接一个google colab session都会启动一个新环境,之前下载的文件和存储的环境变量都会丢失,这带来了许多不方便。
Google driver是谷歌开发的网盘应用,免费版用户共有15GB的永久存储空间。为了能够持久化保存训练数据和环境变量,一种方法就是将训练数据存储在google driver当中并将google driver作为一块硬盘挂载到colab当中。下面是相关探索
一、colab挂载Google driver
使用下面的代码即可对Google driver进行挂载。其中,drive.mount('/content/gdrive')
表明将Google driver根目录挂载到当前session所在虚拟机的/content/gdrive
位置。
1 | ## Mount google driver for persistent storage |
运行上述代码后,colab会弹出对话框,要求对挂载需求进行确认。点击「connect to Google Driver」按钮进行确认后还需要经过账户验证的步骤(如下图),这里直接点同意即可。
之后,刷新左侧的文件目录,可以看到/content/gdrive
下面出现了一个MyDrive
,其中的内容就是我们的Google Driver的内容。
我们还可以创建一个专门的文件夹用来存放colab的文件和数据,并切换到该文件夹下:
1 | import os |
可以把这两个代码块的内容放在ipynb文件的开头,这样每一次运行都可以挂载Google Driver了。
二、设置环境变量
经常使用Linux的朋友都知道,环境变量很重要,它决定了一些程序能否正常运行以及一些指令能否正常执行。一般来说,环境变量都在~/.bashrc
和~/.bashprofile
中设置好了,每次登录都会自动加载;即使环境变量有更新,使用source ~/.bashrc
也可以直接进行刷新。
可是,虽然每个colab session都会连接到一台Linux虚拟机,并且在jupyter notebook中可以使用os.system("xxx")
或者!xxx
两种方式运行shell指令,但在~/.bashrc
中设置环境变量并使用source
指令刷新的方法不再有用了。此处原理比较复杂,似乎和Linux中进程隔离的机制有关,os.system("xxx")
相当于启动了一个子进程,在子进程中设置的环境变量不会改变父进程,因此source
指令无效。
但是python也有自己的设置环境变量的方式,即os.environ
。其返回一个environ
对象,结构类似于一个字典,因此可以使用os.environ["xxx"]
来访问更具体的环境变量。
例如展示当前的PATH变量:
1 | print(os.environ["PATH"]) |
我们可以在Google driver 的/content/
目录下建立一个.local/bin
目录,并在此存储一些自定义的程序。下面是创建目录和添加自定义程序(此处以busybox为例)的示例代码:
1 | ## Config environment PATH and Download busybox |
让我们使用!busybox
这个魔法指令,看看能否正确执行:
如上图,busybox成功打印出了所有可执行的applet,表明配置成功。
请注意,busybox是存储在Google Driver的目录下的,因此下一次即使重新开一个colab session,只需要把挂载Google Driver和设置环境变量的流程走完,依然可以正常调用这些指令。
一个汇总版的代码流程:
1 | from google.colab import drive |
请注意,虽然上面的流程中有创建文件夹(mkdir
)和下载(wget
)的步骤,但由于带了参数(mkdir -p
和wget -c
),创建文件夹和下载文件只会进行一次,之后的每次运行只要检测到文件存在就会跳过这些步骤。
以上。