个人学习笔记

CUDA与Triton

6 分钟阅读

并行计算术语 并行计算术语 名词 全称 注解 SI Single Instruction 指单一指令,一个时钟执行单一指令。即便多个处理单元,也执行一样的指令。 SD Single Data 指单一数据,一个时钟一条数据。即便多个处理单元,也使用相同的数据。 MI Multiple Instruction 指多指令,不同处理单元处理不同的指令。 MD Multiple Data 指多数据,不同的处理单元处理不同的数据。 SISD Single Instruction, Single Data 串行计算,传统单核芯片属于该类 SIMD Single Instruction, Multiple Data 单指令多数据流,典型的可以支持向量计算,对不同的数据使用相同的指令。一般现代CPU都会支持SIMD指令。 MISD Multiple Instruction, Single Data 多指令单数据流,几乎不存在这样的架构 MIMD Multiple Instruction, Multiple Data 多指令多数据流。多核处理器都是属于这个范畴 SIMT Single Instruction Multiple Threads 单指令多线程,每个线程处理相同的指令和不同的数据。可以认为是SIMD的升级版,个人理解它们的区别在于:SIMD的数据必须是向量形式的数据,SIMT的数据则没有形式的要求。所以SIMT可以更加灵活。现代GPU一般都是SIMT。 SPMD Simple Program, Multiple Data 单程序多数据,一种编程概念,用于数据并行的应用。一般MIMD或者SIMT,可以支持SPMD

OpenAI CLIP

1 分钟阅读

概述 概述 源码:github, huggingface 介绍:https://openai.com/index/clip CLIP全称Contrastive Language-Image Pretraining,基于语言图像对比预训练,是目前最为优秀的zero-shot模型,也是后续一系列图文模型的基石,甚至直接拿它做Backbone。它最大的优势在于,可以直接用文本+图像做训练,这部分数据量在网上是非常庞大的。而传统的标注类数据集成本非常高昂,数据量也不是一个量级。 zero-shot:零样本学习,无需专门对样本分类,使分类功能可以泛化。 原理如下图(图来自官方)所示: 训练时,文本数据经过Text Encoder 生成[T1, T2, ..., TN]向量;图片数据经过Image Encoder转成[I1, I2, ..., IN]向量,然后两个向量求余弦距离,得到所有文件与图片的相关性 推理时,同样的方式使用Text Encode和Image Encoder得到两个向量,求余弦举例 通常图像用resnet50做backbone,文本用vit做backbone

编辑ONNX模型

1 分钟阅读

概述 概述 onnx模型编辑方法有2种: onnx-graphsurgeon : 手工编辑onnx模型 onnx-modifier : 图形化编辑onnx模型 虽然onnx-modifier有图形界面编辑onnx,但是实际用起来问题特别多。onnx-graphsurgeon用起来更加强大,简洁。 安装方法如下: pip install onnx_graphsurgeon --index-url https://pypi.ngc.nvidia.com 也可以源码编译安装: make build pip install onnx_graphsurgeon/dist/onnx_graphsurgeon-*-py2.py3-none-any.whl

FasterRCNN

1 分钟阅读

概述 概述 源码: Torch Faster RCNN 论文地址:Faster R-CNN

各NN框架的MLIR

24 分钟阅读

ONNX MLIR ONNX MLIR 官网介绍:http://onnx.ai/onnx-mlir 论文:Compiling ONNX Neural Network Models Using MLIR github地址:onnx mlir docker下载:docker pull onnxmlirczar/onnx-mlir:amd64 转换工具 ## EmitONNXBasic 会生成.mlir文件(含文本形式的weight)和.tmp文件(不含weight) docker/onnx-mlir.py --EmitONNXBasic xxx.onnx

MLIR技术细节整理

59 分钟阅读

MLIR 编译方法 MLIR MLIR: Multi-Level Intermediate Representation,主要设计者来自Google的Chris Lattner 论文MLIR: A Compiler Infrastructure for the End of Moore’s Law 官网介绍:https://mlir.llvm.org 编译方法 git clone https://github.com/llvm/llvm-project.git mkdir llvm-project/build cd llvm-project/build cmake -G Ninja ../llvm \ -DLLVM_ENABLE_PROJECTS=mlir \ -DLLVM_BUILD_EXAMPLES=ON \ -DLLVM_TARGETS_TO_BUILD="X86;NVPTX;AMDGPU" \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_ASSERTIONS=ON \ # -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_ENABLE_LLD=ON cmake --build . --target check-mlir

LLVM积累

10 分钟阅读

RTTI 官网介绍:llvm github源码:llvm-project RTTI 阅读:How to set up LLVM-style RTTI for your class hierarchy llvm有这些RTTI接口可以使用isa<>、dyn_cast<>、cast<>等等。 使用这些接口,父类和子列有这些要求: 父类:定义Kind枚举,且构造函数用Kind做入参 子列:构造函数指定kind,且定义classof接口 使用时如果入参可能是空指针,则需要调用dyn_cast_or_null<>转换。

Pytorch

3 分钟阅读

概述 概述 帮助文档 pip install torch, pip install torchvision, pip install onnx, pip install onnxruntime

Resize

5 分钟阅读

概述 概述 ONNX操作描述:Resize 参考代码:resize.py 坐标转换模式: half_pixel、align_corners、asymmetric、pytorch_half_pixel、tf_crop_and_resize 插值模式: linear、nearest、cubic 本文以 $ A[h_a, w_a] $ resize to $ B[h_b, w_b] $举例。

YOLO网络

5 分钟阅读

概述 概述 官网:YOLO: Real-Time Object Detection 论文地址:YOLO v1 2016 、YOLO v2 2017、YOLO v3 2018、YOLO v4 2020、YOLO v5 待更新

BERT

3 分钟阅读

概述 概述 BERT: Bidirectional Encoder Representation from Transformers 论文地址[2019]:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 对应github代码:github-bert BERT分为 两个阶段: Pre-training:利用无标记语料预训练模型 Fine-tuning: 使用预训练的模型,对已经标记的语料根据实际的任务进行训练

Transformer

4 分钟阅读

概述 概述 论文地址[2017]:Attention Is All You Need 核心运算:$ Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V $ 描述:查询(Query)到键值(Key-Value)的映射