Ubuntu 22.04 上适用于 Tesla C2070 的 CUDA 8 和 GCC 5

Ubuntu 22.04 上适用于 Tesla C2070 的 CUDA 8 和 GCC 5

我有一台 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?以下23
  • 以某种方式设置一个包含 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-5g++-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                   |
|-------------------------------+----------------------+----------------------+

相关内容