本文基于最新的 CUDA 10.0 CentOS 7 操作系统的 run 文件安装包来进行解压分析,看看里边都有些什么内容。有些可能遇到的问题放在最后的 FAQ 里了。CUDA 9.x 会和10.0 有一些差别,不过大部分还是比较接近的。
CUDA 的源代码在 https://developer.download.nvidia.cn/compute/cuda/opensource/10.0.130/
这里有安装指导 https://developer.download.nvidia.cn/compute/cuda/10.0/Prod/docs/sidebar/CUDA_Installation_Guide_Linux.pdf
有快速开始的指导 https://developer.download.nvidia.cn/compute/cuda/10.0/Prod/docs/sidebar/CUDA_Quick_Start_Guide.pdf
解压 首先要下载安装包,我们下载CUDA 10.0 CentOS 7 的 run 文件安装包,其次我们使用 noexec 参数进行解压,操作如下:
1 2 wget https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux sh cuda_10.0.130_410.48_linux --noexec --target v10.0
意思是不运行安装脚本,把 cuda_10.0.130_410.48_linux.run解压到v10.0目录。
下载地址是从官网拷贝下来的,不知道为什么没有.run 的后缀,不过是个 run 包无疑。
总览 我们进入的解压的目录里看看有什么
1 2 3 4 5 6 7 8 [root@cuda ~]# cd v10.0 [root@cuda v10.0]# ll -h 总用量 72K -rwxr-xr-x 1 root root 45K 9月 13 05:44 cuda-installer.pl -r-xr-xr-x 1 root root 13K 9月 13 05:44 InstallUtils.pm drwxrwxr-x 3 root root 196 1月 28 18:32 run_files -r-xr-xr-x 1 root root 7.6K 9月 13 05:44 uninstall_cuda.pl [root@cuda v10.0]#
从上边的输出来看,解压以后最先看到的就是这三个文件和一个目录,他们分别是:
cuda-installer.pl perl 语言写的安装脚本
InstallUtils.pm package InstallUtils .
run_files run 包的所有文件。
uninstall_cuda.pl perl 语言写的卸载脚本,安装以后可以使用安装包来卸载已经安装好的 CUDA。
我们接下来看一下 run_files 里有什么?
执行 ls 命令
1 2 3 4 5 6 7 8 9 [root@172-18-12-25 run_files]# ll -h 总用量 1.9G -rwxrwxr-x 1 root root 1.8G 9月 13 05:44 cuda-linux.10.0.130-24817639.run -rwxrwxr-x 1 root root 83M 9月 13 05:44 cuda-samples.10.0.130-24817639-linux.run -r--r--r-- 1 root root 63K 9月 13 05:44 EULA.txt -r-xr-xr-x 1 root root 444K 9月 13 05:44 getpass -rwxr-xr-x 1 root root 102M 9月 13 05:44 NVIDIA-Linux-x86_64-410.48.run -r--r--r-- 1 root root 185 9月 13 05:44 pc_template.pc [root@172-18-12-25 run_files]#
可以看到这些文件
cuda-linux.10.0.130-24817639.run CUDA 安装包
cuda-samples.10.0.130-24817639-linux.run CUDA sample 例子的安装包
EULA.txt End User License Agreement 终端用户 license 协议
getpass 一个二进制文件,用来获取一个口令
NVIDIA-Linux-x86_64-410.48.run 显卡驱动安装包
pc_template.pc pc 模板,用来显示一些基本的信息,内容如下:
1 2 3 4 5 6 7 8 9 10 #pc_template.pc cudaroot=$(CUDAPATH) libdir=$(LIBDIR) includedir=${cudaroot}/include Name: $(NAME) Description: $(DESCRIPTION) Version: $(VERSION) Libs: -L${libdir} -l$(NAME) Cflags: -I${includedir}
CUDA 安装包 我们先把 cuda-samples.10.0.130-24817639-linux.run 解压,然后看看里边有什么内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@172-18-12-25 run_files]# sh cuda-linux.10.0.130-24817639.run --noexec --target cuda-linux [root@172-18-12-25 run_files]# cd cuda-linux [root@172-18-12-25 cuda-linux]# ll -h 总用量 144K drwxrwxr-x 3 root root 331 9月 13 05:18 bin -rw-rw-r-- 1 root root 8.7K 9月 13 05:18 CUDA_Toolkit_Release_Notes.txt drwxrwxr-x 5 root root 40 9月 13 05:18 doc -rw-rw-r-- 1 root root 63K 9月 13 05:18 EULA.txt drwxrwxr-x 5 root root 89 9月 13 05:18 extras drwxrwxr-x 6 root root 8.0K 9月 13 05:18 include -rwxr-xr-x 1 root root 19K 9月 13 05:18 install-linux.pl -r-xr-xr-x 1 root root 13K 9月 13 05:18 InstallUtils.pm drwxrwxr-x 5 root root 185 9月 13 05:18 jre drwxrwxr-x 3 root root 4.0K 9月 13 05:18 lib64 drwxrwxr-x 8 root root 226 9月 13 05:18 libnsight drwxrwxr-x 7 root root 209 9月 13 05:18 libnvvp drwxrwxr-x 8 root root 160 9月 13 05:18 NsightCompute-1.0 drwxrwxr-x 2 root root 53 9月 13 05:18 nsightee_plugins drwxrwxr-x 3 root root 21 9月 13 05:18 nvml drwxrwxr-x 7 root root 85 9月 13 05:18 nvvm drwxrwxr-x 3 root root 17 9月 13 05:18 share drwxrwxr-x 2 root root 201 9月 13 05:18 src drwxrwxr-x 2 root root 43 9月 13 05:18 tools -r-xr-xr-x 1 root root 7.6K 9月 13 05:18 uninstall_cuda.pl -rw-rw-r-- 1 root root 22 9月 13 05:18 version.txt [root@172-18-12-25 cuda-linux]#
bin 编译好的命令
doc 文档
extras cuda gdb 源码以及一些 demo 套件,包括 bandwidthTest、busGrind、deviceQuery、nbody、oceanFFT、randomFog、vectorAdd 。
install-linux.pl perl 写的安装脚本
jre Oracle java 的 jre, http://java.com/licensereadme
libnsight nsight 的 lib 库
NsightCompute-1.0 用于CUDA应用程序的交互式内核分析器。
nvml 一个简单的示例程序,演示如何构建一个 NVML 客户端。
share 里边有一个 gbd 目录
tools 有一个计算器
version.txt 版本信息
CUDA_Toolkit_Release_Notes.txt CUDA 的 Release notes
EULA.txt End User License Agreemen 终端用户 license 协议
include 各种 .h 文件
InstallUtils.pm package InstallUtils
lib64 库文件
libnvvp nvvp 库文件
nsightee_plugins nsightee 的插件
nvvm nvvm ,bin 目录下有一个 cicc 的命令
src 源码, 有一些 .h 结尾的文件
uninstall_cuda.pl perl 写的卸载脚本
CUDA 自身的内容大概就是这样,有需要的可以自行探索。
CUDA sample 例子的安装包 我们先把 cuda-samples.10.0.130-24817639-linux.run 解压,然后看看里边有什么内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [root@172-18-12-25 run_files]# sh cuda-samples.10.0.130-24817639-linux.run --noexec --target cuda-samples [root@172-18-12-25 run_files]# cd cuda-samples [root@172-18-12-25 cuda-samples]# ll -h 总用量 36K -r-xr-xr-x 1 root root 784 9月 13 05:18 cuda-install-samples-10.0.sh -rwxr-xr-x 1 root root 7.3K 9月 13 05:18 install-sdk-linux.pl -r-xr-xr-x 1 root root 13K 9月 13 05:18 InstallUtils.pm drwxrwxr-x 11 root root 201 9月 13 05:18 samples -r-xr-xr-x 1 root root 7.6K 9月 13 05:18 uninstall_cuda.pl [root@172-18-12-25 cuda-samples]# cd samples [root@172-18-12-25 samples]# ll -h 总用量 84K drwxrwxr-x 51 root root 4.0K 9月 13 05:18 0_Simple drwxrwxr-x 8 root root 145 9月 13 05:18 1_Utilities drwxrwxr-x 13 root root 241 9月 13 05:18 2_Graphics drwxrwxr-x 22 root root 4.0K 9月 13 05:18 3_Imaging drwxrwxr-x 10 root root 209 9月 13 05:18 4_Finance drwxrwxr-x 10 root root 150 9月 13 05:18 5_Simulations drwxrwxr-x 34 root root 4.0K 9月 13 05:18 6_Advanced drwxrwxr-x 38 root root 4.0K 9月 13 05:18 7_CUDALibraries drwxrwxr-x 6 root root 71 9月 13 05:18 common -rw-rw-r-- 1 root root 63K 9月 13 05:18 EULA.txt -rw-rw-r-- 1 root root 2.6K 9月 13 05:18 Makefile [root@172-18-12-25 samples]# cd ..
我们可以看到第一级目录有如下文件:
cuda-install-samples-10.0.sh bash 写的 CUDA sample 安装脚本
install-sdk-linux.pl perl 写的 SDK 安装脚本
InstallUtils.pm package InstallUtils .
samples sample 实例目录
uninstall_cuda.pl perl 写的卸载脚本
接下来看一下 samples 里有什么?
0_Simple
1_Utilities
2_Graphics
3_Imaging
4_Finance
5_Simulations
6_Advanced
7_CUDALibraries
上边这8个是 CUDA sample 的内容,主要用来做两件事情,一是举例某个接口或者某个功能该如何使用,二是用来验证某项功能是正常的。 个别项目可以用来测试性能。
common 0-7里的源码编译要用到的,很重要.
EULA.txt End User License Agreement 终端用户 license 协议
Makefile 编译的 Makefile 文件
显卡驱动安装包 首先解压 NVIDIA-Linux-x86_64-410.48.run 安装包,这次 noexec 这个参数不起作用了,查看了一下帮助,要求使用 -x 来进行解压 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@172-18-12-25 run_files]# sh NVIDIA-Linux-x86_64-410.48.run -x --target nvidia-linux Creating directory nvidia-linux Verifying archive integrity... OK Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48................................................................. [root@172-18-12-25 run_files]# cd nvidia-linux/ [root@172-18-12-25 nvidia-linux]# ls 10_nvidia.json libGL.la libnvidia-fatbinaryloader.so.410.48 libnvoptix.so.410.48 nvidia-cuda-mps-server nvidia-settings.1.gz 10_nvidia_wayland.json libGL.so.1.7.0 libnvidia-fbc.so.410.48 libOpenCL.so.1.0.0 nvidia-debugdump nvidia-settings.desktop 32 libGL.so.410.48 libnvidia-glcore.so.410.48 libOpenGL.so.0 nvidia-drm-outputclass.conf nvidia-settings.png html libglvnd_install_checker libnvidia-glsi.so.410.48 libvdpau_nvidia.so.410.48 nvidia_drv.so nvidia-smi kernel libGLX_nvidia.so.410.48 libnvidia-glvkspirv.so.410.48 LICENSE nvidia.icd nvidia-smi.1.gz libcuda.so.410.48 libglxserver_nvidia.so.410.48 libnvidia-gtk2.so.410.48 makeself-help-script.sh nvidia_icd.json.template nvidia-xconfig libEGL_nvidia.so.410.48 libGLX.so.0 libnvidia-gtk3.so.410.48 makeself.sh nvidia-installer nvidia-xconfig.1.gz libEGL.so.1.1.0 libnvcuvid.so.410.48 libnvidia-ifr.so.410.48 mkprecompiled nvidia-installer.1.gz pkg-history.txt libEGL.so.410.48 libnvidia-cbl.so.410.48 libnvidia-ml.so.410.48 nvidia-application-profiles-410.48-key-documentation nvidia-modprobe README.txt libGLdispatch.so.0 libnvidia-cfg.so.410.48 libnvidia-opencl.so.410.48 nvidia-application-profiles-410.48-rc nvidia-modprobe.1.gz tls libGLESv1_CM_nvidia.so.410.48 libnvidia-compiler.so.410.48 libnvidia-ptxjitcompiler.so.410.48 nvidia-bug-report.sh nvidia-persistenced tls_test libGLESv1_CM.so.1.2.0 libnvidia-eglcore.so.410.48 libnvidia-rtcore.so.410.48 NVIDIA_Changelog nvidia-persistenced.1.gz tls_test_dso.so libGLESv2_nvidia.so.410.48 libnvidia-egl-wayland.so.1.1.0 libnvidia-tls.so.410.48 nvidia-cuda-mps-control nvidia-persistenced-init.tar.bz2 libGLESv2.so.2.1.0 libnvidia-encode.so.410.48 libnvidia-wfb.so.410.48 nvidia-cuda-mps-control.1.gz nvidia-settings [root@172-18-12-25 nvidia-linux]#
可以看到解压以后都是安装驱动需要的库文件 。
FAQ
某些情况下安装 run 包会提示 Can’t locate InstallUtils.pm ,报错提示如下
1 2 3 4 5 Can't locate InstallUtils.pm in @INC (you may need to install the InstallUtils module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at ./install-sdk-linux.pl line 6. BEGIN failed--compilation aborted at ./install-sdk-linux.pl line 6. 'uninstall_cuda_8.0.pl' -> '/usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl'
出现上述问题的原因就是 InstallUtils.pm 文件没有复制到指定的位置,解决方案也很简单安装本文最开始的使用 noexec 将对应的 run 包解压,拷贝 InstallUtils.pm 到 @INC contains 的某个目录下就可以。
例如 可以拷贝到 perl 的目录下:
1 cp InstallUtils.pm /usr/share/perl5
在重新执行 run 包即可。
====================== Erdong, A Linux user !