5. Jetson Orin Nano CUDA 配置

5. Jetson Orin Nano CUDA 配置

1:安装Jtop

jtop安装主要有以下三个步骤:

  • 安装pip3

    我们需要使用pip3来安装jtop,所以先安装pip3

    sudo apt install python3-pip
    
  • 安装jtop

    sudo -H pip3 install -U jetson-stats
    
  • 运行jtop服务

    sudo -H pip3 install -U jetson-stats
    
  • 重启系统

    reboot
    

    至此jtop安装完成

    运行jtop
    jtop启动命令如下

    jtop
    

    弹出图形化界面。

在这里插入图片描述

2:安装JETPACK套件

为啥安装 Jetpack,那就是 Jetpack 是 Nvidia为 Jetson系列开发板开发的一款软件开发包,常用的开发工具基本都包括了,并在在安装 Jetpack的时候,会自动的将匹配版本的CUDA、cuDNN、TensorRT等安装好,极大地方便了开发者!

Jetpack官方安装教程How to Install JetPack :: NVIDIA JetPack Documentation

在jetson上输入

sudo apt update
sudo apt install nvidia-jetpack

使用下面命令查看Jetpack包版本信息

sudo apt show nvidia-jetpack

安装完输入 sudo jetson_release 进行查询

在这里插入图片描述

可以发现 Jetpack会自动安装相关版本的CUDA、cuDNN、TensorRT等
其中 cuDNN 默认安装路径在 /usr/lib/aarch64-linux-gnu 下
CUDA 默认安装路径在 /usr/local/cuda 下

3:配置Cuda环境变量:

Cuda 已经默认安装在了/usr/local/cuda下,运行如下指令:

sudo vim ~/.bashrc									# 打开~/.bashrc

#在文本末输入如下代码:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

source ~/.bashrc									# 更新环境变量配置

运行 nvcc -V 查看版本号:

nvcc -V

在这里插入图片描述

4:配置 cuDNN

虽然安装了cuDNN,但没有将对应的头文件、库文件放到cuda目录。

cuDNN的头文件在:/usr/include,库文件位于:/usr/lib/aarch64-linux-gnu。将头文件与库文件复制到cuda目录下:

(这里我与amd64上的cudnn头文件进行了对比,发现amd64下的头文件都是源文件,而arm64下的头文件都是软链接,当我将软链接头文件复制到cuda头文件目录下,变为了源文件。。。之所以说这些,就是为了证明这里的操作和amd64的一样,不用担心)

# 复制文件到cuda目录下
cd /usr/include && sudo cp cudnn* /usr/local/cuda/include
cd /usr/lib/aarch64-linux-gnu && sudo cp libcudnn* /usr/local/cuda/lib64

# 修改文件权限,修改复制完的头文件与库文件的权限,所有用户都可读,可写,可执行:
sudo chmod 777 /usr/local/cuda/include/cudnn.h 
sudo chmod 777 /usr/local/cuda/lib64/libcudnn*

# 重新软链接,这里的8.6.0和8对应安装的cudnn版本号和首数字
cd /usr/local/cuda/lib64

sudo ln -sf libcudnn.so.8.6.0 libcudnn.so.8

sudo ln -sf libcudnn_ops_train.so.8.6.0 libcudnn_ops_train.so.8
sudo ln -sf libcudnn_ops_infer.so.8.6.0 libcudnn_ops_infer.so.8

sudo ln -sf libcudnn_adv_train.so.8.6.0 libcudnn_adv_train.so.8
sudo ln -sf libcudnn_adv_infer.so.8.6.0 libcudnn_adv_infer.so.8

sudo ln -sf libcudnn_cnn_train.so.8.6.0 libcudnn_cnn_train.so.8
sudo ln -sf libcudnn_cnn_infer.so.8.6.0 libcudnn_cnn_infer.so.8

sudo ldconfig

测试Cudnn:

sudo cp -r /usr/src/cudnn_samples_v8/ ~/
cd ~/cudnn_samples_v8/mnistCUDNN
sudo chmod 777 ~/cudnn_samples_v8
sudo make clean && sudo make
./mnistCUDNN

配置成功输出:

在这里插入图片描述

注意:如果在~/cudnn_samples_v8/mnistCUDNN目录下执行make时出现如下错误 :

在这里插入图片描述

表示缺少对应的库,安装下面的库

sudo apt-get install libfreeimage3 libfreeimage-dev

安装完成之后再进行sudo make

Jetson Orin Nano OpenCV 配置

1:查看OpenCV CUDA 是否安装

运行Jtop后,按数字7查看INFO页面,在INFO页面会发现 OpenCV:4.5.4 with CUDA:NO

在这里插入图片描述

通过jetpack安装的 OpenCV (已编译)是不支持CUDA 加速的,无法充分利用GPU。

2:卸载默认Opencv

sudo apt purge libopencv*
sudo apt autoremove

完成以后更新一下。考虑到网速问题,建议先更换镜像源,本文不再赘述。

sudo apt update
sudo apt upgrade

3:安装编译 OpenCV

3.1.安装依赖库

  • Generic tools
sudo apt install build-essential cmake pkg-config unzip yasm git checkinstall
  • Image I/O libs
sudo apt install libjpeg-dev libpng-dev libtiff-dev
  • Video/Audio Libs - FFMPEG, GSTREAMER, x264 and so on
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavresample-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev 
sudo apt install libfaac-dev libmp3lame-dev libvorbis-dev
  • OpenCore - Adaptive Multi Rate Narrow Band(AMRNB) and Wide Band(AMRWB) speech codec
sudo apt install libopencore-amrnb-dev libopencore-amrwb-dev
  • Cameras programming interface libs
sudo apt-get install libdc1394-22 libdc1394-22-dev libxine2-dev libv4l-dev v4l-utils
cd /usr/include/linux
sudo ln -s -f ../libv4l1-videodev.h videodev.h
cd ~
  • GTK lib for the graphical user functionalites coming from OpenCV highghui module
sudo apt-get install libgtk-3-dev
  • Python libraries for python3
sudo apt-get install python3-dev python3-pip
sudo -H pip3 install -U pip numpy
sudo apt install python3-testresources
  • Parallelism library C++ for CPU
sudo apt-get install libtbb-dev
  • Optimization libraries for OpenCV
sudo apt-get install libatlas-base-dev gfortran
  • Optional libraries
sudo apt-get install libprotobuf-dev protobuf-compiler
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

3.2.下载OpenCV并解压

cd ~/Downloads
wget -O opencv.zip https://github.com/opencv/opencv/archive/refs/tags/4.5.3.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.3.zip
unzip opencv.zip
unzip opencv_contrib.zip

解压完成之后创建python虚拟环境(可选)。

sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip

使用vim编辑.bashrc,加上export两条语句。

sudo vim ~/.bashrc
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

使其立即生效。

source ~/.bashrc

=可选=
参考的博客里面有用到,我没有用虚拟环境,我直接使用的下面脚本完成的。
参考的博客里面 virtualenv path/to/virtualenvname -p path/to/python3 这个命令应该是有问题的。如果您对virtualenv有研究的话可以自行使用。

使用virtualenv创建虚拟环境,virtualenvname为虚拟环境名称,建议设置为cv,-p表示母python路径,笔者使用的是/usr/bin/python3。

virtualenv path/to/virtualenvname -p path/to/python3

创建成功后启动虚拟环境,并安装numpy

source path/to/vitualenvname/bin/active
pip install numpy

=可选=

## 3.执行安装

创建build文件夹,进入。

cd opencv-4.5.3
mkdir build
cd build

执行cmake,建议将下下述命令写到.sh文件中,用bash运行。CUDA_TOOLKIT_ROOT_DIR应改为自己开发板上CUDA的根目录,CUDA_ARCH_BIN应改为GPU计算能力,笔者所用开发板支持的CUDA版本为11.4。

OPENCV_PYTHON3_INSTALL_PATH为python3的安装目录,还记得我们创建的虚拟环境吗,使用之,需要注意的是,笔者创建虚拟环境中python版本3.6,所以路径为、/usr/lib/python3.8/site-packages,如果你的python版本不是3.8,应该更改为实际的python版本。PYTHON_EXECUTABLE为python解释器的路径,OPENCV_EXTRA_MODULES_PATH为opencv_contrib的路径,务必填写准确。

下面是我写的一个脚本

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \
-D BUILD_opencv_python2=1 -D BUILD_opencv_python3=1 -D WITH_FFMPEG=1 \
#自己Jetson 上的cuda-版本 目录
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.4 \
-D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 \
-D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=8.7 \
-D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc \
-D OPENCV_ENABLE_NONFREE=ON \

-D OPENCV_PYTHON3_INSTALL_PATH=/usr/lib/python3.8/site-packages \
#PYTHON_EXECUTABLE python 目录 
-D PYTHON_EXECUTABLE=/usr/bin/python \
#根据自己实际目录配置
-D OPENCV_EXTRA_MODULES_PATH=/home/nvidia/Downloads/opencv_contrib-4.5.3/modules \
-D INSTALL_PYTHON_EXAMPLES=OFF -D INSTALL_C_EXAMPLES=OFF -D BUILD_EXAMPLES=OFF ..

执行脚本 ,我的脚本是make.sh

sudo make.sh

运行完脚本之后 会有下面的信息输出

--   NVIDIA CUDA:                 YES (ver 11.2, CUFFT CUBLAS FAST_MATH)
--   NVIDIA GPU arch:             75
--   NVIDIA PTX archs:
-- 
--   cuDNN:                         YES (ver 8.2.0)

以防万一,先扩展虚拟内存再执行make。

cd /
sudo mkdir swap
cd swap
sudo dd if=/dev/zero of=swapfile bs=1M count=20480
sudo mkswap swapfile
sudo swapon swapfile

上述命令创建了大小为bs*count的swap空间,可以根据需要修改大小。将生成的文件转换成swap文件并激活。

设置swap分区为开机自动挂载。

sudo cp /etc/fstab /etc/fstab.bak
echo '/swap/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

查看cpu内核数,多开几个内核。-j4编译时间约为 1~3 小时,编译完成后进行安装。(我的Jetson Orin Nano 是6核心的)

nproc
make -j6
sudo make install

至此,安装成功。

4:检查安装是否成功

执行jtop指令,观察到下述情况即表示OpenCV已支持CUDA。

在这里插入图片描述

5:CUDA Demo

新建一个helloWorld.cu文件,输入

#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>

__global__ void mykernel(void) {
    int col_index = threadIdx.x + blockIdx.x * blockDim.x;
    int row_index = threadIdx.y + blockIdx.y * blockDim.y;
    printf("hello from (%d,%d) \n",row_index,col_index);
}

int main(void) {
    dim3 grid(2,2);
    dim3 block(1,4);
    mykernel<<<grid, block>>>();
    // synchronize the device
    cudaDeviceSynchronize();
}

编译 helloWorld.cu

nvcc helloWorld.cu -o helloWorld
./helloWorld

结果如下

在这里插入图片描述
参考博客:https://zhuanlan.zhihu.com/p/643308445

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/216318.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Temu数据面板:Temu商家必备的数据分析工具

在Temu这个电商平台上&#xff0c;越来越多的商家意识到数据分析的重要性。数据分析可以帮助商家更好地了解店铺的运营情况&#xff0c;从而制定更有效的运营策略&#xff0c;提高销售业绩。而在这个过程中&#xff0c;Temu数据面板成为了一个不可或缺的工具。 先给大家推荐一款…

软件测试具体人员分工

最近看了点敏捷测试的东西&#xff0c;看得比较模糊。一方面是因为没有见真实的环境与流程&#xff0c;也许它跟本就没有固定的模式与流程&#xff0c;它就像告诉人们要“勇敢”“努力”。有的人在勇敢的面对生活&#xff0c;有些人在勇敢的挑战自我&#xff0c;有些人在勇敢的…

springboot实现邮箱发送功能

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 邮箱效果图一、pom配置二、页面编写三、配置yml四、邮件工具类五、测试发送 邮箱效果图 1.可以利用在出现问题进行邮箱提醒 2.编写html 用于在邮箱中展示的样式 提示…

使用Java语言判断一个数据类型是奇数还是偶数

判断一个数字类型是奇数&#xff0c;还是偶数&#xff0c;只需要引入Scanner类&#xff0c;然后按照数据类型的定义方式进行定义&#xff0c;比较是按照与2进行整除后的结果&#xff1b;如果余数为零&#xff0c;则代表为偶数&#xff0c;否则为奇数。 import java.util.Scann…

大数据 - MapReduce:从原理到实战的全面指南

本文深入探讨了MapReduce的各个方面&#xff0c;从基础概念和工作原理到编程模型和实际应用场景&#xff0c;最后专注于性能优化的最佳实践。 一、引言 1.1 数据的价值与挑战 在信息爆炸的时代&#xff0c;数据被视为新的石油。每天都有数以百万计的数据被生成、存储和处理&…

微软推出AI助手Copilot的正式版本;ChatGPT:七位研究人员分享他们的观点

&#x1f989; AI新闻 &#x1f680; 微软推出AI助手Copilot的正式版本 摘要&#xff1a;微软宣布其AI助手Copilot正式上线&#xff0c;此前Copilot的预览版已成为很多用户的日常AI伴侣。此次上线后&#xff0c;Copilot将继续提供AI驱动的网络聊天体验&#xff0c;并具备商业…

推荐系统-01-基于协同过滤的图书推荐系统(包括数据和代码)

文章目录 0. 数据下载1. 背景描述2. 预测目的3. 数据总览4. 开始处理4.1 图书4.1.1 yearOfPublication4.1.2 publisher 4.2 用户数据集4.2.1 userID4.2.2 Age 4.3 评级数据集4.3.1 统计 5. 基于简单流行度的推荐系统6. 基于协同过滤的推荐系统6.1 基于用户的协同过滤6.2 基于项…

LangChain学习指南(一)——Model IO

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Langchain是什么&#xff1f;二、官方文档Langchain这么长&#xff0c;我怎么看&#xff1f;三、Model IO2.1.1prompt2.1.2LLM2.1.3 OutputParsers 前言 本…

Csharp(C#)无标题栏窗体拖动代码

C#&#xff08;C Sharp&#xff09;是一种现代、通用的编程语言&#xff0c;由微软公司在2000年推出。C#是一种对象导向的编程语言&#xff0c;它兼具C语言的高效性和Visual Basic语言的易学性。C#主要应用于Windows桌面应用程序、Windows服务、Web应用程序、游戏开发等领域。C…

Jmeter接口自动化测试 —— Jmeter变量的使用

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Linux:dockerfile编写搭建tomcat练习(9)

我使用的httpyum仓库 本地使用了5个文件&#xff0c;tomcat使用的官网解压直接用的包】 Dockerfile 主配置文件 基于centos基础镜像 jdk1.8.0_91 java环境 run.sh 启动脚本 centos.repo 仓库文件 tomcat 源码包 vim Dockerfile写入FROM centos MAINTAINER ta…

倚天屠龙:Github Copilot vs Cursor

武林至尊&#xff0c;宝刀屠龙。号令天下&#xff0c;莫敢不从。倚天不出&#xff0c;谁与争锋&#xff01; 作为开发人员吃饭的家伙&#xff0c;一款好的开发工具对开发人员的帮助是无法估量的。还记得在学校读书的时候&#xff0c;当时流行CS架构的RAD&#xff0c;Delphi和V…

二维码智慧门牌管理系统升级解决方案:存疑地址轻松管理

文章目录 前言一、存疑地址的统一管理二、数据查询、导出和编辑功能三、提交地址审核机制 前言 随着二维码智慧门牌管理系统在企业中的广泛应用&#xff0c;地址存疑成为了一个亟待解决的问题。为了帮助企业有效管理这些存疑地址&#xff0c;我们推出了升级解决方案&#xff0…

YOLOv8改进 | 2023 | AKConv轻量级架构下的高效检测(既轻量又提点)

一、本文介绍 本文给大家带来的改进内容是AKConv是一种创新的变核卷积&#xff0c;它旨在解决标准卷积操作中的固有缺陷&#xff08;采样形状是固定的&#xff09;&#xff0c;AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状&#xff0c;能够使用任意数量…

FreeRTOS-软件定时器

软件定时器 在FreeRTOS中可以设置无数个软件定时器&#xff0c;都是基于系统滴答中断。 使用软件定时器需要指定时间&#xff1a;启动定时器和运行回调函数。启动定时器和运行回调函数的间隔为定时器的周期。 使用软件定时器需要指定类型&#xff1a;一次性&#xff08;回调函数…

优维产品最佳实践第17期:善用控制台

「 背 景 」 遇到页面报错时&#xff0c;是不是感到困扰&#xff0c;不知如何解决&#xff1f; 页面响应缓慢时&#xff0c;是否感到迷茫&#xff0c;不清楚从何入手排查&#xff1f; 面对主机高负载时&#xff0c;是不是觉得确认异常根因很有挑战&#xff1f; 本期最佳实践…

变配电智能监控系统

变配电智能监控系统是一种能够实时监测电力变压器和配电柜、配电箱运行状态的智能设备。这种系统利用先进的传感器和数据通信技术&#xff0c;能够实时监测电力设备的运行状态&#xff0c;包括电压、电流、温度、湿度等参数&#xff0c;并且能够对这些数据进行处理和分析&#…

新媒体营销模拟实训室解决方案

一、引言 随着互联网的发展&#xff0c;新媒体已成为企业进行营销和品牌推广的重要渠道。然而&#xff0c;对于许多企业来说&#xff0c;如何在新媒体上进行有效的营销仍是一大挑战。为了解决这个问题&#xff0c;我们推出了一款新媒体营销模拟实训室解决方案&#xff0c;以帮…

焊接专业个人简历(通用25篇)

如果大家想在焊接行业的求职中脱颖而出&#xff0c;轻松斩获心仪职位&#xff0c;参考这25篇通用的焊接专业个人简历案例&#xff0c;无论您是初学者还是资深焊工&#xff0c;都能从中找到适合自己的简历内容。参考这些简历&#xff0c;让您的求职之路更加顺畅。 焊接专业个人…

Web漏洞分析-SQL注入XXE注入(中上)

随着互联网的不断普及和Web应用的广泛应用&#xff0c;网络安全问题愈发引起广泛关注。在网络安全领域中&#xff0c;SQL注入和XXE注入是两个备受关注的话题&#xff0c;也是导致许多安全漏洞的主要原因之一。本博客将深入研究这两种常见的Web漏洞&#xff0c;带您探寻背后的原…