欢迎光临散文网 会员登陆 & 注册

使用 coding.net 的制品库加快 Colab 文件中转速度

2022-09-24 17:31 作者:陌辞寒  | 我要投稿

Colab(https://colab.research.google.com/)是一个可以免费使用 GPU 的算力平台,同时又可以当一台 Linux 虚拟机在线使用,非常方便。但对国内用户来说很不友好,访问需要用代理不说,即使用代理,文件的上传和下载的速度依然比较慢,可能时间大部分浪费在文件中转上了。如果不解决这个问题,体验还是比较差的。

使用一个中间平台用于中转文件是一个可行的办法,但适合并且免费的平台并不多。首先要保证国内的上传下载速度,还要考虑容量和流量,使用起来还要比较方便(最好不需要安装额外软件或库),一筛选能用的就不多了。

我之前试用或者考虑过的一些备选:

  1. Google Drive。Google 官方的,免费版 15G 空间。在 Colab 里下载文件(用 gdown 命令)很方便,速度极快(几百兆一瞬间就好了)。但上传文件需要先挂载 Google Drive,手动确认权限比较烦。也可以用其他方式上传文件,但需要安装些东西,不大方便。在本地上传下载文件也有相关工具,但也需要安装。最大的问题在于国内不能直接访问,用代理的话速度很可能不快,提速效果不好,只适用于部分场景(比如上传频率低、使用频率高并且数据量较大的场景)。

  2. OneDrive。微软出品,免费版 5G 空间。我试了下本地的上传下载的速度都可以,但在 Colab 里上传下载文件就需要安装些东西了,不大方便(而且每次都安装也浪费时间),另外不好控制权限(OneDrive 里可能有自己的私人文件)。动手能力强的话可以试试。如果不想每次安装(或者每次都复制大片代码),可以把安装好的工具打包放到 Google Drive(需要注意权限),这样能方便一些。

  3. 坚果云。支持 WebDAV,上传、下载文件很方便,不需要额外安装软件,速度也可以。但每个月只能用 1G 上传流量和 3G 下载流量,可能不大够用。另外不支持控制权限。

  4. GitHub。可以通过一些方法让 GitHub 满足这个需求,但只要不是把数据直接提交到 git(不合适,包括 git lfs),多少都得折腾下,如果要考虑权限更麻烦。最大的问题还是国内的访问速度,可能自身都需要加速。

  5. 一些其他的国外网盘平台,比如 Dropbox,国内访问速度都是最大的问题,如果自己的代理好可以试试(那样的话可能用 Google Drive 就行了)。

  6. 一些国内外的分享文件的平台,一般都是上传一个文件后可以获得一个随机链接。存在几个问题,一是国内访问速度很可能也不快(多是国外平台);二是不提供接口(某些国内平台),很难在命令里调用;三是不能在上传文件前得到下载地址(很多平台),不好和 Colab 联动。所以这类平台很难满足需求。

  7. 虚拟主机。便宜的一年几十,空间从几百 M 到 几 G。功能上没问题,但可能没必要为了这个花钱。

后来我发现 coding.net 的制品库非常适合这个场景,免费版有 5G 空间,每个月 20G 流量,速度不错。可以直接用 curl 上传、下载和删除文件(和 WebDAV 的接口一样),还可以控制权限,支持文件版本,足以满足轻度的需求。

初始化

coding.net(https://coding.net)是一个类似 Github 的代码托管平台,注册很方便。登录后创建一个项目,然后进“项目设置”-“菜单管理”,把“制品管理”打开。

接下来进入该项目的“制品管理”页面,点右上角“创建制品仓库”,选“Generic”(第一个),下边填写名称,选择权限(省事的话可以选“公开”,在意安全的话可以选“项目内”),其他选项根据直接需求选,然后点“确认”即可。

现在就可以用了。

使用

1. 上传文件

可以直接在页面点“上传制品”上传文件(需要注意不支持中文文件名,下边的命令也不支持):

但用命令上传更方便,点“操作指引”可以查看帮助。

进去后需要先生成一个个人令牌:

相当于提供一对专用的用户名和口令,提升安全性(权限小,泄露后可以直接删除)。生成后,下边提示可以把配置写到 ~/.netrc 文件中,这个也方便不了多少(毕竟不大可能每次都敲命令,可以封装成脚本,或者直接复制粘贴),也许能提高一点安全性(也可能降低)。

然后就可以上传文件了。点“推送”后可以填写信息来获得上传文件的命令,但没必要用这个界面,命令是很好写的,只需要把下边的命令复制过来改改就可以了。

可以指定版本号(感觉用于中转文件的话没必要指定,直接把版本号放文件名里就行),不指定的话就是 latest。上传的文件会覆盖掉已有的同名文件。

注意这个命令既可以在本地运行,也可以在 Colab 上运行,用来把运行结果传上来然后自己再下载到本地,速度会快很多。而且不需要安装任何东西,非常方便,下边的下载和删除也一样。

2. 下载文件

和上传文件类似,下载文件的命令:

如果之前设置的权限是“公开”,那么下载就不需要填写用户名和口令了。如果设置了版本号,可以在链接最后加上版本号,默认是 latest。

3. 删除文件

删除文件也类似:

4. 列出所有文件

这个要麻烦一些,如果之前设置的权限是“公开”,可以通过这个接口获取:

如果权限不是“公开”,就需要自己去找登录的方法了。不过可以自己在上传或者下载文件时,顺便更新一个列表文件,这样只需要查看这个文件就行了。

有这几个功能就可以了,一般中转文件也没有类似重命名的更多需求。另外如果不想覆盖文件,可以把“禁止覆盖版本”的选项打开。

和 Colab 联动

本地和 Colab 上都可以上传、下载、删除文件,想怎么操作就随意了。可能遇到的问题就是等待了,比如本地上传了一个文件,然后 Colab 运行完后上传了结果,本地怎么判断结果已经生成好了呢?

最简单的方法就是轮询了,先确保没有同名的文件,然后每隔几秒下载一次,如果下载成功了就完成了。完整的协作过程像这样:

如果数据比较复杂,也可以搞多轮交互,甚至本地也分担一定的工作量,不再需要手动干预。

使用 coding.net 的制品库加快 Colab 文件中转速度的评论 (共 条)

分享到微博请遵守国家法律