nvidia cudnn 6.5 r1库的python包装器。
cudnn-python-wrappers的Python项目详细描述
nvidia cudnn库的python包装器。
这是一组用于NVIDIA cuDNN卷积库的最小python包装器。 神经网络原语。Nvidia Cudnn是免费的,但是 需要nvidia开发人员帐户才能下载。用户应遵循 使用这些包装器的cudnn api文档,因为它们忠实地 复制cudnn c api。
这些包装器将完整的cudnn api公开为python函数,但是 极简主义,因为它们不实现任何更高的阶 功能性,如直接操作数据结构,如 pycudaGPUArray或cudamatCUDAMatrix。因为接口 忠实地复制C API,用户负责 向所有CUDNN数据结构分配和释放句柄,以及 将对数组的引用作为指针传递。但是,CUDNN状态代码 被转换为python异常。最常见的应用程序 这些包装将与PyCUDA一起使用,但它们将起作用 同样适用于其他框架,如CUDAMat。
用户需要确保将所有参数作为正确的数据传递 类型,即所有句柄和数组指针的ctypes.c_void_p,以及 ctypes.c_int用于所有整数参数和枚举。下面是一个例子 关于如何在pycudaGPUArray上执行前向卷积:
importpycuda.autoinitfrompycudaimportgpuarrayimportlibcudnn,ctypesimportnumpyasnp# Create a cuDNN contextcudnn_context=libcudnn.cudnnCreate()# Set some options and tensor dimensionsaccumulate=libcudnn.cudnnAccumulateResults['CUDNN_RESULT_NO_ACCUMULATE']tensor_format=libcudnn.cudnnTensorFormat['CUDNN_TENSOR_NCHW']data_type=libcudnn.cudnnDataType['CUDNN_DATA_FLOAT']convolution_mode=libcudnn.cudnnConvolutionMode['CUDNN_CROSS_CORRELATION']convolution_path=libcudnn.cudnnConvolutionPath['CUDNN_CONVOLUTION_FORWARD']n_input=100filters_in=10filters_out=8height_in=20width_in=20height_filter=5width_filter=5pad_h=4pad_w=4vertical_stride=1horizontal_stride=1upscalex=1upscaley=1# Input tensorX=gpuarray.to_gpu(np.random.rand(n_input,filters_in,height_in,width_in).astype(np.float32))# Filter tensorfilters=gpuarray.to_gpu(np.random.rand(filters_out,filters_in,height_filter,width_filter).astype(np.float32))#Descriptor for inputX_desc=libcudnn.cudnnCreateTensor4dDescriptor()libcudnn.cudnnSetTensor4dDescriptor(X_desc,tensor_format,data_type,n_input,filters_in,height_in,width_in)# Filter descriptorfilters_desc=libcudnn.cudnnCreateFilterDescriptor()libcudnn.cudnnSetFilterDescriptor(filters_desc,data_type,filters_out,filters_in,height_filter,width_filter)# Convolution descriptorconv_desc=libcudnn.cudnnCreateConvolutionDescriptor()libcudnn.cudnnSetConvolutionDescriptor(conv_desc,X_desc,filters_desc,pad_h,pad_w,vertical_stride,horizontal_stride,upscalex,upscaley,convolution_mode)# Get output dimensions (first two values are n_input and filters_out)_,_,height_output,width_output=libcudnn.cudnnGetOutputTensor4dDim(conv_desc,convolution_path)# Output tensorY=gpuarray.empty((n_input,filters_out,height_output,width_output),np.float32)Y_desc=libcudnn.cudnnCreateTensor4dDescriptor()libcudnn.cudnnSetTensor4dDescriptor(Y_desc,tensor_format,data_type,n_input,filters_out,height_output,width_output)# Get pointers to GPU memoryX_data=ctypes.c_void_p(int(X.gpudata))filters_data=ctypes.c_void_p(int(filters.gpudata))Y_data=ctypes.c_void_p(int(Y.gpudata))# Perform convolutionlibcudnn.cudnnConvolutionForward(cudnn_context,X_desc,X_data,filters_desc,filters_data,conv_desc,Y_desc,Y_data,accumulate)# Clean uplibcudnn.cudnnDestroyTensor4dDescriptor(X_desc)libcudnn.cudnnDestroyTensor4dDescriptor(Y_desc)libcudnn.cudnnDestroyFilterDescriptor(filters_desc)libcudnn.cudnnDestroyConvolutionDescriptor(conv_desc)libcudnn.cudnnDestroy(cudnn_context)
安装
使用
从pypi安装pip install cudnn-python-wrappers