2023/08/04 18:07:03
1.SwinTransformer概述#自从Transformer在NLP任务上取得突破性的进展之后,业内一直尝试着把Transformer用于CV领域。之前的若干尝试都是将Transformer用在了图像分类领域,但这些方法都面临两个非常严峻的挑战,一是多尺度问题,二是计算复杂度的问题。 基于这两个挑战,swint的作者提出了一种层级式提取的Transformer,并通过移动窗口的方式来学习特征。在窗口内计算自注意力可以带来更高的效率;同时通过移动的操作,让相邻的窗口之间有了交互,变相达到了一种全局建模的能力,进而解决了上面两个问题。 Swin Transformer将transforme ...
2023/07/10 19:18:42
概述#算能BM1684X处理器已经实现ChatGLM2-6B的C++代码部署,代码实现链接:https://github.com/sophgo/ChatGLM2-TPU。 本文总结部署该模型过程中的一些技术点。首先是ChatGLM2-6B的整体运行流程,然后介绍如何将该动态网路转换成静态网络形式,接着介绍如何将该模型导出成ONNX。 最后如何将ONNX使用TPU-MLIR编译器实现网络的编译以及用C++代码编写应用程序,可以直接看源码就可以理解,这里不做介绍。 ChatGLM2-6b运行流程# 如图该网络基本上可以分为5个阶段: 将句子通过分词器(使用google的sentencepiece ...
2023/07/03 21:46:55
wenet概述#wenet处理流程# wav语音经过一系列前处理之后送入encoder,encoder的输出会给到ctc decoder和attention decoder。其中ctc decoder是深度优先的搜索程序,负责搜索出n段候选预测序列,然后ctc的结构与encoder的结果一起送入attention decoder进行预测序列的打分,选出最好的预测序列,输出结果 模型结构#encoder# encoder是12个conformer模块堆叠 decoder# ...
2023/04/04 12:55:13
众所周知,一个完整的模型实际上是由一系列算子组成的,所以如果我们想让编译器更通用,那么支持尽可能多的算子就是一个绕不开的工作。 这样无论算子是来自onnx、Caffe、PyTorch中的哪个框架,我们都可以在TPU-MLIR中找到对应的算子来表达。 首先,要添加一个新的算子,我们就需要像前端转换那一集里提到的先进行算子定义。 在 MLIR 中,您可以直接使用 TableGen 工具来完成定义工作,而不是自己实现所有包含每个算子的输入、输出和属性的 cpp 模板。 在 TPU-MLIR 中,不同 dialect 的算子定义在不同的 td 文件中,这些算子将在编译器 build 时注册在相应的 ...
2023/04/04 12:53:36
通常,模型的输入是 预处理过的NCHW 格式的张量,但有时我们可能希望直接将原始图像输入模型。 在这种情况下,我们需要将预处理操作作为模型的一部分。我们目前支持这些类型的图像输入,它们对应不同的像素和通道格式。 其中一些是专门针对 CV 系列处理器的,所以这部分我们暂且先不深入探讨。 对于预处理类型,我们目前可以做一些典型的预处理操作,包括中心裁剪、转置、像素格式变换和归一化,更多类型的操作会在未来完成。 那么,我们怎样才能得到一个包含预处理操作的bmodel呢? 首先,我们像往常一样进行 model_transform 以获得Top层的mlir 文件。但是在 model_deploy 步骤 ...