jjzjj

Windows Python PyTorch CUDA 11.7 TensorRT 环境配置

mrathena 2024-05-03 原文

博文目录

文章目录


版本说明

截止到 2022.12.24, 相关工具情况如下

  • Nvidia GeForce Game Ready 驱动程序: 527.56, 运行 nvidia-smi 可知该驱动最高已支持到最新的 CUDA 12
  • Nvidia CUDA: 最新版 CUDA 版本为 12
  • Nvidia TensorRT: TensorRT 8.5 GA Update 1, 支持 CUDA 11.0 到 11.8
  • Nvidia cuDNN: cuDNN 8.7.0, for CUDA 11.x
  • PyTorch: Windows 上支持 Python 3.7 到 3.10. 最高支持 CUDA 11.7

版本选择

pip install -U nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com

目前我们无法从 Nvidia 官方 Python Index 库安装 python-tensorrt, 好在有替代方法

Nvidia TensorRT 内置了 tensorrt-8.5.2.2-cp310-none-win_amd64.whl, 可以直接安装到 Python 虚拟环境中, 支持 Python 3.6 到 3.10

综上所述, 我们选择 Python 3.10 和 CUDA 11.7 来搭建环境

下载代码

Yolo v5 7.0

下载或克隆代码到某个路径, 如 C:\mrathena\develop\workspace\pycharm\yolov5-7.0

创建并激活虚拟环境

Windows Python PyCharm 开发环境搭建

使用 Conda 创建并管理虚拟环境

conda create -n gpu python=3.10 # 创建环境
conda activate gpu # 激活环境

conda remove -n gpu --all # 删除环境

使用 CPU 推理

安装工程运行的最少依赖

cd C:\mrathena\develop\workspace\pycharm\yolov5-7.0 # 切换工作路径到工程下
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装运行依赖

运行 detect.py

出现如 YOLOv5 2022-11-22 Python-3.10.8 torch-1.13.1+cpu CPU 的字样即说明环境配置成功

首次运行会自动下载权重文件 yolov5s.pt, 也可自行下载并放在工程根目录下

执行结果见 runs\detect\exp

使用 Nvidia GPU 推理

默认依赖安装好后, Yolo 即可以以 CPU 的方式运行, 若想以 GPU 的方式运行, 还需配置 CUDA 环境

安装 PyTorch CUDA 环境

PyTorch 拿到 pytorch 的安装命令

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

原版命令如果卡在某一步, 无法成功安装, 可尝试使用下方的替代方法

# 配置清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
# 修改后的命令, 明确指定了各个模块的版本
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia
# 参考内容见 https://blog.csdn.net/cxin917/article/details/127825180
# 版本关系见 https://github.com/pytorch/vision 和 https://github.com/pytorch/audio, 和执行 `conda search pytorch-cuda`

安装完成后, 执行 python, 输入如下内容, 如果返回 True, 则说明 CUDA 环境配置成功. 执行 exit() 退出 python 命令

import torch
torch.cuda.is_available()

运行 detect.py

有一个报错, 应该是 pillow 的原因

PIL(Python Image Library),Python 图像处理标准库。仅支持到 Python 2.7,故 Python 3 用的是 PIL 的兼容版本 Pillow

C:\mrathena\develop\miniconda\envs\gpu\lib\site-packages\torch\storage.py:11: UserWarning: The NumPy module was reloaded (imported a second time). This can in some cases result in small but subtle issues and is discouraged.
  import numpy as np
Traceback (most recent call last):
  File "C:\mrathena\develop\workspace\pycharm\yolov5-7.0\detect.py", line 43, in <module>
    from models.common import DetectMultiBackend
  File "C:\mrathena\develop\workspace\pycharm\yolov5-7.0\models\common.py", line 25, in <module>
    from PIL import Image
  File "C:\mrathena\develop\miniconda\envs\gpu\lib\site-packages\PIL\Image.py", line 100, in <module>
    from . import _imaging as core
ImportError: DLL load failed while importing _imaging: 找不到指定的模块。

无需卸载, 通过如下命令直接强制替换问题版本即可. 切记不要使用 conda uninstall pillow 这个命令, 因为会删除其他很多东西

pip install pillow==9.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

出现如 YOLOv5 2022-11-22 Python-3.10.8 torch-1.13.1 CUDA:0 (NVIDIA GeForce RTX 2080, 8192MiB) 的字样即说明环境配置成功

安装 TensorRT

百度网盘 相关资源

# 本地安装 tensorrt 模块, 从百度网盘中下载对应 Python 版本的安装包即可
pip install tensorrt-8.5.2.2-cp310-none-win_amd64.whl
# 安装 onnx, 需要先将 pt 转为 onnx 再转为 engine
pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/simple

导出 engine

执行下方命令将 yolov5s.pt 导出为 yolov5s.engine

python export.py --weights yolov5s.pt --device 0 --include engine

运行 detect.py

将 detect.py 中的 weights 参数的默认值 yolov5s.pt 修改为 yolov5s.engine, 然后再运行

C:\mrathena\develop\miniconda\envs\gpu\python.exe C:/mrathena/develop/workspace/pycharm/yolov5-7.0/detect.py
detect: weights=yolov5s.engine, source=data\images, data=data\coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs\detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
YOLOv5  2022-11-22 Python-3.10.8 torch-1.13.1 CUDA:0 (NVIDIA GeForce RTX 2080, 8192MiB)

Loading yolov5s.engine for TensorRT inference...
[12/24/2022-22:30:04] [TRT] [I] [MemUsageChange] Init CUDA: CPU +410, GPU +0, now: CPU 14174, GPU 1213 (MiB)
[12/24/2022-22:30:04] [TRT] [I] Loaded engine size: 31 MiB
[12/24/2022-22:30:05] [TRT] [I] [MemUsageChange] Init cuDNN: CPU +699, GPU +258, now: CPU 14961, GPU 1503 (MiB)
[12/24/2022-22:30:05] [TRT] [I] [MemUsageChange] TensorRT-managed allocation in engine deserialization: CPU +0, GPU +0, now: CPU 0, GPU 0 (MiB)
[12/24/2022-22:30:05] [TRT] [I] [MemUsageChange] Init cuDNN: CPU +0, GPU +8, now: CPU 14930, GPU 1503 (MiB)
[12/24/2022-22:30:05] [TRT] [I] [MemUsageChange] TensorRT-managed allocation in IExecutionContext creation: CPU +0, GPU +0, now: CPU 0, GPU 0 (MiB)
image 1/2 C:\mrathena\develop\workspace\pycharm\yolov5-7.0\data\images\bus.jpg: 640x640 4 persons, 1 bus, 4.6ms
image 2/2 C:\mrathena\develop\workspace\pycharm\yolov5-7.0\data\images\zidane.jpg: 640x640 2 persons, 2 ties, 5.0ms
Speed: 720.5ms pre-process, 4.8ms inference, 3.9ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs\detect\exp6

额外配置

百度网盘 相关资源

报缺少 nvinfer.dll / nvinfer_plugin.dll / nvonnxparser.dll / nvparsers.dll / cudnn64_8.dll / cublas64_11.dll / cublasLt64_11.dll 等做如下操作

下载百度网盘中的 lib 文件夹到某个位置, 并将该位置添加到 Path 环境变量

或自行下载 Nvidia TensorRT, 将其中的 lib 文件夹解压到某个位置, 并将该位置添加到 Path 环境变量, 下载百度网盘中 lib 文件夹中的 cudnn64_8.dll, 放到该 lib 文件夹中, 保证 Path 能覆盖到

有关Windows Python PyTorch CUDA 11.7 TensorRT 环境配置的更多相关文章

  1. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  4. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  5. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  6. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  7. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  8. ruby-on-rails - ruby gem如何在rails环境下工作 - 2

    我试图在rails中了解rubygems是如何变得可以自动使用的,而不是在使用required的文件中gem? 最佳答案 这是通过bundler/setup完成的:http://bundler.io/v1.3/bundler_setup.html.它在您的config/boot.rb文件中是必需的。简而言之,它首先将环境变量设置为指向您的Gemfile:ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__)然后它通过要求bundler/setup将所有ge

  9. Ruby 默认将 IRB 配置为 Pretty_Inspect - 2

    我是ruby​​的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽

  10. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

随机推荐