自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(132)
  • 收藏
  • 关注

原创 【模型量化】量化基础

下图为对称量化在居中乘法当中的应用示意图(非对称量化也类似),通过量化,将浮点矩阵的乘法,转化为整数矩阵的乘法,虽然存在一定误差,但误差不大。量化感知训练就是在网络训练过程中,模拟量化,让模型在训练过程中就能调整参数,让其更适合量化,提高量化后模型的精度。对称量化具有计算简单,精度低等特点,非对称量化的计算有一个额外的参数Z调整零点的映射,因此计算复杂,但精度相对较高。中绝对值的最大值,然后对其进行缩放得到量化后的值,然后进行反量化得到原来的值,可以看出量化是存在一定误差的。

2025-04-30 21:00:00 1143

原创 正则化详解

正则化是指在机器学习和统计建模中的一种技术,用于控制模型的复杂度,防止模型在训练数据上过度拟合(overfitting)。当模型过度拟合时,会学习到训练数据中的噪声和细微变化,导致在新数据上的性能下降正则化通过在模型的损失函数中引入额外的惩罚项,来对模型的参数进行约束,从而降低模型的复杂度。这个额外的惩罚通常与模型参数的大小或者数量相关,旨在鼓励模型学习简单的规律,而不是过度拟合训练数据在深度学习中,正则化通常涉及到对网络的权重进行约束,以防止其变得过大或过复杂。

2025-04-07 15:52:57 1019

原创 [2025_03_28日志]TensorRT升级过程中的问题

最近博主在做TensorRT的升级,有感而发,分享一些小经验,哈哈哈哈接下来都用TensorRT官方提供的Demo进行讲述吧。

2025-03-31 00:54:10 801

原创 【ONNX】ONNX的基本使用

ONNX Simplifier 的主要功能是通过分析和优化 ONNX 模型的计算图,移除冗余操作、合并相邻节点、优化常量节点等,从而减小模型的大小和计算量。这不仅可以提高模型的推理速度,还能使模型结构更加清晰,便于理解和部署(若模型结构没问题,其实ONNX Simplifier用处不大)直接使用ONNX搭建计算图的开发效率有些低,通常都是Pytorch转ONNX。类似于链表,注意处理好待删除节点的上下游节点之间的链接关系。可以使用Netorn查看ONNX的结构。接下来的讲解都使用这个简单的模型。

2025-03-07 15:12:04 986

原创 [2025_02_19日志]Tensorflow模型适配昇腾

checkpoint 转为 savemodel 的过程中也是存在一些小问题的,tensorflow2中存在延迟构建,在读取 checkpoint 前需进行显示构建(手动调用 build 或者执行一次推理),否则下面的代码会打印为空,无法进行节点之间映射。使用模型训练的同事提供的Tensorflow模型代码,将 checkpoint 中的权重重新读入,将其保存为savemodel格式,再使用 tf2onnx 将其转为 onnx 即可。pb文件中既包含权重也包含模型结构,是支持直接转 onnx 的。

2025-02-25 11:40:19 393

原创 【NLP】注意力机制

人类观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的),是因为大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果。正是基于这样的理论,就产生了注意力机制需要三个指定的输入Q(query)、K(key)、V(value),然后通过计算公式得到注意力的结果,这个结果代表query在key和value作用下的注意力表示。当输入的Q=K=V时,称作自注意力计算规则。

2025-02-21 15:08:05 1291

原创 【NLP】文本预处理

文本语料在输送给模型前一般需要一系列的预处理工作,才能符合模型输入的要求,如:将文本转化成模型需要的张量,规范张量的尺寸等,而且科学的文本预处理环节还将有效指导模型超参数的选择,提升模型的评估指标

2025-02-16 23:29:21 1553 1

原创 【NLP】循环神经网络RNN

RNN(Recurrent Neural Network),中文称作循环神经网络,一般以序列数据为输入,通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出RNN的循环机制使模型隐层上一时间步产生的结果,能够作为当下时间步输入的一部分(当下时间步的输入除了正常的输入外还包括上一步的隐层输出)对当下时间步的输出产生影响。

2025-02-14 17:27:32 1350

原创 卷积神经网络CNN

卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领域,往往输入图像都很大,若使用全连接网络,计算代价较高。图像也很难保留原有的特征,导致图像处理的准确率不高卷积神经网络(Convolutional Neural Network)是含有卷积层的神经网络。卷积层的作用就是用来自动学习、提取图像的特征CNN网络主要有三部分构成:卷积层、池化层和全连接层构成,其中卷积层负责提取图像中的局部特征;池化层用来大幅降低参数量级(降维);全连接层用来输出想要的结果。

2025-02-14 00:32:29 1186

原创 【CUDA】常量内存

常量内存对内核代码而言是只读的,但它对主机而言即是可读的又是可写的。常量内存位于设备的DRAM上(和全局内存一样)。有一个专用的片上缓存,从每个SM的常量缓存中读取的延迟,比直接从常量内存中读取要低得多。每个SM常量内存缓存大小的限制为64KBconstant Memory 的获取方式不同于其它的 GPU 内存,对于 constant Memory 来说,最佳获取方式是 warp 中的 32 个thread获取 constant Memory 中的同一个地址。

2025-02-08 17:06:58 930

原创 【CUDA】Shared Memory

GPU有两种类型的内存global memory 就是一块很大的板载内存,具有相对较高的延迟。shared memory 是较小的片上内存,具有相对较低的延迟,并且 shared memory 可以提供比 global memory 高得多的带宽。可将其当作一个可编程的cache共享内存(SMEM)是 GPU 的一个关键部件。物理上,每个 SM 都有一个小的低延迟内存池,这个内存池被当前正在该 SM 上执行的线程块中的所有线程所共享。

2025-02-08 11:55:32 1536

原创 【CUDA】内存访问

GPU对片外DRAM的访问延迟大,带宽低,导致其成为很多应用的性能瓶颈。因此对DRAM访问的进一步优化可以有效改善程序性能。优化之前,首先看一下GPU对内存的访问模式如上图所示,DRAM内存的读写在物理上是从 片外DRAM -> 片上Cache -> 寄存器。其中,片外DRAM到片上Cache是主要性能瓶颈。DRAM 到 Cache 之间的一次传输(transaction)设计为32、64或者128字节,并且内存地址按照32、64或者128字节的间隔对齐。

2025-02-07 15:20:44 919

原创 【CUDA】内存模型

Local,Global,Contant,Texture为片外DRAM,其中Global,Constant,Texture内存在Host端代码声明,所有线程可见SM拥有私有的Registers和Shared Memory(其实还有SM私有的L1 cache以及共有的L2 cache),Constant和Texture内存有专有的Caches(片上)

2025-02-06 17:36:53 727

原创 神经网络基础

人工神经网络( Artificial Neural Network, ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型

2025-02-03 00:40:44 846

原创 【NLP】BERT模型

BERT(Bidirectional Encoder Representation from Transformers)是2018年10月由Google AI研究院提出的一种预训练模型,该模型在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩: 全部两个衡量指标上全面超越人类,并且在11种不同NLP测试中创出SOTA表现,包括将GLUE基准推高至80.4% (绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进5.6%),成为NLP发展史上的里程碑式的模型成就。

2025-01-20 21:02:33 1206

原创 【NLP】Transformer模型架构

Transformer是一种用于处理序列数据的深度学习模型架构,谷歌在2017年的论文《Attention Is All You Need》中提出的,用于NLP的各项任务,现在是谷歌云TPU推荐的参考模型。

2025-01-10 15:18:54 2648

原创 【CUDA】Stream and Event

kernel level,即一个 kernel 或者一个 task 由许多 thread 并行的执行在GPU上。Stream的概念是相对于后者来说的,Grid level是指多个 kernel 在一个 device 上同时执行(一个 Grid 中的 Block 可以在多个 SM 中执行)

2024-12-06 16:51:49 1321

原创 【CUDA】Branch Divergence and Unrolling Loop

从高级语言层面是无法看出性能提升的原因的,需从 low-level instruction 层面去分析,第二段代码循环次数减少了一半,而循环体两句语句的读写操作的执行在CPU上是可以同时执行互相独立的,所以相对第一段,第二段性能要好。Fermi 和 Kepler 每个 block 的最大 thread 数目都是1024,文中的 kernel 的迭代次数都是基于 blockDim 的,所以完全展开循环是可行的。由于使用的SIMT模式,warp内的thread 是有一个隐式的同步过程的。stride > 0;

2024-11-19 15:54:55 818

原创 【CUDA】Warp解析

SM 中 warp调度器 每个 cycle 会挑选 active warp 送去执行,一个被选中的 warp 被称为 selected warp,没被选中,但是已经做好准备被执行的称为 Eligible warp,没准备好要执行的称为 Stalled warp。在GPU编程中,预测变量是一个用于指示分支执行路径的变量,其值为1或0。同一个 warp 中的 thread 必须执行相同的指令,若这些线程在遇到控制流语句时,进入了不同的分支,那么同一时刻除了正在执行的分支外,其余分支都会被阻塞,十分影响性能。

2024-11-15 18:10:04 1693

原创 【CUDA】了解GPU架构

SM(Streaming Multiprocessors)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的。GPU中每个SM都设计成支持数以百计的线程并行执行,并且每个GPU都包含了很多的SM,所以GPU支持成百上千的线程并行执行。当一个kernel启动后,thread会被分配到这些SM中执行。大量的thread可能会被分配到不同的SM,但是同一个block中的thread必然在同一个SM中并行执行CUDA采用 Single Instruction Multiple Thread(

2024-11-14 15:09:13 1233

原创 【CUDA】线程配置

假设要启动一些线程块且每个线程块中均包含 256 个线程(32 的倍数),并需运行 1000 个并行任务(此处使用极小的数量以便于说明),则任何数量的线程块均无法在网格中精确生成 1000 个总线程,因为没有任何整数值在乘以 32 后可以恰好等于1000。以下是编写执行配置的惯用方法示例,适用于 N 和线程块中的线程数已知,但无法保证网格中的线程数和 N 之间完全匹配的情况。GPU 函数称为核函数,核函数通过执行配置启动,执行配置定义了网格中的块数以及每个块中的线程数,网格中的每个块均包含相同数量的线程。

2024-11-08 18:10:06 1097

原创 【CUDA】认识CUDA

CUDA是并行计算的平台和类C编程模型,能很容易的实现并行算法。只需配备NVIDIA GPU,就可以在许多设备上运行并行程序。

2024-11-08 18:02:37 3068

原创 【CUDA】nvidia-smi命令

nvidia-smi 提供了GPU技术参数、使用温度和电源管理等重要信息。

2024-10-22 11:42:33 3176

原创 NVIDIA CUDA Runtime

CUDA 为许多常用编程语言提供扩展,如 C、C++、Python 和 Fortran 等语言。CUDA 加速程序的文件扩展名是.cu下面包含两个函数,第一个函数将在 CPU 上运行,第二个将在 GPU 上运行__global__ 关键字表明以下函数将在 GPU 上运行并可全局调用将在 CPU 上执行的代码称为主机代码,而将在 GPU 上运行的代码称为设备代码注意返回类型为 void,使用 __global__ 关键字定义的函数要求返回 void 类型。

2024-10-21 19:20:53 1109

原创 【项目设计】Facial-Hunter

该项目是基于深度学习与负载均衡的人脸识别系统

2024-09-18 21:11:37 977

原创 [2024_08_12日志]ONNX Runtime的使用

Segmentation 错误。在 C++ API 上使用自定义 onnx 模型运行。模型在 Python 上按预期工作,但在 C++ API 上运行相同的模型时,会收到一个分段错误

2024-08-13 11:46:29 676 1

原创 Docker Network

Docker 容器网络是为应用程序所创造的虚拟环境的一部分,其能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等等与网络相关的模块Docker 为实现容器网络,主要采用的架构由三部分组成:CNM、Libnetwork 和驱动。

2024-08-07 11:59:28 901

原创 Docker Volume(存储卷)

存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这意味着,在容器中的这个目录下写入数据时,容器会将内容直接写入到宿主机上与此容器建立了绑定关系的目录在宿主机上的这个与容器形成绑定关系的目录被称为存储卷。卷的本质是文件或者目录,其可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。

2024-08-06 17:39:50 1143

原创 Docker Container(容器)

容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。虽然容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,这是容器与直接运行在主机上进程的本质区别。容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。

2024-08-04 20:33:27 1471

原创 Docker Image(镜像)

Docker Image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件可以将 Docker Image 理解成一个模板, 可以通过这个模板实例化出来很多容器image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。

2024-07-29 11:43:41 884

原创 Docker Registry(镜像仓库)

镜像仓库(Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。镜像仓库管理多个Repository, Repository通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,其checksum这些信息都会记录下来。

2024-07-29 10:51:42 1426

原创 docker初识

实际的服务器或者计算机。相对于虚拟机而言的,对实体计算机的称呼。物理机给虚拟机提供硬件环境,有时也称为"寄主"或"宿主"是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

2024-07-26 17:22:39 705

原创 【Qt】界面优化

选择器示例说明全局选择器选择所有的widget类型选择器(type selector)选择所有的QPushButton和其子类的控件类选择器选择所有的QPushButton,不会选择子类ID选择器选择objectName为pushButton_2的控件后代选择器选择QDialog的所有后代中的QPushButton(子控件、孙子控件等)子选择器选择QDialog的所有子控件中的QPushButton并集选择器选择QPushButton、QLineEdit这两种控件属性选择器。

2024-04-13 00:16:47 1409

原创 【Qt】网络

在进行网络编程之前,需要在项目中的 .pro 文件中添加 network 模块有时添加之后要手动编译一下项目,使 Qt Creator 能够加载对应模块的头文件。

2024-04-09 15:55:53 1119

原创 【Qt】多线程

在Qt中,多线程的处理一般是通过QThread类来实现QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其他线程共享数据。QThread对象管理程序中的一个控制线程。

2024-04-07 17:00:20 1418

原创 【Qt】文件与音视频

文件操作是应用程序必不可少的部分。Qt作为一个通用开发库,提供了跨平台的文件操作能力。Qt提供了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件复制或重命名等。

2024-04-05 18:07:37 1213

原创 【Qt】事件

事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制时,都会发出一个相应的事件。一些事件是在用户操作时发出,如键盘事件、鼠标事件等,另一些事件则是由系统本身自动发出,如定时器事件。

2024-04-04 11:04:22 2180

原创 【Qt】QDialog对话框

对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。

2024-03-27 20:50:21 1822

原创 【Qt】QMainWindow

QMainWindow包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗口(铆接部件)(dock widgets)、一个状态栏(status bar)和一个中心部件(central widget),它是许多应用程序的基础,如文本编辑器,图片编辑器等。它是一个可移动的组件,它的元素可以是各种窗口组件,它的元素通常以图标按钮的方式存在。一种是在创建工具栏的同时指定停靠的位置,另一种是通过QToolBar类提供的setAllowedAreas()函数来设置。

2024-03-26 22:22:06 1591

原创 【Qt】常用控件

Widget是Qt中的核心概念,英文原义是"小部件",此处将其翻译为"控件"。控件是构成一个图形化界面的基本要素,如按钮、列表视图、树形视图、单行输入框、多行输入框、滚动条、下拉框等都可以称为"控件"Qt作为一个成熟的GUI开发框架,内置了大量的常用控件。Qt也提供了"自定义控件"的能力,可以在现有控件不能满足需求时,对现有控件做出扩展,或者自定义出新的控件控件体系的发展完全没有控件。此时需要通过一些绘图API手动的绘制出按钮或者输入框等内容,代码编写繁琐。如文曲星的Lava平台开发。

2024-03-20 22:57:19 4436

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除