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)