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 倍

Chainer 模块“cupy.cudnn”没有属性“softmax_forward”

用cupy增加内环距离函数

Cupy.unique() 函数中是不是有 CuPy 版本支持(轴)选项?任何解决方法?