准备工作
1,下载gpu驱动,目前dui环境使用的gpu驱动版本是NVIDIA-Linux-x86_64-381.22.run,由于在最新版本的驱动上使用存在内存泄漏的问题,没有使用最新版本
2,服务器安装gcc和kernel-devel,kernel-devel的版本和uname -a 查到的内核版本一致,如果内核不是最新的,可以将内核升级到最新版本,或者到网站搜索对应的rpm包。如果服务器是阿里云ECS,只能搜索对应的rpm包,不要升级操作系统版本,否则会导致ecs重启失败。
安装过程
1) 删除nouveau模块
- rmmod nouveau( modprobe -r nouveau )
- 执行lsmod | grep nouveau 确认删除
2) 添加blacklist.conf在 /etc/modprobe.d 里面,.内容如下(请注意双引号在不同环境下的变化,切记)
- echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
3) 重建initramfs
- mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
- dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
4)重启 reboot
5)重启完成后执行./NVIDIA-Linux-x86_64-381.22.run ,所有选项使用默认值,一些warning提示可以忽略
6)驱动安装完成后,执行nvidia-smi可以查看gpu驱动是否安装成功
运行cuda
1,安装docker-1.13.1
tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
yum -y install docker-engine-1.13.1-1.el7.centos
systemctl enable docker.service
mkdir -p /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/docker.conf <<-'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -D -H tcp://0.0.0.0:27000 -H unix:///var/run/docker.sock -g /data/docker -D --insecure-registry docker.v2.aispeech.com --registry-mirror=http://33391a94.m.daocloud.io
EOF
systemctl daemon-reload
2,安装nvidia-docker-1.0.1-1.x86_64.rpm
rpm -ivh nvidia-docker-1.0.1-1.x86_64.rpm
3,启动nvidia-docker
systemctl start nvidia-docker
systemctl enable nvidia-docker
4,手动起cuda容器
执行start_cuda.sh 脚本,运行cuda服务
5,服务起来后,docker logs xxx 查看cuda容器日志,出现如下日志,表示服务正常
kubernetes 支持 gpu
有2个修改点
1,修改gpu服务器的kubelet,
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,增加配置项--feature-gates=Accelerators=true,重启kubelet服务
2,修改kubeapi的参数
vim /etc/kubernetes/manifests/kube-apiserver.yaml,增加配置项 --feature-gates=Accelerators=true,不需要手工重启(可不加)
3 . 在dui的集群管理→配置详情里增加gpu相关的qos配置(必须添加,否则显卡不会分配)
gpu服务 casr和cuda之间默认是socket通信,同时还支持tcp通信,如果使用tcp通信,修改步骤如下:
1 cuda服务 1个修改点
假设cuda的资源文件是dui_forward_v01
修改dui_forward_v01/cfg/forward.skip.conf ,use_inet=0 改为1 (0是socket通信,1是tcp通信)
2 识别资源 fst.cfg文件
假设识别资源文件夹dui_gpu_v0.5
修改 dui_gpu_v0.5/fst.cfg
将use_inetnet 设置为1
将ip设置为cuda对应的ip地址
3, 分别重启cuda服务和casr服务 (casr不要更新service,否则修改的文件会被覆盖)