如何将大文件数据集传输到海外服务器用于机器学习训练

1.适用情景

本文适用于以下情景:

  • 使用Google Colab或Paperspace等海外免费算力进行机器学习、深度学习的学习、科研活动
  • 没有优质的科学上网工具,或是流量不足,但有类似于谷歌访问助手这类科研工具
  • 需要上传比较大的数据集
  • 使用Chrome浏览器

2.背景

手头上有一份自定义的VOC数据集,没有GPU服务器,想放到Google colab或Paperspace的gradient notebook服务器上训练,测试生成模型的效果。

如果你没有优质科学上网工具,仅凭浏览器插件是很难将1GB以上文件上传到这些服务器上的,因为诸如“谷歌访问助手”这类网络代理插件,一是速度限制,二是容易断线,使得浏览器的文件上传机制容易失败。

要想将大型数据集文件上传到海外的服务器,需要有一个中介服务器,这个服务器得满足以下需求:

  • 能对国内访问
  • 能对国外服务器访问
  • 对网速有一定的要求
  • 足够稳定

对国内的网盘进行评估,最终发现,微软家的网盘Ondrive能很好地满足以上需求。

3.准备

Onedrive

正版Windows预装了Onedrive,初始赠送5GB的空间,虽然不是很大,但是可以应付一般的数据集。

网速方面,Onedrive是无上传下载速度限制的,但是就一般用户而言,容易出现网络波动,因为微软设在我国的Onedrive服务器只有Office365用户才能够使用,而一般用户连接的是境外服务器。

面对网络波动问题,我目前想到了两种解决方案:

  • 使用UsbEAm Hosts Editor尝试对Onedrive上传/下载这一项进行host修改,达到加速稳定的效果,据网络运营商不同,这个方案未必有效。
  • 在淘宝上买一个十几块钱onedrive企业账号,尽管能用多久没法保证,但是作为速度快、容量大(5T)的临时中介网盘,还是能接受的。(可靠点的卖家怎么样也能使用半年以上吧)

Chrome插件

当我们把数据集上传到Onedrive之后,服务器又如何从Onedrive上下载数据集呢?Onedrive无Linux版本,所以想要在Linux上下载Onedrive里面的文件,我们还得另想他法。

Youtube上有一位老哥Jinay Shah提出了他的解决方法,他使用了一个chrome插件,叫做CurlWget,这个插件能够完全模拟浏览器的下载环境,并将下载任务转化为curl或者wget命令,利用这个插件,我们能够顺利使得Linux服务器下载Onedrive上的文件了,感谢这位老哥。

这里提供以下从crx4chrome网站上下载的CurlWget插件
提取码:53bq
至于怎么安装chrome插件,可以百度一下
有谷歌访问助手的尽可能去chrome插件商店上面下载最新版本。

4.方法步骤

将数据集上传到Onedrive

可以使用网页版Onedrive进行上传,但是推荐使用客户端进行文件上传,感觉网络环境更稳定。我这边的Onedrive客户端上传速度能够稳定在2MB/s
使用网页端上传文件


这里分享一下我的经验,我发现将zip格式的压缩文件上传到Onedrive之后再从服务器上下载下来可能会出现文件损坏的问题,(用7zip也打不开)因此推荐将数据集转成rar格式的压缩文件上传。


获取数据集下载链接

在Onedrive网页版中,选中数据集进行点击下载,随便找一个位置,点击保存。

注意,要想获得下载链接,必须关闭第三方下载器(如IDM),使用Chrome原生下载器

save3.png

当确认可以下载文件之后,点击取消下载

取消文件下载

然后点击CurlWget插件图标,它会截获下载链接,并生成curl或wget命令,点击就能复制链接

使用CurlWget获取链接

执行wget或curl命令

前面获得的链接是有时效的,所以尽快在服务器中执行,以google colab为例,在感叹号之后把命令输进去就能执行

Colab执行命令

下载完毕,可以看到,国外服务器之间的数据传输速度非常快

下载完毕

数据集已经添加到服务器内了

数据集已经添加到服务器内了

到此,整个流程结束。


另外,有时候会出现服务器无法使用wget命令的情形,这时候可以点击CurlWget插件,将模式从wget调整为curl,这样就能获得curl版本的命令

希望有需要的人能从这篇文章中获得参考,欢迎大家分享自己的想法

你可能感兴趣的:(数据集,机器学习,服务器)