Esempio n. 1
0
    def test_update_diff(self):
        """
        Test update diff for blobs
        """

        import scikits.cuda.cublas as cublas
        import pycuda.gpuarray as gpuarray
        import copy
        import caffe_facade
        from caffe_facade import pycuda_util
        import numpy as np

        blobs = list()
        for (blob_name, blob)  in self.net.params.items():
            blobs.append(blob[0])
            blobs.append(blob[1])

        mult = 0.0001
        blobs_update_cpu = [np.random.rand(*blob.diff.shape).astype(np.float32) * mult for blob in blobs]
        initial_params_diff = copy.deepcopy(self.net.params_diff)

        with pycuda_util.caffe_cuda_context():
            h = caffe_facade.cublas_handle()
            blobs_gpu = [blob.diff_as_pycuda_gpuarray() for blob in blobs]
            blobs_update_gpu = [gpuarray.to_gpu(blob_update_cpu) for blob_update_cpu in blobs_update_cpu]

            for (blob_gpu, blob_update_gpu) in zip(blobs_gpu, blobs_update_gpu):
                cublas.cublasSaxpy(h, blob_gpu.size, 1.0, blob_update_gpu.gpudata, 1, blob_gpu.gpudata, 1)

            for (blob_gpu, initial_param_diff, blob_update_cpu) in zip(blobs_gpu, initial_params_diff, blobs_update_cpu):
                assert np.allclose(blob_gpu.get(), initial_param_diff.reshape(blob_gpu.shape) + blob_update_cpu)

            params_diff = self.net.params_diff
            for (blob_gpu, param_diff) in zip(blobs_gpu, params_diff):
                assert np.allclose(blob_gpu.get(), param_diff.reshape(blob_gpu.shape))
Esempio n. 2
0
    def test_blob_diff_to_gpuarray(self):
        """
        Test diff_as_pycuda_gpuarray works for all blobs
        """
        from caffe_facade import pycuda_util

        with pycuda_util.caffe_cuda_context():
            for (blob_name, blob)  in self.net.params.items():
                blob[0].diff_as_pycuda_gpuarray()
                blob[1].diff_as_pycuda_gpuarray()
Esempio n. 3
0
    def test_axpy(self):
        """
        Test axpy function from scikits.cuda.cublas
        """
        import caffe_facade
        import scikits.cuda.cublas as cublas
        import numpy as np
        import pycuda.gpuarray as gpuarray
        from caffe_facade import pycuda_util

        caffe_facade.set_mode_gpu()
        caffe_facade.set_device(0)
        x = np.random.randn(5, 4, 3, 2).astype(np.float32)
        y = np.random.randn(5, 4, 3, 2).astype(np.float32)
        with pycuda_util.caffe_cuda_context():
            h = caffe_facade.cublas_handle()
            x_gpu = gpuarray.to_gpu(x)
            y_gpu = gpuarray.to_gpu(y)
            cublas.cublasSaxpy(h, x.size, 1.0, x_gpu.gpudata, 1, y_gpu.gpudata,
                               1)
            y = x + y
            assert np.allclose(y_gpu.get(), y)
Esempio n. 4
0
    def test_average(self):
        """
        Test average function on GPU
        """
        import caffe_facade
        import scikits.cuda.cublas as cublas
        import numpy as np
        import pycuda.gpuarray as gpuarray
        from caffe_facade import pycuda_util

        shape = (64, 32, 5, 5)
        num_elements = np.prod(shape)
        num_samples = 10

        data_cpu = np.zeros(shape, np.float32)
        data_cpu_received = [
            np.random.rand(*shape).astype(np.float32)
            for i in range(num_samples)
        ]
        with pycuda_util.caffe_cuda_context():
            #GPU average
            data_gpu = gpuarray.to_gpu(np.zeros(shape, np.float32))
            h = caffe_facade.cublas_handle()
            data_gpu_temp = gpuarray.to_gpu(data_cpu_received[0])
            cublas.cublasScopy(h, num_elements, data_gpu_temp.gpudata, 1,
                               data_gpu.gpudata, 1)
            for i in range(1, len(data_cpu_received)):
                data_gpu_temp = gpuarray.to_gpu(data_cpu_received[i])
                cublas.cublasSaxpy(h, num_elements, 1.0, data_gpu_temp.gpudata,
                                   1, data_gpu.gpudata, 1)
            cublas.cublasSscal(h, num_elements, 1.0 / num_samples,
                               data_gpu.gpudata, 1)

            #CPU average
            data_cpu = data_cpu_received[0] / num_samples
            for i in range(1, len(data_cpu_received)):
                data_cpu += data_cpu_received[i] / num_samples

            assert np.allclose(data_cpu, data_gpu.get())