Cupy:Numpy在GPU上面的扩展

本文介绍了CuPy库,它是Numpy的一个GPU加速版本,适用于大规模数据处理。通过简单的代码替换,可以在Numpy和CuPy之间轻松切换。此外,还详细阐述了如何在CuPy、Numpy和PyTorchTensor之间进行转换,包括使用dlpack进行快速转换。对于大型张量计算,建议结合CuPy和PyTorch以实现计算效率的最大化。
摘要由CSDN通过智能技术生成

介绍

  • CuPy是一个通过利用CUDA GPU库在Nvidia GPU上实现Numpy阵列的库。通过该实现,由于GPU具有许多CUDA核心,因此可以实现优异的并行加速
  • CuPy的界面是Numpy的镜像,在大多数情况下,它可以用作直接替代品。只需用兼容的CuPy代码替换你的Numpy代码,就可以获得GPU加速。CuPy将支持Numpy所拥有的大多数阵列操作,包括索引,广播,数组上的数学和各种矩阵变换
  • pip install cupy
  • 在Numpy和CuPy之间切换,cp 替换为 np
  • Ctrl + H,把 np.全部替换为cp. (import cupy as cp)
  • 一旦我们达到大约1000万个数据点,加速就会大幅提升,一旦我们跨越1亿个点数,速度就会快得多。在那之下,Numpy实际上更快。另外请记住,更多的GPU内存将帮助您处理更多数据,因此,重要的是要了解您的GPU是否有足够的内存来容纳足够的数据,而CuPy是值得的。

cupy与numpy、pytorch Tensor转换

cupy <> numpy

import cupy as cp
import numpy as np

#cupy > numpy
numpy_data = cp.asnumpy(cupy_data)

#numpy > cupy
cupy_data = cp.asarray(numpy_data)
  • cupy->numpy过程较慢

cupy <> tensor

from cupy.core.dlpack import toDlpack
from cupy.core.dlpack import fromDlpack
from torch.utils.dlpack import to_dlpack
from torch.utils.dlpack import from_dlpack
import torch

#tensor > cupy
cupy_data = fromDlpack(to_dlpack(tensor_data))

#cupy > tensor
tensor_data = from_dlpack(toDlpack(cupy_data))

numpy <> tensor

import numpy as np
import torch

#tensor > numpy
numpy_data = tensor_data.numpy()

#numpy > tensor
tensor_data = torch.from_numpy(numpy_data)

转换 utils

# tensor <-> cupy
def tensor2cupy(tensor_data):
    return fromDlpack(to_dlpack(tensor_data))

def cupy2tensor(cupy_data):
    return from_dlpack(toDlpack(cupy_data))

# cupy <-> numpy
def cupy2numpy(cupy_data):
    return cp.asnumpy(cupy_data)

def numpy2cupy(numpy_data):
    return cp.asarray(numpy_data)

# numpy <-> tensor
def numpy2tensor(numpy_data):
    return torch.from_numpy(numpy_data)

def tensor2numpy(tensor_data):
    return tensor_data.numpy()

## 太麻烦了,全部换成torch写!

  • tensor 包含梯度等信息,可能含的东西太多了
  • 做法:对于较大张量的计算采用cupy对某些运算进行加速,而torch只在深度学习网络计算中使用!即ECO的做法!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值