-
云平台采用K8S(Kubernetes 容器管理必备)+Docker+Nvidia-Docker
- GPU免费样例(目前GPU是无法共享使用的,也就是你是可以完全独占一块显卡,因此可以实际测试一下对比一下现有的显卡,就可以确定其型号)+16GB显存以及8核CPU、64GB内存(因此强烈推荐选择GPU实例)
- CPU免费样例为2核4GB内存
-
支持Jupyter Notebook
-
多种镜像环境
-
免费的一个小时的GPU和CPU容器使用(也就是可以创建两个一小时的两个容器-GPU和CPU)(一个小时自动停止,可以无限重启使用)
-
提供两种存储方案:对象存储Obs(简单理解:网盘或者类似于亚马逊S3对象存储)/云硬盘(SCSI 远程挂载?还没测试过)
实践
OBS创建
1.首先打开控制台,在上搜索对象存储服务OBS(可以直接固定在侧边栏方便使用)
-
创建桶
由于成本考虑,选择单AZ存储(只有单一数据点,数据比较重要的请选择多AZ),
创建后可以在该页面下看到创建的桶Bucket
Notebook创建
云平台提供Jupyter Notebook的环境
切换到ModelArts(同Obs搜索)-选择开发环境-NoteBook
创建Notebook
分别选择公共资源GPU-免费,存储选择obs使用之前创建的obs(主要用于工作目录)然后下一步创建出一个Notebook
回到主界面,可以看到刚刚创建的目录启动中
进入JupyterLab,可以看到提供的多种环境(熟悉终端使用可以直接打开终端)
打开终端,查看存储占用,从图中可以看到我们拥有100GB左右的临时存储空间
查看GPU(16GB显存-250W)
容器的目录如下,工作目录主要在work文件夹里,README里提供了加载多个环境的命令
初始下work是空的(注意OBS是类似于网盘,并不会像硬盘那样直接挂在work目录下),左侧这些只是Obs目录,并未同步到work里
官方这里提示使用Obs Sync,但是Obs Sync只允许100MB以下的同步,对于大数据集是远远不够用的,因此这里推荐使用moxing用于obs同步
import moxing as mox
bucket_name = 'obs://{bucket}/{folder}' # 修改为你自己的桶
mox.file.list_directory(bucket_name)
mox.file.copy_parallel(bucket_name,'/home/ma-user/work/')
print("finish")
https://support.huaweicloud.com/moxing-devg-modelarts/modelarts_11_0005.html 具体可以看该链接
剩下的只需要上传到obs就可以愉快的训练了
总结
K8S自从发布以来被大厂快速运用,非常迅速(Google yyds!),而Nvidia-Docker也使得Docker可以直接调用GPU做训练。
华为云提供的环境体验很不错,免费样例可以满足大部分训练,存储费用也不高(几天下来才快1rmb),同时利用Checkpoint,理论上只要我们一次的epoch不超过一个小时,可以断点继续训练的。