作者:周兆靖
1. 本文目的
目前,英特尔®推出了包括了Arc™家族A770,A750在内的多个桌面版本的独立显卡(discrete Graphic Processing Unit,简称dGPU)供玩家与开发者进行选择。鉴于很多消费者都是初次体验Intel®的独立显卡,在Linux*系统下对于显卡驱动的下载与安装并不熟悉,并且Arc™系列的显卡驱动需要手动安装,所以本文提供了Linux系统下Intel®独立显卡驱动的安装指南以及驱动安装成功的验证方法,并测试了dGPU的推理性能。
注: * 文中涉及的其它名称及商标属于各自所有者资产。
2. Linux系统下英特尔®独立显卡的驱动安装
目前,Arc™系列独立显卡只支持Linux系统下的Ubuntu* 20.04与Ubuntu* 22.04两个版本,你需要确保当前系统版本符合要求。
本节以Intel® Arc™A770 16GB 为例,在Ubuntu 20.04 LTS下安装独立显卡驱动。硬件环境为:CPU i7-11700T,dGPU A770(16GB), 内存 32GB,技嘉*主板Z590。
2.1 驱动安装前的准备工作
2.1.1 Resizable Base Address Register(RBAR)功能
RBAR的中文名称是可调整大小的基址寄存器,是一项标准化的PCI Express接口技术,可在许多最新的 CPU 和主板平台中看见其身影。它也被广泛用于嵌入式系统中,并且通常与外设控制器相关联。通过更改RBAR中的值,可以动态地更改内存访问地址,从而使CPU能够直接读取或写入外设的寄存器或缓冲区。
当电脑运行游戏时,GPU显存(VRAM) 借助CPU 到 GPU 之间的传输通道,不断地传输游戏世界里的纹理、着色器和几何形状等大量信息。在 RBAR 的助力下,系统可以按需请求资源并以整体方式将其进行传送,因此 CPU 便能有效访问整个帧缓存。过去,CPU 单次向 GPU 存取的内容被限制在 256 MB。大型游戏引擎在传统的设计下,若资料量超过这个大小,数据会频繁地在 CPU 和 GPU 之间来回沟通,导致整体运算效率低,影响游戏FPS呈现。AI计算也是同理,频繁的资料拷贝势必会浪费计算资源与带宽。在RBAR技术的帮助下,CPU可以完全存取整个VRAM,而不必通过共享内存作为缓冲区进行协作,减少了与GPU的沟通次数,极大地提高了CPU和GPU之间的运算效率。
同等硬件条件下,开启与关闭RBAR功能得到的推理性能如下:
测试设备:CPU i7-11700T dGPU:A770(16GB) Memory: 32GB Ubuntu 20.04 LTS
测试软件: benchmark_app from OpenVINO™ Toolkit
模型地址:openvino_notebooks/notebooks/001-hello-world/model at main · openvinotoolkit/openvino_notebooks · GitHub
2.1.2 检查系统配置并开启RBAR功能
a.检查当前系统是否开启了RBAR功能:
lspci -v |grep -A8 VGA
得到以上的信息中,黄色方块里代表当前PCIE通道内存存取内容的体积大小。可以看到图中,“size=16G“ 说明CPU向GPU可访问数据的最大值为16GB,且等同于当前显卡的16GB显存,则证明主板BIOS中的RBAR功能已经开启。若RBAR功能没有开启,此处一般情况下显示为 “size=256MB”,这种情况下就需要去到主板BIOS中开启RBAR功能。
b.开启系统中的RBAR功能
由于市面主板型号众多,此处以技嘉* Z590主板为例,BIOS版本为“F7”,BIOS日期为“11/03/2021”,BIOS ID为“BARKL012”。
电脑开机,使用键盘按下“DEL”键进入主板BIOS界面:
点击“setting“进入设置页面:
点击“IO Ports“:
点击”Above 4G Decoding”,将其设置为“Enable“激活状态:
这个时候会”Above 4G Decoding”下方会出现“Re-Size BAR Support”选项,将其设置为“Auto”即可激活RBAR功能。
然后,保存BIOS设置并重启电脑:
进入Linux系统桌面使用“lspci”命令再次验证Memory那一行的“Size”是否等于当前显卡的显存容量。由于市售的主板型号众多且不同品牌的BIOS界面会略有不同,请在安装Intel® ARC™系列独立显卡后根据各型号主板BIOS的操作手册开启RBAR功能。
备注:RBAR功能目前只支持大多数10代酷睿™以及10代以后的CPU平台。
2.2通过Ubuntu终端安装IntelARC系列独立显卡驱动
2.2.1 安装gpg-agent 和wget
首先确保你的系统已经安装了gpg-agent和wget,然后它将下载并安装用于验证软件包仓库完整性的公钥。在apt的下载库中添加Intel®显卡驱动下载库,这样可以在安装显卡时从Intel®的资源库中拉去相应的驱动资源。最后,将repositories.intel.com/graphics库添加至当前系统中。
sudo apt-get install -y gpg-agent wgetwget -qO - https://repositories.intel.com/graphics/intel-graphics.key | \ sudo gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpgecho 'deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/graphics/ubuntu focal-devel main' | \ sudo tee /etc/apt/sources.list.d/intel.gpu.focal.list
2.2.2 安装特定版本的Linux OEM kernel
Dynamic Kernel Module Support(DKMS)指的是一种用于在Linux系统中管理动态内核模块的框架。它允许第三方驱动程序开发人员将自己的驱动程序打包成DKMS格式,并与Linux内核进行集成。
使用DKMS,当系统升级到新版本的内核时,所有已安装的第三方驱动程序都会自动重新构建和安装,从而保持其与新内核的兼容性。这避免了手动重新编译和安装驱动程序的繁琐过程,简化了Linux系统中动态内核模块的管理和部署过程,并提高了系统稳定性和可靠性,为用户带来了便利,。
当前DKMS只支持Linux 5.14.0-1047 oem kernel,所以通过如下命令安装Linux 5.14.0-1047 oem kernel:
sudo apt-get install linux-image-5.14.0-1047-oem
安装完成之后,使用如下命令更改GRUB设置为默认载入oem kernel:
sudo sed -i "s/GRUB_DEFAULT=.*/GRUB_DEFAULT=\"1> $(echo $(($(awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg \| grep -no '5.14.0-1047' | sed 's/:/\n/g' | head -n 1)-2)))\"/" /etc/default/grubsudo sed -i "s/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"$(echo $(awk -F'="' '$1 == "GRUB_CMDLINE_LINUX_DEFAULT" {print $2}' \/etc/default/grub | tr -d '"') | sed 's/pci=realloc=off//g') pci=realloc=off\"/" /etc/default/grub
重启计算机,使kernel生效:
sudo reboot
使用如下的命令来获取当前kernel的信息,确保kernel已被更改为Linux 5.14.0-1047 oem kernel:
uname -r
若成功安装Linux 5.14.0-1047 oem kernel,应该收到如下的返回信息:
注意,如果你在BIOS中设置了安全启动, 你会在重启的时候收到提示,请选择Enroll MOK选项来使新kernel发挥作用。
可选项:若你的旧kernel不需要同时被编译的话,你可以选择将其卸载:
sudo apt-get remove (previous kernel’s name)
2.2.3 安装DKMS模块
安装独立显卡特定的DKMS模块使得驱动得以生效
sudo apt-get updatesudo apt-get install gawksudo apt-get install dkms linux-headers-$(uname -r) libc-devsudo apt-get install intel-i915-dkms intel-platform-cse-dkms pmt
2.2.4 安装run-time 组件
使用apt-get命令安装一些使用Intel®独立显卡进行渲染,编解码,运算等操作所需的必要组件:
sudo apt-get install intel-opencl-icd intel-level-zero-gpu level-zero \ intel-media-va-driver-non-free libmfx1 libmfxgen1 libvpl2 \ libegl-mesa0 libegl1-mesa libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri \ libglapi-mesa libgles2-mesa-dev libglx-mesa0 libigdgmm11 libxatracker2 mesa-va-drivers \ mesa-vdpau-drivers mesa-vulkan-drivers va-driver-all
重启使其生效:
sudo reboot
2.2.5 将user添加至render组中,以获取访问独立显卡的权限
查看当前所有显卡驱动所属组的名称:
stat -c "%G" /dev/dri/render*
你将会收到:
使用如下命令查看当前用户,所在组的详情:
groups ${USER}
若返回的信息中没有“render”组的话,你需要将当前user添加render组的权限,使用如下命令:
sudo gpasswd -a ${USER} render
激活组的更改:
newgrp render
2.2.6 验证驱动成功安装
若以上六步全部完成,请使用如下命令验证驱动是否正确安装:
sudo apt-get install hwinfohwinfo --display
若正确安装,你将会收到如图所示的信息:
鉴于安装步骤细节与文字较多,你也可以参考官方的驱动安装手册进行Arc™系列显卡驱动的安装。若有开发者使用的OS版本为Ubuntu 2022.04 LTS ,也可以在官方的手册中,找到该系统下独立显卡驱动安装的步骤指引,安装手册参考:Installation Guides — Intel® software for general purpose GPU capabilities documentation
3. 同时使用独立显卡(discrete GPU)和集成显卡(integrated GPU)
一般情况下,当你插入dGPU之后,一些品牌的主板会自动屏蔽iGPU的渲染和计算功能,此时需要进入重启进入主板的BIOS界面将使用iGPU的运行开关打开。
本节以技嘉的Z590的BIOS为例,向你展示如何通过修改BIOS设置让iGPU设备可用。
3.1 如何通过BIOS激活系统中的集成显卡
进入BIOS界面,点击“Setting”页面:
点击“IO Ports“:
找到“Internal Graphics”将此选项设置为“Enable”:
保存BIOS更改并重启之后,完成iGPU的激活流程。
3.2 如何检查系统中显卡硬件是否可用
在BIOS中完成iGPU的激活后,进入系统,使用如下命令检查显卡硬件信息:
hwinfo --display
如果你看到的信息如图所示,说明你的iGPU和dGPU都可以正常工作了:
当你成功安装了Intel® ARC™独立显卡的驱动之后,你就可以选择使用dGPU进行图像渲染显示输出,这时候显示器的数据线接在dGPU的输出接口中。
此时,深度学习计算可以选择使用dGPU,iGPU单独进行计算或dGPU与iGPU同时参与计算。
若你把显示器的数据线插在主板的显示输出接口中,这时候iGPU负责图像渲染显示输出。
此时,你可以单独选择使用iGPU或者dGPU进行深度学习计算,当然你也可以同时使用iGPU和dGPU进行深度学习计算。
4. 安装OpenVINO工具套件并测试ARC系列独立显卡的推理性能
OpenVINO™工具套件是Intel®发布的一款开源且商用免费、主要应用于计算机视觉、实现神经网络模型优化和推理计算加速的软件工具套件。该工具也可以帮助开发者在Intel®的推理硬件上(CPU,dPGU,iGPU)快速部署AI应用程序和解决方案。了解更多:英特尔® 发行版 OpenVINO™ 工具套件
本节以ARC™系列A770(16G)显卡为例,在Ubuntu 20.04 LTS系统下进行OpenVINO™工具套件安装和独立显卡的推理性能测试:
步骤 1:
创建虚拟运行环境
python -m venv openvino_env
步骤 2:
激活OpenVINO™ 工作环境
. openvino_env\scripts\activate
步骤 3:
升级pip版本
python -m pip install --upgrade pip
步骤 4:
下载并安装OpenVINO™ 开发工具套件
pip install openvino-dev[ONNX,tensorflow2,caffe,kaldi,pytorch,mxnet]==2022.3.0
步骤 5:
下载OpenVINO™ 示例代码集
git clone https://github.com/openvinotoolkit/openvino.git
步骤 6:
查看本地支持OpenVINO™ 的推理硬件列表:
python3 /openvino/samples/python/hello_query_device.py
将模型下载至当前文件夹中,使用OpenVINO™提供的模型性能评估工具(benchmark_app)运行模型推理,部署至A770独立显卡中进行性能测试,测试命令如下:
benchmark_app –m “v3-small_224_1.0_float.xml” –d GPU.1
模型地址:openvino_notebooks/notebooks/001-hello-world/model at main · openvinotoolkit/openvino_notebooks · GitHub
OpenVINO™工具套件可以通过不同的插件(Plugin)来调用当前系统下的推理硬件,比如: CPU, dGPU和iGPU,进行硬件推理的性能测试。以及MULTI插件可以很轻松地协同调用任意多个推理硬件同时推理,AUTO插件则可以自动选择当前系统下最优硬件进行推理。当前系统下,各推理硬件推理性能的测试如下图所示:
- Ubuntu 20.04 LTS i7-11700T with A770(16GB)
- Command: benchmark_app –m “v3-small_224_1.0_float.xml” –d
- Ubuntu 20.04 LTS i7-11700T with A770(16GB)
- Command: benchmark_app –m “yolov7-tiny.xml” –d
5.总结
相比起可以直接使用驱动安装包的Windows*系统,Linux系统在dGPU的驱动安装上会稍微复杂一些。用户在插入dGPU之后,可以根据本文在Ubuntu系统下安装所需要的驱动。驱动安装完成之后,按照文内方法,检查驱动是否已经正确安装并启用了。驱动完成安装之后,dGPU方可进行高分辨率的图像渲染输出,同时你也可以使用dGPU进行编解码,AI模型的训练与推理,OpenVINO™ 的应用部署等等一系列操作。
从OpenVINO™ 提供的性能测试工具得到的数据来看,dGPU(A770)的AI推理性能相较于Tiger Lake的CPU强劲非常多,并且dGPU与其他推理硬件例如iGPU,CPU的协同推理都十分易于实现且稳定。在“MULTI”插件的帮助下,协同CPU与dGPU能够获得相较于单独使用某一设备更好的推理性能数据,并且部署至多设备协同推理时十分易用。“AUTO” 插件也可以快速选择到当前系统中的最优硬件进行推理。开发者可以很方便地将前期基于OpenVINO™ 在CPU或者iGPU开发的AI应用快速迁移至dGPU中进行实现,同时也推荐开发者尝试联合推理硬件进行AI推理以获得更好的性能。
注: * 文中涉及的其它名称及商标属于各自所有者资产。