k8s 使用 vocano.sh 支持binpack
Posted qinshixu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s 使用 vocano.sh 支持binpack相关的知识,希望对你有一定的参考价值。
1.背景
由于AI分布式训练平台特殊性以及k8s默认的调度器,当节点为多GPU卡时,会存在毛刺
问题。比如3台8卡的GPU,前面的提交3个1卡的任务,默认的调度机制,每个节点上一个
1卡的任务,当有一个8卡的任务提交时,就会处于pending,导致资源利用率不高
2.binpack
优先调度到资源被分配的节点,逻辑实现是打分机制,默认的打分机制是0-100,根据
资源使用情况,使用越高,分数越低,binpack刚好相反,资源使用越低,分数越低
3.安装volcano
wget https://raw.githubusercontent.com/volcano-sh/volcano/release-1.4/installer/volcano-development.yaml
vim volcano-development.yaml
kubectl apply -f volcano-development.yaml
kubectl get all -n volcano-system # 查看部署的资源
修改内容如下:
4.验证
需要指定 schedulerName: volcano
apiVersion: kubeflow.org/v1
kind: TFJob
metadata:
labels:
app: test-1
name: test-1
namespace: dlp
spec:
#schedulerName: volcano
cleanPodPolicy: Running
tfReplicaSpecs:
Worker:
replicas: 1
restartPolicy: Never
template:
metadata:
creationTimestamp: null
labels:
app: test-1
spec:
schedulerName: volcano
containers:
- args:
- sleep 360d
command:
- sh
- -c
image: registry.cn-beijing.aliyuncs.com/ai-samples/tensorflow:1.5.0-devel-gpu
imagePullPolicy: Always
name: tensorflow
resources:
limits:
nvidia.com/gpu: "1"
requests:
cpu: "1"
memory: 1Gi
nvidia.com/gpu: "1"
volumeMounts:
- mountPath: /dev/shm
name: dshm
- mountPath: /mnt
name: mnt
volumes:
- hostPath:
path: /mnt
name: mnt
- emptyDir:
medium: Memory
name: dshm
提交k8s,更换任务名称之后,继续提交,查看两个job是否调度到同一个node节点上
以上是关于k8s 使用 vocano.sh 支持binpack的主要内容,如果未能解决你的问题,请参考以下文章
K8s 终将废弃 docker,TKE 早已支持 containerd