深度学习中的数据布局考虑
当您构建使用生成的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 = 1
,C = 3
,H = 5
,W = 4
.如果图像像素元素用整数序列表示,则输入图像可以画图表示如下。
在主函数中创建输入缓冲区时,将4-D图像布局在内存中NCHW
格式为:
从第一个频道开始(
C = 0
),元素按行主顺序连续排列。继续第二个和后续的通道,直到所有通道的元素都布局好。
继续进行下一批处理(如果
N > 1
).
LSTM数据布局格式
长短期记忆(LSTM)网络是一种循环神经网络(RNN),它可以学习序列数据时间步间的长期依赖关系。对于LSTM,数据布局格式可以用以下字母描述:
N
-批量大小年代
-序列长度(时间步数)d
-一个输入序列的单元数
对于LSTM, GPU Coder使用SNd
默认格式。
另请参阅
功能
对象
coder.gpuConfig
|编码器。CodeConfig
|编码器。EmbeddedCodeConfig
|coder.gpuEnvConfig
|编码器。CuDNNConfig
|编码器。TensorRTConfig