AWS GPU竞价实例:实现个人AI梦想的突破口
十多年前有句话“摄影穷三代,单反毁一生”,这是摄影器材党的调侃。现在玩AI才发现,训练和使用模型对机器基本都要求GPU。自己买太贵,云上租用也不便宜,但至少让普通人可以参与了。
先说结论:使用AWS GPU 竞价实例和EBS Volume(云硬盘)能最大程度的同时保证资源不用等,联网速度快,花费不太高。
GPU租用服务
国内GPU租用
以下是我试用过的,评价完全是个人观点,可能不准确。
供应商 | 网站 | GPU显存(示例) | 单价 | 点评 |
---|---|---|---|---|
算力云 | https://www.autodl.com/ | 24GB | 1.2/h | 便宜,Docker 容器,只开一个对外端口,停机保留1个月,经常没货 |
普华云 | https://www.puhuacloud.com/ | 24GB | 1.5/h | 优惠到6月30日,最低可只充值10元,能不能抢到实例看运气 |
恒源云 | https://gpushare.com/ | 24GB | 1.3/h | 它提供GPU,也回收GPU算力 |
智星云 | http://gpu.ai-galaxy.cn/ | 24GB | 2.4/h | 提供丰富CPU实例,文档,数据集不错, |
矩池云 | https://matpool.com/host-market | 24GB | 5/h | 贵 |
国外GPU租用
供应商 | 网站 | 单价 | 说明 |
---|---|---|---|
cerebrium | https://www.cerebrium.ai/ | 14/h | $10免费额度 |
runpod | https://www.runpod.io/ | 2.4/h | 国外比较流行 |
colab | https://colab.research.google.com/ | 收费 | 有免费额度, 收费每月$10或$50,也可用多少买多少 |
segmaker | https://aws.amazon.com/pm/sagemaker/ | 收费 | 有免费额度, 用多少算多少 |
云厂商
国内的腾讯云,阿里云等,国外的AWS,Azure等。
公有云的GPU实例肯定也贵,但它们提供竞价实例(spot instance),可以最低3折的单价使用GPU实例,代价是实例可靠性低一点(正常也在90%时间可用),实例停机即时销毁数据。
对于不需要长时间使用GPU的情况,这里有一个思路,使用公有云竞价实例,挂载额外的可持久化的数据盘,可以节省开支。
试用过后,我选择AWS。为什么不选国内的,主要有以下原因:
AWS上GPU Instance数量多,大多数时候想开就有。 AWS上选美国东部区域,下载很多库,模型文件速度会很快,实测达到100MB/s。 AWS上免费带宽1Gbps以上,流入数据不收费,而国内厂带宽或流量都要收费,还很贵。 综合花费大概一小时2-3元,比腾讯云便宜
使用AWS GPU竞价实例
前提条件
注册AWS账号: https://aws.amazon.com/ 在个人Billing Dashboard里绑定支付方式,一般用外币信用卡 (要求注册人信息和信用卡信息一致) 默认不能启动GPU spot instance,需要在Support Center提交一个Service Limit Increase的Case。现在审核较严格,不要申请多了,多跟进和回复一下Case,一般要1-2天通过。
启动一个竞价实例
跳转到EC2管理界面,点击左侧的Spot Requests 菜单。确保你是在us-east-1区域(右上角可切换)
然后选AMI(VM镜像),比如带PyTorch 2.0.0的一个镜像 (ami id: ami-0a4caa099fc23090f)
选择Key pair name, 如果没创建过,那就新建一个,新建后会自动下载.pem的key文件。建完返回此页面点下刷新就能选了。
网络选择default的就行,可用区(Availability Zone)就选第一个,这样选是为了后面挂载磁盘,磁盘不能跨区挂载。
实例类型手动添加,先删除已有的,然后add instance types, 跳到大概第7页,勾选g4dn.,g5. 实例,这是带GPU的。
选完出来,就可以点Launch来启动这个spot fleet request了。
登陆运行中的EC2实例并挂载数据磁盘
SSH方式登陆上运行中的spot instance。在EC2界面上,查看运行中的instance,复制其公网IP,然后在本地用命令
ssh -i xxx.pem ubuntu@<public IP>
方式登陆。xxx.pem是前面创建key pair 时下载到本地的key file.登陆上后查看显卡信息。此镜像已安装cuda,conda.
创建一个Volume(磁盘/云硬盘),在EC2 管理界面,点左侧Elastic Block Store - Volumes菜单,然后点Create volume。注意Availability Zone(可用区/AZ)选Spot Instance里网络选择的一致的AZ, 比如us-east-1a
创建好磁盘后,可以在Volume界面上选择该磁盘,点右上角“Action”-Attach volume,把它挂载到运行中的EC2 instance上,也就是刚才启动的spot instance.
查看EC2磁盘信息
sudo lsblk
初始化磁盘,这步只在新建磁盘后操作一次,后面二次挂载的话,不需要操作这步,不然数据会丢。
sudo mkfs -t ext4 /dev/nvme2n1
Mount磁盘到Folder。可以新建一个data目录,然后mount 磁盘
sudo mkdir -p /data
sudo mount /dev/nvme2n1 /data
sudo chown ubuntu: /data
我们已经启动了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。