编辑
2024-05-06
学习记录
0
请注意,本文编写于 401 天前,最后修改于 383 天前,其中某些信息可能已经过时。

目录

Airbox开发
1.资料记录
2.LLM概念与部署
1.SOPHON BM1684X介绍
2.大模型训练过程、常见LLM与发展历程
3.大模型分类与压缩推理加速
3.TPU-MLIR环境构架你及使用指南
1.TPU-MLIR概念
2.编译的概念(传统编译器与AI编译器)
3.SophonSDK
4.AI编译器开发TPU-MLIR
1.AI编译器概念
2.MLIR代码由来
3.MLIR编译流程:
4.两种量化方式:
6.智能多媒体与TPU编程实战
1.基本概念
2.图像处理技术
3.图像视频编码技术
4.智能多媒体通信技术

Airbox开发

1.资料记录

Airbox账号密码:linaro

风扇太吵的话:

sudo busybox devmem 0x50029000 32 0x500 sudo busybox devmem 0x50029004 32 0xfa0

1.TPU-MLIR 快速入门手册: https://doc.sophgo.com/sdk-docs/v23.09.01-lts/docs_latest_release/docs/tpu-mlir/quick_start/html/01_introduction.html

2.示例模型仓库地址: https://github.com/sophon-ai-algo/examples

3.TPU-MLIR 官方仓库地址 https://github.com/sophgo/tpu-mlir

4.SOPHON-SAIL 开发手册: https://doc.sophgo.com/sdk-docs/v23.05.01/docs_latest_release/docs/sophon-sail/docs/zh/html/

5.TPU-MLIR 环境搭建与使用指南: https://www.sophgo.com/curriculum/description.html?category_id=43

6.LLM 的概念与实战(其次学习,让然后看看算能学院): https://www.sophgo.com/curriculum/description.html?category_id=47

7.Airbox Demo 参考(首先参考复现): https://zhengorange.github.io/airbox_wiki/

7.1刷机部署等: https://gitee.com/zilla0717/AirboxWiki/blob/master/README.md

8.算能开发者论坛: https://forum.sophgo.com

9.少林派开发板实战课程: https://www.sophgo.com/curriculum/description.html?category_id=6

10.sophoneSDK3开发指南 https://sophgo-doc.gitbook.io/sophonsdk3

请根据我对图像的文字描述,回答问题。 问题:桌子上有什么? 文字描述:'a screwdriver and tape measure on a table' 'a blue rectangular device with a red button' 'a screwdriver with a black handle' 'a close up of a machine' 'a yellow and black tape measure',

2.LLM概念与部署

1.SOPHON BM1684X介绍

SOPHON BM1684X是SOPHON专门针对深度学习领域推出的第四代张量处理器,具有32TOPS计算能力,支持32路高清硬件解码,12路高清硬件编码,适用于深度学习、计算机视觉、高性能计算等环境。

2.大模型训练过程、常见LLM与发展历程

  1. Pre-train:从巨大的数据集中进行无监督训练,学习一般的语言模式和表征。
  2. Fine-ture:根据特定的任务和更小的数据集训练和微调。

transformer模型分为encoder和decoder,都由注意力机制和FNN前馈神经网络(残差链接和归一化等等)组成。

常见LLM:

  1. GPT-3:1750亿个参数decoder-only模型;
  2. T5:文本对文本转化模型;
  3. GLM130B:1300亿个参数的双语言的模型;

LLM的训练过程可以理解为对有效信息的无损压缩过程,压缩率约高,模型的智能水平越高,泛化能力约强,对任务的理解越好。

LLM模型的发展历程:

  1. 统计语言模型:对语句的概率分布进行建模,计算一个句子出现的概率或一句话是否合理的概率;
  2. 神经网络语言模型:循环神经网络RNN,LSTM, transformer模型;
  3. 预训练语言模型:指在大规模数据集上无监督学习得到通用的语言表示,通过微调可以用于下游任务,如ELMo模型,后来产生GPT系列;
  4. 大语言模型:数十亿参数,预训练+微调

3.大模型分类与压缩推理加速

根据大模型结构分类:只有encoder的模型,如BERT;有encoder和decoder的模型,如T5;只有decoder的模型,如GPT系列;实践证明只有decoder的模型效果更好。

模型压缩:

  1. 剪枝(非结构化剪枝和结构化剪枝):减少不必要的参数或者权重链接;过程:训练->剪枝->微调;
  2. 量化(后训练量化和量化感知训练):降低模型参数的准确率;进行一次FP32类型的数据可以执行四次FP8类型的数据;
  3. 知识蒸馏:训练一个更小的模型来模仿大模型的行为;过程:teacher-student setup建立大小模型->教师模型生成训练数据集也就是获得知识->学生模型训练;

LLM的训练和推理加速:

  1. 训练加速:data并行(分成batch放在不同的GPU上)、pipeline并行(模型分层分在不同GPU上)、tensor并行(矩阵分解,子矩阵在不同GPU上);
  2. 推理加速:
    1. KV Cache,不影响任何计算精度的前提下,通过空间换时间的思想,提高推理性能。
    2. GPT类模型一次推理只输出一个token,输出token会与输入tokens拼接在一起作为下一次推理的输入,这样不断反复直到遇到终止符。
    3. Flash-attention:重新排序注意力计算的算法,无需近似即可加速注意力并减少内存的占用。

3.TPU-MLIR环境构架你及使用指南

1.TPU-MLIR概念

TPU-MLIR是一种专用于处理器的TPU编译器。该编译器项目提供了一个完整的工具链,可以将来自不同深度学习框架(PyTorch, ONNX, TFLite和Caffe)的各种预训练神经网络模型转换为高效的模型文件(bmodel/cvimodel),以便在SOPHON TPU上运行。通过量化到不同精度的bmodel/cvimodel,优化了模型在sophon计算TPU上的加速和性能。这使得可以将与对象检测、语义分割和对象跟踪相关的各种模型部署到底层硬件上以实现加速。

2.编译的概念(传统编译器与AI编译器)

传统的编译器是将高级编程语言编译为低级编程语言,比如机器码,组成与平台兼容的库或可执行文件;

Windows中有Microsoft Visual C++ (MSVC) 和 MinGW编译器;

Linux和MacOS中Clang,GNU Compiler Collection (GCC) 编译器;

传统编译器编译流程:

  1. 词法分析:将源代码分为词法单元(Tokens);
  2. 语法分析:根据编程语言的语法,将Tokens组织成抽象语法树(Abstract Syntax Tree);
  3. 语义分析:检查语法树,确保程序的合法性;
  4. 中间代码生成:将源代码转为与平台无关的中间代码;
  5. 优化:基于生成的中间代码进行各种优化提升程序性能或减少资源消耗;
  6. 目标代码生成:将中间代码转换为目标平台兼容的代码,生成可执行文件或库;
  7. 链接:链接多个目标文件和库文件,确保符号引用正常;

AI编译器是将深度神经网络编译为二进制模型,编译流程与传统编译器相似,区别在于将源代码转化为AI模型,词法单元转换为组成AI模型的算子,主要对AI模型进行优化(模型压缩、量化、算子融合等,减少计算量与存储需求,提高推理性能); image.png

3.SophonSDK

SophonSDK是算能科技基于其自主研发的AI芯片所定制的深度学习SDK,涵盖了神经网络推理阶段所需的模型优化、高效运行支持等能力,为深度学习应用开发和部署提供易用、高效的全栈式解决方案。

包含以下工具包:

  1. tpu-nntc负责对第三方深度学习框架下训练得到的神经网络模型进行离线编译和优化,生成最终运行时需要的BModel。目前支持Caffe、Darknet、MXNet、ONNX、PyTorch、PaddlePaddle、TensorFlow等。
  2. libsophon提供BMCV、BMRuntime、BMLib等库,用来驱动VPP、TPU等硬件,完成图像处理、张量运算、模型推理等操作,供用户进行深度学习应用开发。
  3. sophon-mw封装了BM-OpenCV、BM-FFmpeg等库,用来驱动VPU、JPU等硬件,支持RTSP流、GB28181流的解析,视频图像编解码加速等,供用户进行深度学习应用开发。
  4. sophon-sail 提供了支持Python/C++的高级接口,是对BMRuntime、BMCV、BMDecoder、BMLib等底层库接口的封装,供用户进行深度学习应用开发。
  5. tpu-mlir为TPU编译器工程提供一套完整的工具链,可以将不同框架下预训练的神经网络,转化为可以在算能TPU上高效运行的二进制文件BModel。目前直接支持的框架包括tflite、onnx和Caffe。
  6. tpu-perf为模型性能和精度验证提供了一套完整工具包。
  7. tpu-kernel是芯片底层开发接口,既可以调用专用指令实现深度学习业务逻辑的加速,又可以调用通用指令实现客制的各种算法加速。

TPU-MLIR:Multi-Level Intermediate Representation,基于LLVM(Low-Level Virtual Machine)开发的编译器基础框架;统一IR(Intermediate Representation)格式,并通过多层IR提高通用与可复用性;扩展性与可组合性强,便于实现优化与代码生成;自带Tensor类型,目前主要用于深度学习领域;

image.png

模型转换需要在指定的docker执行,主要分两步,一是通过 model transform.py 将原始模型 转换成mlir文件,二是通过 model_deploy.py 将mlir文件转换成bmodel.如果要转INT8模型,则需要调用 run_calibration.py生成校准表,然后传给 model_deploy.py。如果INT8模型不满足精度需要,可以调用run_qtable.py 生成量化表,用来决定哪些层采用浮点计算,然后传给 model_deploy.py 生成混精度模型。

image.png

4.AI编译器开发TPU-MLIR

1.AI编译器概念

作为框架和硬件之间的桥梁,深度学习编译器可以实现一次性代码开发和重用各种计算能力处理器的目标。算能也开源了自己开发的TPU编译工具——TPU-MLIR (Multi-Level Intermediate Representation)。TPU-MLIR是一个面向深度学习处理器的开源TPU编译器。该项目提供了完整的工具链,将各种框架下预训练的神经网络转换为可在TPU中高效运行的二进制文件bmodel,以实现更高效的推理。本课程以实际实践为驱动,引导您直观地理解、实践、掌握智能深度学习处理器的TPU编译框架。

2.MLIR代码由来

AI模型代码编译到特定硬件可以使用的二进制的模型bmodel,需要先编译为中间代码IR(在该步骤中完成优化),其复杂度介于高级编程语言与低级机器码之间。

需要多层IR进行转换(Dialect的概念),(实现TPU-MLIR的核心概念)

image.png

Dialect组成:

  1. Prefix:Dialect名称,如top层、Tpu层;
  2. Operations:一系列操作,每个操作对应深度学习模型中的单个算子,如ConvOp;
  3. Passes:Dialect内的转换,如Top层的图优化;Dialect内的转换,如Top层lower到Tpu层;

MLIR文本代码组成:

  1. ModuleOP:当前代码本身;
  2. FuncOp:其中的main Func表示代码的整体运行逻辑;其他Func可能是在代码中多次出现的具有固定顺序的操作集,封装起来反复调用;
  3. Block:一个Func的所有内容,一些操作的集合;

image.png

MLIR文本代码解释:

  1. 以百分号%开头的语句代表一个operation,进行tensor的操作;MLIR中两个类来完成operation的实现:operation class(通用的定义操作,提供通用的属性和操作接口,如operation的创建删除移动等)和op class(用于派生某个Dialect下的具体算子);
  2. Value表示操作数,表示operation的输入和输出;主要有两个派生类:BlockArgument类(某个Block的输入参数)和OpResult类(静态单赋值的结果);
  3. type表示操作数的类型;通常是Tpye类和ShapeType类的继承类TensorType类
  4. attribute:零个或多个元素的字典,这些属性是始终恒定的操作数;

image.png

MLIR中Op的定义方式:

  1. 直接在C++中定义:需要继承Op基类并重写部分构造函数,代码冗余可读性差;
  2. 在MLIR中的ODS(Operation Definition Specification)中定义:在td文件中编写Op定义,利用LLVM提供的TableGen语言进行定义,容易直观;

3.MLIR编译流程:

  1. 将其他模型Pytorch/Tensorflow/PaddlePaddle转换为ONNX模型(提供了丰富的算子和一些基础的暑假类型,通过多个node来定义计算图。);
  2. Top层:ONNX->Top MLIR(称为前端转换),主要将onnx模型转化为origin.mlir和canonicalize操作,即算子融合、计算简化等,和硬件无关;代码在./tpu-mlir/python/transform中;
  3. Lowering操作:将Top Dialect转化为TPU Dialect(表示TPU芯片的Kernel库),代码在./tpu-mlir/lib/Conversion/TopToTpu;包含量化操作,F32/BF16/16是直接截取的量化方式,int8量化是基于校准信息的一种量化方式,用8位整型映射32位浮点型,使用数据集校准调优,也有混合精度的方式;
  4. LayerGroup+AddressAssign操作(硬件层的优化,如算子融合和内存分配优化),代码在./tpu-mlir/lib/Dialect/Tpu/Transforms;
  5. Code Generation:目录./tpu-mlir/lib/Dialect/Tpu/Interfaces下包含不同芯片算子生成的机制,目录./tpu-mlir/lib/Backend下记录了根据不同芯片规格相应的实现,目录./tpu-mlir/third_party/nntoolchain/lib/引入了外部的动态库(后端算子具体实现)调用芯片底层的配置,最后生成了在TPU上运行的指令;
  6. 模型编译过程中也涉及到Correctness check保证编译得到的bmodel模型性能不会下降太多。

image.png

4.两种量化方式:

  1. 训练后量化:训练完成后量化,无需或仅需要少量的数据,易于实现;

    1. 训练后量化方式:
    2. 均匀量化用的比较多,分为对称量化(分为有符号和无符号两种)和非对称量化:
    3. image.png
    4. 在weight tensor容易得到max,min, threshold,但对于激活tensor根据输入的数值改变,此时确定这三个值就要用到校准环节;
    5. image.png
    6. KL散度衡量两个数据分布的相似性,TensorRT在量化过程中也用到了。
  2. 量化感知训练:在训练过程中模拟量化重新训练模型,需要带标签的数据,量化后更接近F32模型的精度;在训练过程中插入伪量化算子,将weight与activation量化成低位精度再反量化回FP32引入量化误差。 image.png

MLIR实战

Pattern Rewriting Framework: 有向无环图DAG to 有向无环图DAG转换,

分为: Pattern Definition Pattern Rewriter Pattern Application

Dialect1转换为Dialect2通过Dialect Conversion组件进行转换

TPU原理: 一个完整的TPU包含多个Lane; 每个Lane包含Local memory(存储要运算的数据) 和 Execution Units(TPU上最小的计算单元);

指令:GDMA(数据搬运)、BDC(运算)、其他HAU.

6.智能多媒体与TPU编程实战

1.基本概念

智能多媒体关键技术:编解码技术、图像处理技术、多媒体通信技术; 智能多媒体关键指标:解码路数、帧率、分辨率、图像处理接口丰富度、延迟、协议支持;

2.图像处理技术

空间分辨率:

  1. 1080P,其中P是“逐行扫描”,表示视频在宽高比为16:9的情况下,视频总共有1080行像素数;
  2. 2K,表示视频中每一帧图像的列像素数在2K的级别;
  3. 通常所说的几百万像素,指的是图像的总像素,即M×N的总数到几百万;

量化:亮度的分辨率,衡量图像亮度的量化精度;

位深:表示图像中每个像素用多少个二进制位表示,灰度图通常是8位,彩色图像通常是24位;

帧率:表示视频中每秒包含的图像数;

码率:是数据传输时单位时间传送的数据比特数,单位是千比特每秒,码率kbps = 文件大小(KB) * 8/时间(s),越高每秒显示的帧数越多;

PSNR:峰值信噪比,常用于两幅图像相似度的测量,基于统计误差衡量,越大含有信息越多,统计意义上两图之间的差异越小,相似度越高;

image.png

色彩空间模型(可以相互转换):

  1. RGB模型:R G B三基色混合,每个颜色值用8bit表示(真彩色),RGB555是16位的RGB格式,每个分量用5位表示,还有RGB565模型;
  2. HSI模型:色度H、饱和度S、亮度I组成;

image.png 3. YUV模型:亮度Y、色度UV(CbCr)组成,表示对蓝色和对红色的便宜程度;

图像存储格式:

  1. BMP格式:采用位映射存储方式,与硬件设备无关除了色彩分辨率可选之外,不采用其他任何压缩-扫描格式是按从左到右、从上到下的顺序;
  2. GIF格式:种连续色调的无损压缩格式,压缩率在50%左右存储量相对小,成像清晰,适合于初期的互联网;
  3. PNG格式:便携式网络图像格式--存储量相对小,压缩比高;
  4. JPEG格式:采用有损压缩方式去除图像数据中的冗余信息可以在获取极高的压缩率的同时保持图像质量;

图像增强:

  1. 空间域增强:灰度变换、代数运算、空间域滤波,直接对图像中像素的灰度级进行操作;
  2. 频域增强:频域滤波,对图像进行傅里叶变换等;

直方图:横坐标表示灰度级,纵坐标表示该灰度级 出现的频数(越均匀图像最清晰);

边缘检测,边缘就是像素变化比较明显的区域(一阶导数极致的取区域,通常用一阶差分表示,对于二维图像,通常用梯度来检测),具有丰富的语义信息;

根据不同的卷积核对原图像做卷积可以实现很多图像的基本处理;

对于原信号有噪声的话,可以先滤波,如高斯降噪(可以用高斯滤波卷积核);

在精度要求不高时,Sobel是最常用的边缘检测算子(对高斯核求导再与原图像卷积),缺点是边缘出现了好几个像素,不是只有一个像素值;

Canny边缘检测流程:

  1. 高斯平滑滤波
  2. 计算梯度
  3. 非极大值抑制(NMS)
  4. 双阈值

3.图像视频编码技术

为什么需要编码:一个高清视频存在空间冗余(帧内)、时间冗余(帧间)、心理视觉冗余(人眼对色度不敏感对亮度敏感)、编码冗余(可以用熵编码);

涉及的三个技术:预测编码、变换编码、熵编码;

JPEG编码主要步骤:

  1. 图像预处理,进行颜色空间转换和分块;
  2. 零偏置电平下移,0-255转为-128到127;
  3. 8x8分块 DCT变换;
  4. 量化;
  5. 编码;

H.264编码标准:

  1. 帧内预测:分块,对于亮度,预测块可以有4×4和16×16两种尺寸吗,每种尺寸都有好几种预测方式(9和4种),可以从各个方向来预测,计算代价,选择最优的分块尺寸和预测方式;
  2. 帧间预测:运动估计(块搜索),也可以在亚像素下进行估计,多参考帧方法;
  3. 变换编码:引入4×4整数DCT(仅次于KL变换的最优正交变换)变换降低了算法的复杂度,将带有小数的系数放到量化哪里去操作(硬件不好实现带有小数的运算);
  4. 去块滤波器(对块做平滑操作(真假边界判定)),在解码的时候使用;
  5. 熵编码,H.264标准规定的熵编码有两种:一种是可变长编码方案,包括统一的变长编码(UVLC)和基于上下文的自适应变长编码(CAVLC);另一种是基于上下文的自适应二进制算术编码(CABAC)。这两种方案都利用上下文信息,使编码最大限度地利用了视频流的统计信息,有效降低了编码冗余;

H.265编码标准:

  1. 帧内预测:分块有64×64、32×32、16×16、8×8,最多有35种预测模式,编码结构CTU;
  2. 帧间预测:
  3. 变换与量化:
  4. 环路滤波:去块滤波和自适应样点补偿;
  5. 熵编码:只有一种熵编码:CABAC算数编码(用一段表示一个序列),是上下文自适应编码;

4.智能多媒体通信技术

与多媒体相关的通信技术,包括TCP/IP、UDP、RTP/RTCP、RTSP、RTMP以及多媒体通信协议的应用开发技术。

image.png

数字视频接口类型:

  1. SDI(Serial Digital Interface)接口,是一种广播级的高清数字输入和输出端口,常用于广播电视的摄像机接口,采用BNC接口的同轴电缆,传输非压缩的SDI信号,单线缆最多支持4Kp60标准,传输8K需要4根12G-SDI线缆,线长最多150m;
  2. USB接口:USB3.0速度可达350MB/s,但线长一般控制3m以内,不超过5m;
  3. HDMI接口:数字高清多媒体接口,最大传输贷款48.0Gbps,可以同时发送音频和视频信号,支持4K,即插即用,无需安装驱动,而DP接口传输速度更快,线长不超过5m;
  4. GigE接口:千兆网口1000Mbps,用作高速、大数据量的图像传输,一般用来对千兆工业相机进行采集,图像数据一般是未压缩过的,上位机需要相应的千兆网卡进行接收,线长最多100m;
  5. 普通IP口,100Mbps,线长最长100m,不需要采集卡,传输的是压缩的数据;

image.png

无线传输:

  1. WIFI:覆盖范围小于100m,速度54Mbit/s;
  2. 微波:无线电波,传输距离可达几十公里,频段一般是902-928MHz,一般选用跳频数字电台实现无线遥控;
  3. LTE(如大疆无人机)
  4. 5G:经过编码压缩后传输到互联网;
  5. 卫星:一般是负责将演播室或现场转播系统制作完成的基带节卫星传输,常用于播出链路,目信号,通过地面卫星车内编码器压缩编码后,再通过卫星链路实现上行转发。

TCP与UDP: TCP三次握手、四次挥手还有拥塞控制(慢启动快恢复);

RTP(Real-time Transport Protocol)与RTCP(Real-time Transport Control Protocol):通常基于UDP协议又做了一层控制,工作于应用层和传输层之间,适用于封装要实时传输数据的应用,如视频音频模拟数据等,RTCP提供拥塞控制流量控制等(在接收端会反馈报文的损失给发送端进而调整发送速度);

RTSP(Real Time Streaming Protocol)协议:控制分组基于TCP传输,数据分组基于UDP传输,是双向的,可以发可以拉;

RTMP(Real Time Messaging Protocol):设计用来实时数据通信,基于TCP,多用于直播领域,默认使用端口1935,一般传输的是flv、f4v格式流,延迟在1-3s;

GB28181:国家推进的标准协议,由公安部科技信息化局提出,联网系统在进行视音频传输及控制时应建立两个传输通道:会话通道和媒体流通道。会话通道用于在设备之间建立会话并传输系统控制命令,会话协议采用SIP协议(RFC3261);媒体流通道用于传输视音频数据,经过压缩编码的视音频流采用流媒体协议RTP/RTCP传输。会话协议实现的功能主要包括:注册、心跳保活、目录查询、实时视频点播、录像查询、录像回放/下载、报警事件上报、网络校时、事件订阅等;

嵌入式AI多媒体开发架构

嵌入式AI通过底层多媒体处理接口向算法侧提供API接口,如OpenCV、FFMpeg、BMCV接口,这些接口用于对视频图像编解码、图像的基本处理如色彩空间变换、尺度变换、仿射变换等。

image.png

BMCV:自有图像处理加速接口,提供硬件加速的图像处理功能;

  1. FFMPEG:开源音视频及图像处理接口(音视频编解码人员最熟悉的开源框架,提供硬件加速的H264/HEVC视频编解码,JPEG编解码,图像加速功能,所有软件支持的视频/图像编解码接口(即所有 FFMPEG 开源支持的格式);
  2. OPENCV:开源计算机视觉库(计算机视觉工程师最常用的开源框架),封装 FFMPEG 提供硬件加速的视频编解码接口,提供硬件加速的 JPEG 编解码接口,保留原有的软件支持的图像处理功能,注意:在视频编解码上,OPENCV只是对 FFMPEG 接口的一层封装;

两种工作模式:

  1. SOC模式:AI芯片中的处理器作为主控CPU,可独立运行应用程序,通过cache同步系统内存和设备内存(物理上指向同一块内存);

  2. PCIE模式:以PCIE板卡形态插到服务器主机应用程序在服务器CPU上运行,系统内存是服务器操作系统的虚拟内存空间,设备内存是PCIE板卡上的物理内存空间,在物理上是两块内存,通过PCIE同步;

本文作者:zzw

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 License 许可协议。转载请注明出处!