热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Theano2.1.13-基础知识之PyCUDA、CUDAMat、Gnumpy的兼容

来自:http:deeplearning.netsoftwaretheanotutorialgpu_data_convert.htmlPyCUDACUDAMatGnumpycom

来自:http://deeplearning.net/software/theano/tutorial/gpu_data_convert.html

PyCUDA/CUDAMat/Gnumpy compatibility

一、PyCUDA

     当前,PyCUDA 和Theano使用不同的对象来存储GPU数据。这两种实现支持的是不同的特征集。 Theano的实现是叫做CudaNdarray ,并且支持strides。 同时只支持float32 dtype。 PyCUDA的实现叫做 GPUArray 而且不支持strides。 然而,它可以处理所有的NumPy 和CUDA dtypes。

    我们现在来介绍下如何工作在这两个都有的基对象上,而且也在模仿NumPy。下面有一些资料关于如何在同一个脚本中使用这两个对象。

1.1 迁移

      你可以使用  theano.misc.pycuda_utils  模块来对 GPUArray和CudaNdarray之间进行转换。函数  to_cudandarray(x,copyif=False)  和  to_gpuarray(x)  返回一个新的对象,该对象占据着和原始对象同一块内存空间。不过它会抛出一个值错误(ValueError)的异常。因为 GPUArrays不支持strides,如果CudaNdarray 是strided,那么我们需要对它进行non-strided复制。生成的GPUArray不会在共享同一片内存区域。如果你想要这种行为,那么可以在to_gpuarray中设置  copyif=True  。 

1.2 用PyCUDA 来编译

      你可以使用 PyCUDA来编译直接工作在CudaNdarrays上的 CUDA 函数。这里是来自文件theano/misc/tests/test_pycuda_theano_simple.py中的例子:

import sys
import numpy
import theano
import theano.sandbox.cuda as cuda_ndarray
import theano.misc.pycuda_init
import pycuda
import pycuda.driver as drv
import pycuda.gpuarray


def test_pycuda_theano():
    """Simple example with pycuda function and Theano CudaNdarray object."""
    from pycuda.compiler import SourceModule
    mod = SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
  const int i = threadIdx.x;
  dest[i] = a[i] * b[i];
}
""")

    multiply_them = mod.get_function("multiply_them")

    a = numpy.random.randn(100).astype(numpy.float32)
    b = numpy.random.randn(100).astype(numpy.float32)

    # Test with Theano object
    ga = cuda_ndarray.CudaNdarray(a)
    gb = cuda_ndarray.CudaNdarray(b)
    dest = cuda_ndarray.CudaNdarray.zeros(a.shape)
    multiply_them(dest, ga, gb,
                  block=(400, 1, 1), grid=(1, 1))
    assert (numpy.asarray(dest) == a * b).all()

1.3 Theano 操作,使用一个PyCUDA函数

    你可以在theano op中使用 用PyCUDA编译好的GPU函数:

import numpy, theano
import theano.misc.pycuda_init
from pycuda.compiler import SourceModule
import theano.sandbox.cuda as cuda

class PyCUDADoubleOp(theano.Op):
    def __eq__(self, other):
        return type(self) == type(other)
    def __hash__(self):
        return hash(type(self))
    def __str__(self):
        return self.__class__.__name__
    def make_node(self, inp):
        inp = cuda.basic_ops.gpu_contiguous(
           cuda.basic_ops.as_cuda_ndarray_variable(inp))
        assert inp.dtype == "float32"
        return theano.Apply(self, [inp], [inp.type()])
    def make_thunk(self, node, storage_map, _, _2):
        mod = SourceModule("""
    __global__ void my_fct(float * i0, float * o0, int size) {
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    if(i 

二、CUDAMat

        这里的函数是用来在CUDAMat对象和 Theano的 CudaNdArray对象之间进行转换的。 它们遵循和theano的PyCUDA函数一样的原则,可以查阅 theano.misc.cudamat_utils.py.

    WARNING: 在这些转换器上,会有一个与stride/shape相关的特殊的问题。为了能够work,需要 transposereshape.等操作..

三、Gnumpy    这是介于Gnumpy  garray  对象和 Theano CudaNdArray 对象之间的转换函数。也同样相似于 Theano的 PyCUDA 函数,可查阅:  theano.misc.gnumpy_utils.py .


参考资料:

[1] 官网:http://deeplearning.net/software/theano/tutorial/gpu_data_convert.html


推荐阅读
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 本文介绍百度AI Studio这一集成开发平台,涵盖丰富的AI教程、经典数据集及云端计算资源。通过具体示例——在AI Studio上构建线性回归项目,帮助初学者快速掌握其核心功能与操作方法。 ... [详细]
  • 新手指南:在Windows 10上搭建深度学习与PyTorch开发环境
    本文详细记录了一名新手在Windows 10操作系统上搭建深度学习环境的过程,包括安装必要的软件和配置环境变量等步骤,旨在帮助同样初入该领域的读者避免常见的错误。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文深入探讨了WebGL与Three.js在构建多样化3D场景中的应用,详细解析了两者如何协同工作以实现高性能的3D渲染,并提供了实践指南。 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • 从Android 3.0 (API Level 11)起,Android的2D渲染管道得到了改进,以更好地支持硬件加速。本文介绍了如何启用和管理硬件加速,以及其对应用性能的影响。 ... [详细]
author-avatar
1911530988com
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有