多数组计算中的cupy执行错误

Posted

技术标签:

【中文标题】多数组计算中的cupy执行错误【英文标题】:cupy execution error in multiple array calculation 【发布时间】:2018-12-03 13:27:52 【问题描述】:

numpy 循环没问题。 cupy 循环 1 次,3 次就可以了。但 10 次出错。 我该如何解决这个问题? 这是gpu内存问题吗?

(源代码)

import cupy as cp  
import numpy as np  

mc = 5000  
def fcal(ff, nloop, skey):  
    maa = ff.zeros((mc,mc)) + 0.0  
    mbb = ff.zeros((mc,mc)) + 0.0  
    for jj in range(nloop): maa = ff.dot(maa, mbb)  
    asum = ff.sum(maa)  
    print("[fcal] (%s) nloop=[%2d] asum=[%s]" % (skey, nloop, asum))  

fcal(np,  1, "np")  
fcal(np,  3, "np")  
fcal(np, 10, "np")  
fcal(cp,  1, "cp")  
fcal(cp,  3, "cp")  
fcal(cp, 10, "cp")  

(执行结果)

[fcal] (np) nloop=[ 1] asum=[0.0]  
[fcal] (np) nloop=[ 3] asum=[0.0]  
[fcal] (np) nloop=[10] asum=[0.0]  
[fcal] (cp) nloop=[ 1] asum=[0.0]  
[fcal] (cp) nloop=[ 3] asum=[0.0]  
Traceback (most recent call last):  
  File "C:\testdir\2cupy_test.py", line 30, in <module>  
    fcal(cp, 10, "cp")  
  File "C:\testdir\2cupy_test.py", line 22, in fcal  
    print("[fcal] (%s) nloop=[%2d] asum=[%s]" % (skey, nloop, asum))  
  File "cupy\core\core.pyx", line 1596, in cupy.core.core.ndarray.__str__  
  File "cupy\core\core.pyx", line 1643, in cupy.core.core.ndarray.get  
  File "cupy\cuda\memory.pyx", line 372, in cupy.cuda.memory.MemoryPointer.copy_to_host  
  File "cupy\cuda\runtime.pyx", line 255, in cupy.cuda.runtime.memcpy  
  File "cupy\cuda\runtime.pyx", line 135, in cupy.cuda.runtime.check_status  
cupy.cuda.runtime.CUDARuntimeError: cudaErrorLaunchFailure: unspecified launch failure  

【问题讨论】:

也许你遇到了一个 Windows WDDM TDR 事件(你可以用谷歌搜索,或者查看here) 【参考方案1】:

您的代码没有问题:每次迭代都相互独立,因为您以顺序模式求和零。如果您可以使用单次迭代运行它而不会出错,那么您的问题不在代码实现中。

正如 Robert Crovella 在 cmets 中指出的那样,您可能会遇到 TDR 错误,因为更多的迭代可能会延迟 GPU 对查询操作系统的响应时间。

我想检查一下你是否真的遇到了 TDR 问题,假设一次迭代运行没有问题,尝试在每个 ff.dot 操作之间添加几秒钟的简单睡眠,以便让操作系统收到响应来自 GPU。

我强调这不是 TDR 问题的解决方案,而是一种检测您是否陷入其中的简单方法。

import time
...
for jj in range(nloop): 
   maa = ff.dot(maa, mbb)
   time.sleep(10)

【讨论】:

感谢您的回答。我已经使用 regedit 将 TdrDelay 设置为 8。我尝试了“time.sleep(2)”、“time.sleep(10)”,但仍然出现错误。 8 秒可能太短,具体取决于您的计算机和 GPU 规格(在我的 Linux 上的 TITAN X 上,nloop=1 大约需要 3 秒)。可以增加重试吗?

以上是关于多数组计算中的cupy执行错误的主要内容,如果未能解决你的问题,请参考以下文章

Cupy 错误 - 超出磁盘配额 [包括最小示例]

如何正确使用 CuPy 流

如何将 cupy.ndarray 转换为标量?

python错误:无法从'cupy.core'导入名称'core'

Cupy的用处概述

Cupy map_coordinates 给出形状不匹配错误