gpt4 book ai didi

python-3.x - 如果 GPU 已经使用,Cupy 在 multithread.pool 中得到错误

转载 作者:行者123 更新时间:2023-12-03 23:52:53 25 4
gpt4 key购买 nike

我尝试在我的程序的两个部分中使用cupy,其中一个与池并行化。
我设法用一个简单的例子重现它:

import cupy
import numpy as np
from multiprocessing import pool


def f(x):
return cupy.asnumpy(2*cupy.array(x))



input = np.array([1,2,3,4])
print(cupy.asnumpy(cupy.array(input)))


print(np.array(list(map(f, input))))

p = pool.Pool(4)
output = p.map(f, input)
p.close()
p.join()
print(output)

输出如下:
[1 2 3 4]
[2 4 6 8]
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/usr/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.6/multiprocessing/pool.py", line 489, in _handle_results
task = get()
File "/usr/lib/python3.6/multiprocessing/connection.py", line 251, in recv
return _ForkingPickler.loads(buf.getbuffer())
File "cupy/cuda/runtime.pyx", line 126, in cupy.cuda.runtime.CUDARuntimeError.__init__
TypeError: an integer is required

此外,代码卡住并且不会退出,但我认为它与cupy无关。

我的配置是这样的:
CuPy Version          : 5.2.0
CUDA Root : /usr/local/cuda-10.0
CUDA Build Version : 10000
CUDA Driver Version : 10000
CUDA Runtime Version : 10000
cuDNN Build Version : 7301
cuDNN Version : 7301
NCCL Build Version : 2307

最佳答案

此问题并非特定于 CuPy。由于 CUDA 的限制,在 CUDA 初始化后不能对进程进行 fork。

您需要使用 multiprocessing.set_start_method('spawn') (或 forkserver ),或避免初始化 CUDA(即,在您 fork 子进程之前,不要使用 CuPy API,除了 import cupy )。

关于python-3.x - 如果 GPU 已经使用,Cupy 在 multithread.pool 中得到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54808148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com