CUDNN学习笔记(1)

简介: cuDNN概述NVIDIA cuDNN是一个GPU加速深层神经网络原语库。它提供了在DNN应用程序中频繁出现的例程的高度优化的实现: 卷积前馈和反馈, pooling前馈和反馈 softmax前馈和反馈 神经元前馈和反馈: 整流线性(ReLU)-sigmoid 双曲线正切(TANH) 张量转换函数 LRN,LCN和批量归一化前进和后退 cuDNN的卷积程序旨在提高性能,以最快的GEMM(矩阵乘法)为基础实现此类例程,同时使用更少的内存。

cuDNN概述
NVIDIA cuDNN是一个GPU加速深层神经网络原语库。它提供了在DNN应用程序中频繁出现的例程的高度优化的实现:

  • 卷积前馈和反馈,
  • pooling前馈和反馈
  • softmax前馈和反馈
  • 神经元前馈和反馈:

    • 整流线性(ReLU)
      -sigmoid
    • 双曲线正切(TANH)
    • 张量转换函数
  • LRN,LCN和批量归一化前进和后退

cuDNN的卷积程序旨在提高性能,以最快的GEMM(矩阵乘法)为基础实现此类例程,同时使用更少的内存。
cuDNN具有可定制的数据布局,支持四维张量的灵活维度排序,跨步和子区域,用作所有例程的输入和输出。这种灵活性可以轻松集成到任何神经网络实现中,并避免使用基于GEMM的卷积有时需要的输入/输出转换步骤。
cuDNN提供基于上下文的API,可以轻松实现与CUDA流的多线程和(可选)互操作性。
编程模型:
cuDNN库公开了一个Host API,但是假定对于使用GPU的操作,可以从设备直接访问必要的数据。

使用cuDNN的应用程序必须通过调用来初始化库上下文的句柄 cudnnCreate()。这个句柄被显式地传递给每一个在GPU数据上运行的后续库函数。一旦应用程序完成使用cuDNN,它就可以释放与库处理相关的资源 cudnnDestroy()。这种方法允许用户在使用多个主机线程,GPU和CUDA流时显式控制库的功能。例如,一个应用程序可以使用cudaSetDevice()要将不同的设备与不同的主机线程关联起来,并在每个主机线程中关联,请使用独特的cuDNN句柄,该句柄将库调用指向与其关联的设备。用不同的手柄创建的cuDNN库调用将自动运行在不同的设备上。与特定cuDNN上下文相关联的设备被假定在相应的之间保持不变cudnnCreate() 和cudnnDestroy()调用。为了使cuDNN库在同一个主机线程中使用不同的设备,应用程序必须设置通过调用使用的新设备cudaSetDevice() 然后通过调用创建另一个与新设备关联的cuDNN上下文 cudnnCreate()。
符号:
从CUDNN v4开始,我们采用了数学启发的图层输入和输出表示法 X,Y,DX,DY,B,W用于通用图层参数。这样做是为了提高可读性并便于理解参数含义。现在所有的层都遵循推理期间的统一惯例
y = layerFunction(x,otherParams)。
并在反向传播
(dx,dOtherParams)= layerFunctionGradient(x,y,dy,otherParams)
对于卷积来说,公式是
y = x * w + b
w 是滤波器权重的矩阵, X 是上一层的数据(在推理期间), y 是下一层的数据, b 是偏见和 *是卷积运算符。在反向传播例程中,参数保持其含义。 DX,DY,DW,DB始终参考最终网络误差函数相对于给定参数的梯度。所以DY在所有后向传播例程中,总是指通过网络计算图反向传播的错误梯度。类似于更专门化层中的其他参数,例如,dMeans 或 dBnBias 指的是这些参数的损失函数的梯度。
timg

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
安全 JavaScript 前端开发
QML信号与信号槽实践指南:轻松掌握现代软件开发的关键技术(三)
QML信号与信号槽实践指南:轻松掌握现代软件开发的关键技术
596 0
|
算法 数据挖掘 Python
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
1718 0
|
8月前
|
算法 数据可视化 异构计算
SparseGPT:大规模语言模型的一次性精确剪枝——论文解读
SparseGPT提出首个可高效剪枝百亿参数大模型的一次性精确方法,通过稀疏回归与近似求解器实现高稀疏度下仍保持精度,支持半结构化稀疏与量化联合压缩,显著降低推理成本。
813 3
SparseGPT:大规模语言模型的一次性精确剪枝——论文解读
|
机器学习/深度学习 数据处理
大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
本文分析了大规模Transformer架构(如LLama)中归一化技术的关键作用,重点探讨了LayerNorm被RMSNorm替代的原因。归一化通过调整数据量纲保持分布形态不变,提升计算稳定性和收敛速度。LayerNorm通过均值和方差归一化确保数值稳定,适用于序列模型;而RMSNorm仅使用均方根归一化,省略均值计算,降低计算成本并缓解梯度消失问题。RMSNorm在深层网络中表现出更高的训练稳定性和效率,为复杂模型性能提升做出重要贡献。
3369 14
大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
|
8月前
|
机器学习/深度学习 存储 人工智能
AWQ: 面向设备端大语言模型压缩与加速的激活感知权重量化——论文阅读
AWQ是一种面向设备端大语言模型(LLM)压缩与加速的激活感知权重量化方法。与传统基于权重大小的量化策略不同,AWQ通过分析输入激活分布识别关键权重通道,并采用按通道缩放策略,在保持硬件效率的同时显著提升量化精度。实验表明,AWQ在多种LLM上实现了接近无损的低比特量化(如INT4),并在边缘设备上实现高达3倍以上的推理加速,为大模型的设备端部署提供了高效解决方案。
990 1
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
|
API Python
飞桨x昇腾生态适配方案:13_API离线推理
ais_bench 提供了基于昇腾硬件的 Python API,用于离线模型(.om模型)推理。支持静态与动态API场景,如单个或多个OM模型推理。通过 `InferSession` 类加载模型并执行推理,可灵活处理输入输出形状转换。示例代码涵盖图片读取、形状调整、多模型串联推理及资源释放等操作,满足多样化推理需求。
865 26
|
机器学习/深度学习 自然语言处理 数据可视化
分布式表示(Distributed Representation)
分布式表示(Distributed Representation)
663 15
|
Python 容器
Python与GUI编程:创建图形用户界面
Python的Tkinter库是用于构建GUI应用的内置工具,无需额外安装。它提供了丰富的控件,如按钮、文本框等,让用户通过图形界面与程序交互。创建GUI窗口的基本步骤包括:导入Tkinter库,创建窗口对象,设置窗口属性,添加控件(如标签和按钮),并使用布局管理器(如`pack()`或`grid()`)来组织控件的位置。此外,可以通过绑定事件处理函数来响应用户操作,例如点击按钮。Tkinter还有更多高级功能,适合开发复杂GUI应用。
|
编解码 安全 Ubuntu
Android Selinux 问题处理笔记
这篇文章是关于处理Android系统中SELinux权限问题的笔记,介绍了如何通过分析SELinux拒绝的日志、修改SELinux策略文件,并重新编译部署来解决权限问题,同时提供了一些SELinux的背景知识和实用工具。
1837 0

热门文章

最新文章