如何设置GPU显卡主机

GPU作为机器硬件资源,需要做一些个性化设置,才能满足使用要求。本章主要介绍,如何配置GPU服务器,从而在Kubernetes集群中使用GPU显卡。

前提条件

服务器上已经安装GPU显卡,此处GPU为NVIDIA的GPU。

操作步骤

  1. 关闭SElinux,请参见如何关闭SElinux

  2. 关闭防火墙,请参见如何关闭防火墙

  3. 设置网络参数,请参见如何配置网络参数,其中Ubuntu可略过此步骤,主要针对于CentOS和Redhat。

  4. 设置主机名称,请参见如何设置主机名称

  5. 系统内核须符合要求,CentOS和Redhat需满足3.10.0-957+,Ubuntu需满足4.12.8+,内核升级请参见如何升级内核

  6. 启用iommu,同时将nouveau驱动加入黑名单,禁止开机加载。

    • 编辑/etc/default/grub文件里的“GRUB_CMDLINE_LINUX”行,追加intel_iommu=on modprobe.blacklist=nouveau,启用iommu,同时将nouveau驱动加入黑名单,禁止开机加载。配置如下:

      GRUB_TIMEOUT=5   
      GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
      GRUB_DEFAULT=saved   
      GRUB_DISABLE_SUBMENU=true
      GRUB_TERMINAL_OUTPUT="console"
      GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on modprobe.blacklist=nouveau"
      GRUB_DISABLE_RECOVERY="true"
      

      追加的信息中,厂商信息必须与服务器一致。例如厂商为amd,则追加的信息为amd_iommu=on modprobe.blacklist=nouveau

    • 重新生成BootLoader配置文件,并且重启机器。

      grub2-mkconfig -o /boot/grub2/grub.cfg

      若机器是ufi启动,则命令为:

      grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

    • 重启机器使配置生效。

    • 检查上述配置是否生效。

      使用命令查看IOMMU已启用:dmesg | grep -E "DMAR|IOMMU"

      使用命令查看nouveau已被禁用:dmesg | grep -i nouveau

Pod GPU共享配置

适用场景

  • 创建Kubernetes应用时Pod共享GPU的显存。

  • Pod独占某一张GPU卡。

  • GPU编码加速。

此处以CentOS 8为例,其他系统安装请参见NVIDIA官网

  1. 执行以下命令,安装kernel-devel、kernel-headers,并且版本需与内核版本一致。

    yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)

  2. 安装依赖工具包

    yum install -y tar make automake gcc gcc-c++ elfutils-libelf-devel libglvnd-devel

  3. 安装docker-ce,版本需满足19.03+,此处不能使用二进制安装docker,需要使用rpm包或者在线安装。

    yum config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

    yum repolist -v

    yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el7.x86_64.rpm

    yum install docker-ce -y

    systemctl --now enable docker

  4. 安装CUDA驱动(可选),对于内核和gcc版本有对应要求参考链接,下载及安装方法参考链接

    wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda-repo-rhel8-11-1-local-11.1.0_455.23.05-1.x86_64.rpm

    rpm -i cuda-repo-rhel8-11-1-local-11.1.0_455.23.05-1.x86_64.rpm

    yum clean all

    yum -y module install nvidia-driver:latest-dkms

    yum -y install cuda

  5. 安装NVIDIA驱动

    • 下载NVIDIA驱动,执行以下命令查看GPU显卡型号:lspci | grep -i nvidia下载地址

    • 给驱动run文件赋予执行权限:chmod +x NVIDIA-Linux-x86_64-*..run

    • 安装驱动:./NVIDIA-Linux-x86_64-*..run

  6. 安装nvidia-docker2

    distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

    yum clean expire-cache --refresh

    yum install -y nvidia-docker2

    修改docker 默认运行时,在daemon.json文件中增加default-runtime": "nvidia"

    vi /etc/docker/daemon.json

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

    systemctl restart docker

    通过docker info可以查看到 Default Runtime: nvidia

GPU直通配置

  1. 启用vfio-pci内核模块

    • 使用以下命令确定GPU的供应商ID和设备ID :lspci -nn | grep -i nvidia

      如:01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106GL [Quadro P2000] [10de:1c30] (rev a1),10de:1c30 即vendor-ID:device-ID。

    • 使用如下命令更新VFIO配置(多个设备用逗号分割):

      echo "options vfio-pci ids=vendor-ID:device-ID" > /etc/modprobe.d/vfio.conf

      多张卡情况下:echo "options vfio-pci ids=vendor-ID:device-ID,vendor-ID:device-ID..." > /etc/modprobe.d/vfio.conf

      除了GPU外还需配置声卡供应商ID和设备ID信息。

  2. VFIO配置

    • 更新配置到加载VFIO-PCI模块,然后重启生效:

      echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf

      reboot

    • 验证是否为GPU加载了VFIO-PCI驱动程序:

      lspci -nnk -d 10de:

vGPU配置

Tesla T4、RTX6000、RTX8000

  1. 在主机上安装Nvidia Virtual GPU管理软件,执行以下命令进行安装:

    rpm -iv NVIDIA-*.rpm

  2. 重启主机使管理软件生效

  3. 检查驱动是否安装成功

    检查nvidia_vgpu_vfio模块是否已由内核加载以及nvidia-vgpu-mgr.service 服务是否正在运行:

    lsmod | grep nvidia_vgpu_vfio

    systemctl status nvidia-vgpu-mgr

  4. 查看GPU设备ID,并且进入GPU的mdev_supported_types目录

    lspci -nn | grep -i nvidianvidia-smi

    
     结果如:01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU102GL [Quadro RTX 6000/8000] [10de:1c30] (rev a1),查看设备ID:01:00.0
    

    cd /sys/bus/pci/devices/0000\:01\:00.0/mdev_supported_types/

    若无mdev_supported_types目录,则执行systemctl start nvidia-vgpud后再执行上述操作。

    若需移除vGPU设备,则执行以下步骤:

    echo 1 > /sys/bus/mdev/devices/uuid/remove

    移除正在使用的vGPU设备会报 “echo: write error: Device or resource busy”错误。

A10,A5000

  1. 在主机上安装Nvidia Virtual GPU管理软件,执行以下命令进行安装:

    rpm -iv NVIDIA-*.rpm

  2. 重启主机使管理软件生效

  3. 检查驱动是否安装成功

    检查nvidia_vgpu_vfio模块是否已由内核加载以及nvidia-vgpu-mgr.service 服务是否正在运行:

    lsmod | grep nvidia_vgpu_vfio

    systemctl status nvidia-vgpu-mgr

  4. 查看GPU设备ID,并且进入GPU的mdev_supported_types目录

    nvidia-smi

    
     记录下GPU的PCI BUS ID,例如 00:81:00.0
    
  5. 启用SRIOV。

    运行/usr/lib/nvidia/sriov-manage -e 加上前面记下的Bus-ID,例如:/usr/lib/nvidia/sriov-manage -e 00:81:0.0

    若需移除vGPU设备,则执行以下步骤:

    echo 1 > /sys/bus/mdev/devices/uuid/remove

    移除正在使用的vGPU设备会报 “echo: write error: Device or resource busy”错误。

© 2023 MiaoYun Chengdu Yuan Lai Yun Zhi Technologies Inc.            Version: 2.0.2305.1

results matching ""

    No results matching ""