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 # 查看部署的资源

修改内容如下:

k8s

k8s

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

以上是关于k8s 使用 vocano.sh 支持binpack的主要内容,如果未能解决你的问题,请参考以下文章

K8s 终将废弃 docker,TKE 早已支持 containerd

k8s1.5版本支持创建deployment吗

dubbo-go 1.4.0 版本发布,支持 K8s 注册中心rest 协议

K8s Deployment

text Jenkins管道支持k8 / docker

k8s 如何支持私有镜像