Safetensors文件格式
基本介绍 基本介绍 本文出处:Safetensors 一种tensors的存储格式,读写速度快,常用于huggingface上权重的存储 安装方法:pip3 install safetensors
基本介绍 基本介绍 本文出处:Safetensors 一种tensors的存储格式,读写速度快,常用于huggingface上权重的存储 安装方法:pip3 install safetensors
LoRA概念 LoRA概念 论文:[2106.09685] LoRA: Low-Rank Adaptation of Large Language Models LoRA: Low Rank Adaptation,低秩适应,一种高效的微调技术,在原有LLM基础上额外增加少量可训练的参数,而非对整个LLM进行训练。训练速度更快,适合资源有限场景。 lora_rank: 简写成r,低秩,一般很小,r <= 32。将原有矩阵参数,转换成W=W0+ΔW,其中ΔW=A×B。举例说明权重[2048, 1024] + [2048, 32] x [32, 1024],其中32就是lora_rank,W的参数量2M,ΔW的参数量96K。也就是LoRA只用训练96K即可。 lora_alpha: 是LoRA的缩放系数,起到调整更新 ΔW 幅度的作用,这时ΔW=loraalpharA×B 前向推导公式:h=W0x+ΔWx=W0x+loraalpharBAx
并行计算术语 并行计算术语 名词 全称 注解 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
概述 概述 源码: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
ipython venv ipython 可以执行python交互命令 安装方式: pip3 install ipython venv 创建虚拟环境,可以做python环境隔离 cd myfold # 创建虚拟环境,不包含pip;也可以去掉without-pip,包含pip python3 -m venv --without-pip myenv # 进入虚拟python环境 source myenv/bin/activate # 执行python相关操作 ... # 退出环境 deactivate
概述 概述 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
概述 概述 源码: Torch Faster RCNN 论文地址:Faster R-CNN
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 编译方法 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
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<>转换。
概述 概述 帮助文档 pip install torch, pip install torchvision, pip install onnx, pip install onnxruntime
概述 概述 ONNX操作描述:Resize 参考代码:resize.py 坐标转换模式: half_pixel、align_corners、asymmetric、pytorch_half_pixel、tf_crop_and_resize 插值模式: linear、nearest、cubic 本文以 A[ha,wa] resize to B[hb,wb]举例。