主要内容

深度学习中的数据布局考虑

当您构建使用生成的CUDA的应用程序时®c++代码,您必须提供一个CUDA c++主函数来调用生成的代码。默认情况下,对于源代码、静态库、动态库和可执行程序的代码生成,可以使用codegen命令,GPU Coder™生成CUDA c++主文件示例(main.cu源文件和main.h的头文件例子构建文件夹的子文件夹)。这个示例主文件是一个模板,可以帮助您将生成的CUDA代码合并到应用程序中。示例main函数声明并初始化数据,包括动态分配的数据。它调用入口点函数,但不使用入口点函数返回的值。

在为深度卷积神经网络(CNN)生成代码时,代码生成器利用了NVIDIA的优势®cuDNN,用于NVIDIA gpu或ARM的TensorRT®ARM马里图形处理器的计算库。这些库对保存图像、视频和任何其他数据的输入张量有特定的数据布局要求。在编写用于构建应用程序的自定义主函数时,必须创建输入缓冲区,以这些库所期望的格式向生成的入口点函数提供数据。

CNN的数据布局格式

对于深度卷积神经网络(CNN),使用一个4-D张量描述符来定义具有以下字母的批2d图像的格式:

  • N-批量大小

  • C-功能地图的数量(通道的数量)

  • H——高度

  • W——宽度

展示了最常用的4-D张量格式,其中字母按步长递减顺序排序。

  • NCHW

  • NHWC

  • CHWN

其中,GPU Coder使用NCHW格式(默认为列-主布局)。要使用行主布局,请传递-rowmajor可以选择的codegen命令。方法来配置代码的行主布局cfg。RowMajor参数中的代码生成配置对象。

例如,考虑一组具有以下尺寸的图像:N = 1C = 3H = 5W = 4.如果图像像素元素用整数序列表示,则输入图像可以画图表示如下。

在主函数中创建输入缓冲区时,将4-D图像布局在内存中NCHW格式为:

  1. 从第一个频道开始(C = 0),元素按行主顺序连续排列。

  2. 继续第二个和后续的通道,直到所有通道的元素都布局好。

  3. 继续进行下一批处理(如果N > 1).

LSTM数据布局格式

长短期记忆(LSTM)网络是一种循环神经网络(RNN),它可以学习序列数据时间步间的长期依赖关系。对于LSTM,数据布局格式可以用以下字母描述:

  • N-批量大小

  • 年代-序列长度(时间步数)

  • d-一个输入序列的单元数

对于LSTM, GPU Coder使用SNd默认格式。

另请参阅

功能

对象

相关的话题

Baidu
map