Volcano运行MindSpore训练任务
2021世界黑客松WAIC已成功落幕,现在为大家介绍MindSpore赛道的赛题一中Volcano的基本介绍和一些基本用法,如有不对敬请指正。
Volcano简介
Volcano是在Kubernetes上运行高性能工作负载的容器批量计算引擎。 它提供了Kubernetes目前缺少的一套机制,这些机制通常是许多高性能 工作负载所必需的,包括:
- 机器学习/深度学习
- 生物学计算/基因计算
- 大数据应用
这些类型的应用程序通常运行在像Tensorflow、Spark、PyTorch、 MPI等通用领域框架上,Volcano无缝对接这些框架。
Volcano官方网站:https://volcano.sh/zh/
其github仓库地址为:https://github.com/volcano-sh/volcano,感兴趣的可以去打开看看
目前Volcano仅发布了一个版本,故本文仅针对发布的v1.x版本,后续如有更新,本人将持续关注
Volcano特性
Volcano支持各种调度策略,包括:
Gang-scheduling
 Fair-share scheduling
 Queue scheduling
 Preemption scheduling
 Topology-based scheduling
 Reclaims
 Backfill
 Resource Reservation
得益于可扩展性的架构设计,Volcano支持用户自定义plugin和action以支持更多调度算法。
准备部分
 安装
上手 Volcano 最容易的方式是从 github 下载release
注意:
一个 Kubernetes 集群,集群版本不低于 V1.13
 [可选项] 在您的集群中下载 Helm,您可以根据以下指南安装 Helm:安装 Helm。(仅当您使用 helm 模式进行安装时需要)
 下载最新版本 volcano下载链接
 解压 release 文件
以上为安装前所必须的准备,否则安装后会无法正常使用;另外本人的K8s集群部署在CentOS环境下,后续别的环境的会尝试有效后更新
#tar -xvf volcano-{Version}-linux-gnu.tar.gz
#cd volcano-{Version}-linux-gnu
#ll
 total 60
 drwxr-xr-x 4 root1 root1 4096 Jul 23 11:38 ./
 drwxr-xr-x 11 root1 root1 12288 Jul 23 11:37 …/
 drwxr-xr-x 3 root1 root1 4096 Jul 16 16:15 bin/
 -rw-r–r-- 1 root1 root1 153 Jul 16 16:15 default-queue.yaml
 drwxr-xr-x 3 root1 root1 4096 Jul 16 16:15 helm/
 -rw-r–r-- 1 root1 root1 4169 Jul 16 16:15 README.md
 -rw-r–r-- 1 root1 root1 23453 Jul 16 16:15 volcano-{Version}.yaml
安装方式
 Volcano配置文件为yaml格式,有两种安装方式:
- 通过 Deployment Yaml 文件方式安装
- 使用 Helm 进行安装
 方法一:
 使用 release 内的文件volcano-{Version}.yaml创建 deployment
 (Version就是1.x)
kubectl apply -f volcano-{Version}.yaml
验证 Volcano 各组件的运行状态
kubectl get all -n volcano-system
使用 Helm 安装
 如果使用 Helm 部署 Volcano,请先确认已经在您的集群中安装了Helm
 步骤 1:
 创建一个新的命名空间
kubectl create namespace volcano-system
步骤 2:
 使用 Helm 进行安装
helm install helm/chart/volcano --namespace volcano-system --name volcano
步骤 3:
 验证 Volcano 各组件的运行状态
kubectl get all -n volcano-system
至此,安装部分全部结束。
Volcano运行MindSpore训练任务
 1.制作Lenet任务镜像
 Dockerfile:
 FROM swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-cpu:1.1.1
 RUN pip install requests
 WORKDIR /app
 ADD lenet /app
 CMD [“sh”,"/app/start.sh"]
 注意:start.sh需要自己定义好才可正常运行
 2.操作运行任务
 1)制作Lenet任务镜像
docker build -t mindspore-cpu:1.1.2 .
(有个点不要忘了)
docker images |grep mindspore
docker images |grep mindspore
2)保存导出镜像
 docker save mindspore-cpu:1.1.3 |gzip > mindspore-cpu-1.1.3.tar.gz
 3)将镜像导入
 docker load -i mindspore-cpu-1.1.1.tar.gz
 k8s的每台节点都要加载该镜像,除非搭建镜像服务器。
 4)启动job的yml
 apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: lenet-job spec: minAvailable: 1 schedulerName: volcano queue: test policies: - event: PodEvicted action: RestartJob tasks: - replicas: 1 name: lenet policies: - event: TaskCompleted action: CompleteJob template: spec: containers: - command: - sleep - 10m image: mindspore-cpu-1.1.1:v1 name: lenet resources: requests: cpu: 1 limits: cpu: 1 restartPolicy: Never
 4)k8s运行该任务
 kubectl apply -f lenet1.yml
 5)查询job启动情况
vcctl job list
6)查询pod运行情况
kubectl get pod |grep lenet
7)进入容器
kubectl exec -it lenet-job-lenet-0 – sh
sh-4.4# cd app/
 注意:本队比赛所用模型放在了app目录下,个人根据实际情况修改。
 8)查看运行情况
至此,等待返回结果,结束模型训练。
- 点赞
- 收藏
- 关注作者
 
             
           
评论(0)