-
Caffe源码解析之二
Layer_factory源码文件 include/caffe: layer_factory.hpp src/caffe: layer_factory.cpp工厂模式 layer.hpp中的Layer类是总的产品标准,使用virtual修饰函数,layer文件夹中的PoolingLayer、ConcatLayer等类继承Layer类,是Layer类的不同实现。然后layer_factory.hpp中的LayerRegistry类实现了Layer的注册,根据层的名称然后new对应...…
-
Caffe源码解析之一
总体架构 Caffe架构如下图所示,下面依次介绍主要的组件。 SyncedMemory负责内存的分配,host和device之间的内存同步。源码文件 include/caffe/syncedmem.hpp src/caffe/syncedmem.cpp src/caffe/test/test_syncedmem.cpp成员变量 private: void* cpu_ptr_; // 指向host内存首地址的指针,可以指向任何类型的数据 void* gpu_ptr_...…
-
Caffe总览
Philosophy Expression: models and optimizations are defined as plaintext schemas instead of code. Speed: for research and industry alike speed is crucial for state-of-the-art models and massive data. Modularity: new tasks and settings require f...…
-
GEMM
气象预报、石油勘探、核子物理等现代科学技术大多依赖计算机的计算模拟,模拟计算的核心是表示状态转移的通用矩阵乘(GEMM)。此外,通用矩阵乘也是深度学习中的主要的算子实现算法,例如,卷积,全连接,平均池化,注意力等算子均可以转换为 GEMM。GPU 和其他专有人工智能芯片 ASIC也针对矩阵乘的计算特点提供底层硬件计算单元的支持(例如 NVIDIA GPU 张量核(Tensor Core),Google TPU 脉动阵列的矩阵乘单元(Matrix Multiply Unit)等)。二维矩阵 ...…
-
SIMD
SIMD 即Single Instruction, Multiple Data ,一条指令同时作用于一组数据。 现代处理器引入向量计算单元(vector unit)来实现数据并行。向量计算单元可以在一组数据上执行向量化指令。比方说,一个512位的向量计算单元可以同时计算16个单精度浮点数的加法。下面的例子在做两个向量相减,循环的每一步都是相互独立的,因此可以通过SIMD并行。for (int i=0; i<n; ++i) w[i] = u[i]-v[i]; 每个算...…
-
深度学习推理引擎KuiperInfer源码分析之二
算子目前已支持yolo5,resnet等模型的推理实现要点 快速:利用硬件的加速特性,好的算法,并行计算 准确:跟训练框架的计算结果对齐 融合不同路线:TFLite,NCNN通过手写实现算子,TVM通过编译和规则配置来自动实现算子下面介绍其中几个算子的实现。Relu使用OpenMP进行多线程计算,一个线程计算一个batch的数据。 使用SSE指令集进行SIMD计算,同时对4个单精度浮点数做计算。替换成AVX指令集后,运行时间可以降低40%。InferStatus ReluLayer:...…
-
深度学习推理引擎KuiperInfer源码分析之一
概览KuiperInfer(项目地址)是一个开源的深度学习推理引擎,感谢作者提供这个项目供大家学习。本文分享一下我对这个项目的理解,欢迎交流。训练好的深度学习模型,需要通过推理框架部署到不同的设备上,高效完成模型推理,服务应用场景。与训练框架不同的是,深度学习推理框架没有梯度反向传播功能,因为算法模型文件中的权重系数已经被固化,推理框架只需要读取、加载并完成对新数据的预测即可。KuiperInfer的整体流程如下图所示:下面介绍下KuiperInfer的核心模块。张量张量是存储数据(例如输...…
-
OpenMP
什么是OpenMP OpenMP全称是”Open specification for Multi-Processing“,它提供了一组用于并行处理的API,跟pthreads一样,适用于share memory场景。由编译器来生成多线程处理的代码,优点是实现简单,缺点是不如pthreads灵活。OpenMP支持fork-join模型,默认提供了join操作,所有线程执行结束了才会返回到主线程。如果其中一个线程异常终止,所有线程都会终止。 支持多种指令集和操作系统,由非营利性组织...…
-
Performance Measurements
Performance benchmarking测试程序性能,首先想到的是统计运行时间,类似下面这样:system_clock::time_point t1 = system_clock::now();program execute... system_clock::time_point t2 = system_clock::now();cout << "Cost time: " << duration_cast<milliseconds>(t2 ...…
-
深度学习推理系统之二
模型推理的离线优化推理(Inference)延迟(Latency) 延迟优化 模型优化,降低访存开销 降低一定的准确度,进而降低计算量,最终降低延迟 自适应批尺寸(Batch Size) 缓存结果 层(Layer)间与张量(Tensor)融合 设备中执行一个内核,一般需要以下几个步骤和时间开销,启动内核,读取数据到设备,执行内核,结果数据写回主存。相对于内核启动开销和每个层的张量数据读写成本,内核计算通常非常快。 ...…
-
深度学习推理系统之一
推理系统(Inference System)是用于部署人工智能模型,执行推理预测任务的人工智能系统,类似传统 Web 服务或移动端应用系统的作用。通过推理系统,可以将深度学习模型部署到云(Cloud)端或者边缘(Edge)端,服务和处理用户的请求。当推理系统将完成训练的模型进行部署和服务时,需要考虑设计和提供模型压缩,负载均衡,请求调度,加速优化,多副本和生命周期管理等支持。相比深度学习框架等为训练而设计的系统,推理系统不仅关注低延迟,高吞吐,可靠性等设计目标,同时受到资源,服务等级协议(...…
-
深度学习框架之二
数据流图的调度与执行训练神经网络包含如下五个阶段,其中,梯度截断和应用正则视用户是否配置了这两项,可能会跳过。for batch in TrainDataset: phrase 1: 前向计算 phrase 2: 反向计算 phrase 3: 梯度截断 phrase 4: 应用正则项 phrase 5: 更新可学习参数在基于计算流图的深度学习框架中,这五个阶段统一表示为由基本算子构成的数据流图,算子是数据流图中的一个节点,由后端进行高效实现。前端用户只需要给定前向计算,框架会根据前向数据流...…
-
深度学习框架之一
基于数据流图的深度学习框架深度学习框架发展概述深度学习框架是为了在加速器和集群上高效训练深度神经网络而设计的可编程系统,需要同时兼顾以下三大互相制约设计目标: 可编程性:使用易用的编程接口,用高层次语义描述出各类主流深度学习模型的计算过程和训练算法。 性能:为可复用的处理单元提供高效实现;支持多设备、分布式计算。 可扩展性:降低新模型的开发成本。在添加新硬件支持时,降低增加计算原语和进行计算优化的开发成本。 主流深度学习框架主要经历了三代发展: 早期深...…
-
分布式深度学习之二
深度学习并行训练同步方式在多设备进行并行训练时,可以采用不同的一致性模型,对应其间不同的通信协调方式,大致可分为:同步并行、异步并行、半同步并行。同步并行同步并行是采用具有同步障的通信协调并行。例如在下图中,每个工作节点(Worker)的在进行了一些本地计算之后需要与其它工作节点通信协调。在通信协调的过程中,所有的工作节点都必须等全部工作节点完成了本次通信之后才能继续下一轮本地计算。阻止工作节点在全部通信完成之前继续下一轮计算是同步障。这样的同步方式也称BSP,其优点是本地计算和通信同步严...…
-
分布式深度学习之一
分布式深度学习简介大模型训练的挑战大模型的优点 解决模型碎片化问题(针对不同应用场景需要定制化开发不同模型的问题),提供统一的预训练+下游任务微调的方案 具备自监督学习功能,可以减少数据标注,降低训练研发成本 模型参数规模越大,有望进一步突破现有模型结构的精度局限 串行计算到并行计算的演进 并行计算加速定律 阿姆达尔定律:存在加速的极限,为\(\frac{1}{1-p}\) Gustafson定律: 允许...…
-
Message-Passing Programming -- MPI
MPI Introduction Commnuication Methods MPI API Point-to-Point Communication 同一个程序,通过分支判断在不同的机器上跑,下面不同分支中的x是不一样的,通过MPI接口进行沟通。 Collective Commnuication Routin...…
-
深度神经网络加速
神经网络加速基本知识指令执行过程取指令,译码,访存,执行 三极管->逻辑门电路->加法器/乘法器….。运算执行过程非常快,例如下面的加法器,把A,B,Ci所在位置加载电信号,即可以在S,Co得到输出信号。 执行指令所需时间CPU主频(~5GHz)远低于电路开关切换的速度 原因是执行指令的其它阶段比电路开关切换的速度要慢得多 现代处理器CPU 指令译码器、控制...…
-
深度神经网络量化
什么是模型量化 模型量化的优点 量化技术落地的三大挑战 量化原理 浮点与定点数据的转化公式如下: 矩阵运算的量化 Quantize,Dequantize,Requantize算子 假设模型已经量化好,即模型算子已经转换为int类型算子(如下图的Conv2D)。在模型推理阶段,需要在计算图中插入Qua...…
-
深度神经网络压缩之二
知识蒸馏知识蒸馏是一种基于教师-学生网络的迁移学习方法。 为了压缩模型大小,知识蒸馏希望将一个大模型的知识和能力迁移到一个小模型中,而不显著的影响模型准确率。 因此,教师网络往往是一个参数量多结构复杂的网络,具具有非常好的性能和泛化能力,学生网络则是一个结构简单,参数量和计算量较小的的网络。 通常做法是先训练一个大的老师网络,然后用这个老师网络的输出和数据的真实标签去训练学生网络, 当然只是蒸馏也可以使用多个教师网络对学生网络进行训练,使得学生网络有更好的效果。 知识蒸馏的核...…
-
深度神经网络压缩之一
模型压缩(Model Compression)是指通过一定的算法和策略,在保证模型预测效果满足一定要求的前提下,尽可能地降低模型权重的大小,进而降低模型的推理计算量,内存开销和模型文件的空间占用,最终降低模型推理延迟。因为其可观的收益和一定的预测效果保证,在模型部署和推理之前,通过模型压缩是常使用的技术。 常使用的模型压缩技术有: 参数裁剪(Parameter Pruning)和共享(Sharing) 剪枝(Pruning) ...…