jetson中使用cuda

简介: jetson中使用cuda

前言

昨天分享了 cuda在ubuntu的安装和使用,今天在jetson nano上进行测试验证使用cuda。在jetson nano上安装使用cuda和ubuntu有所区别,所以写了这篇文章。

首先cuda使用上还是有cuda库直接调用和opencv cuda库调用,最后还有在jetson nano内置的CUDA Samples。当然我们也可以自己在网络下载,这是官方链接:https://github.com/NVIDIA/cuda-samples


jetson nano安装cuda

cuda在jetson nano的镜像是默认安装了的,已安装版本是:

CUDA10.2,CUDNNv8,tensorRT,opencv4.1.1,python2,python3,tensorflow2.3,所以我们可以直接使用,不过oepncv的cuda库是没有的,需要我们进行安装,不过安装的方式和上一篇文章类似,不过是有些操作细节需要修改一下。

由于jetson nano上面已经自带了CUDA10.2,那么我们直接使用了哈。因为一些普通演示demo上篇文章就介绍过了,所以本次就写了cuda在ubuntu的安装使用分享

简单信息查询demo

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
  int deviceCount;
  cudaGetDeviceCount(&deviceCount);
  for (int i = 0; i < deviceCount; i++)
  {
    cudaDeviceProp devPro;
    cudaGetDeviceProperties(&devPro, i);
    cout << "使用GPU:" << i << endl;
    cout << "设备全局内存总量:" << devPro.totalGlobalMem << endl;
    cout << "SM的数量:" << devPro.multiProcessorCount << endl;
    cout << "每个线程块的共享内存大小:" << devPro.sharedMemPerBlock / 1024<< "KB" << endl;
    cout << "每个线程块的最大线程数:" << devPro.maxThreadsPerBlock << endl;
    cout << "一个线程块中可用的寄存器数:" << devPro.regsPerBlock << endl;
    cout << "每个EM的最大线程数:" << devPro.maxThreadsPerMultiProcessor << endl;
    cout << "每个EM的最大线束数:" << devPro.maxThreadsPerMultiProcessor / 32<< endl;
    cout << "设备上多处理器的数量:" << devPro.multiProcessorCount << endl;
  }
  getchar();
    return 0;
}

执行效果:839886cd3c004deb9abdba851aa48a4c.png

cuda sample库验证

这是就是前言里面说到的cuda的例子,大家可以写cuda的代码时候,可以参考里面的范例。而在nano里面,JetPack系统将 CUDA 环境安装在 /usr/local/cuda 下面。

有人可能发现在 /usr/local 下面有 cuda 目录与 cuda-10.2 目录,两者的内容完全一样。事实上 cuda 这个目录是cuda-10.2软链接,实际的内容指向 cuda-10.2 这个目录。因为 JetPack 以后会更新 CUDA 版本,所有 cuda-10.2 可能会改变,于是就使用 cuda 软连接来确保一致性。839886cd3c004deb9abdba851aa48a4c.png

接下来进入 samples 目录

cd /usr/local/cuda/samples/,里面有早已经放置好的示例,但是都是没有编译的,当然我们可以在samples目录下直接使用sudo make -j4进行编译,但是实际上在我编译发现在主目录编译太费时间了,建议大家到各个子目录进行编译,然后验证。

839886cd3c004deb9abdba851aa48a4c.png

在每个目录下面都有对应的子Makefile文件,大家到子目录make即可。例如:cd 5_Simulations/nbody/,(nbody 是粒子碰撞模拟,大家也可以到其他目录验证测试,因为这个 nbody 范例提供 GPU 与 CPU 的执行,可以让大家更清楚两者之间的性能差距) 然后 sudo make -j4

ls -l 大家就可以看到绿色编译好的可执行文件,这个时候我们就可以 sudo ./nbody 进行测试

这个范例默认是在 GPU 上执行,并且预设粒子数量为 1024 个。可以视窗头部看到一些性能相关的信息,包括:模拟粒子数是1024个、渲染性能的帧率、指令性能BIPS(每秒百万次)、计算机性能GFLPOS(单精度状态)。 此外在界面的左上角还有粒子大小、速度阻尼、软化系数、时间步长、集群规模、速度范围。

sudo ./nbody GPU跑的示意图

839886cd3c004deb9abdba851aa48a4c.png

cpu执行的话是需要设置额外的参数sudo ./nbody -cpu -numbodies=1024

CPU跑的示意图839886cd3c004deb9abdba851aa48a4c.png

将视窗头部的性能数据与前一个在 GPU 上执行的结果进行比较,可以几项性能都有10倍左右的差距,这效果就非常显而易见了。

这就是GPU使用的明显对比了哈。

编译opencv的cuda库

这个和上一篇文件类似,也是要一些特殊的cmake选项,我执行编译的选项如下,大家把opencv_contrib-4.1.1替换成自己的目录即可。

不过编译之前建议大家进行清除掉nano本身自带的opencv,然后进行安装。

清除命令可以使用这个 sudo apt-get purge libopencv* python-opencv ,可以用pkg-config --modversion opencv4 进行确认opencv是否卸载完成。

大家也可以参考这篇文章,比较详细。链接:

cmake -D CMAKE_BUILD_TYPE=RELEASE\
       -D CMAKE_INSTALL_PREFIX=/usr/local\
       -D WITH_CUDA=ON\         
       -D CUDA_ARCH_BIN=5.3\        
       -D CUDA_ARCH_PTX=""\
       -D ENABLE_FAST_MATH=ON\
       -D CUDA_FAST_MATH=ON\     
       -D WITH_CUBLAS=ON\      
       -D WITH_LIBV4L=ON\
       -D WITH_GSTREAMER=ON\
       -D WITH_GSTREAMER_0_10=OFF\
       -D WITH_QT=ON\         
       -D WITH_OPENGL=ON\
       -D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr"\
       -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2\
       -D WITH_TBB=ON\
       -D OPENCV_GENERATE_PKGCONFIG=1\
       -D OPENCV_EXTRA_MODULES_PATH=/home/jetson/lyn_work/opencv_contrib-4.1.1/modules/       ../

WITH_QT=ON 需要qt环境,nano默认是没有安装的,可以按照 sudo apt-get install qt5-default qtcreator -y进行安装。

OPENCV_GENERATE_PKGCONFIG=1 用来一键生成opencv4.pc文件 支持pkg-config功能

839886cd3c004deb9abdba851aa48a4c.png

直接编译安装 sudo make install

不过这里我进行了先在我的ubuntu系统进行cmake 和make执行,把opencv-4.1.1和opencv_contrib-4.1.1两个文件夹打包拷贝到我的jetson nano编译。为什么这么做呢,因为遇到了一些编译错误,如下:

[ 98%] Linking CXX executable ../../bin/opencv_perf_xphoto
In file included from /home/jetson/lyn_work/opencv-4.1.1/modules/core/include/opencv2/core.hpp:54:0,
               from /home/jetson/lyn_work/opencv-4.1.1/modules/core/include/opencv2/core/cuda.hpp:51,
               from /home/jetson/lyn_work/opencv_contrib-4.1.1/modules/cudaoptflow/include/opencv2/cudaoptflow.hpp:50,
               from /home/jetson/lyn_work/opencv-4.1.1/build/modules/cudaoptflow/precomp.hpp:48:
/home/jetson/lyn_work/opencv-4.1.1/modules/core/include/opencv2/core/base.hpp:320:40: error: expected constructor, destructor, or type conversion before ‘(’ token
#define CV_Error( code, msg ) cv::error( code, msg, CV_Func, __FILE__, __LINE__ )

网上也有一些相似问题,不过经过自己对比log之后,发现是jetson上面网络不好,在编译opencv中,下载一些包,网络不太通畅,导致下载失败,最终导致的编译error。所以我在自己ubuntu系统(有梯子)下载好之后再进行编译。

-- data: Download: face_landmark_model.dat

839886cd3c004deb9abdba851aa48a4c.png

在拷贝到jetson nano之后,解压两个文件夹,在opencv的build目录删除掉 cmake的缓存文件,rm CMakeCache.txt ,重新cmake ,这个时候重新编译就不需要重新下载依赖的包了。

编译完之后,我们就可以使用,测试方法还是和上一篇文章类似,这里我就不多赘述了,大家可以参考上一篇的内容。cuda在ubuntu的安装使用分享

839886cd3c004deb9abdba851aa48a4c.png

结语

这就是我自己的一些cuda在jetson nano的使用分享,下一篇我们聊聊cuda实际使用gpu加速和cpu使用的对比,以及它两使用场景分析。。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
7天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1922 6
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
5天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
652 111
|
15天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2556 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
7天前
|
人工智能 弹性计算 数据库
阿里云优惠券种类解析:主要券种区别和适用群体及领取和使用指南
2026年阿里云构建了覆盖全用户的七类优惠券,本文逐一拆解了每类优惠券的核心规则、适用人群与使用技巧:大促限定的阶梯满减券分个人、企业双通道,最高可减800元;学生专属300元无门槛券支持全品类通用;按量付费用户可参与消费达标返券形成循环优惠;新用户有低门槛专享满减券尝鲜;老用户可领取系统自动发放的随机福利券;中大型企业迁云可申请最高100万元的专项补贴;云产品通用券还能在活动价基础上实现折上折。不同身份、不同采购场景的用户均可通过精准匹配对应优惠券,最大化享受优惠力度。
462 110
阿里云优惠券种类解析:主要券种区别和适用群体及领取和使用指南
|
13天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
1623 2
|
15天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
1428 2
|
17天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
1500 55
|
2天前
Qoder 一周年 × Qwen3.8-Max 正式上线,多重好礼限时领
8月3日,Qwen3.8-Max 正式上线Qoder,迎来Qoder一周年。新老用户可领800次免费调用,下单再赠2000次;夜间(22:00–08:00)调用5折;邀请好友双方得积分与调用额度。
249 0