十多年前有句话“摄影穷三代,单反毁一生”,这是摄影器材党的调侃。现在玩AI才发现,训练和使用模型对机器基本都要求GPU。自己买太贵,云上租用也不便宜,但至少让普通人可以参与了。
先说结论:使用AWS GPU 竞价实例和EBS Volume(云硬盘)能最大程度的同时保证资源不用等,联网速度快,花费不太高。

GPU租用服务

国内GPU租用

以下是我试用过的,评价完全是个人观点,可能不准确。
供应商网站GPU显存(示例)单价点评
算力云https://www.autodl.com/24GB1.2/h便宜,Docker 容器,只开一个对外端口,停机保留1个月,经常没货
普华云https://www.puhuacloud.com/24GB1.5/h优惠到6月30日,最低可只充值10元,能不能抢到实例看运气
恒源云https://gpushare.com/24GB1.3/h它提供GPU,也回收GPU算力
智星云http://gpu.ai-galaxy.cn/24GB2.4/h提供丰富CPU实例,文档,数据集不错,
矩池云https://matpool.com/host-market24GB5/h

国外GPU租用

供应商网站单价说明
cerebriumhttps://www.cerebrium.ai/14/h$10免费额度
runpodhttps://www.runpod.io/2.4/h国外比较流行
colabhttps://colab.research.google.com/收费有免费额度, 收费每月$10或$50,也可用多少买多少
segmakerhttps://aws.amazon.com/pm/sagemaker/收费有免费额度, 用多少算多少

云厂商

国内的腾讯云,阿里云等,国外的AWS,Azure等。
公有云的GPU实例肯定也贵,但它们提供竞价实例(spot instance),可以最低3折的单价使用GPU实例,代价是实例可靠性低一点(正常也在90%时间可用),实例停机即时销毁数据。
对于不需要长时间使用GPU的情况,这里有一个思路,使用公有云竞价实例,挂载额外的可持久化的数据盘,可以节省开支。
试用过后,我选择AWS。为什么不选国内的,主要有以下原因:
  1. AWS上GPU Instance数量多,大多数时候想开就有。
  2. AWS上选美国东部区域,下载很多库,模型文件速度会很快,实测达到100MB/s。
  3. AWS上免费带宽1Gbps以上,流入数据不收费,而国内厂带宽或流量都要收费,还很贵。
  4. 综合花费大概一小时2-3元,比腾讯云便宜

使用AWS GPU竞价实例

前提条件

  • 注册AWS账号: https://aws.amazon.com/
  • 在个人Billing Dashboard里绑定支付方式,一般用外币信用卡 (要求注册人信息和信用卡信息一致)
  • 默认不能启动GPU spot instance,需要在Support Center提交一个Service Limit Increase的Case。现在审核较严格,不要申请多了,多跟进和回复一下Case,一般要1-2天通过。

启动一个竞价实例

  1. 跳转到EC2管理界面,点击左侧的Spot Requests 菜单。确保你是在us-east-1区域(右上角可切换)
  2. 然后选AMI(VM镜像),比如带PyTorch 2.0.0的一个镜像 (ami id: ami-0a4caa099fc23090f)
  3. 选择Key pair name, 如果没创建过,那就新建一个,新建后会自动下载.pem的key文件。建完返回此页面点下刷新就能选了。
  4. 网络选择default的就行,可用区(Availability Zone)就选第一个,这样选是为了后面挂载磁盘,磁盘不能跨区挂载。
  5. 实例类型手动添加,先删除已有的,然后add instance types, 跳到大概第7页,勾选g4dn.,g5. 实例,这是带GPU的。
选完出来,就可以点Launch来启动这个spot fleet request了。

登陆运行中的EC2实例并挂载数据磁盘

  1. SSH方式登陆上运行中的spot instance。在EC2界面上,查看运行中的instance,复制其公网IP,然后在本地用命令 ssh -i xxx.pem ubuntu@<public IP> 方式登陆。xxx.pem是前面创建key pair 时下载到本地的key file.
  2. 登陆上后查看显卡信息。此镜像已安装cuda,conda.
  3. 创建一个Volume(磁盘/云硬盘),在EC2 管理界面,点左侧Elastic Block Store - Volumes菜单,然后点Create volume。注意Availability Zone(可用区/AZ)选Spot Instance里网络选择的一致的AZ, 比如us-east-1a
  4. 创建好磁盘后,可以在Volume界面上选择该磁盘,点右上角“Action”-Attach volume,把它挂载到运行中的EC2 instance上,也就是刚才启动的spot instance.
  5. 查看EC2磁盘信息 sudo lsblk
  6. 初始化磁盘,这步只在新建磁盘后操作一次,后面二次挂载的话,不需要操作这步,不然数据会丢。sudo mkfs -t ext4 /dev/nvme2n1
  7. Mount磁盘到Folder。可以新建一个data目录,然后mount 磁盘
sudo mkdir -p /data

sudo mount /dev/nvme2n1 /data

sudo chown ubuntu: /data

3685b43c738caa92b6ecd5d7e38fae61.png
  1. 我们已经启动了GPU Spot Instance,并挂载了数据盘。不用时,可Terminiate此Instance (spot instance不能停止,只能销毁),而保留挂载的数据盘。下次再启动Spot Instance后,再执行上面的4-7步,即可。使用过程中, 请确保要持久保留的数据都放在/data目录下。当然,我们也可以另外新建磁盘挂载上来,最多挂20个。

使用体验

Conda虚拟环境安装到新的磁盘,这样在销毁spot instance时,数据不丢。
conda create -y --prefix /data/py310

conda activate /data/py310

下载Python Library或者从huggingface下载model文件,速度也很快。

写在最后

其它公有云也可以按此思路来操作,持久化数据的Volume就是移动硬盘,随插随用。也可随时备份(创建快照)。界面上操作看起来还是有点复杂,后面我再准备一下脚本,争取实现一键开关机使用。
欢迎留言,分享, 关注 "越山集”。一起玩AI。
继续阅读
阅读原文