前面提到了在docker上使用了windows容器的方法,今天接着再来说docker。试想一下,平常在windows平台上我们可以直接安装显卡驱动,那么linux上行不行。事实上显卡驱动也是支持linux平台的,不过安装的方式却没有windwos上那么简单,接下来一步一步进行。
这次使用到:
系统:centos7.9
显卡:nvidia GTX-3070-Ti
1.在centos7上安装nvidia驱动
首先安装依赖
yum -y install gcc-c++
添加ELPepo源
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
安装nvidia驱动检测
sudo yum install nvidia-detect
nvidia-detect -v
去官网下载nvidia显卡驱动https://www.nvidia.cn/geforce/drivers/
我这里下载的是 NVIDIA-Linux-x86_64-525.89.run
不管是ubuntu也好还是centos也好,系统都是自带一个nouveau显卡驱动的,想要实现自定义驱动的话就必须先禁用本机驱动
lsmod | grep nouveau
修改/etc/modprobe.d/blacklist.conf 文件,以阻止 nouveau 模块的加载,如果系统没有该文件需要新建一个,这里使用root权限,普通用户无法再在/etc内生成.conf文件
su root
echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/blacklist.conf
重新建立initramfs image文件
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)
reboot #重启
lsmod | grep nouveau
如果此时什么都没有打印出来就代表已经禁用了!
开始安装nvidia驱动
如果有桌面版的系统,先进入无界面模式
init 3 #进入无界面模式
安装
./NVIDIA-Linux-x86_64-525.89.run -no-opengl-files
'''
注意:
-no-opengl-files 代表只安装驱动文件,不安装opengl文件。这个参数很重要,如果不需要从显卡输出视频需要加次参数,否则会黑屏(例如:tesela无vga显示系列)
如果你想从显卡输出视频显示那么就不要加,我这里是使用集成显卡显示所以我加上参数
'''
下载安装cuda
https://developer.nvidia.com/cuda-10.0-download-archive
sh cuda_10.0.130_410.48_linux.run
安装完成,查看显卡驱动
nvidia-smi
可以看到显卡驱动安装成功了,下面试一下是否可用
显卡压力测试
yum install git -y
mkdir luwei && cd luwei/
wget http://wili.cc/blog/entries/gpu-burn/gpu_burn-0.9.tar.gz
tar -zxvf gpu_burn-0.9.tar.gz
export PATH=$PATH:/usr/local/cuda-10.0/bin
make
./gpu_burn 600 #压力测试600秒
nvidia-smi -l #查看显卡运行状态
可以看到显卡正在快速工作,说明显卡驱动已经可以正常使用了
2.docker挂载本地显卡
显卡驱动安装好了,那么docker里面想使用本地显卡怎么办,现在介绍docker 19.03版本以及往后的版本,19.03之前的版本不可用此方法(因为那些版本已经老了…>_<)
docker 19.03上,不再需要nvidia-docker2 工具包,因为nvidia gpu已经能直接在docker 运行时支持。
#centos7
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
sudo yum install -y nvidia-container-toolkit
sudo systemctl restart docker
'''
脚本内容就是添加源路径,然后下载安装nvidia-container-toolkit
重启docker服务
'''
#ubuntu
lspci -vv | grep -i nvidia #确保检测到显卡
'''
创建脚本并写入
'''
touch nvidia-container-runtime-script.sh
vi nvidia-container-runtime-script.sh
'''
写入内容
'''
sudo curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
sudo curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
'''
执行,完成NVIDIA Container Runtime安装
'''
sh nvidia-container-runtime-script.sh
apt-get install nvidia-container-runtime
'''
检测是否安装成功,如果返回路径,则安装成功
'''
which nvidia-container-runtime-hook
'''
重启docker
'''
sudo systemctl restart docker
ok,现在docker已经可以使用显卡驱动了,测试一下
docker run --help | grep -i gpus #验证下--gpus选项是否有效
docker run -it --rm --gpus all ubuntu bash #运行一个ubuntu镜像生成容器,该容器可以使用所有的GPU卡。
#进入该容器后,输入:
nvidia-smi
如果看到与物理机一模一样的驱动信息,那么就代表docker可以使用本地显卡了
#官方给出的命令 自己试着玩
# Test nvidia-smi with the latest official CUDA image
docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
# Start a GPU enabled container on two GPUs
docker run --gpus 2 nvidia/cuda:10.0-base nvidia-smi
# Starting a GPU enabled container on specific GPUs
docker run --gpus '"device=1,2"' nvidia/cuda:10.0-base nvidia-smi
docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:10.0-base nvidia-smi
# Specifying a capability (graphics, compute, ...) for my container
# Note this is rarely if ever used this way
docker run --gpus all,capabilities=utility nvidia/cuda:10.0-base nvidia-smi
3.docker中运行windows程序
在上次的文章中提到docker中运行windows程序,那么如何运行呢?有一个叫做wine的程序,这个程序是一种语言的转换层,也就是说它可以将windows程序翻译成linux程序,这样就可以将在linux中运行windows程序了
注意:如果你的docker没有桌面那么就只能运行无界面的windows程序,如果想运行有画面的windows程序需要先为docker安装GUI桌面,请先看我上一篇:https://luwei.blog.csdn.net/article/details/129870490
首先进入docker中的centos7容器
#CentOS 7 安装 64 位 Wine
'''安装 EPEL 软件源
Wine 3 最新稳定版包含在 EPEL 软件源中,安装 Wine 3 首先需要安装 EPEL 软件源
'''
sudo yum install epel-release
'''
CentOS 7 安装 64 位 Wine 3.0
安装 EPEL 软件源后,直接使用如下命令安装 64 位 Wine 3 最新稳定版
'''
sudo yum -y install wine
# CentOS 7 安装 32 位 Wine
'''
32 位 Wine 依赖于 EPEL 软件源中 64 位 Wine,所以首先按如上安装 EPEL 软件源
安装 CentOS/RHEL 7 32 位 Wine 软件源
'''
sudo yum -y install https://harbottle.gitlab.io/wine32/7/i386/wine32-release.rpm
'''
CentOS 7 安装 32 位 Wine
'''
sudo yum -y install wine.i686
'''
Wine 3 安装启动 Windows 程序
Wine 3 安装完成后,你可以右击 Windows exe 文件,然后选择 Wine Windows Program Loader 打开安装程序。
程序安装完成后,在桌面上有 Windows 程序的快捷方式,双击程序的快捷启动程序
'''
'''
Wine 3 卸载 Windows 程序
CentOS 7 安装 Wine 3 后,如需卸载应用程序,进入菜单“应用程序–>Wine”,点击菜单项“Wine Software Uninstaller”卸载 Windows 应用程序
'''
现在wine安装好了就,试一下是否可以执行windows程序
在此我准备了一个cs1.6的安装包,测试一下>_<
右键点击cs1.6.exe程序,选择Wine Windows Program Loader安装
安装中…
进入游戏中…
还是很清楚的,啊哈哈哈
稍微打了一局,没有什么迟钝感,还是可以玩玩的
总结
这次主要是介绍linux显卡的装载使用过程,也是自己的心得体会,毕竟当时自己实践的时候栽了不止一次,有人问docker中加载本地显卡有什么用,其实docker中如果运行的程序需要显卡资源的话那么就用得上了
另一个就是wine,在docker玩游戏的想法想想就好了,别指望使用它来玩游戏,这里就是试验一下,本来就是将语言翻译一遍才显示出来,如果运行大一点的游戏的话迟早是会挂掉的,运行windows程序还是可以的,没必要的话不要开docker的桌面,毕竟docker就是为无界面而生的,一个桌面不知道占用了多少资源
另外,如果在wine中运行的程序需要加载注册表时可以输入:文章来源:https://www.toymoban.com/news/detail-792894.html
regedit 注册表文件 #(例如:Bentely_Licensing.reg)
ok,本次就到这里!文章来源地址https://www.toymoban.com/news/detail-792894.html
到了这里,关于基于Linux装载nvidia驱动,docker挂载本地显卡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!