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信号与信号槽实践指南:轻松掌握现代软件开发的关键技术
700 0
|
机器学习/深度学习 数据处理
大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
本文分析了大规模Transformer架构(如LLama)中归一化技术的关键作用,重点探讨了LayerNorm被RMSNorm替代的原因。归一化通过调整数据量纲保持分布形态不变,提升计算稳定性和收敛速度。LayerNorm通过均值和方差归一化确保数值稳定,适用于序列模型;而RMSNorm仅使用均方根归一化,省略均值计算,降低计算成本并缓解梯度消失问题。RMSNorm在深层网络中表现出更高的训练稳定性和效率,为复杂模型性能提升做出重要贡献。
3883 14
大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
|
算法 数据可视化 异构计算
SparseGPT:大规模语言模型的一次性精确剪枝——论文解读
SparseGPT提出首个可高效剪枝百亿参数大模型的一次性精确方法,通过稀疏回归与近似求解器实现高稀疏度下仍保持精度,支持半结构化稀疏与量化联合压缩,显著降低推理成本。
1138 3
SparseGPT:大规模语言模型的一次性精确剪枝——论文解读
|
机器学习/深度学习 存储 人工智能
AWQ: 面向设备端大语言模型压缩与加速的激活感知权重量化——论文阅读
AWQ是一种面向设备端大语言模型(LLM)压缩与加速的激活感知权重量化方法。与传统基于权重大小的量化策略不同,AWQ通过分析输入激活分布识别关键权重通道,并采用按通道缩放策略,在保持硬件效率的同时显著提升量化精度。实验表明,AWQ在多种LLM上实现了接近无损的低比特量化(如INT4),并在边缘设备上实现高达3倍以上的推理加速,为大模型的设备端部署提供了高效解决方案。
1508 1
|
项目管理
软件项目经理需要具备这 11 个能力
软件项目经理需要具备这 11 个能力
1164 1
|
API Python
飞桨x昇腾生态适配方案:13_API离线推理
ais_bench 提供了基于昇腾硬件的 Python API,用于离线模型(.om模型)推理。支持静态与动态API场景,如单个或多个OM模型推理。通过 `InferSession` 类加载模型并执行推理,可灵活处理输入输出形状转换。示例代码涵盖图片读取、形状调整、多模型串联推理及资源释放等操作,满足多样化推理需求。
1111 26
|
PyTorch Shell API
Ascend Extension for PyTorch的源码解析
本文介绍了Ascend对PyTorch代码的适配过程,包括源码下载、编译步骤及常见问题,详细解析了torch-npu编译后的文件结构和三种实现昇腾NPU算子调用的方式:通过torch的register方式、定义算子方式和API重定向映射方式。这对于开发者理解和使用Ascend平台上的PyTorch具有重要指导意义。
|
存储 人工智能 JSON
AscendC从入门到精通系列(三)基于自定义算子工程开发AscendC算子
本文介绍了基于Ascend C的自定义算子开发流程,涵盖从工程创建、代码编写、编译部署到运行验证的全过程。以动态shape的AddCustom算子为例,详细描述了如何利用CANN提供的工具msOpGen生成开发工程,实现算子核函数与host侧代码,以及如何编译、部署和测试自定义算子。
|
JavaScript
【vue】 在vue2项目中使用echarts
【vue】 在vue2项目中使用echarts
1485 0
|
存储 安全 机器人
MemoryScope:为LLM聊天机器人配备的长期记忆系统
如何选择合适的方法构建自己的智能体助理呢?这里向您介绍强大、低延迟、安全可控的MemoryScope开源项目。

热门文章

最新文章