Linux 下的 CUDA 安装和使用指南

您所在的位置:网站首页 如果银行卡不注销也不存钱会怎么办 Linux 下的 CUDA 安装和使用指南

Linux 下的 CUDA 安装和使用指南

#Linux 下的 CUDA 安装和使用指南| 来源: 网络整理| 查看: 265

本文旨在介绍 NVIDIA 的 CUDA (Compute Unified Device Architecture, 统一设备计算架构) 在 Linux 系统下的安装步骤及使用指南,主要任务包括:

在 Linux 系统下安装 NVIDIA Driver 和 CUDA Toolkit使用 nvcc 编译器进行 GPU 加速的 C/C++ 编程使用 Numba, PyCUDA, PyTorch, TensorFlow 等扩展库进行 GPU 加速的 Python 编程 CUDA 简介

CUDA 是由 Nvidia 公司开发的并行计算平台和应用程序接口,软件开发者可以利用支持 CUDA 软件的 GPU 进行通用计算。CUDA 可以直接链接到 GPU 的虚拟指令集和并行计算单元,从而在 GPU 中完成内核函数的计算。

CUDA 提供 C/C++/Fortran 接口,也有许多高性能计算或深度学习库提供包装后的 Python 接口。开发者们可根据实际需要 (高性能计算, 深度学习, 神经网络等) 选择适当的编程语言。

CUDA 安装步骤

一般而言,在 Linux 下安装和使用 CUDA 的流程如下:

安装 NVIDIA Driver,即显卡驱动安装 CUDA Toolkit使用 C/C++ 编译器或 Python 扩展库进行 GPU 加速的 CUDA 编程

本文后半部分将根据以上流程介绍 CUDA 安装和使用的详细步骤。

安装 NVIDIA Driver 和 CUDA Toolkit

首先检查系统是否有支持 CUDA 编程的 GPU。可使用

lspci | grep -i nvidia

命令来查看当前系统的 GPU 型号。

本人使用的操作系统由 Google Cloud Compute Engine 生成的包含 GPU 的虚拟机实例提供,系统版本为 Ubuntu 16.04 LTS,GPU 为 NVIDIA Tesla K80 (1个)。上述命令输出

00:04.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)注意:与通常在本地主机上运行的虚拟机不同,这里的虚拟机直接运行在 Google 的云服务器上,可以为其申请 GPU 配额并安装 NVIDIA Driver 和 CUDA Toolkit.

传统上,安装 NVIDIA Driver 和 CUDA Toolkit 的步骤是分开的,但实际上我们可以直接安装 CUDA Toolkit,系统将自动安装与其版本匹配的 NVIDIA Driver。下面我们讲述安装 CUDA Toolkit 的方法。

在安装 CUDA Toolkit 前,要确保系统安装了 gcc 和 make。如果希望使用 C++ 进行 CUDA 编程,需要安装 g++。如果想要运行 CUDA 例程序,需要安装相应的依赖库。

sudo apt update # 更新 apt sudo apt install gcc g++ make # 安装 gcc g++ make sudo apt install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev freeglut3-dev # 安装依赖库

在 CUDA Toolkit 的下载页面选择系统版本和安装方式,下载并运行 runfile。

CUDA Toolkit 下载页面

下载 CUDA Toolkit (文件较大):

wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run

安装 CUDA Toolkit (时间较长):

sudo sh cuda_10.1.243_418.87.00_linux.run

安装好 CUDA Toolkit 后,屏幕上将输出:

Driver: Installed Toolkit: Installed in /usr/local/cuda-10.1/ Samples: Installed in /home/abneryepku/ Please make sure that - PATH includes /usr/local/cuda-10.1/ - LD_LIBRARY_PATH includes /usr/local/cuda-10.1/lib64, or, add /usr/local/cuda-10.1/lib64 to /etc/ld.so.conf and run ldconfig as root

这表示 NVIDIA Driver 和 CUDA Toolkit 已安装完毕。后半段安装信息提示我们修改环境变量 PATH 和 LD_LIBRARY_PATH. 在 ~/.bashrc 文件中写入

# add nvcc compiler to path export PATH=$PATH:/usr/local/cuda-10.1/bin # add cuBLAS, cuSPARSE, cuRAND, cuSOLVER, cuFFT to path export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64:/usr/lib/x86_64-linux-gnu

即可完成 CUDA 的配置。

注意事项:

环境变量 PATH 设置可执行程序的搜索路径,LD_LIBRARY_PATH 设置动态链接库的搜索路径

2. CUDA, cuRAND 等动态库均位于 /usr/local/cuda-10.1/lib64 路径中。在 CUDA 10.0 以前,cuBLAS 也位于此路径下,但在 CUDA 10.1 中,cuBLAS 被迁移到了 /usr/lib/x86_64-linux-gnu 中。可以通过运行

sudo find / -iname libcublas*

来寻找 cuBLAS 动态库的路径。

3. 使用 Anaconda 安装的 CUDA Toolkit 不位于 lib64 路径中,也不会产生冲突。

测试样例程序

可以在路径

/usr/local/cuda-10.1/extras/demo_suite

路径下找到一些样例程序。deviceQuery 将输出 CUDA 的相关信息:

CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "Tesla K80" CUDA Driver Version / Runtime Version 10.1 / 10.1 CUDA Capability Major/Minor version number: 3.7 Total amount of global memory: 11441 MBytes (11996954624 bytes) (13) Multiprocessors, (192) CUDA Cores/MP: 2496 CUDA Cores GPU Max Clock rate: 824 MHz (0.82 GHz) Memory Clock rate: 2505 Mhz Memory Bus Width: 384-bit L2 Cache Size: 1572864 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) 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: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 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): (2147483647, 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: Enabled Device supports Unified Addressing (UVA): Yes Device supports Compute Preemption: No Supports Cooperative Kernel Launch: No Supports MultiDevice Co-op Kernel Launch: No Device PCI Domain ID / Bus ID / location ID: 0 / 0 / 4 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.1, CUDA Runtime Version = 10.1, NumDevs = 1, Device0 = Tesla K80 Result = PASS

CUDA 的各种特性:纹理内存 (texture memory)、常量内存 (constant memory)、共享内存 (shared memory)、块 (block)、线程 (thread)、统一寻址 (unified addressing) 都包含在以上信息中。了解这些特性是进行 CUDA C/C++ 编程的基础。

其它程序如 bandwidthTest, vectorAdd 等也将对 CUDA 的性能进行测试。

配置 nvcc 编译器

nvcc 是 CUDA C/C++ 的编译器,可以直接编译包含 C++ 语法的 (.cu) 源文件,语法和 gcc 类似。nvcc 的路径位于:

/usr/local/cuda-10.1/bin

在命令行中输入

nvcc --version

可查看 CUDA C/C++ 编译器 nvcc 的版本,本机结果如下

nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2019 NVIDIA Corporation Built on Sun_Jul_28_19:07:16_PDT_2019 Cuda compilation tools, release 10.1, V10.1.243

使用 nvcc 编译包含了 CUDA Library 的源文件时,需要在 nvcc 命令中添加相应的 flag。例如,cuRAND 的 flag 为 -lcurand,cuBLAS 的 flag 为 -lcublas。如果不希望每次编译时都加上这些动态库的话,可以在 .bashrc 中写入

alias nvc="nvcc -std=c++11 -lcurand -lcublas”

然后使用 nvc 来进行 C/C++ 文件的编译。

使用 nvcc 进行 CUDA C/C++ 编程

为了体验 GPU 编程,测试一个简单的 CUDA C++ 程序:两个整型向量的加法

#include #include using namespace std; __global__ void add(int *a, const int *b){ int i = blockIdx.x; a[i] += b[i]; } int main(){ const int N = 10; // number of elements int *a, *b, *temp, i; // malloc HOST memory for temp temp = new int [N]; // malloc DEVICE memory for a, b cudaMalloc(&a, N*sizeof(int)); cudaMalloc(&b, N*sizeof(int)); // set a's values: a[i] = i for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3