个人环境配置--安装记录

根据显卡下载对应的cuda和cudnn
我使用的是docker,首先拉取镜像,我用的是ubuntu20.04
加速:pull hub.1panel.dev/
devel是开发版本

sudo docker pull hub.1panel.dev/nvidia/cuda:11.6.1-devel-ubuntu20.04

先测试一下cuda有没有安装好

nvcc -V

更新,安装 vim、 wget

apt update
apt install vim wget

安装cudnn
cudnn下载网址:https://developer.nvidia.com/rdp/cudnn-archive

# 解压
tar -xf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
# cd进入文件
cd cudnn-linux-x86_64-8.9.7.29_cuda11-archive 
# 将include/cudnn.h文件复制到usr/local/cuda/include文件夹
cp include/cudnn.h /usr/local/cuda-11.6/include
#将lib下所有文件复制到/usr/local/cuda/lib64文件夹中
cp lib/libcudnn* /usr/local/cuda-11.6/lib64 
# 添加读取权限
chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

安装cmake
直接参考之前的博客:https://blog.csdn.net/qq_42102546/article/details/135014765

安装minni conda3

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod +x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh

激活环境

source /root/miniconda3/bin/activate

创建虚拟环境

conda create -n py_17 python=3.9

进入虚拟环境

conda activate py_17

安装yolo环境

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

安装onnxruntime-gpu

pip install onnxruntime-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple

安装cv2的依赖

apt install libglib2.0-0 libgl1-mesa-glx

测试:

import torch
import os
import cv2

print(torch.__version__)  # 确认 PyTorch 版本
cuda_available = torch.cuda.is_available()
if cuda_available:
    print("安装的是 GPU 版本的 PyTorch,当前可用的 GPU 数量为:", torch.cuda.device_count())
    print("当前使用的 GPU 名称为:", torch.cuda.get_device_name(0))
else:
    print("安装的是 CPU 版本的 PyTorch")
    
#  使用GPU进行计算
os.environ['CUDA_LAUNCH_BLOCKING'] = "0"
print(torch.rand(1).cuda())
a = torch.Tensor([1, 2])
a = a.cuda()
print(a)
# 查看 torch版本
print(torch.__version__)
# 查看cuda是否可用
device = torch.device('cuda')
print(torch.cuda.is_available())
print("结束")


print(cv2.__version__)
print(cv2.cuda.getCudaEnabledDeviceCount())

import onnxruntime as ort
import tensorrt
print(ort.get_device())
print(ort.get_available_providers())
print(tensorrt.__version__ )

tensorRT还没有安装,报错没有关系,等都安装好了还用这个做测试。
安装c++的opencv 可以直接看之前的博客:https://blog.csdn.net/qq_42102546/article/details/145717954

tensorRT 下载网址:https://developer.nvidia.cn/tensorrt
根据你的cuda版本去下载,我的是cuda11.6
在这里插入图片描述
下载后解压

tar -zxvf TensorRT-8.6.0.12.Linux.x86_64-gnu.cuda-11.8.tar.gz

然后复制到 /usr/local 这只是个人喜好,你可以直接配置环境变量

cd TensorRT-8.6.0.12
cp ./* /usr/local

配置环境变量

vim ~/.bashrc

键盘大写“G”,在最末端输入

export LD_LIBRARY_PATH=$PATH:/usr/local/TensorRT-8.6.0.12/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$PATH:/usr/local/TensorRT-8.6.0.12/lib::$LIBRARY_PATH

cuda也可以加上

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

使其生效:

source ~/.bashrc

测试

cd /usr/local/TensorRT-8.6.0.12/samples/sampleOnnxMNIST; make; ../../bin/sample_onnx_mnist

输出结果:
在这里插入图片描述
c++测试
CMakeLists.txt 文件内容

cmake_minimum_required(VERSION 3.16)
project(first_cmake)

# 查找 OpenCV
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV version: ${OpenCV_VERSION}")
message(STATUS "OpenCV libraries: ${OpenCV_LIBS}")
message(STATUS "OpenCV include path: ${OpenCV_INCLUDE_DIRS}")

# 查找 CUDA
find_package(CUDA REQUIRED)
message(STATUS "CUDA version: ${CUDA_VERSION}")
message(STATUS "CUDA libraries: ${CUDA_LIBRARIES}")
message(STATUS "CUDA include path: ${CUDA_INCLUDE_DIRS}")

# 查找线程库
find_package(Threads REQUIRED)

# 设置 TensorRT 路径
set(TENSORRT_INCLUDE_DIR /usr/local/TensorRT-8.6.0.12/include)
set(TENSORRT_LIBRARY_DIR /usr/local/TensorRT-8.6.0.12/lib)

# 包含 TensorRT 头文件路径
include_directories(${TENSORRT_INCLUDE_DIR})

# 链接 TensorRT 库路径
link_directories(${TENSORRT_LIBRARY_DIR})

# 添加可执行文件
add_executable(first_cmake open_ce.cpp)

# 链接库
target_link_libraries(first_cmake ${OpenCV_LIBS} Threads::Threads nvinfer nvinfer_plugin ${CUDA_LIBRARIES})

# 包含头文件目录
target_include_directories(first_cmake PRIVATE ${OpenCV_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS} ${TENSORRT_INCLUDE_DIR})

open_ce.cpp 文件内容

#include <iostream>
#include <NvInfer.h>
#include <cuda_runtime_api.h>

// 自定义日志记录器
class Logger : public nvinfer1::ILogger {
    void log(Severity severity, const char* msg) noexcept override {
        if (severity != Severity::kINFO) {
            std::cerr << msg << std::endl;
        }
    }
};

int main() {
    // 创建日志记录器
    Logger logger;

    // 创建构建器
    nvinfer1::IBuilder* builder = nvinfer1::createInferBuilder(logger);
    if (!builder) {
        std::cerr << "Failed to create TensorRT builder." << std::endl;
        return -1;
    }

    // 创建网络定义
    const auto explicitBatch = 1U << static_cast<uint32_t>(nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH);
    nvinfer1::INetworkDefinition* network = builder->createNetworkV2(explicitBatch);
    if (!network) {
        std::cerr << "Failed to create TensorRT network." << std::endl;
        builder->destroy();
        return -1;
    }

    // 创建输入张量
    nvinfer1::ITensor* input = network->addInput("input", nvinfer1::DataType::kFLOAT, nvinfer1::Dims4{1, 1, 1, 1});
    if (!input) {
        std::cerr << "Failed to create input tensor." << std::endl;
        network->destroy();
        builder->destroy();
        return -1;
    }

    // 添加一个恒等层(Identity Layer)
    nvinfer1::IIdentityLayer* identityLayer = network->addIdentity(*input);
    if (!identityLayer) {
        std::cerr << "Failed to add identity layer." << std::endl;
        network->destroy();
        builder->destroy();
        return -1;
    }

    // 获取恒等层的输出张量
    nvinfer1::ITensor* output = identityLayer->getOutput(0);
    output->setName("output");

    // 标记输出张量
    network->markOutput(*output);

    // 创建构建配置
    nvinfer1::IBuilderConfig* config = builder->createBuilderConfig();
    if (!config) {
        std::cerr << "Failed to create TensorRT builder config." << std::endl;
        network->destroy();
        builder->destroy();
        return -1;
    }

    // 构建引擎
    nvinfer1::ICudaEngine* engine = builder->buildEngineWithConfig(*network, *config);
    if (!engine) {
        std::cerr << "Failed to build TensorRT engine." << std::endl;
        config->destroy();
        network->destroy();
        builder->destroy();
        return -1;
    }

    // 创建推理上下文
    nvinfer1::IExecutionContext* context = engine->createExecutionContext();
    if (!context) {
        std::cerr << "Failed to create TensorRT execution context." << std::endl;
        engine->destroy();
        return -1;
    }

    // 准备输入和输出数据
    float inputData[1] = {1.0f};  // 输入数据
    float outputData[1];          // 输出数据

    // 分配 CUDA 内存
    void* d_input;
    void* d_output;
    cudaMalloc(&d_input, sizeof(float));
    cudaMalloc(&d_output, sizeof(float));

    // 将输入数据从主机内存复制到设备内存
    cudaMemcpy(d_input, inputData, sizeof(float), cudaMemcpyHostToDevice);

    // 定义输入和输出缓冲区指针
    void* buffers[2];
    buffers[0] = d_input;   // 输入缓冲区
    buffers[1] = d_output;  // 输出缓冲区

    // 执行推理
    context->enqueueV2(buffers, 0, nullptr);

    // 将输出数据从设备内存复制到主机内存
    cudaMemcpy(outputData, d_output, sizeof(float), cudaMemcpyDeviceToHost);

    // 输出结果
    std::cout << "Output: " << outputData[0] << std::endl;

    // 释放 CUDA 内存
    cudaFree(d_input);
    cudaFree(d_output);

    // 释放资源
    context->destroy();
    engine->destroy();
    config->destroy();
    network->destroy();
    builder->destroy();

    return 0;
}

在这里插入图片描述
在这里插入图片描述
Trying to load shared library libnvinfer_builder_resource.so.8.6.0
Loaded shared library libnvinfer_builder_resource.so.8.6.0
CUDA lazy loading is enabled.
Original: 1 layers
After dead-layer removal: 1 layers
Graph construction completed in 0.00158627 seconds.
Running: IdentityToCastTransform on (Unnamed Layer* 0) [Identity]
Swap the layer type of (Unnamed Layer* 0) [Identity] from IDENTITY to CAST
After Myelin optimization: 1 layers
Applying ScaleNodes fusions.
After scale fusion: 1 layers
Running: CastToCopyTransform on (Unnamed Layer* 0) [Identity]
Swap the layer type of (Unnamed Layer* 0) [Identity] from CAST to CAST
After dupe layer removal: 1 layers
After final dead-layer removal: 1 layers
After tensor merging: 1 layers
After vertical fusions: 1 layers
After dupe layer removal: 1 layers
After final dead-layer removal: 1 layers
After tensor merging: 1 layers
After slice removal: 1 layers
After concat removal: 1 layers
Trying to split Reshape and strided tensor
Building graph using backend strategy 2
Constructing optimization profile number 0 [1/1].
Applying generic optimizations to the graph for inference.
Reserving memory for host IO tensors. Host: 0 bytes
=============== Computing reformatting costs
=============== Computing reformatting costs:
*************** Autotuning Reformat: Float(1,1,1,1) -> Float(1,1,1,1) ***************
--------------- Timing Runner: (Unnamed Layer* 0) [Identity] (Reformat[0x80000006])
Tactic: 0x00000000000003e8 Time: 0.0122651
Tactic: 0x00000000000003ea Time: 0.0224988
Tactic: 0x0000000000000000 Time: 0.00841467
(Unnamed Layer* 0) [Identity] (Reformat[0x80000006]) profiling completed in 0.0247727 seconds. Fastest Tactic: 0x0000000000000000 Time: 0.00841467
--------------- Timing Runner: (Unnamed Layer* 0) [Identity] (MyelinReformat[0x80000035])
(foreignNode) Set user’s cuda kernel library
(foreignNode) Pass fuse_conv_padding is currently skipped for dynamic shapes
(foreignNode) Pass pad_conv_channel is currently skipped for dynamic shapes
(foreignNode) Pass fuse_conv_padding is currently skipped for dynamic shapes
(foreignNode) Pass pad_conv_channel is currently skipped for dynamic shapes
Tactic: 0x0000000000000000 Time: 0.00626647
(Unnamed Layer* 0) [Identity] (MyelinReformat[0x80000035]) profiling completed in 0.3183 seconds. Fastest Tactic: 0x0000000000000000 Time: 0.00626647

Chose Runner Type: MyelinReformat Tactic: 0x0000000000000000
Formats and tactics selection completed in 0.343932 seconds.
After reformat layers: 1 layers
Total number of blocks in pre-optimized block assignment: 1
(foreignNode) Set user’s cuda kernel library
(foreignNode) Pass fuse_conv_padding is currently skipped for dynamic shapes
(foreignNode) Pass pad_conv_channel is currently skipped for dynamic shapes
(foreignNode) Pass fuse_conv_padding is currently skipped for dynamic shapes
(foreignNode) Pass pad_conv_channel is currently skipped for dynamic shapes
Layer: (Unnamed Layer* 0) [Identity] Host Persistent: 32 Device Persistent: 0 Scratch Memory: 0
Skipped printing memory information for 0 layers with 0 memory size i.e. Host Persistent + Device Persistent + Scratch Memory == 0.
Total number of blocks in optimized block assignment: 0
Total number of generated kernels selected for the engine: 0
Disabling unused tactic source: EDGE_MASK_CONVOLUTIONS
Disabling unused tactic source: JIT_CONVOLUTIONS
Engine generation completed in 0.522099 seconds.
Deleting timing cache: 1 entries, served 0 hits since creation.
Engine Layer Information:
Layer(MyelinReformat): (Unnamed Layer* 0) [Identity], Tactic: 0x0000000000000000, input (Float[1,1,1,1]) -> output (Float[1,1,1,1])
Total per-runner device persistent memory is 0
Total per-runner host persistent memory is 32
Allocated activation device memory of size 0
CUDA lazy loading is enabled.
Output: 1

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

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

相关文章

代码审计初探

学会了基础的代码审计后&#xff0c;就该提高一下了&#xff0c;学一下一些框架的php代码审计 先从一些小众的、已知存在漏洞的cms入手 phpems php的一款开源考试系统 源码下载 https://down.chinaz.com/soft/34597.htm 环境部署 windows审计&#xff0c;把相关文件放到phps…

记录Qt 虚拟键盘样式修改与使用

文章目录 概述 一、使用虚拟键盘 二、项目文件定义 1.VirtualKeyboard.qml 2.main.qml 3.main.cpp 三、编译运行 1.编译 2.运行 3.运行效果 总结 概述 在 Qt 开发中&#xff0c;虚拟键盘是移动设备和嵌入式设备中常用的输入工具。本文将详细介绍如何通过 QML 修改虚拟键盘样式…

国产开源PDF解析工具MinerU

前言 PDF的数据解析是一件较困难的事情&#xff0c;几乎所有商家都把PDF转WORD功能做成付费产品。 PDF是基于PostScript子集渲染的&#xff0c;PostScript是一门图灵完备的语言。而WORD需要的渲染&#xff0c;本质上是PDF能力的子集。大模型领域&#xff0c;我们的目标文件格…

基于单片机的智能电表设计(论文+源码)

2.1 系统整体方案设计 本课题为基于单片机的电子式单项智能电表&#xff0c;在此设计如图2.1所示的系统总体架构&#xff0c;其采用STM32单片机作为主控制器&#xff0c;搭配外设HLW8032模块实现对电压&#xff0c;电流&#xff0c;功率因数&#xff0c;电能消耗等参数进行检…

Kafka在Windows系统使用delete命令删除Topic时出现的问题

在使用Windows的Kafka时&#xff0c;想要删除某一个主题&#xff0c;发现使用了delete之后会一直报警告。下面是我发现错误之后重新实测的Bug 先创建2个topic kafka-topics.bat --bootstrap-server localhost:9092 --topic test1 --createkafka-topics.bat --bootstrap-serve…

【部署优化篇十三】深度解析《DeepSeek API网关:Kong+Nginx配置指南》——从原理到实战的超详细手册

一、为什么需要API网关?从单体服务到微服务的必然选择 1.1 单体服务的痛点 想象一下早期的淘宝——所有功能(用户中心、商品管理、订单系统)都打包在一个巨型服务里。这样的架构存在三大致命问题: 单点故障:一旦服务崩溃,整个系统瘫痪扩展困难:每次发布都需要全量部署…

在一个集成的 SynMatrix-Ansys 设计工作流程中实现 3D 滤波器仿真

Synmatrix Technologies Inc.是Ansys 的技术合作伙伴&#xff0c;通过一体化 RF 滤波器设计和测试调整软件平台提供解决方案&#xff0c;该平台可与 Ansys HFSS 3D 高频电磁 (EM) 仿真软件配对&#xff0c;以减少开发时间、材料和运营成本、设计风险和产品故障。 典型的射频/微…

仿uni-segmented-control添加左右滑动效果

官网的选项卡没有左右滑动的效果&#xff0c;本身的样式也不太好看&#xff0c;所以封装了个简易的组件达到相同的效果&#xff0c;可自行修改css部分修改样式~ 封装组件效果如下 custom-segmented-control.vue <template><view class"container"><v…

LeetCode51

LeetCode51 目录 题目描述示例思路分析代码段代码逐行讲解复杂度分析总结的知识点整合总结 题目描述 N 皇后问题&#xff1a;将 n 个皇后放置在 n x n 的棋盘上&#xff0c;使得皇后彼此之间不能相互攻击&#xff08;即任何两个皇后不能在同一行、同一列或同一斜线上&#x…

Lineageos 22.1(Android 15)Launcer简单调整初始化配置

一、前言 Launcer的初始化配置主要在如下的xml文件夹下&#xff0c;默认读取的5x5 这里我们把device_profiles调整一下&#xff0c;然后新建一个default_workspace_my.xml作为我们自己的配置就行。 二、配置 注意Lineageos 的Launcer是在lineageos/packages/apps/Trebuchet…

2025.2.23机器学习笔记:PINN文献阅读

2025.2.23周报 一、文献阅读题目信息摘要Abstract创新点网络架构架构A架构B架构C 实验结论后续展望 一、文献阅读 题目信息 题目&#xff1a; Physics-Informed Neural Networks for Modeling Water Flows in a River Channel期刊&#xff1a; IEEE TRANSACTIONS ON ARTIFICI…

BGP配置华为——路径优选验证

实验拓扑 实验要求 实现通过修改AS-Path属性来影响路径选择实现通过修改Local_Preference属性来影响路径选择实现通过修改MED属性来影响路径选择实现通过修改preferred-value属性来影响路径选择 实验配置与效果 1.改名与IP配置 2.as300配置OSPF R3已经学到R2和R4的路由 3.…

蓝桥杯单片机基础部分——6、555定时器

前言 NE555是一个纯硬件的设计&#xff0c;旦硬件电路确定了&#xff0c;其功能也确定了&#xff0c;没有可编程的部分&#xff0c;也没什么好去理解的地方&#xff0c;如果理解不了就直接背代码&#xff0c;这里也不是很常考&#xff0c;大家了解一下就可以了&#xff0c;知道…

使用API有效率地管理Dynadot域名,为域名部署DNS安全拓展(DNSSEC)

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

一文讲解Redis中的混合持久化

一文讲解Redis中的混合持久化 在 Redis 中&#xff0c;RDB 持久化是通过创建数据的快照来保存数据的&#xff0c;而 AOF 持久化则是通过记录每个写入命令来保存数据的。 两种方式各有优缺点。RDB 持久化的优点是恢复大数据集的速度比较快&#xff0c;但是可能会丢失最后一次快…

Android JNI的理解与使用。

写在前面&#xff1a;Java相对于C/C来说是更高级的语言&#xff0c;隐藏了指针&#xff0c;可读性更高&#xff0c;更容易学习&#xff0c;但是无法直接操作硬件、运行速度较慢也是不可回避的硬伤。JNI就是Java官方定义的一套标准“接口”&#xff0c;用于Java和C/C之间互相调用…

使用Docker Desktop部署GitLab

1. 环境准备 确保Windows 10/11系统支持虚拟化技术&#xff08;需在BIOS中开启Intel VT-x/AMD-V&#xff09;内存建议≥8GB&#xff0c;存储空间≥100GB 2. 安装Docker Desktop 访问Docker官网下载安装包安装时勾选"Use WSL 2 instead of Hyper-V"&#xff08;推荐…

seacmsv9 SQL注入漏洞(报错注入)

一、海洋CMS简介 海洋cms是为解决站长核心需求而设计的视频内容管理系统&#xff0c;一套程序自适应电脑、手机、平板、APP多个终端入口&#xff0c;无任何加密代码、安全有保障&#xff0c;是您最佳的建站工具。——来自seacms官网&#xff08;简而言之就是专门搭建看片网站的…

网络运维学习笔记 017HCIA-Datacom综合实验01

文章目录 综合实验1实验需求总部特性 分支8分支9 配置一、 基本配置&#xff08;IP二层VLAN链路聚合&#xff09;ACC_SWSW-S1SW-S2SW-Ser1SW-CoreSW8SW9DHCPISPGW 二、 单臂路由GW 三、 vlanifSW8SW9 四、 OSPFSW8SW9GW 五、 DHCPDHCPGW 六、 NAT缺省路由GW 七、 HTTPGW 综合实…

基于Java+SpringBoot+Vue的前后端分离的火车订票管理系统

基于JavaSpringBootVue的前后端分离的火车订票管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&…