首页 > 其他分享 >kubernetes安装配置使用vGPU

kubernetes安装配置使用vGPU

时间:2024-04-26 19:56:16浏览次数:35  
标签:name kubernetes containerd vGPU vgpu nvidia device GPU 安装

前言

AI 落地时,在某些场景下 AI 模型在训练或者是推理时,其算力要求不需要占用整卡的 GPU,比如只需要0.5卡 GPU 即可满足需求。

在这种情况下,可以使用 GPU 虚拟化技术来解决这个问题,将整卡的 GPU 虚拟化为两个0.5卡的 GPU,这样就可以在一张卡上同时跑两个 AI 训练或者 AI 推理应用服务,极大压榨算力资源,降低成本。

vGPUNVIDIA 提供的一种 GPU 虚拟化的一种方案,同时也可以实现对多用户的强 GPU 隔离方案

基本痛点:

  • 容器使用的单卡 GPU 利用率不够高,特别是推理任务;
  • 为了提高 GPU 的利用率、避免算力浪费,需要在单个 GPU 上运行多个容器
  • vGPU 的使用需要额外从 NVIDIA 公司购买 license。年度订阅和永久许可证

其他vGPU插件

https://github.com/4paradigm/k8s-vgpu-scheduler

4paradigm 提供了 k8s-device-plugin,该插件基于NVIDIA官方插件( NVIDIA/k8s-device-plugin),在保留官方功能的基础上,实现了对物理 GPU 进行切分,并对显存和计算单元进行限制,从而模拟出多张小的 vGPU卡`。

k8s 集群中,基于这些切分后的 vGPU 进行调度,使不同的容器可以安全的共享同一张物理 GPU,提高 GPU 的利用率。

此外,插件还可以对显存做虚拟化处理(使用到的显存可以超过物理上的显存),运行一些超大显存需求的任务,或提高共享的任务数。

部署

配置docker

nvidia-smi命令,查看当前显卡信息

如果你使用了 docker,需要讲将 nvidia runtime 设置为 docker runtime 预设值,此文件通常在 /etc/docker/daemon.json 路径:

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

docker 重新加载配置

systemctl daemon-reload && systemctl restart docker

配置containerd

你需要在节点上将 nvidia runtime 做为你的 containerd runtime 预设值。

我们将编辑 containerd daemon 的配置文件,此文件通常在 /etc/containerd/config.toml 路径

version = 2
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    [plugins."io.containerd.grpc.v1.cri".containerd]
      default_runtime_name = "nvidia"

      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
          privileged_without_host_devices = false
          runtime_engine = ""
          runtime_root = ""
          runtime_type = "io.containerd.runc.v2"
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
            BinaryName = "/usr/bin/nvidia-container-runtime"

containerd 重新加载配置

systemctl daemon-reload && systemctl restart containerd

查看当前gpu分配情况

可以通过 kubectl describe node node1命令,查看你指定节点的 gpu 个数情况:

Allocatable:
  cpu:                32
  ephemeral-storage:  94059137278
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             65738804Ki
  nvidia.com/gpu:     2
  pods:               110

关闭NVIDIA官方插件

nvidia-device-plugin ds 描述文件移除即可,为安全可以移动到其它目录,如下移动到家目录做备份保存。

mv /etc/kubernetes/manifests/nvidia-device-plugin.yml .

启用新的gpu设备插件

启动 4paradigm 新的 k8s-device-plugin

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: nvidia-device-plugin-ds
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
      labels:
        name: nvidia-device-plugin-ds
    spec:
      tolerations:
      - key: CriticalAddonsOnly
        operator: Exists
      - key: nvidia.com/gpu
        operator: Exists
        effect: NoSchedule
      priorityClassName: "system-node-critical"
      containers:
      - image: 4pdosc/k8s-device-plugin:latest
        imagePullPolicy: Always
        name: nvidia-device-plugin-ctr
        args: ["--fail-on-init-error=false", "--device-split-count=6", "--device-memory-scaling=2", "--device-cores-scaling=1"]
        env:
        - name: PCIBUSFILE
          value: "/usr/local/vgpu/pciinfo.vgpu"
        - name: NVIDIA_MIG_MONITOR_DEVICES
          value: all
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
            add: ["SYS_ADMIN"]
        volumeMounts:
          - name: device-plugin
            mountPath: /var/lib/kubelet/device-plugins
          - name: vgpu-dir
            mountPath: /usr/local/vgpu
          - mountPath: /tmp
            name: hosttmp
      volumes:
        - name: device-plugin
          hostPath:
            path: /var/lib/kubelet/device-plugins
        - name: vgpu-dir
          hostPath:
            path: /usr/local/vgpu
        - hostPath:
            path: /tmp
          name: hosttmp
      nodeSelector: 
        nvidia-vgpu: "on"

将以上代码保存为 vgpu-nvdp.yaml 文件,然后安装

kubectl apply -f vgpu-nvdp.yaml

打上gpu标签

在需要进行虚拟化的节点打上标签 nvidia-vgpu:"on" ,否则该节点不会被调度到,或者你打其他标签也行,取决于你设置的 nodeSelector

kubectl label node {nodeid} nvdia-vgpu=on

等插件部署完成后,再次执行 kubectl describe node node1命令,查看节点的 gpu 个数情况

运行GPU任务

NVIDIA vGPUs 现在能透过资源类型 nvidia.com/gpu 被容器请求:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
    - name: ubuntu-container
      image: ubuntu:18.04
      command: ["bash", "-c", "sleep 86400"]
      resources:
        limits:
          nvidia.com/gpu: 2 # 请求2个vGPUs
	  nvidia.com/gpumem: 3000 # 每个vGPU申请3000m显存 (可选,整数类型)
	  nvidia.com/gpucores: 30 # 每个vGPU的算力为30%实际显卡的算力 (可选,整数类型)

如果你的任务无法运行在任何一个节点上(例如任务的 nvidia.com/gpu 大于集群中任意一个 GPU 节点的实际 GPU 数量),那么任务会卡在 pending 状态

现在你可以在容器执行 nvidia-smi 命令,然后比较 vGPU 和实际 GPU 显存大小的不同。

监控vGPU使用情况

调度器部署成功后,监控默认自动开启,你可以通过

http://{nodeip}:{monitorPort}/metrics

来获取监控数据,其中 monitorPort 可以在 Values 中进行配置,默认为 31992

grafana dashboard 示例:https://github.com/4paradigm/k8s-vgpu-scheduler/blob/master/docs/dashboard_cn.md

注意 节点上的 vGPU 状态只有在其使用 vGPU 后才会被统计 W

标签:name,kubernetes,containerd,vGPU,vgpu,nvidia,device,GPU,安装
From: https://www.cnblogs.com/niuben/p/18160759

相关文章

  • notepad++ 安装compare文件对比插件&失败解决办法
    1.首先notepad++安装compare方法:在菜单栏点击“插件”》插件管理   搜索:compare 点击YES 因为国内网络原因,可能会安装失败,也可能安装比较久。2.自己解压安装:  下载解压包:链接:https://pan.baidu.com/s/1B8hZJCJ8PLZgwdYzQeWGpQ提取码:7n2s  点击打开插件......
  • lib 安装失败,error Microsoft Visual C++ 14.0 is required.
    即使安装c++要占用c盘4G,而且仍然有可能报错,error:command'C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\BIN\x86_amd64\cl.exe'failedwithexitstatus2另一种解决方法是直接下载whl,省去编译的过程https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib有可能......
  • Syslogserver(日志服务器) 安装和使用
    Syslogserver(日志服务器)安装和使用界面展示一、作用介绍NAS(服务器等设备)死机或出现任何错误后,可用于日志回溯,找出设备故障的原因。二、资料简介镜像(x86):reddorcleaner/syslogserver:amd64镜像(arm):reddorcleaner/syslogserver:aarch64参数类型值备注SYSLOG_U......
  • Nginx 源码安装
     Nginx官网:https://nginx.org参考:Nginx配置常用参数梳理https://www.jb51.net/server/285538k8k.htmnginx配置参数详解https://blog.csdn.net/u013286192/article/details/136418472Nginx配置详解https://www.runoob.com/w3cnote/nginx-setup-intro.html查看nginx开启......
  • 安装1Panel管理面板
    1Panel是一个现代化、开源的Linux服务器运维管理面板。 安装部署:curl-sSLhttps://resource.fit2cloud.com/1panel/package/quick_start.sh-oquick_start.sh&&bashquick_start.sh 手动安装dockerhttps://docker-practice.github.io/zh-cn/install/raspberry-pi.ht......
  • centos 离线环境安装docker
    1.下载dockerhttps://download.docker.com/linux/static/stable/x86_64/docker-23.0.1.tgz  其他版本在上级目录选择下载https://download.docker.com/linux/static/stable/x86_64/2.下载的文件上传到centos服务器上并解压tar-zxvfdocker-23.0.1.tgz3.复制解压目录中的......
  • npm常用命令及安装
    安装#添加NodeSource的RPM存储库curl-sLhttps://rpm.nodesource.com/setup_12.x|sudobash-#安装Node.js和NPMsudoyuminstall-ynodejs常用切换版本命令n#安装[root@test-dlyun-rabbitmq~]#npminstall-gn#查看n工具已经安装的node.js版本......
  • Linux环境下Docker安装和基本使用命令
    以下是在CentOS7.9上安装Docker的步骤:1.更新系统并安装必要的软件包sudoyumupdatesudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm22.添加DockerCE的软件源sudoyum-config-manager--add-repohttps://download.docker.com/linux/centos/......
  • Vsphere中ubuntu带桌面模板安装vmtools
    ①编辑虚拟机设置如果有读ISO文件,将其改为“客户端设备”。 ②选择"安装vmwaretools",选择"挂载"或者“是" ③进入虚拟机,发现”media/用户名/”下出现VMwareTools文件夹。sudosu切换为root,在/下新建一个文件夹,将文件夹下的tar.gz包,复制到该文件夹下,并解压缩。④进入......
  • PostgreSQL14.11一键启动免安装绿色版
    PostgreSQL14.11_x64一键启动免安装版使用方法:解压后,将整个文件夹放到你希望的位置,注意路径不要包含中文。双击运行bat即可,第一次打开会自动初始化数据库目录。注意:pgsql15版本以后,需要使用navicat16.2以上版本才可以正常连接。想使用最新版本的PostgreSQL16.2,可以下载P......