模型部署
文章平均质量分 92
模型部署
Adenialzz
Keep Learning.
展开
-
AI移动端优化之Im2Col+Pack+Sgemm
这篇文章是基于NCNN的Sgemm卷积为大家介绍Im2Col+Pack+Sgemm的原理以及算法实现,希望对算法优化感兴趣或者做深度学习模型部署的读者带来帮助。转载 2022-07-12 22:41:31 · 873 阅读 · 0 评论 -
给 Python 算法插上性能的翅膀——pybind11 落地实践
给 Python 算法插上性能的翅膀——pybind11 落地实践转载 2022-07-03 19:04:52 · 1896 阅读 · 0 评论 -
PyTorch扩展自定义PyThonC++(CUDA)算子的若干方法总结
PyTorch扩展自定义PyThon/C++(CUDA)算子的若干方法总结转载 2022-07-03 15:11:44 · 964 阅读 · 0 评论 -
Pytorch导出onnx模型,C++转化为TensorRT并实现推理过程
Pytorch导出onnx模型,C++转化为TensorRT并实现推理过程原创 2022-06-26 17:55:38 · 6918 阅读 · 20 评论 -
C++多线程推理、生产者消费者模式封装
C++多线程推理、生产者消费者模式封装原创 2022-06-18 21:10:04 · 2150 阅读 · 3 评论 -
TensorRT ONNX 基础(续)
TensorRT ONNX 基础(续)PyTorch正确导出ONNX几条推荐的原则,可以减少潜在的错误:对于任何使用到 shape、size 返回值的参数时,例如 tensor.view(tensor.size(0), -1) 这类操作,避免直接使用 tensor.size() 的返回值,而是用 int 强转以下,断开跟踪,即:tensor.view(int(tensor.view(0)), -1) 。对于 nn.Unsample 、nn.functional.interpolate 函数,使用原创 2022-05-03 22:28:07 · 1294 阅读 · 0 评论 -
TensorRT ONNX 基础
TensorRT ONNX 基础概述TensorRT 的核心在于对模型算子的优化(合并算子、利用当前 GPU 特性选择特定的核函数等多种策略),通过 TensorRT,能够在 Nvidia 系列 GPU 上获得最好的性能。TensorRT 模型需要在目标 GPU 上以实际运行的方式选择最优的算法和配置(不同的 GPU 的许多特性的不一样,在特定 GPU 上跑一跑,再知道怎样最快)。也因此 TensorRT 得到的模型只能在特定的环境下运行(编译时的 TensorRT 版本、CUDA 版本、GPU原创 2022-05-01 20:06:33 · 3857 阅读 · 0 评论 -
TVM:设计与架构
TVM:设计与架构本文档适用于想要了解 TVM 架构和/或积极开发项目的开发人员。页面组织如下:示例编译流程概述了 TVM 将模型的高层描述转换为可部署模块所采取的步骤。要开始使用,请先阅读本节。逻辑架构组件部分描述了逻辑组件。后面的部分是针对每个逻辑组件的特定指南,按组件的名称组织。设备/目标交互描述了 TVM 如何与每种支持的物理设备和代码生成目标进行交互。请查看开发人员操作指南以获取有用的开发技巧。本指南提供了架构的一些补充视图。首先,我们回顾了一个端到端的编译流程,并翻译 2022-01-20 22:34:22 · 918 阅读 · 0 评论 -
TVM:编译深度学习模型快速上手教程
TVM:编译深度学习模型快速上手教程本文将展示如何使用 Relay python 前端构建一个神经网络,并使用 TVM 为 Nvidia GPU 生成一个运行时库。 注意我们需要再构建 TVM 时启用了 cuda 和 llvm。TVM支持的硬件后端总览在本教程中,我们使用 cuda 和 llvm 作为目标后端。我们先导入 Relay 和 TVM:import numpy as npfrom tvm import relayfrom tvm.relay import testingimpor翻译 2022-01-20 18:17:35 · 1631 阅读 · 0 评论 -
树莓派摄像头 C++ OpenCV YoloV3 实现实时目标检测
树莓派摄像头 C++ OpenCV YoloV3 实现实时目标检测本文将实现树莓派摄像头 C++ OpenCV YoloV3 实现实时目标检测,我们会先实现树莓派对视频文件的逐帧检测来验证算法流程,成功后,再接入摄像头进行实时目标检测。先声明一下笔者的主要软硬件配置:树莓派4B 4GB内存CSI 摄像头Ubuntu 20.04OpenCV 的安装不多讲,参考 Ubuntu 18.04 安装OpenCV C++ 。准备YoloV3模型权重文件和视频文件模型配置文件和权重、COCO数据集名原创 2021-12-31 23:44:01 · 8140 阅读 · 3 评论 -
PyTorch导出JIT模型并用C++ API libtorch调用
PyTorch导出JIT模型并用C++ API libtorch调用本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 C++API libtorch运行这个模型。Step1:导出模型首先我们进行第一步,用 Python API 来导出模型,由于本文的重点是在后面的部署阶段,因此,模型的训练就不进行了,直接对 torchvision 中自带的 ResNet50 进行导出。在实际应用中,大家可以对自己训练好的模型进行导出。# export_jit_model.py原创 2021-12-21 22:28:26 · 4616 阅读 · 1 评论 -
安装 PyTorch C++ API libtorch 及一个最小例子
安装 PyTorch C++ API libtorch 及一个最小例子翻译自:https://pytorch.org/cppdocs/installing.html我们提供依赖 PyTorch 所需的所有头文件、库和 CMake 配置文件的二进制分发版。我们将此发行版称为 LibTorch,您可以在我们的网站上下载包含最新 LibTorch 发行版的 ZIP 档案。下面是编写一个依赖 LibTorch 并使用torch::TensorPyTorch C++ API 附带的类的最小应用程序的小示例。安装翻译 2021-12-21 18:06:23 · 1666 阅读 · 0 评论 -
PyTorch C++ API libtorch 简介
PyTorch C++ 简介翻译自 PyTorch 官方文档:https://pytorch.org/cppdocs/index.html#acknowledgements整体划分根据 PyTorch 官方文档 的介绍,PyTorch的C++ API可以粗略分为以下五个部分:ATen:基础的张量和数学计算库,其他的部分都以此为基础。Autograd:多 ATen 的扩展,包含自动微分功能。C++ Frontend:用于训练和验证机器学习模型的高层架构。TorchScript:TorchSci翻译 2021-12-21 15:44:49 · 1464 阅读 · 0 评论 -
PyTorch JIT与TorchScript
PyTorch JIT与TorchScript转自:https://zhuanlan.zhihu.com/p/370455320如果搜索 PyTorch JIT,找到的将会是「TorchScript」的文档,那么什么是 JIT 呢?JIT 和 TorchScript 又有什么联系?文章只会关注概念的部分,如果关注细节或实现部分,文章最后有一个完整的 Demo 可供参考。什么是 JIT?首先要知道 JIT 是一种概念,全称是 Just In Time Compilation,中文译为「即时编译转载 2021-12-20 17:48:23 · 597 阅读 · 0 评论 -
AI编译器与传统编译器的联系与区别
AI编译器与传统编译器的区别与联系总结整理自知乎问题 针对神经网络的编译器和传统编译器的区别和联系是什么?。文中提到的答主的知乎主页:@金雪锋、@杨军、@蓝色、@SunnyCase、@贝壳与知了、@工藤福尔摩笔者本人理解为了不用直接手写机器码,我们可以用汇编语言;为了不用手写汇编,我们开发出了高级语言,并用编译器将我们写的高级语言编译成汇编。因此,传统编译器主要解决的问题是要降低编程的难度,其次是优化程序性能。其输入是高级语言,输出是硬件可执行码。而对于神经网络编译器,其输入是一个深度学习模型(这转载 2021-11-30 12:35:13 · 3396 阅读 · 0 评论 -
TVM:使用 Auto-scheduling 来优化算子
TVM:使用 Auto-scheduling 来优化算子在本教程中,我们将展示 TVM 的 Auto-scheduling 功能如何在无需编写自定义模板的情况下找到最佳 schedule。与基于模板的 AutoTVM 依赖手动模板定义搜索空间不同,auto-scheduler 不需要任何模板。 用户只需编写计算声明,无需任何调度命令或模板。 auto-scheduler 可以自动生成一个大的搜索空间,并在该空间中找到一个好的 schedule。我们在本教程中同样使用矩阵乘法作为示例。import o翻译 2021-11-17 21:14:40 · 976 阅读 · 0 评论 -
TVM:使用 Schedule 模板和 AutoTVM 来优化算子
TVM:使用 Schedule 模板和 AutoTVM 来优化算子在本文中,我们将介绍如何使用 TVM 张量表达式(Tensor Expression,TE)语言编写 Schedule 模板,AutoTVM 可以搜索通过这些模板找到最佳 Schedule。这个过程称为自动调整(Auto Tuning),它有助于自动优化张量计算的过程。本教程需基于之前介绍的如何使用 TE 来写一个矩阵乘法的教程。Auto Tuning 有两步:第一步是定义一个搜索空间第二步是运行相应的搜索算法来探索这个空间本翻译 2021-11-17 20:40:13 · 1274 阅读 · 0 评论 -
深度学习编译:MLIR初步
深度学习编译MLIR初步深度模型的推理引擎目前深度模型的推理引擎按照实现方式大体分为两类:解释型推理引擎和编译型推理引擎。解释型推理引擎一般包含模型解析器,模型解释器,模型优化器。模型解析器负责读取和解析模型文件,转换为适用于解释器处理的内存格式;模型优化器负责将原始模型变换为等价的、但具有更快的推理速度的模型;模型解释器分析内存格式的模型并接受模型的输入数据,然后根据模型的结构依次执行相应的模型内部的算子,最后产生模型的输出。编译型推理引擎编译型推理引擎一般包含模型解析器原创 2021-10-30 17:50:15 · 5431 阅读 · 1 评论 -
TVM:使用Tensor Expression (TE)来处理算子
TVM:使用Tensor Expression (TE)来处理算子在本教程中,我们将聚焦于在 TVM 中使用张量表达式(TE)来定义张量计算和实现循环优化。TE用纯函数语言描述张量计算(即每个表达式都没有副作用)。当在 TVM 的整体上下文中查看时,Relay 将计算描述为一组算子,并且其中每一个算子都可以表示为 TE 表达式,每个 TE 表达式获取输入张量并生成输出张量。本文是TVM中 TE 语言的入门教程。TVM 使用领域专用(domain specific)的张量表达式来高效地构造内核。我们以两个翻译 2021-11-13 23:16:34 · 2225 阅读 · 2 评论 -
TVM:简介
TVM:简介概述Apache TVM 是一个用于 CPU、GPU 和机器学习加速器的开源机器学习编译器框架。它旨在使机器学习工程师能够在任何硬件后端上高效地优化和运行计算。本教程的目的是通过定义和演示关键概念,引导您了解 TVM 的所有主要功能。新用户应该能够从头到尾完成本教程的工作,并能够操作 TVM 进行自动模型优化,同时对 TVM 架构及其工作原理有基本的了解。内容介绍安装 TVM使用命令行界面编译和优化模型使用 Python 接口编译和优化模型使用张量表达式使用运算符使用模板和 A翻译 2021-11-07 20:05:12 · 4082 阅读 · 0 评论 -
TVM:交叉编译和RPC
TVM:交叉编译和RPC之前我们介绍了 TVM 的安装、本机demo和树莓派远程demo。本文将介绍了在 TVM 中使用 RPC 进行交叉编译和远程设备执行。通过交叉编译和 RPC,我们可以在本地机器上编译程序,然后在远程设备上运行它。 当远程设备资源有限时很有用,例如 Raspberry Pi 和移动平台。 在本文中,我们将使用 Raspberry Pi 作为 CPU 示例,使用 Firefly-RK3399 作为 OpenCL 示例。在远程设备上构建 TVM Runtime首先我们要在远程设备上翻译 2021-11-07 16:32:59 · 896 阅读 · 0 评论 -
TVM:在树莓派上部署预训练的模型
TVM:在树莓派上部署预训练的模型之前我们已经介绍如何通过Python接口(AutoTVM)来编译和优化模型。本文将介绍如何在远程(如本例中的树莓派)上部署预训练的模型。在设备上构建 TVM Runtime首先我们需要再远程设备上安装 TVM。注意:本节和下一节中的所有指令都应在目标设备上执行,例如 树莓派。 我们假设它运行着 Linux。由于我们在本地机器上进行编译,因此远程设备仅用于运行生成的代码。 我们只需要在远程设备上构建 TVM Runtime。这里在我们安装 tvm 的文章中已经详翻译 2021-11-06 19:48:31 · 1938 阅读 · 0 评论 -
TVM:通过Python接口(AutoTVM)来编译和优化模型
TVM:通过Python接口(AutoTVM)来编译和优化模型上次我们已经介绍了如何从源码编译安装 tvm,本文我们将介绍在本机中使用 tvm Python 接口来编译优化模型的一个demo。TVM 是一个深度学习编译器框架,有许多不同的模块可用于处理深度学习模型和运算符。 在本教程中,我们将学习如何使用 Python API 加载、编译和优化模型。在本文中,我们将使用 Python 接口的 tvm 完成以下任务:为 tvm runtime 编译一个预训练好的 ResNet50-v2 模型在编译翻译 2021-11-06 15:54:56 · 1250 阅读 · 3 评论 -
TVM:源码编译安装
TVM:Linux源码编译安装笔者环境:OS:Ubuntu 18.04CMake:3.10.2gcc:7.5.0cuda:11.1编译安装过程总览本文将简介 tvm 的编译安装过程,包含两个步骤:通过C++代码构建共享库设置相关的语言包(如Python包)源码获取官网教程提供了两种源码获取方式:通过下载页面直接下载通过 github 仓库来下git clone --recursive https://github.com/apache/tvm tvm注意一定要原创 2021-11-06 11:54:39 · 1807 阅读 · 0 评论 -
深度学习自动编译和优化技术调研
深度学习自动编译和优化技术调研转自:https://moqi.com.cn/blog/deeplearning/作者:墨奇科技全栈开发在墨奇科技,我们需要将一些包含深度神经网络(DNN)的 AI 算法移植到边缘端的设备, 这些设备往往使用 ARM 架构的 CPU 和一些特殊的边缘端推理芯片(NPU)。这个时候,我们可以使用 NPU 产商提供的推理框架(例如瑞芯微的 rknn-toolkit)或 TensorFlow Lite 这样的通用边缘端推理框架。另一个选择是使用深度神经网络编译器,自动化的生转载 2021-11-02 18:08:11 · 1584 阅读 · 0 评论 -
ONNX再探
ONNX再探本文转自:https://blog.csdn.net/just_sort/article/details/113802330这篇文章从多个角度探索了ONNX,从ONNX的导出到ONNX和Caffe的对比,以及使用ONNX遭遇的困难以及一些解决办法,另外还介绍了ONNXRuntime以及如何基于ONNXRuntime来调试ONNX模型等,后续也会继续结合ONNX做一些探索性工作。0x0. 前言接着上篇文章,继续探索ONNX。这一节我将主要从盘点ONNX模型部署有哪些常见问题,以及针对这些问转载 2021-10-20 22:51:41 · 484 阅读 · 0 评论 -
ONNX初探
ONNX初探转载自:https://blog.csdn.net/just_sort/article/details/1129122720x0. 背景最近看了一些ONNX的资料,一个最大的感受就是这些资料太凌乱了。大多数都是在介绍ONNX模型转换中碰到的坑点以及解决办法。很少有文章可以系统的介绍ONNX的背景,分析ONNX格式,ONNX简化方法等。所以,综合了相当多资料之后我准备写一篇ONNX相关的文章,希望对大家有用。0x1. 什么是ONNX?简单描述一下官方介绍,开放神经网络交换(Open Ne转载 2021-10-19 17:41:42 · 1542 阅读 · 0 评论