========================
== Seeking Complexity ==
========================

一个使用体验很好的GPU云:vast.ai

PUBLIC

起点是,自己有时候想做一点简单的实验,需要一个云上的GPU。

找了一圈,发现vast.ai的使用方式感觉非常惊艳,从2C消费电子的视角来看,使用体验很好。

在工作中也用了一段时间了,所以想描述一下我是怎么使用vast.ai的,为什么我喜欢使用它。

简单地说:vast.ai是一个2C的“众筹”云。买GPU的可以是独立消费者,卖GPU的也是独立消费者。

插一句,当说到2C的时候,心里在想什么。

我想到的就是,买家下单的时候,不需要“联系”商家,只是和网站下单即可。不要打电话,不要留邮箱,不要签合同,付款即可。

所以vast.ai并不是很“好”,只是很“方便”。最明显的限制是,只能买到单机,即使是能选到8卡B200/5090,也只是单机,可能对于现在很多人来说,已经不够用了。

然后就是不知道什么时候,大家会比较热情地训练网络,有一些卡就租不到了。

先把局限说在前面吧。

Get Started

这就是一个典型的租赁页面,选择你想要的卡,指定需要的空间,然后就会建立一个实例。

根据我的工作流,总共需要这么几步:

  1. 搜索和创建实例
  2. 上传正在开发的github仓库的deploy key
  3. 上传自己笔记本里面的公钥
  4. mount 云端的目录到本地,方便看看图片什么的。

这里就有一个很好的工具可以用了:vastai CLI。这个cli工具很慷慨的返回了raw JSON的结果,基于它,我写了一个自己用的工具lazyvast:

里面封装了一些我常用的命令。

维护一个常用的docker image

vast.ai整体上是提供一个Container给用户。

所以如果类似 docker pull pytorch/pytorch:2.10.0-cuda13.0-cudnn9-runtime 就够用了,就可以直接选这个镜像来用。

平常我是用devcontainer作为开发入口,所以维护了自己常用的一个镜像,也推送在docker hub里面了,这个时候也是可以直接用的。

如果需要一个私有的镜像,可以用docker hub里面private repo,加上Docker Access Token的方法来使用:

数据怎么办

vast.ai并不预设有很大的数据(我瞎猜的,主要是因为存储空间的价格好像都比GPU更贵了)。

所以我有两种常用的做法:

  1. 把数据集整理好,存在s3上,我常用的是BackBlaze

    这个平台很有意思,基本不收存储费,只收流量费。

    这里提一下,选gpu的时候,最好选上网络带宽>5000Mbps的,这样从s3下载,基本可以做到100MB/s的速度。

    不过我的数据集本来也不大,在这种速度下,10-20分钟就下载结束了,可以接受。

    推荐一套比较快的rclone参数:

    rclone sync backblaze:src dst \
      --transfers=32 \
      --checkers=32 \
      --buffer-size=32M \
      --fast-list \
      --multi-thread-streams=32 \
      --progress --stats=5s --stats-one-line
    
  2. 公开数据集直接放在huggingface上,用Streaming的方法去获取。这样其实用起来更方便,但是准备数据集比较麻烦。而且很多已经有的代码,不支持IterableDataset,就更头疼了。

    wandb的log里面,能很清楚的看到网络流量的使用:

  3. 你也可以像geohot一样自己写一个tiny s3:https://github.com/geohot/minikeyvalue

    之前看到这个repo的时候,不知道他要干什么。。。

    直到这次开始把GPU和数据通过网络去连接,才明白。

    这个项目也是挺有意思的。完全就是简单的用多个nginx作为volume server,然后用一个简单的中心节点做负载均衡。

audit log

vastai show audit-logs 可以给详细的统计信息,Team中不同的member的使用量什么的,如果想搞也可以,不过也没必要吧,毕竟vastai相比正规军,已经便宜太多了。。。

螺蛳壳里做道场

有一种在做体操的感觉。本身训练网络还是对工作比较重要吧。

至于怎么训练,还是只能归在“技巧”范围内,不足挂齿。

但是,拦不住这种东西实在是好玩啊。

如果你有更好玩的东西,let’s_have_a_talk