Project joee 算法开发日志(一)

news2024/11/15 20:00:14

目录

  • 一. 下载并安装TensorRT
    • 1.1 下载安装TensorRT
    • 1.2 验证TensorRT安装是否成功
  • 二. 安装并测试Windows预测库
    • 2.1 安装cuda11.0_cudnn8.0_avx_mkl-trt7.2.1.6 预测库
    • 2.2 测试精度损失
    • 2.3 推理速度测试
  • 三. 总结

开发机器配置:
CPU: AMD5800 8core 16Thread
GPU: NVIDIA GTX1080Ti 11GB
内存: 48GB
系统:Win10 专业版

一. 下载并安装TensorRT

首先需要安装加速包CUDA10.2和补丁包Cudnn 8,安装完毕后再进行TensorRT安装。

1.1 下载安装TensorRT

进入英伟达官网,选择和自己机器适配的TensorRT包,10系显卡使用CUDA10.2的加速效果会比较好,因此事先安装的是CUDA10.2版本。paddle官方给出的搭配是TensorRT7.0.0.11搭配CUDA10.2搭配cuDNN7.6.5。
TensorRT下载地址 NVIDIA TensorRT 8.x Download | NVIDIA Developer:
在这里插入图片描述

TensorRT的zip解压后内部如图:
在这里插入图片描述
接下来安装TensorRT文件夹中的.whl文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2 验证TensorRT安装是否成功

首先将lib中这几个dll复制到CUDA安装目录下:
在这里插入图片描述
在这里插入图片描述

在cmd中打开Python查看trt的版本:

import tensorrt as trt
print(trt.__version__)

出现下面这种报错是因为Cudnn这个补丁包版本不对,或者没有正确地将dll包拷贝到CUDA安装目录下:
在这里插入图片描述
解决办法:重新下载Cudnn8.x,复制cudnn64_8.dll到CUDA安装目录下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到不再报错:
在这里插入图片描述
如果安装了Pytorch,还可以运行TensortRT文件夹下的sample.py对TensorRT的加速效果进行测试:

cd samples/python/network_api_pytorch_mnist
python sample.py

二. 安装并测试Windows预测库

2.1 安装cuda11.0_cudnn8.0_avx_mkl-trt7.2.1.6 预测库

在这里插入图片描述
安装:

pip install paddlepaddle_gpu-2.3.2-cp38-cp38-win_amd64.whl

在这里插入图片描述

2.2 测试精度损失

下载MobileNet预测模型

下载ImageNet小型数据集
把这两个文件下载下来放到auto_compression目录下:
在这里插入图片描述

测试压缩前模型的精度:

python ./image_classification/eval.py

在这里插入图片描述

运行自动化压缩:

# 导入依赖包
import paddle
from PIL import Image
from paddle.vision.datasets import DatasetFolder
from paddle.vision.transforms import transforms
from paddleslim.auto_compression import AutoCompression
paddle.enable_static()
# 定义DataSet
class ImageNetDataset(DatasetFolder):
    def __init__(self, path, image_size=224):
        super(ImageNetDataset, self).__init__(path)
        normalize = transforms.Normalize(
            mean=[123.675, 116.28, 103.53], std=[58.395, 57.120, 57.375])
        self.transform = transforms.Compose([
            transforms.Resize(256),
            transforms.CenterCrop(image_size), transforms.Transpose(),
            normalize
        ])

    def __getitem__(self, idx):
        img_path, _ = self.samples[idx]
        return self.transform(Image.open(img_path).convert('RGB'))

    def __len__(self):
        return len(self.samples)

# 定义DataLoader
train_dataset = ImageNetDataset("./ILSVRC2012_data_demo/ILSVRC2012/train/")
image = paddle.static.data(
    name='inputs', shape=[None] + [3, 224, 224], dtype='float32')
train_loader = paddle.io.DataLoader(train_dataset, feed_list=[image], batch_size=32, return_list=False)
# 开始自动压缩
ac = AutoCompression(
    model_dir="./MobileNetV1_infer",
    model_filename="inference.pdmodel",
    params_filename="inference.pdiparams",
    save_dir="MobileNetV1_quant",
    ###config={"QuantPost": {}, "HyperParameterOptimization": {'ptq_algo': ['avg'], 'max_quant_count': 3}},
    config={"QuantAware": {}, "Distillation": {}}, ### 如果您的系统为Windows系统, 请使用当前这一行配置
    train_dataloader=train_loader,
    eval_dataloader=train_loader)
ac.compress()

运行结果:
在这里插入图片描述
在这里插入图片描述
把生成的量化模型放在auto_compression目录下:
在这里插入图片描述

测试量化模型的精度:

python ./image_classification/eval.py --model_dir=MobileNetV1_quant

在这里插入图片描述
可以看到精度降为0.68左右,还可以接受。

2.3 推理速度测试

测试FP32模型的速度

python ./image_classification/paddle_inference_eval.py --model_path=./MobileNetV1_infer --use_gpu=True --use_trt=True

在这里插入图片描述
注意我这里是因为下载了cuDNNv7.6和v8.7两个版本但显示的是7.6,所以在CUDA安装目录下要用cuDNNv7.6的文件把cuDNNv8.7覆盖掉。
经过测试发现必须在cuDNN8.x提供的环境下,运行TensorRT7.x的程序才能正常进行,虽然有些反常识,但可能是工程师向后兼容造成的,这里不予理会。
测试FP32模型的速度
在这里插入图片描述
测试FP16模型的速度

python ./image_classification/paddle_inference_eval.py --model_path=./MobileNetV1_infer --use_gpu=True --use_trt=True --use_fp16=True

因为1080Ti不支持半精度浮点数运算,因此此项测试目前无效:
在这里插入图片描述
测试INT8模型的速度:

python ./image_classification/paddle_inference_eval.py --model_path=./MobileNetV1_quant/ --use_gpu=True --use_trt=True --use_int8=True

因为1080Ti不支持INT8整形运算,因此此项测试目前也无效:

在这里插入图片描述

三. 总结

模型自动化压缩工具ACT(Auto Compression Toolkit)提供了一种高效、端到端的方式来进行模型量化、蒸馏、剪枝及超参搜索等,可任意搭配使用,加速理论速度为1~4倍。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信支付回调,内网穿透详细过程

文章目录支付回调接口通过Ngrok进行内网穿透步骤1. 根据邮箱注册一个账号2. 获取隧道id3.下载Ngrok客户端4. 双击这个 Sunny-Ngrok启动工具.bat 文件5. 填写你的 隧道id 回车6.客户端启动成功7. 所以你的notify_url对应的value需要改为内网穿透的地址为8.支付成功之后微信平台会…

分面中添加直线

简介 这篇也是分享最近统计建模中所绘制的一副图形。总体而言和前面的几篇:xxx 类似。都是从“数据导入”到“基于分面的可视化”。但是本文的小技巧是,在不同的分面中添加直线。最后得到的图形如下: 注意:本文数据和代码在公众号…

交易所通用质押式回购

一、专业术语 逆回购:指资金融出方将资金融给资金融入方,收取有价证券作为质押,并在未来收回本息,并解除有价证券质押的交易行为。 债券通用质押式回购交易:(简称“通用回购”)是指资金融入方…

划分成绩ABCD

已知成绩等级划分为{“A”:[90~100],"B":[80~89],"c":[60~79],"D":[0~59]} 1、随机生成20个整数,范围0-100 2、按等级归类,输出成绩等级列表字典如下: {A: [96, 96, 97, 97, 100, 100], B: [86], C: [71, 7…

Python学习基础笔记二十二——生成器

一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值,但是yield又不同于return,return的执行意味着程序的结束,调用生成器函数不会得到返回的具体的值,而是得到一个可迭代的对象。每一次获取这个可迭代对…

微机原理与接口技术:数模转换和模数转换 详细笔记

文章目录1.数模转换1.1.数模转换原理1.1.1.权电阻D/A转换器1.1.2.R-2R T型电阻网络D/A转换器1.1.3.补充 D/A转换器的主要技术指标1.2.D/A转换芯片——DAC08321.2.1.引脚介绍1.2.2.工作方式直通输入方式单缓冲方式双缓冲方式2.模数转换2.1.信号变换中的采样、量化和编码2.1.1.采…

『NLP学习笔记』TextCNN文本分类原理及Pytorch实现

TextCNN文本分类原理及Pytorch实现 文章目录一. TextCNN网络结构1.1. CNN在文本分类上得应用1.2. 回顾CNN以及Pytorch解析1.2.1. CNN特点1.2.2. 一维卷积Conv1d1.2.3. 二维卷积 Conv2d1.2.3. 三维卷积 Conv3d1.2.4. 池化(pooling)操作1.2.4. nn.BatchNorm操作1.3. nn.ModuleLi…

大数据之数据的压缩与存储

文章目录前言一、Hive的压缩方式(一) 概念(二) 简介(三) 数据分层的压缩方式选择(四)开启Map输出阶段压缩(五)开启Reduce输出阶段压缩二、 Hive的数据存储格式…

再有人问你kafka 把这篇扔给他(建议收藏)

前言 最近重新读起kafka的内容,看到kafka官网文档里,有专门一栏讲kafka的设计,觉得很受益。我们常常会知道这个中间件是什么,是什么机制,这次想换个角度来聊,它在设计消息系统的时候,都做了哪些…

火山引擎虚拟数字人技术与应用

导读:火山引擎正在打造完善的虚拟数字人技术和应用体系,那么火山引擎是如何定义虚拟数字人的呢?火山引擎 2D 虚拟数字人和 3D 数字人采用了怎样先进的技术?火山引擎数字人有哪些应用和前景展望?今天我们就来一起探秘火…

【Transformer】Transformer理论知识

Transformer目录Transformer介绍Seq2seq结构Encoder结构Decoder结构Autoregressive Decoder(AT):Encoder和Decoder对比和联系Cross attention:Non-autoregressive Decoder(NAT):训练Seq2seq Mod…

基于ssm高校档案管理系统源码

档案管理作为企事业单位管理工作的基础,档案是企事业单位建设信息系统的重要组成部分,档案是提高企事业单位工作质量和工作效率的必要条件,甚至是维护历史真实面貌的一项重要工作。 1、档案信息数字化能够提供档案信息方便快捷的服务方式。 数…

量化风控的贷前实操课—详解的规则调优

风控全流程涉及贷前风控、贷中监控、贷后催收,每个模块都环环相扣,互相关联。而作为其中最关键模块的贷前风控,几乎是整个风控模块中最重要的部分,现金贷等互金产品重贷前、信用卡重贷中。 贷前风控是可以说整个防控中的第一道防线…

简单的CNN实现——MNIST手写数字识别

0.概述 此文章不涉及复杂的理论知识,仅仅只是利用PyTorch组建一个简单的CNN去实现MNIST的手写数字识别,用好的效果去激发学习CNN的好奇心,并且以后以此为基础,去进行一些改造。(前提是把基础代码看明白) 本…

java计算机毕业设计ssm社团管理系统0gl2e(附源码、数据库)

java计算机毕业设计ssm社团管理系统0gl2e(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。…

Android Room的使用详解

Android Room的使用详解 一:Room的基本介绍 Room 是 Android 架构组件的一部分,Room 持久性库在 SQLite上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。具体来说,Room 具有以下优…

【Linux Kernel 6.1 代码剖析】- 进程管理概论

目录 进程与线程的概念(内核线程和用户线程) 进程的3种基本状态 引入挂起后的7种基本状态 Linux 内核6.1 - 进程的8种详细状态 进程控制块 PCB SMP 架构 进程与线程的概念(内核线程和用户线程) 进程是正在运行的程序实体&a…

基于java+ssm+vue+mysql的旅游管理系统

项目介绍 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多企业的之中,随之就产生了“旅游信息管理系统”,这样就让旅游信息管理系统更加方便简单。 对于本旅游信息管理系统的设计来说&…

QDir(目录)

QDir 类提供对目录结构及其内容的访问,QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统,它也可以用来访问Qt的资源系统。 Qt使用“/”作为通用目录分隔符,就像URL中的“/”用作路径分隔符一样。如果您始终使用“/”作为…

2022年大一学生实训作业【基于HTML+CSS制作中华传统文化传统美德网站 (6页面)】

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…