Python 模块 Cupy 函数在使用 cupy.einsum() 时出错
Posted
技术标签:
【中文标题】Python 模块 Cupy 函数在使用 cupy.einsum() 时出错【英文标题】:Python module Cupy function gives error when using cupy.einsum() 【发布时间】:2020-09-22 00:25:27 【问题描述】:我正在处理 Cupy 的问题。我目前正在使用 Cupy,它以非常令人满意的高速运行。但是当我使用cupy.einsum()
方法时出现问题
我使用与 Numpy 相同的语法,没有任何错误。但是当使用 Cupy 时,它给了我一个错误。这是代码部分
import numpy as np
A = np.random.randn(2,3,10)
B = np.random.randn(3,4)
C = np.einsum('ijk,jl->ijl',A,B)
这很有效,我得到了我想要的结果。但是,当我用 Cupy 编写相同的代码时
import cupy as cp
A = cp.random.randn(2,3,10)
B = cp.random.randn(3,4)
C = cp.einsum('ijk,jl->ijl',A,B)
当我运行它时,会计算 A 和 B。但是在计算 C 时它给了我一个错误。这是错误:
Traceback(最近一次调用最后一次):
文件“”,第 4 行,在 C = cp.einsum('ijk,jl->ijl',A,B)
文件 "C:\Users\Okan\anaconda3\lib\site-packages\cupy\linalg\einsum.py", 第 389 行,在 einsum result_dtype = cupy.result_type(*operands) if dtype is None else dtype
文件“array_function internals>”,第 6 行,在 result_type 中
TypeError: 在类型上找不到“numpy.result_type”的实现 实现array_function:[
]
如果您对此问题有任何想法或解决方案,我将非常高兴。 谢谢。
【问题讨论】:
您使用的是哪个 NumPy/CuPy 版本?您的 NumPy 代码在我使用 NumPy 1.16.6 或 1.19.1 的环境 (ValueError: einstein sum subscripts string contains too many subscripts for operand 0
) 中引发错误。
感谢您的警告。我在编写代码部分时犯了一个错误。不是我编辑过的,代码部分正在我的电脑上运行。但我仍然对 Cupy 有同样的问题。
我无法使用 CuPy v7.8.0 重现此错误。你能告诉我你用的是什么版本吗?
现在,我正在使用 anaconda,显然它支持 6.0.0 版本。 anaconda.org/anaconda/cupy
那个包似乎已经过时了(很抱歉造成混淆......我们将讨论是否最好删除它。)你可以使用 conda-forge 包来安装最新的 CuPy 吗? docs.cupy.dev/en/stable/…
【参考方案1】:
遇到同样问题的朋友,在Conda中打开一个新环境,安装python 3.9以上版本即可。之后,当你通过
安装cupy时conda install cupy
它将直接安装最新版本(v.7.8 或更高版本)。问题是基于cupy的版本。升级后问题解决。
【讨论】:
以上是关于Python 模块 Cupy 函数在使用 cupy.einsum() 时出错的主要内容,如果未能解决你的问题,请参考以下文章
为啥我系统上的所有 CuPy 函数都比它们的 NumPy 对应函数慢?
Python GPU 加速数据科学 | 计算距离矩阵在用 cuPy 时快了约 100 倍
Python GPU 加速数据科学 | 计算距离矩阵在用 cuPy 时快了约 100 倍