stable diffusion 量化学习笔记

文章目录

    • 一、一些tensorRT背景及使用介绍
      • 1)深度学习介绍
      • 2)TensorRT优化策略介绍
      • 3)TensorRT基础使用流程
      • 4)dynamic shape 模式
      • 5)TensorRT模型转换
    • 二、TensorRT转onnx模型
      • 1)onnx介绍
      • 2)背景知识:lower概念
      • 3)TRT转换模型的主要重点
      • 4)onnx-parser && onnx-graphsurgen
        • (1)onnx-parser:把onnx导出为二进制模型的工具
        • (2)onnx-graphsurgeon:onnx模型的编辑器
      • 5)实践:
        • (1)transformer模型优化:解决不支持的算子
        • (2)transformer模型优化:合并LayerNorm算子
      • 6)polygraphy
    • 六、实操
      • 1)编译tensorRT开源代码运行SampleMNIST
      • 2)英伟达TensorRT加速AI推理Hackthon2022-Transformer模型优化

一、一些tensorRT背景及使用介绍

1)深度学习介绍

  • 简单学习介绍量化背景
    在这里插入图片描述
    补充
1)tensorFlow python版本其实是调用的TensorFlow C的接口
2)libtorch其实是pytorch的C++版本
3)cublas是实现矩阵相乘的功能
4)cudnn主要实现dnn上的一些算子功能,例如卷积等
5)不同NVIDIA显卡架构间不兼容,同代显卡基本是同架构

2)TensorRT优化策略介绍

  • 优化策略
1、低精度优化 :int8  int16
2、Kernel自动调优
例如:cublas  gemm多种实现:①不用shared memory ;②小矩阵相乘;③使用额外显存的策略
3、算子融合:例如:
relu+bias+1x1 conv =1x1 CBR
4、多流运行
5、显存优化

在这里插入图片描述

3)TensorRT基础使用流程

在这里插入图片描述

  • 代码使用流程
    在这里插入图片描述

4)dynamic shape 模式

  • 背景
    ①TensorRT 6.0之后 explicit(显式)batch支持动态batchsize
    ②CV的图片基本都是固定大小,而NLP和speech语音很多都是不固定大小的
  • 思路
    1)build engine阶段设置:
    ①用createNetworkV2设置显示batchsize
    ②设置最大batchsize
    ③设置优化profile选项,选择最大、最常用、最小的数据维度(类似,15s\20s\30s的语音)
    在这里插入图片描述
    2)infer推理阶段
    ①每次推理设置输出的数据维度
    ②检查输入的数据维度是否符合需求
    ③开启推理
    在这里插入图片描述

5)TensorRT模型转换

①onnx:一键解析pytorch转为onnx,不用像API那样一层一层构建onnx
②torch2trt:pytorch直接转为trt
③TensorFlow:谷歌出品,不用pytorch,tf直接转为trt(tf2tensorrt)
④Tencent Forward:支持pytorch\onnx\tf直接转为trt,接口简单
在这里插入图片描述

二、TensorRT转onnx模型

1)onnx介绍

  • onnx:表示深度学习模型的开放模式

  • 备注:CPU上线首推ONNX-RUNTIME
    在这里插入图片描述
    在这里插入图片描述

  • onnx模型组成:Graph、Node、Tensor
    Graph:注意opset版本参数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2)背景知识:lower概念

  • 概念
    用基础算子加、减、乘、除、fc等组合成一个模型不支持的、复杂的算子,成为lower,反之为upper(tensor合并算子就可以提高速度,拆分成这么多算子速度会下降)
    在这里插入图片描述

3)TRT转换模型的主要重点

在这里插入图片描述

4)onnx-parser && onnx-graphsurgen

(1)onnx-parser:把onnx导出为二进制模型的工具
  • 例子代码截图
    在这里插入图片描述
  • onnx-parser导出模型方式:
    ①python API
    ②trtexec
    ③polygraph
  • onnx-parser痛点
    (备注:LSTM的算子没有tensorflow支持的全,基本只能靠裁剪)
    在这里插入图片描述
(2)onnx-graphsurgeon:onnx模型的编辑器
  • 传送门
    传送门
    在这里插入图片描述

5)实践:

(1)transformer模型优化:解决不支持的算子
(2)transformer模型优化:合并LayerNorm算子

6)polygraphy

六、实操

1)编译tensorRT开源代码运行SampleMNIST

在这里插入图片描述

2)英伟达TensorRT加速AI推理Hackthon2022-Transformer模型优化

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析

访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离,使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…

C++中引用参数与指针参数的区别与联系详解

在C++中,函数参数可以通过值传递、引用传递和指针传递。虽然指针传递在C和C++中都非常常见,但C++引入了引用类型,使得引用传递变得更加直接和易用。本文将详细介绍函数中引用参数和指针参数的区别与联系,并通过C++语言代码示例加以说明。 一、基本概念 值传递(Pass by Val…

初识JVM HotSopt 的发展历程

目录 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 各大 JVM look 看一下虚拟机 HotSopt 的发展历程 总结 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 即时编译 主要是…

html中鼠标位置信息

pageX:鼠标距离页面的最左边的距离,包括滚动条的长度。clientX:鼠标距离浏览器视口的左距离,不包括滚动条。offsetX:鼠标到事件源左边的距离。movementX:鼠标这次触发的事件的位置相对于上一次触发事件的位…

RabbitMQ 高可用方案:原理、构建与运维全解析

文章目录 前言:1 集群方案的原理2 RabbitMQ高可用集群相关概念2.1 设计集群的目的2.2 集群配置方式2.3 节点类型 3 集群架构3.1 为什么使用集群3.2 集群的特点3.3 集群异常处理3.4 普通集群模式3.5 镜像集群模式 前言: 在实际生产中,RabbitM…

【容器逃逸实践】挂载/dev方法

0、前置知识 怎么在容器里面执行命令, 有几种方法 # 不进入容器,创建并启动一个新的容器 $ docker run -itd --name ubuntu-test ubuntu /bin/bash # 进入容器,创建并启动一个新的容器 $ docker run -itd --name ubuntu-test ubuntu /bin…

linux: 文本编辑器vim

文本编辑器 vi的工作模式 (vim和vi一致) 进入vim的方法 方法一:输入 vim 文件名 此时左下角有 "文件名" 文件行数,字符数量 方法一: 输入 vim 新文件名 此时新建了一个文件并进入vim,左下角有 "文件名"[New File] 灰色的长方形就是光标,输入文字,左下…

Python爬虫-汽车之家各车系周销量榜数据

前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…

Python----Python高级(函数基础,形参和实参,参数传递,全局变量和局部变量,匿名函数,递归函数,eval()函数,LEGB规则)

一、函数基础 1.1、函数的用法和底层分析 函数是可重用的程序代码块。 函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。 在编写函数时&#xf…

欧拉路径算法

欧拉图: 对于应该连通图G,有: 1欧拉路径:一条路径,它能够不重复地遍历完所有的边,这个性质很像不重复地一笔画完所有边,所以有些涉及到欧拉路径的问题叫做一笔画问题。 2欧拉回路&#xff1a…

后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权

目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器? 总结 …

Angular-生命周期及钩子函数

什么是生命周期 Angular 创建和渲染组件及其子组件,当它们绑定的属性发生变化时检查它们,并在从 DOM 中移除它之前销毁它们。生命周期函数通俗的讲就是组件创建、组件更新、组件销毁的时候会触发的一系列的方法。当 Angular 使用构造函数新建一个组件或…

Microsoft

Microsoft Word目录1.目录编号与文字的间距设置2. 目录编号缩进设置 Excel函数MID(提取字符)CONCAT(组合字符串)EXACT(比较字符串) PowerPointwindows 11 恢复右键传统菜单 Word 目录 1.目录编号与文字的…

MAC AndroidStudio模拟器无网络

先确认PC端是正常访问网络的; 模拟器端修改Wifi设置:设置 - 网络和互联网 - WALN设置 按照上图修改; IP设置:从DHCP修改为静态,IP地址:10.0.2.16 ,网关:10.0.2.2 , DNS…

Android 对接口的封装使用

前言 本篇文章主要是记录Android代码 对java 接口的封装和使用方法,比较基础,记录一下,阅读本篇文章前,请移步 java基础系列(九) 接口和抽象类 这篇文章。 接口理解 从设计角度: 设计方面的区别 抽象类是对一种事物的抽象&#…

Qiskit快速编程探索(进阶篇)

五、量子电路模拟:探索量子世界的虚拟实验室 5.1 Aer模拟器:强大的模拟引擎 在量子计算的探索旅程中,Aer模拟器作为Qiskit的核心组件之一,宛如一座功能强大的虚拟实验室,为开发者提供了在经典计算机上模拟量子电路运行的卓越能力。它打破了硬件条件的限制,使得研究者无…

如何独立SDK模块到源码目录?

如何独立SDK模块到源码目录? 常见三种构建方式,具体取决于SDK开源程序库的方式: 类UNIX系统平台项目管理工具的进化路径:简单的Makefile>Configure(Autoconf/Automake)>CMake openWrt示例,如下: …

极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案

作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…

MMDetection框架下的常见目标检测与分割模型综述与实践指南

目录 综述与实践指南 SSD (Single Shot MultiBox Detector) 基本配置和使用代码 RetinaNet 基本配置和使用代码 Faster R-CNN 基本配置和使用代码 Mask R-CNN 基本配置和使用代码 Cascade R-CNN 基本配置和使用代码 总结 综述与实践指南 MMDetection是一个基于Py…

服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例

服务器数据恢复环境&故障: EMC Unity 400存储连接了2台硬盘柜。2台硬盘柜上一共有21块硬盘(520字节)。21块盘组建了2组RAID6:一组有11块硬盘,一组有10块硬盘。 在存储运行过程中,管理员误操作删除了 2组…