我有一台 Ubuntu 22.04 计算机,上面有一个旧的 Tesla C2070 GPU,我需要使用它。(Fermi 2.0 计算架构)。
支持此 GPU 的最新 CUDA 工具包(编译器)是 8.0,因此支持 gcc 5。
我想知道这两个选项中的哪一个是实现此安装的最佳方式:
- 通过 sources.list 上的临时 xenial APT 安装 gcc-5 g++-51(并立即禁用),然后通过 update-alternatives 将此版本设置为默认版本,然后从运行文件安装 CUDA 8?以下2和3
- 以某种方式设置一个包含 Ubuntu 16 的 docker 镜像(可能使用 debootstrap 和 systemd-nspawn?),该镜像可直接与 GPU 通信并防止与 APT 和默认编译器混淆?或者,这会减慢 nvcc 编译程序的执行速度,因为它位于镜像中?
提前感谢您的建议。
答案1
这些是我想出的步骤。(有关灵感的更多详细信息,请参阅原始问题中发布的评论和链接。)
首先,验证你的 GPU 卡是否被识别
lspci | grep -i nvidia
05:00.0 VGA compatible controller: NVIDIA Corporation GF100GL [Tesla C2050 / C2070] (rev a3)
然后打开你的易于来源
sudo nano /etc/apt/sources.list
添加赛尼尔存储库最后,保存并关闭。
deb http://us.archive.ubuntu.com/ubuntu/ xenial main
deb http://us.archive.ubuntu.com/ubuntu/ xenial universe
更新易于列表(您可能需要先手动添加密钥)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 3B4FE6ACC0B21F32
sudo apt update
安装gcc-5和g++-5
sudo apt install gcc-5 g++-5
消除赛尼尔从你的易于来源,保存并关闭。
sudo nano /etc/apt/sources.list
更新易于列表
sudo apt update
可能会删除任何旧的 NVIDIA 驱动程序残余,甚至可能在中间重新启动。(请小心,因为这可能只允许您使用 ssh 或故障安全终端访问。)如果您只想从 runfile (v375) 安装工具包而不是匹配版本的驱动程序,则不需要此步骤。
sudo nvidia-uninstall
sudo nvidia-installer --uninstall
sudo apt-get remove --purge '^nvidia-.*'
sudo reboot
sudo apt-get autoremove
创建包含以下链接的目录gcc5和克++ 5并把它放在小路
cd /opt/
sudo mkdir gcc5
cd gcc5
sudo ln -s /usr/bin/gcc-5 gcc
sudo ln -s /usr/bin/g++-5 g++
export PATH=/opt/gcc5:$PATH
下载通用计算架构8运行文件从https://developer.nvidia.com/cuda-80-ga2-download-archive
cd /tmp/
wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run
wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/patches/2/cuda_8.0.61.2_linux-run
提取它以复制安装工具到perl小路
sh cuda_8.0.61_375.26_linux-run --tar mxvf
sudo cp InstallUtils.pm /usr/lib/x86_64-linux-gnu/perl-base/
描述了上一条语句的更清晰的步骤这里
关闭你的 X-server(仅当你想从运行文件安装驱动程序 v375 时才需要这样做,否则通过 安装 v390
sudo ubuntu-drivers install
)sudo service lightdm stop
sudo killall Xorg
运行安装程序,对所有问题回答是(如果不想安装驱动程序,请在正确的问题中回答否)
sh cuda_8.0.61_375.26_linux-run
我有
Driver: Installed
Toolkit: Installed in /usr/local/cuda-8.0
Samples: Installed in /home/user
应用 cuBLAS 补丁
sudo sh cuda_8.0.61.2_linux-run
验证 nouveau 驱动程序是否正确列入黑名单
lsmod | grep nouveau
出口nvcc到小路
PATH=$PATH:/usr/local/cuda-8.0/bin
最终你将得到:
nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61
并且,如果您选择安装 runfile 驱动程序:
nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
因为
dkms status
nvidia/375.26: added
sudo dkms remove nvidia/375.26 --all
sudo dkms install nvidia/375.26 -k $(uname -r)
Error! Bad return status for module build on kernel: 5.15.0-56-generic (x86_64). Consult /var/lib/dkms/nvidia/375.26/build/make.log for more information.
日志文件生成日志:
/var/lib/dkms/nvidia/375.26/build/common/inc/nv-mm.h:86:42: error: passing argument 1 of ‘get_user_pages_remote’ from incompatible pointer type [-Werror=incompatible-pointer-types]
/var/lib/dkms/nvidia/375.26/build/common/inc/nv-linux.h:98:10: fatal error: asm/kmap_types.h: No such file or directory
然后转到示例:
cd ~/NVIDIA_CUDA-8.0_Samples
系统头文件第 37 行定义之后需要进行手动修改
__HAVE_FLOAT128
sudo nano /usr/include/x86_64-linux-gnu/bits/floatn.h
#if CUDART_VERSION
#undef __HAVE_FLOAT128
#define __HAVE_FLOAT128 0
#endif
请注意,每当更新系统包时,您可能需要重新运行上面的步骤。
最后编译样本
make
运行任何所需的示例
./deviceQuery/deviceQuery
编辑:
使用以下内容(快速破解)修补/usr/src/nvidia-375.26
,灵感来自NVIDA openGPU 内核以及其他地方的论坛帖子,我能够修改探针然后运行nvidia-smi。我禁用了一些东西只是为了让它编译,我需要检查这些是否有任何副作用,是否需要更小心的处理。
Mon Dec 5 12:54:10 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26 Driver Version: 375.26 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla C2070 Off | 0000:05:00.0 Off | Off |
| 30% 58C P0 N/A / N/A | 0MiB / 6066MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
1_Utilities/deviceQuery/deviceQuery
1_Utilities/deviceQuery/deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "Tesla C2070"
CUDA Driver Version / Runtime Version 8.0 / 8.0
CUDA Capability Major/Minor version number: 2.0
Total amount of global memory: 6066 MBytes (6361120768 bytes)
(14) Multiprocessors, ( 32) CUDA Cores/MP: 448 CUDA Cores
GPU Max Clock rate: 1147 MHz (1.15 GHz)
Memory Clock rate: 1494 Mhz
Memory Bus Width: 384-bit
L2 Cache Size: 786432 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65535), 3D=(2048, 2048, 2048)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per multiprocessor: 1536
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (65535, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 2 copy engine(s)
Run time limit on kernels: No
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 5 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = Tesla C2070
Result = PASS
编辑2:
当然,整个过程搞乱了我的显示显卡(第二个 NVIDIA GPU),它是与它一起安装的。如果我安装了推荐的英伟达驱动程序ubuntu-drivers devices
,它删除了我手动安装的驱动程序。如果我什么都不做,它就无人认领,有了这个消息错误:
NVRM: The NVIDIA GeForce 9400 GT GPU installed in this system is
NVRM: supported through the NVIDIA 340.xx Legacy drivers. Please
NVRM: visit http://www.nvidia.com/object/unix.html for more
NVRM: information. The 375.26 NVIDIA driver will ignore
NVRM: this GPU. Continuing probe...
如果我将 nouveau 列入白名单,那么计算图形处理器不再起作用。最后,解决方案离开新列入黑名单,无需添加模式设置,然后通过 crontab 在启动时 modprobing nouveau,这将找到未认领的图形处理器。我还必须先删除xorg配置文件文件。现在我有显示图形处理器和新和计算图形处理器与英伟达司机。唷。
通过注释第二行来禁用 conf 文件中的选项 nomodeset
sudo nano /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
在启动并加载 NVIDIA 后,通过在末尾添加 modprobe 来启用 nouveau
sudo nano /etc/crontab
@reboot root /sbin/modprobe nouveau
编辑3:
如果您不介意 CUDA 运行时版本 (8.0) 与驱动程序版本 (9.1) 不同,那么事情就会变得简单得多,您无需进行此内核修补。您只需执行sudo ubuntu-drivers install
(如果您已执行上述步骤,请先卸载自定义驱动程序,取消注释 modprobe-conf 文件中的 nomodeset 选项),然后通过运行文件安装 CUDA 时,只需安装工具包,而不是驱动程序。DeviceQuery 将返回:
Device 0: "Tesla C2070"
CUDA Driver Version / Runtime Version 9.1 / 8.0
CUDA Capability Major/Minor version number: 2.0
和nvidia-smi:
nvidia-smi
Wed Dec 7 11:35:21 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.157 Driver Version: 390.157 |
|-------------------------------+----------------------+----------------------+