CUDA编程学习0——环境搭建&环境详解_cuda_home-程序员宅基地

技术标签: 学习  并行计算  我的硕士生活  

目录

环境配置

软件安装

1.支持最高的cuda版本查询,下载cuda开发软件;

3.配置环境(~/.bashrc添加环境变量)

4.后续维护查询

补:关于windows下的cuda环境配置

一、Visual Studio 2022 + CUDA 11.6 (Windows10)

二、Visual Studio Code + CUDA 11.6 (远程连接Ubuntu)


摘要:由于课题要对图像处理程序进行加速,于是我想着将CPU处理程序改用GPU来进行实现;也是初入门路,这里记录下学习的过程;

环境配置

系统:Centos7,

驱动&显卡:CUDA10.0(不是命令中显示的最高支持型号),显卡Tesla,(查看显卡和最高驱动支持版本“nvidia-smi”)

编译器版本:gcc版本是5.1.0

软件安装

1.支持最高的cuda版本查询,下载cuda开发软件;

如上图所示,我们支持的最大的cuda版本是10.1,则我去英伟达cuda官网去找的驱动安装包要小于等于这个;

 下载对应的版本,不是最新的版本;

根据硬件配置选择合适的版本;(其中runfile执行较为简单,我这里选择它)2.下载好了之后,直接执行“sh XXXXX.run",则开始自动安装,基本是傻瓜式安装;

 Linux系统CUDA安装及踩坑记录 - 知乎 (zhihu.com)

3.配置环境(~/.bashrc添加环境变量)

检查cuda是否安装成功nvcc -V

如果没有这个命令的话,需要配置。(同时也要去看安装的路径下是否有nvcc)

vim /.bashrc

在文件末尾添加(这里的/usr/local/cuda-11.3替换成你的cuda安装路径,一般都在/usr/local路径下)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64
export PATH=$PATH:/usr/local/cuda-11.3/bin
# export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.3
export CUDA_HOME=/usr/local/cuda-11.3

然后source ~/.bashrc(source命令是使该配置文件立刻生效,而无需重启系统)

上述环境变量中,我看很多教程都是按照第三行配置的CUDA_HOME,但是后续我在使用deepspeed的时候会报错找不到/usr/local/cuda-11.3:/usr/local/cuda-11.3/bin/nvcc,按照第四行配置CUDA_HOME就不会有这个问题。

再执行nvcc -V就会显示出你刚刚安装的CUDA版本

4.后续维护查询

查看当前安装的cuda版本:Linux上查看已安装的CUDA和cuDNN版本号-云社区-华为云 (huaweicloud.com)

 Linux上查询cuda、cudnn等相关的系列东西

1. 查看CUDA版本

cuda默认安装在/usr/local目录,可以使用ls -l /usr/local | grep cuda查看该目录下有哪些cuda版本

假设有如下输出:

lrwxrwxrwx  1 root root    8 Apr 26  2019 cuda -> cuda-9.0
drwxr-xr-x 11 root root 4096 Apr 26  2019 cuda-10.0
drwxr-xr-x 11 root root 4096 Apr 26  2019 cuda-8.0
drwxr-xr-x 11 root root 4096 Apr 26  2019 cuda-9.0

则表示当前机器上安装了8.0、9.0、10.0三个cuda版本,/usr/local/cuda是一个软链接,链接到了/usr/local/cuda-9.0目录,表示当前使用的是cuda-9.0版本。

如果要查看详细的cuda版本号,可以用如下两种方法:

  1. nvcc --version,如果提示找不到该命令,则执行/usr/local/cuda/bin/nvcc --version,如果报找不到该路径或文件,则表示nvcc没有安装,可以sudo apt install nvidia-cuda-toolkit安装
  2. cat /usr/local/cuda/version.txt

如果当前机器上安装了多个cuda版本,可以使用修改软链接的方式来修改系统使用的cuda版本,命令如下:

sudo ln -snf /usr/local/cuda-8.0 /usr/local/cuda

2. 查看cuDNN版本号

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

3. CUDA是否可用于当前AI开发框架?

确定了CUDA版本号,那么该版本是否可以用于当前安装的AI开发框架呢?如pytorch、tf?

  • 如果使用pytorch,可以使用如下语句查询是否可用:(可直接linux命令行输入执行)
import torch
print(torch.__version__)  # 查看torch当前版本号
print(torch.version.cuda)  # 编译当前版本的torch使用的cuda版本号
print(torch.cuda.is_available())  # 查看当前cuda是否可用于当前版本的Torch,如果输出True,则表示可用
如果尚未安装torch,可以查看pytorch各版本与CUDA各版本的对应关系: https://pytorch.org/get-started/previous-versions/ 
  • 如果使用tf,则没有pytorch这么方便的方式来查看CUDA是否可用(实际操作和torch是一样的应该也可以,该文的时效性代待考证)
只能在 import tensorflow as tf 的时候才能发现CUDA是否可用,如果不可用,会有如下类似的报错:
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
这就表示当前tf需要CUDA 9.0,但是没有找到,决定tf应该使用哪个版本的CUDA,是tf安装目录下的一个_pywrap_tensorflow_internal.lib库文件定义的,里面是如何实现的,就得去看源码了。

但是我们可以用更简单的方法来查看tf与CUDA的对应关系,可用过官网查询:
https://tensorflow.google.cn/install/source#tested_build_configurations 
https://tensorflow.google.cn/install/source_windows#tested_build_configurations 

查看cuda和cudnn版本对应关系,则可以访问:https://developer.nvidia.com/rdp/cudnn-archive#a-collapse742-10 

4. 其他疑问

我们还经常用到nvidia-smi命令,使用该命令会有如下输出:(nvidia-smi命令可以查看GPU的具体使用情况,同时也会列出 CUDA Version。)

如果nvidia-smi命令列出的CUDA版本与nvcc -V列出的版本号不一致,可能是由以下原因之一引起的:

  1. 安装多版本cuda后,还没有刷新环境变量,刷新即可;
  2. CUDA有两种API,分别是运行时API和驱动API,即所谓的Runtime API与Driver API,nvidia-smi的结果除了有GPU驱动版本型号,还有CUDA Driver API的版本号,这里是10.0,而nvcc的结果是对应CUDA Runtime API

补充说明:

在安装CUDA 时候会安装3大组件,分别是 NVIDIA 驱动(driver)toolkitsamples

  • NVIDIA驱动是用来控制GPU硬件,CUDADriver API是依赖于NVIDIA驱动安装的。
  • toolkit里面包括nvcc编译器等,CUDA Runtime API 是通过CUDA toolkit安装的。
  • samples或者说SDK 里面包括很多样例程序包括查询设备、带宽测试等等。

注:查看nvidia驱动版本和toolkit对应的版本的要求:

官网地址:Release Notes :: CUDA Toolkit Documentation

参考链接:

nvidia-smi 和 nvcc 结果的版本为何不一致_JasonLiu1919的博客-程序员宅基地

https://www.cnblogs.com/yhjoker/p/10972795.html

5. NVIDIA驱动版本与CUDA版本对应关系_lengmo1996的博客-程序员宅基地_cuda和nvidia驱动的版本关系

############################################################################# 

补:关于windows下的cuda环境配置

虽未实现,但是收集了些资料

(40条消息) windows 下 CUDA 并行编程环境搭建_吃跳跳糖没的博客-程序员宅基地_cuda编程 windows

下面介绍一种,参考:https://zhuanlan.zhihu.com/p/488518526

记录两种CUDA开发环境的配置过程。

一、Visual Studio 2022 + CUDA 11.6 (Windows10)

(参考:win10+cuda11.0+vs2019安装教程

1、Visual Studio community 2022的安装

1). 下载Visual Studio community 2022 版本。下载连接

2). 安装”使用c++的桌面开发“,安装的路径可以自定义

2、NVIDIA驱动的安装

1)检查驱动是否安装:在cmd命令窗口中输入nvidia-smi:

同时可以查看驱动的版本号

2)如果没有安装,则可以进入NVIDIA官网选择相应的显卡进行下载,并安装驱动。如能显示上图信息,则驱动安装成功。NVIDIA驱动下载地址

3、CUDA 11.6的安装

1). 进入CUDA Toolkit官网进行下载。下载后直接运行exe文件,默认安装即可。CUDA 11.6下载地址

2). 安装结束后,查看系统变量中已经加入了cuda的两个路径:

3). 继续添加其它的环境变量:

在系统变量中加入下面的路径,点击确定:

CUDA_BIN_PATH: %CUDA_PATH%\bin
CUDA_LIB_PATH: %CUDA_PATH%\lib\x64
CUDA_SDK_PATH: C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.6
CUDA_SDK_BIN_PATH: %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH: %CUDA_SDK_PATH%\common\lib\x64

在系统变量path中加入下面的的变量:

%CUDA_BIN_PATH%
%CUDA_LIB_PATH%
%CUDA_SDK_BIN_PATH%
%CUDA_SDK_LIB_PATH%

4). 检查是否安装成功:

打开cmd,定位到图示位置。分别运行这两个程序deviceQuery.exe、bandwidthTest.exe ,result=pass则安装成功,否则就重新安装:

4、Visual Studio 配置与测试

1). 启动VS2022,新建一个工程,点击CUDA11.6 runtime。

2). 新建工程。

3). 新建完成后,会出现一个示例,具体内容为kernel.cu (程序分析)

4). 添加.cu 到编辑器和扩展名:

(工具–>选项–>文本编辑器–>文件拓展名, 新增扩展名 .cu 并将编辑器设置为:Microsoft Visual C++。)

(工具–>选项–>项目和解决方案–>VC++项目设置,添加要包括的扩展名".cu")

(右键打开的项目–>生成依赖项–>生成自定义–>勾选CUDA v11.6)

(右键.cu文件–>文件属性设置为 CUDA c/c++)

5). 测试。点击运行,得到下面结果。

5、debug

1). Visual Studio中默认是CPU代码的调试,如果需要调试GPU上的代码,需要使用extension中的Nsight (strat CUDA debugging).

(工具栏->插件->Nsight->start CUDA debugging)。同时勾选break on luanch。

进入GPU调试

二、Visual Studio Code + CUDA 11.6 (远程连接Ubuntu)

目前VS code中支持linux的CUDA-debug,暂不支持windows。

1、VS code 的安装。(省略)

2、VS code ssh远程连接(可参考其他详细教程,这里只记录主要步骤)

安装Renote-SSH插件:

点击 ”+“,并在输入ssh登录命令:ssh root@ip -p xxxx

选择.ssh/config。

config文件记录了服务器的IP和端口号。

这里有两种登录方式,一种每次登录都需要输入密码,另一种是使用密钥登录。

1)输入密码登录:

点击在新窗口中连接主机

在新的窗口中,选择需要打开的文件路径,并输入密码

2)免密登录:

在本地打开cmd,输入ssh-keygen,

接着在C:\Users\(username)\.ssh中生成了两个文件:

在本地的.ssh/config文件中,加入密钥id_rsa路径。

加入密钥地址

然后将公钥id_rsa.pub拷贝到服务器.ssh路径中,并在终端输入:

mkdir .ssh
mv id_rsa.pub .ssh
cd .ssh
cat id_rsa.pub >> authorized_keys
sudo chmod 600 authorized_keys
service sshd restart

重启即可免密连接。

3、安装相关插件

1). 在本地端和远程端安装C++和Nsight插件:

4). 安装CUDA 11.6

安装和更新相关依赖库,在终端中输入:

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版本,并获取下载命令,官网地址。在终端输入获取的命令,自动下载和安装。

# 这里是安装CUDA11.6
wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run
sudo sh cuda_11.6.2_510.47.03_linux.run

验证是否安装成功:输入nvcc-V,得到下面的信息。

4、编译和调试(以matrixMul为例)

1). 打开例程matrixMul:

(cuda11.6中的例程在github中,需要手动git clone 下载。这里将Samples下载到/usr/local/cuda-11.6/samples/cuda_samples/Samples路径中)

2).编写 c_cpp_properties.json

{
 "configurations": [
        {
 "name": "Linux",
 "includePath": [                              # 头文件路径
 "${workspaceFolder}/**",
 "${workspaceFolder}/../../../Common"
            ],
 "defines": [],
 "compilerPath": "/usr/local/cuda/bin/nvcc",   # 编译器路径
 "cStandard": "gnu17", 
 "cppStandard": "gnu++14",
 "intelliSenseMode": "linux-gcc-x64",
 "configurationProvider": "ms-vscode.makefile-tools"
        }
    ],
 "version": 4
}

3). 编写launch.json (用于debug)

# 点击run and debug --> create a luanch.json -->选择CUDA C++(CUDA-GDB)
# 将luanch.json 修改如下:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "CUDA C++: Launch",
            "type": "cuda-gdb",
            "request": "launch",
            "program": "${workspaceFolder}/matrixMul",           # 程序所在路径
            "debuggerPath":"/usr/local/cuda-11.6/bin/cuda-gdb",  # 调试器所在的路径
            "preLaunchTask": "ReBuild"                           # 程序所在路径
        }
    ]
}

4). 编写 tasks.json(用于build)

# 共编写了两个task,分别是build 和 rebuild
{
 "version": "2.0.0",
 "tasks": [
        {
 "label": "Build",
 "type": "shell",
 "command": "make dbg=1",
 "problemMatcher": ["$nvcc"],
 "group": {
 "kind": "build"
            }
        },  

        {
 "label": "ReBuild",
 "type": "shell",
 "command": "make clean; make dbg=1; make run",
 "problemMatcher": ["$nvcc"],
 "group": {
 "kind": "build",
 "isDefault": true
            }
        }
    ]
}

5). 编译和调试:按F5。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Mr_yangsc/article/details/126315713

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文