如何设置GPU显卡主机
GPU作为机器硬件资源,需要做一些个性化设置,才能满足使用要求。本章主要介绍,如何配置GPU服务器,从而在Kubernetes集群中使用GPU显卡。
前提条件
服务器上已经安装GPU显卡,此处GPU为NVIDIA的GPU。
操作步骤
关闭SElinux,请参见如何关闭SElinux。
关闭防火墙,请参见如何关闭防火墙。
设置网络参数,请参见如何配置网络参数,其中Ubuntu可略过此步骤,主要针对于CentOS和Redhat。
设置主机名称,请参见如何设置主机名称。
系统内核须符合要求,CentOS和Redhat需满足3.10.0-957+,Ubuntu需满足4.12.8+,内核升级请参见如何升级内核。
启用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官网 。
执行以下命令,安装kernel-devel、kernel-headers,并且版本需与内核版本一致。
yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)
安装依赖工具包
yum install -y tar make automake gcc gcc-c++ elfutils-libelf-devel libglvnd-devel
安装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
安装CUDA驱动(可选),对于内核和gcc版本有对应要求参考链接,下载及安装方法参考链接
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
安装NVIDIA驱动
下载NVIDIA驱动,执行以下命令查看GPU显卡型号:lspci | grep -i nvidia,下载地址
给驱动run文件赋予执行权限:chmod +x NVIDIA-Linux-x86_64-*..run
安装驱动:./NVIDIA-Linux-x86_64-*..run
安装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直通配置
启用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信息。
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
在主机上安装Nvidia Virtual GPU管理软件,执行以下命令进行安装:
rpm -iv NVIDIA-*.rpm
重启主机使管理软件生效
检查驱动是否安装成功
检查nvidia_vgpu_vfio模块是否已由内核加载以及nvidia-vgpu-mgr.service 服务是否正在运行:
lsmod | grep nvidia_vgpu_vfio
systemctl status nvidia-vgpu-mgr
查看GPU设备ID,并且进入GPU的mdev_supported_types目录
lspci -nn | grep -i nvidia
或
nvidia-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
在主机上安装Nvidia Virtual GPU管理软件,执行以下命令进行安装:
rpm -iv NVIDIA-*.rpm
重启主机使管理软件生效
检查驱动是否安装成功
检查nvidia_vgpu_vfio模块是否已由内核加载以及nvidia-vgpu-mgr.service 服务是否正在运行:
lsmod | grep nvidia_vgpu_vfio
systemctl status nvidia-vgpu-mgr
查看GPU设备ID,并且进入GPU的mdev_supported_types目录
nvidia-smi
记录下GPU的PCI BUS ID,例如 00:81:00.0
启用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”错误。