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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Double。将长位加倍到C#位转换器。ToDouble   java如何使用正则表达式从固定的Y位数中提取最后的X位数?   java如何显示ChatMessage类列表中的字符串消息属性?   java从JSON或XML提要导入数据,并在Android中创建列表   在整数之间使用按位AND运算符的java好处?   java从Android中的Bean类获取空值?   java会话id对另一台服务器意味着什么?   java未选择案例时开关的工作方式   java组织。openqa。硒。SessionNotCreatedException:无法创建新的远程会话。在emulator中初始化安卓驱动程序时   JavaSWT父和子对话框通信   java请确保java_HOME指向JDK而不是JRE   java用户即使在成功登录后也是匿名的   java控制器单元测试无法自动连接所需的bean   Java小程序类文件