📜  Python

📅  最后修改于: 2022-05-13 01:54:37.907000             🧑  作者: Mango

Python

NumPy无疑是任何 Python 代码最兼容的库,可以处理numpy.ndarray (n 维矩阵数组)形式的大量数据。但是,一旦我们将处理的数据量增加到相当大的数量,多核 CPU 就无法按要求高效地处理数据,因为 Numpy 仅在并行处理能力有限的 CPU(大多数在消费者端具有 4-8 个内核)上运行.

这就是CuPy中一个新的不错的Python库出现的地方。 CuPy 是用于 GPU 的 NumPy 兼容库。

CuPy是一个使用 NVIDIA CUDA 加速的开源矩阵库。它还使用了 CUDA 相关库,包括 cuBLAS、cuDNN、cuRand、cuSolver、cuSPARSE、cuFFT 和 NCCL,以充分利用 GPU 架构。

它是 CUDA 上兼容 NumPy 的多维数组的实现。 CuPy 由cupy.ndarray 、核心多维数组类及其上的许多函数组成。它支持numpy.ndarray接口的子集。并且它还可以通过 GPU 和 CUDA 库来加速现有的 NumPy 代码。

硬件和软件设置

  • 点子
  • Python3
  • 蟒蛇(可选)
  • CUDA X.0(取决于硬件)
  • CPU:2x Intel Xeon E5–2698 v4 @ 2.20GHz
  • 主内存:1 TB
  • GPU:NVIDIA Tesla V100 32 GB
  • 操作系统——Windows/Linux

安装
在您的设备上下载兼容版本的 CUDA 设置并进行安装。要安装它,请打开终端并输入

pip install cupy-cuda(version)

其中 version 将是您设备上安装的 CUDA 版本。例如-
(对于 CUDA 10.0)

pip install cupy-cuda100

如果您的设备不支持 CUDA,那么您可以在 Anaconda 中安装 CuPy 并将其用于基于 CPU 的计算。或者,Anaconda 也适用于 CUDA。

在 Anaconda 上安装它——

  1. 打开 Anaconda 提示符并输入
    conda install -c anaconda cupy

    或者

  2. 使用 Anaconda navigator(GUI) 直接安装 cupy 库。

cupy.ndarray 的基础知识

  1. 导入——在下面的代码中,cp 是 cupy 的缩写,因为 np 是 numpy 的习惯做法。
    import numpy as np
    import cupy as cp
    
  2. 就像 Numpy 一样,CuPy 也有一个ndarraycupy.ndarray ,它是numpy.ndarray的兼容 GPU 替代品。
    x_gpu = cp.array([1, 2, 3])
    

    上例中的x_gpucupy.ndarray的一个实例。您可以看到它的创建与 NumPy 的创建相同,只是将 numpy 替换为 cupy。

示例– 采用欧几里得范数(又名 L2 范数)。

import cupy as cp
import numpy as np
  
x_cpu = np.array([1, 2, 3])
x_gpu = cp.array([1, 2, 3])
  
l2_cpu = np.linalg.norm(x_cpu)
l2_gpu = cp.linalg.norm(x_gpu)
  
print("Using Numpy: ", l2_cpu)
print("\nUsing Cupy: ", l2_gpu)
Using Numpy: 3.7416573867739413

Using Cupy: array(3.74165739)

Numpy 与 Cupy

CuPy 是用于 GPU 的 NumPy 兼容库。与 numpy 相比,它更高效,因为使用 NVIDIA GPU 的数组操作可以提供比 CPU 计算显着的加速。

注意 - 这里使用的配置是 CPU 是 intel i7-7700 HQ,GPU 是 Geforce GTX 1050 4GB,使用 CUDA 9.0。

# Python program to 
# demonstrate speed comparison
# between cupy and numpy
  
# Importing modules
import cupy as cp
import numpy as np
import time
  
# NumPy and CPU Runtime
s = time.time()
x_cpu = np.ones((1000, 1000, 100))
e = time.time()
print("Time consumed by numpy: ", e - s)
  
# CuPy and GPU Runtime
s = time.time()
x_gpu = cp.ones((1000, 1000, 100))
e = time.time()
print("\nTime consumed by cupy: "e - s)
Time consumed by numpy: 0.4238910675048828
Time consumed by cupy: 0.0010099411010742188

在这里,我们可以看到 CuPy 可以比 NumPy 运行得更快。

CuPy 在 cupy.ndarray 对象上实现了许多功能。有关受支持的 NumPy API 子集,请参阅参考资料。了解 NumPy 可能有助于利用 CuPy 的大多数功能。因此,建议您阅读 NumPy 文档。

参考资料——https://cupy.chainer.org/