numpy - "import numpy as cp"是处理非 GPU 情况的好习惯吗?

标签 numpy cupy

我正在使用 CuPy 编写理想地在 GPU 上运行以提高速度的代码。但是,我希望代码能够使用 numpy 实现运行(尽管速度更慢)。
目前我正在做以下事情:

import numpy as np
if gpu_present:
    import cupy as cp
else:
    import numpy as cp

我担心我以后可能会遇到问题。这是好习惯吗?

最佳答案

当脚本很小并且可以在启动时确定要使用的命名空间时,我经常使用一个名为 xp 的全局变量。 (与您的解决方案相同)。我有时也使用的类似模式是使其成为类的实例属性(再次命名为 xp );对于 future 的扩展来说,它更能容忍,因为每个实例都可以为该属性具有不同的值。一个类似的、更健壮但麻烦的方法是使 xp每个函数的第一个参数。

在编写可在任何情况下使用的库时(例如,多线程代码,在单个进程中同时使用 NumPy 和 CuPy),最好让每个函数/类为参数适本地处理命名空间。我经常用get_array_module用于该目的的实用程序。 CuPy has this function ,尽管它需要安装 CuPy。 Chainer also has it .自己写也很简单。使用此实用程序,您可以使代码与 NumPy 或 CuPy 数组一起使用,而无需全局开关。

另请注意,NumPy>=1.17 可以将 CuPy 数组分派(dispatch)给适当的 CuPy 例程,因此您可以将 CuPy 数组直接传递给 numpy.*大多数情况下的功能。如果你的代码只对给定的数组进行计算,你甚至不需要使用 cupy命名空间(您仍然需要使用它来创建新数组而不提供另一个数组,例如 cupy.onescupy.random.* )。

关于numpy - "import numpy as cp"是处理非 GPU 情况的好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58062816/

相关文章:

python - 在 Cython 中更快地计算平方范数

python - cuPy错误: Implicit conversion to a host NumPy array via __array__ is not allowed,

python - cupy 会自动使用 cuda 和 GPU 吗?

gcc - 如何在 pip 命令中指定 gcc 路径?

python - 我想在我的数据框中创建一个新列,即每个特定行的犯罪率

python - NumPy 在 (M,A,B,N) 形状数组中广播 : Adding an ndarray across elements (a, b)

arrays - 多维np.argmax?

python - 从一个排序向量中查找也存在于另一个排序向量中的值

python - 为什么导入 cupy 时会出现 ModuleNotFoundError 错误?

python - Cupy OutOfMemoryError 尝试在内存映射模式下 cupy.load 较大尺寸的 .npy 文件时出现 Cupy OutOfMemoryError 错误,但 np.load 工作正常