安装Volcano
- 使用整卡调度、静态vNPU调度、动态vNPU调度、断点续训、弹性训练、推理卡故障恢复或推理卡故障重调度的用户,必须在管理节点安装调度器,该调度器可以是Volcano或其他调度器。
本章为集群调度提供Volcano组件(vc-scheduler和vc-controller-manager)的安装指导。如需使用开源Volcano的其他组件,请用户自行安装,并保证其安全性。
- 本文档中Volcano默认为集群调度组件提供的Volcano组件。其他基于开源Volcano的调度器可通过(可选)集成昇腾插件扩展开源Volcano章节,集成集群调度组件为开发者提供的Ascend-volcano-plugin插件,实现NPU调度相关功能。
- 6.0.RC1及以上版本NodeD与老版本Volcano不兼容,若使用6.0.RC1及以上版本的NodeD,需要配套使用6.0.RC1及以上版本的Volcano。
- 6.0.RC2及以上版本使用Volcano调度器时,默认必须安装ClusterD组件,若不安装ClusterD,则必须修改Volcano的启动参数,否则Volcano将无法正常调度任务。
- 仅使用容器化支持和资源监测的用户,可以不安装Volcano,请直接跳过本章节。
操作步骤
- 以root用户登录K8s管理节点,并执行以下命令,查看Volcano镜像和版本号是否正确。
docker images | grep volcanosh
- 将Volcano软件包解压目录下的yaml文件,拷贝到K8s管理节点上任意目录。
- 如不修改组件启动参数,可跳过本步骤。否则,请根据实际情况修改对应启动yaml文件中Volcano的启动参数。常用启动参数请参见表3和表4。
- 配置Volcano日志转储。安装过程中,Volcano日志将外挂到磁盘空间(“/var/log/mindx-dl”)。默认情况下单日日志写入达到1.8G后,Volcano将清空日志文件。为防止空间被占满,请为Volcano配置日志转储,配置项信息参见表1,或选择更频繁的日志转储策略,避免日志丢失。
- 在管理节点“/etc/logrotate.d”目录下,执行以下命令,创建日志转储配置文件。
vi /etc/logrotate.d/文件名
例如:
vi /etc/logrotate.d/volcano
写入以下内容,然后执行:wq命令保存。/var/log/mindx-dl/volcano-*/*.log{ daily rotate 8 size 50M compress dateext missingok notifempty copytruncate create 0640 hwMindX hwMindX sharedscripts postrotate chmod 640 /var/log/mindx-dl/volcano-*/*.log chmod 440 /var/log/mindx-dl/volcano-*/*.log-* endscript }
- 依次执行以下命令,设置配置文件权限为640,属主为root。
chmod 640 /etc/logrotate.d/文件名 chown root /etc/logrotate.d/文件名
例如:chmod 640 /etc/logrotate.d/volcano chown root /etc/logrotate.d/volcano
表1 Volcano日志转储文件配置项 配置项
说明
可选值
daily
日志转储频率。
- daily:每日进行一次转储检查。
- weekly:每周进行一次转储检查。
- monthly:每月进行一次转储检查。
- yearly:每年进行一次转储检查。
rotate x
日志文件删除之前转储的次数。
x为备份次数。
例如:
- rotate 0:没有备份。
- rotate 8:保留8次备份。
size xx
日志文件到达指定的大小时才转储。
size单位可以指定:
- byte(缺省)
- K
- M
例如size 50M指日志文件达到50 MB时转储。
说明:logrotate会根据配置的转储频率,定期检查日志文件大小,检查时大小超过size的文件才会触发转储。
这意味着,logrotate并不会在日志文件达到大小限制时立刻将其转储。
compress
是否通过gzip压缩转储以后的日志。
- compress:使用gzip压缩。
- nocompress:不使用gzip压缩。
notifempty
空文件是否转储。
- ifempty:空文件也转储。
- notifempty:空文件不触发转储。
- 在管理节点“/etc/logrotate.d”目录下,执行以下命令,创建日志转储配置文件。
- (可选)在“volcano-v{version}.yaml”中,配置Volcano所需的CPU和内存。CPU和内存推荐值可以参见开源Volcano官方文档的表2volcano-controller和volcano-scheduler的建议值。
... kind: Deployment ... labels: app: volcano-scheduler spec: replicas: 1 ... spec: ... imagePullPolicy: "IfNotPresent" resources: requests: memory: 4Gi cpu: 5500m limits: memory: 8Gi cpu: 5500m ... kind: Deployment ... labels: app: volcano-controller spec: ... spec: ... resources: requests: memory: 3Gi cpu: 2000m limits: memory: 3Gi cpu: 2000m ...
- (可选)调度时间性能调优。支持在“volcano-v{version}.yaml”中,配置Volcano所使用的插件。请参见开源Volcano官方文档中表3Volcano高级配置参数说明和表4支持的Plugins列表的说明进行操作。
... data: volcano-scheduler.conf: | actions: "enqueue, allocate, backfill" tiers: - plugins: - name: priority enableNodeOrder: false - name: gang enableNodeOrder: false - name: conformance enableNodeOrder: false - name: volcano-npu_v6.0.0_linux-aarch64 # 其中v6.0.0为MindCluster的版本号,根据不同版本,该处取值不同 - plugins: - name: drf enableNodeOrder: false - name: predicates enableNodeOrder: false arguments: predicate.GPUSharingEnable: false predicate.GPUNumberEnable: false - name: proportion enableNodeOrder: false - name: nodeorder - name: binpack enableNodeOrder: false ....
- (可选)在“volcano-v{version}.yaml”中,配置Volcano使用的集群调度组件为用户提供的重调度时删除Pod的模式、虚拟化方式和交换机亲和性调度。
... data: volcano-scheduler.conf: | ... configurations: - name: init-params arguments: {"grace-over-time":"900","presetVirtualDevice":"true","nslb-version":"1.0","shared-tor-num":"2","useClusterInfoManager":"false"} ...
表2 参数说明 参数名称
默认值
参数说明
grace-over-time
900
重调度优雅删除模式下删除Pod所需最大时间,单位为秒,取值范围2~3600。配置该字段表示使用重调度的优雅删除模式。优雅删除是指在重调度过程中,会等待Volcano执行相关善后工作,900秒后若Pod还未删除成功,再直接强制删除Pod,不做善后。
presetVirtualDevice
true
采用的虚拟化方式。
- true:静态虚拟化
- false:动态虚拟化
nslb-version
1.0
交换机亲和性调度的版本,可以取值为1.0和2.0。
说明:- 交换机亲和性调度1.0版本支持Atlas 训练系列产品和Atlas A2 训练系列产品;支持PyTorch和MindSpore。
- 交换机亲和性调度2.0版本支持Atlas A2 训练系列产品;支持PyTorch框架。
shared-tor-num
2
交换机亲和性调度2.0中单个任务可使用的最大共享交换机数量,可取值为1或2。仅在nslb-version取值为2.0时生效。
useClusterInfoManager
true
Volcano获取集群信息的方式。取值说明如下:
- true:读取ClusterD上报的ConfigMap。
- false:分别读取Ascend Device Plugin和NodeD上报的ConfigMap。
说明:默认使用读取ClusterD组件上报的ConfigMap。后续版本将不支持读取Ascend Device Plugin和NodeD上报的ConfigMap。
- (可选)调度时间性能调优。支持Volcano将单任务(训练的vcjob或acjob任务)的4000或5000个Pod调度到4000或5000个节点上的调度时间优化到5分钟左右,若用户想要使用该调度性能,需要在“volcano-v{version}.yaml”上做如下修改。
- 若要达到5分钟左右的参考时间,需要保证CPU的频率至少为2.60GHz,APIServer时延不超过80毫秒。
- 如果不使用K8s原生的nodeAffinity和podAntiAffinity进行调度,可以关闭nodeorder插件,进一步减少调度时间。
data: volcano-scheduler.conf: | ... - name: proportion enableNodeOrder: false - name: nodeorder enableNodeOrder: false # 可选,不使用nodeAffinity和podAntiAffinity调度时,可关闭nodeorder插件 ... containers: - name: volcano-scheduler image: volcanosh/vc-scheduler:v1.7.0 command: ["/bin/ash"] args: ["-c", "umask 027; GOMEMLIMIT=15000000000 GOGC=off /vc-scheduler # 新增GOMEMLIMIT=15000000000和GOGC=off字段 --scheduler-conf=/volcano.scheduler/volcano-scheduler.conf --plugins-dir=plugins --logtostderr=false --log_dir=/var/log/mindx-dl/volcano-scheduler --log_file=/var/log/mindx-dl/volcano-scheduler/volcano-scheduler.log -v=2 2>&1"] imagePullPolicy: "IfNotPresent" resources: requests: memory: 10000Mi # 将4Gi修改为10000Mi cpu: 5500m limits: memory: 15000Mi # 将8Gi修改为15000Mi cpu: 5500m ...
- 在管理节点的yaml所在路径,执行以下命令,启动Volcano。
kubectl apply -f volcano-v{version}.yaml
启动示例如下:
namespace/volcano-system created namespace/volcano-monitoring created configmap/volcano-scheduler-configmap created serviceaccount/volcano-scheduler created clusterrole.rbac.authorization.K8s.io/volcano-scheduler created clusterrolebinding.rbac.authorization.K8s.io/volcano-scheduler-role created deployment.apps/volcano-scheduler created service/volcano-scheduler-service created serviceaccount/volcano-controllers created clusterrole.rbac.authorization.K8s.io/volcano-controllers created clusterrolebinding.rbac.authorization.K8s.io/volcano-controllers-role created deployment.apps/volcano-controllers created customresourcedefinition.apiextensions.K8s.io/jobs.batch.volcano.sh created customresourcedefinition.apiextensions.K8s.io/commands.bus.volcano.sh created customresourcedefinition.apiextensions.K8s.io/podgroups.scheduling.volcano.sh created customresourcedefinition.apiextensions.K8s.io/queues.scheduling.volcano.sh created customresourcedefinition.apiextensions.K8s.io/numatopologies.nodeinfo.volcano.sh created
- 执行以下命令,查看组件状态。
kubectl get pod -n volcano-system
回显示例如下,出现Running表示组件启动成功:1 2 3
NAME READY STATUS RESTARTS AGE volcano-controllers-5cf8d788d5-qdpzq 1/1 Running 0 1m volcano-scheduler-6cffd555c9-45k7c 1/1 Running 0 1m
- 若Volcano的Pod状态为CrashLoopBackOff,可以参见手动安装Volcano后,Pod状态为:CrashLoopBackOff章节进行处理。
- 若volcano-scheduler-6cffd555c9-45k7c状态为Running,但是调度异常,可以参见Volcano组件工作异常,日志出现Failed to get plugin章节进行处理。
- 安装组件后,组件的Pod状态不为Running,可参考组件Pod状态不为Running章节进行处理。
- 安装组件后,组件的Pod状态为ContainerCreating,可参考集群调度组件Pod处于ContainerCreating状态章节进行处理。
- 启动组件失败,可参考启动集群调度组件失败,日志打印“get sem errno =13”章节信息。
- 组件启动成功,找不到组件对应的Pod,可参考组件启动yaml执行成功,找不到组件对应的Pod章节信息。
参数说明
参数 |
类型 |
默认值 |
说明 |
---|---|---|---|
--log-dir |
string |
无 |
日志目录,组件启动yaml中默认值为/var/log/mindx-dl/volcano-scheduler。 |
--log-file |
string |
无 |
日志文件名称,组件启动yaml中默认值为/var/log/mindx-dl/volcano-scheduler/volcano-scheduler.log。
说明:
转储后文件的命名格式为:volcano-scheduler.log-触发转储的时间.gz,如:volcano-scheduler.log-20230926.gz。 |
--scheduler-conf |
string |
/volcano.scheduler/volcano-scheduler.conf |
调度组件配置文件的绝对路径。 |
--logtostderr |
bool |
false |
日志是否打印到标准输出。
|
-v |
int |
2 |
日志输出级别:
|
--plugins-dir |
string |
plugins |
scheduler插件加载路径。 |
--version |
bool |
false |
是否查询volcano-scheduler二进制版本号。
|
--log_file_max_size |
int |
1800 |
日志文件最大存储大小(单位为M)。
说明:
当日志文件大小超过阈值时,日志内容会被清空。 |
参数 |
类型 |
默认值 |
说明 |
---|---|---|---|
--log-dir |
string |
无 |
日志目录,组件启动yaml中默认值为/var/log/mindx-dl/volcano-controller。 |
--log-file |
string |
无 |
日志文件名称,组件启动yaml中默认值为/var/log/mindx-dl/volcano-controller/volcano-controller.log。
说明:
转储后文件的命名格式为:volcano-controller.log-触发转储的时间.gz,如:volcano-controller.log-20230926.gz。 |
--logtostderr |
bool |
false |
日志是否打印到标准输出。
|
-v |
int |
4 |
日志输出级别:
|
--version |
bool |
false |
volcano-controller二进制版本号。 |
--log_file_max_size |
int |
1800 |
日志文件最大存储大小(单位为M)。
说明:
当日志文件大小超过阈值时,日志内容会被清空。 |

Volcano为开源软件,启动参数只罗列目前使用的常见参数,其他详细的参数请参见开源软件的说明。