说明
- 理论上适用于其他云平台的GPU计算型实例或者自建GPU计算服务器
- 阿里云实例类型GPU计算型 gn5
- GPU型号Nvidia Tesla P100
- 操作系统CentOS-7.7-1908 64位
- Nvidia驱动版本390.116
- CUDA Driver版本9.1.85
- CUDA Runtime版本9.0.176
- cuDNN版本v7.6.0.64
- Nvidia GPU 兼容性的可以看这篇文章
- Docker版本19.03.5
- GPU驱动、CUDA、cuDNN版本的选择,请自行根据项目要求进行调整!
手动安装
环境准备
禁用SELINUX
| 1 | sed -i 's,^SELINUX=.*,SELINUX=disabled,g' /etc/selinux/config | 
禁用防火墙
| 1 | systemctl disable --now firewalld.service | 
添加sysctl参数
fs参数
| 1 | cat > /etc/sysctl.d/99-fs.conf <<EOF | 
vm参数
| 1 | cat > /etc/sysctl.d/99-vm.conf <<EOF | 
net参数
| 1 | cat > /etc/sysctl.d/99-net.conf <<EOF | 
修改limits参数
| 1 | cat > /etc/security/limits.d/99-centos.conf <<EOF | 
修改journal设置
| 1 | sed -e 's,^#Compress=yes,Compress=yes,' \ | 
修改history参数
| 1 | cat > /etc/profile.d/history.sh <<EOF | 
更新软件
| 1 | yum update -y | 
安装编译环境
| 1 | yum groups install -y base 'Development Tools' | 
安装常用工具
| 1 | yum install -y nc \ | 
检查GPU
查看PCI设备
| 1 | lspci | grep -i nvidia | 
输出示例
| 1 | 00:08.0 3D controller: NVIDIA Corporation GP100GL [Tesla P100 PCIe 16GB] (rev a1) | 
查看硬件信息
| 1 | lshw -numeric -C display | 
输出示例
| 1 | *-display:0 | 
禁用nouveau驱动
| 1 | echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf | 
重启
| 1 | reboot | 
安装GPU驱动
访问Nvidia官网
下载驱动
网页下载
- 产品类型Tesla
- 产品类型P-Series
- 产品家族Tesla P100
- 操作系统Linux 64-bit RHEL7
- CUDA Toolkit9.1
- 点击搜索,跳转到驱动程序下载页面
- 点击下载,跳转到驱动下载
- 再次点击下载,保存驱动文件
命令行下载
| 1 | wget -t 10 --timeout=10 http://cn.download.nvidia.com/tesla/390.116/nvidia-diag-driver-local-repo-rhel7-390.116-1.0-1.x86_64.rpm | 
安装驱动
| 1 | yum install nvidia-diag-driver-local-repo-rhel7-390.116-1.0-1.x86_64.rpm | 
重启
| 1 | reboot | 
检查驱动情况
检查是否加载开源驱动nouveau
这里不应该有结果输出!
| 1 | lsmod | grep nouveau | 
检查驱动版本
| 1 | cat /proc/driver/nvidia/version | 
输出示例
| 1 | NVRM version: NVIDIA UNIX x86_64 Kernel Module 390.116 Sun Jan 27 07:21:36 PST 2019 | 
查看GPU Summary
| 1 | nvidia-smi | 
输出示例
| 1 | +-----------------------------------------------------------------------------+ | 
查看GPU详细信息
| 1 | nvidia-smi -i 0 -q | 
输出示例
| 1 | ==============NVSMI LOG============== | 
禁用本地YUM源
| 1 | yum-config-manager --disable nvidia-diag-driver-local-390.116 | 
安装CUDA环境
添加CUDA源
| 1 | yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo | 
修改CUDA源地址
| 1 | sed -e 's,developer.download.nvidia.cn/compute/cuda/repos/,mirrors.aliyun.com/nvidia-cuda,g' \ | 
安装CUDA
| 1 | yum makecache | 
设置环境变量
| 1 | echo 'export PATH=/usr/local/cuda/bin:$PATH' >> /etc/profile.d/cuda.sh | 
测试CUDA
查看安装路径
| 1 | ls -ld /usr/local/cuda* | 
输出示例
| 1 | lrwxrwxrwx 1 root root 8 Jan 1 11:08 /usr/local/cuda -> cuda-9.0 | 
检查CUDA版本
| 1 | nvcc --version | 
输出示例
| 1 | nvcc: NVIDIA (R) Cuda compiler driver | 
运行Samples
以下两个测试结果都为Result=PASS,则说明CUDA安装成功
deviceQuery
切换目录
| 1 | cd /usr/local/cuda/samples/1_Utilities/deviceQuery | 
编译运行
| 1 | make && ./deviceQuery | 
输出示例
| 1 | ./deviceQuery Starting... | 
bandwidthTest
切换目录
| 1 | cd /usr/local/cuda/samples/1_Utilities/bandwidthTest | 
编译运行
| 1 | make && ./bandwidthTest | 
输出示例
| 1 | [CUDA Bandwidth Test] - Starting... | 
禁用CUDA源
| 1 | yum-config-manager --disable cuda | 
安装cuDNN
确定cuDNN下载地址
方法一
访问cuDNN Archive,登录之后下载
方法二
访问Nvidia托管在Gitlab的容器项目地址,根据自己操作系统的版本,找到对应的Dockerfile,提取cuDNN的下载地址
下载cuDNN
这里直接用CUDA-9.0能用到的、最新的
cuDNN 7.6.0.64
| 1 | wget -O - https://developer.download.nvidia.cn/compute/redist/cudnn/v7.6.0/cudnn-9.0-linux-x64-v7.6.0.64.tgz | tar xz | 
阿里云服务器可以直接走阿里云内网下载
| 1 | baseurl=$(curl -sSL http://100.100.100.200/latest/meta-data/source-address | head -1) | 
- cuda_big_version可以通过以下命令查询
| 1 | curl -sSL "$(curl -sSL http://100.100.100.200/latest/meta-data/source-address | head -1)/opsx/ecs/linux/binary/nvidia/cudnn" | 
- cudnn_version以通过以下命令查询
| 1 | curl -sSL "$(curl -sSL http://100.100.100.200/latest/meta-data/source-address | head -1)/opsx/ecs/linux/binary/nvidia/cudnn/${cuda_big_version}" | 
安装cuDNN
| 1 | cp cuda/include/cudnn.h /usr/local/cuda-9.0/include | 
验证cuDNN
| 1 | git clone --depth=1 https://github.com/wilhelmguo/cudnn_samples_v7.git | 
输出示例
| 1 | cudnnGetVersion() : 7600 , CUDNN_VERSION from cudnn.h : 7600 (7.6.0) | 
设置GPU
手动设置
开启Persistence Mode
- 在Linux平台上,可以设置PersistenceMode让Nvidia GPU驱动在空闲的时候依然保持加载状态。
- 此功能可以加快频繁运行短任务,避免频繁加载驱动
- 会提高待机功耗
| 1 | nvidia-persistenced | 
禁用受限模式
- 允许非管理员运行的CUDA程序调整频率
| 1 | nvidia-smi -acp 0 | 
禁用GPU Boost
- GPU Boost功能可以让GPU根据负载、散热、供电动态超频运行
- GPU Boost功能需要管理员权限才能调用,这里把权限放开给非管理员程序使用
| 1 | nvidia-smi --auto-boost-permission=0 | 
设置GPU运行频率
- 获取GPU支持的频率
- 设置GPU运行频率
- -i参数指定显卡ID
| 1 | CLOCK=$(nvidia-smi -i 0 --query-supported-clocks=mem,gr --format=csv,noheader| head -n1 | awk 'BEGIN { FS=" " } ; { print $1 "," $3 }') | 
加载Nvidia模块
- 按需调整
- 这里可以独立于Linux发行版的方式创建Nvidia设备文件
- create-nvidia-device-file创建给定编号的Nvidia设备文件
- unified-memory加载- Nvidia Unified Memory模块
- modeset加载Nvidia内核模块并创建设备文件
| 1 | nvidia-modprobe --unified-memory --create-nvidia-device-file=0 --modeset | 
开机自动设置
| 1 | cat >> /etc/rc.local <<EOF | 
使用阿里云自动安装脚本
说明
- 阿里云在创建GPU计算型实例时,可以通过metadata的方式传入初始化脚本,实现自动安装Nvidia GPU驱动和CUDA
- 详细流程可以看阿里云的操作文档
运行脚本
- 驱动版本390.116
- CUDA版本9.0.176
- cuDNN版本7.5.0(阿里云没提供7.6.0.64的版本,根据文档选择了最新的7.5.0)
| 1 | DRIVER_VERSION="390.116" | 
Nvidia-Docker
说明
- 安装Docker-CE Stable
- 安装Nvidia-Docker
安装docker
这里以docker-ce 最新版本为例
- 清理旧Docker包
| 1 | yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine | 
- 安装Docker依赖包
| 1 | yum install -y yum-utils device-mapper-persistent-data lvm2 | 
- 添加Docker-CE源
| 1 | yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo | 
- 安装Docker-CE
| 1 | yum install docker-ce -y | 
- 配置Docker启动参数
| 1 | mkdir -p /etc/docker | 
- 设置Docker命令补全
| 1 | cp /usr/share/bash-completion/completions/docker /etc/bash_completion.d/ | 
- 禁用Docker-CE源
| 1 | yum-config-manager --disable docker-ce-stable | 
- 启动Docker
| 1 | systemctl enable --now docker.service | 
- 检查Docker信息
| 1 | docker info | 
安装Nvidia-Docker
- 添加YUM源
| 1 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) | 
- 安装NVIDIA Container Toolkit
| 1 | yum install -y nvidia-container-toolkit | 
- 重启Docker
| 1 | systemctl restart docker.service | 
测试容器调用GPU
| 1 | docker run -it --rm --gpus all nvidia/cuda:9.0-base nvidia-smi | 
输出示例
| 1 | Unable to find image 'nvidia/cuda:9.0-base' locally |