在使用cupy模块的flatten()和shaping()函数时发生错误



我最初使用numpy来运行我的程序,然后我重写了程序以使用cupy,但是在使用cupy.flatten()函数

时发生了错误下面是最小的例子

import cupy
import cudf
df = cudf.DataFrame([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]], index=['a', 'b', 'c']).T
array = df.loc[df['a']%3==1, ['b', 'c']].to_cupy().flatten()

这是它返回的错误信息

Traceback (most recent call last):
File "/home/julio/pyy/test/nick_test/test.py", line 4, in <module>
array = df.loc[df['a']%3==1, ['b', 'c']].to_cupy().flatten()
File "cupy/_core/core.pyx", line 789, in cupy._core.core._ndarray_base.flatten
File "cupy/_core/core.pyx", line 808, in cupy._core.core._ndarray_base.flatten
File "cupy/_core/_routines_manipulation.pyx", line 131, in cupy._core._routines_manipulation._ndarray_flatten
File "cupy/_core/_routines_manipulation.pyx", line 140, in cupy._core._routines_manipulation._ndarray_flatten_order_c
File "cupy/_core/core.pyx", line 616, in cupy._core.core._ndarray_base.copy
File "cupy/_core/core.pyx", line 585, in cupy._core.core._ndarray_base.astype
File "cupy/_core/_kernel.pyx", line 1310, in cupy._core._kernel.ufunc.__call__
File "cupy/_core/_kernel.pyx", line 1337, in cupy._core._kernel.ufunc._get_ufunc_kernel
File "cupy/_core/_kernel.pyx", line 1029, in cupy._core._kernel._get_ufunc_kernel
File "cupy/_core/_kernel.pyx", line 72, in cupy._core._kernel._get_simple_elementwise_kernel
File "cupy/_core/core.pyx", line 2232, in cupy._core.core.compile_with_cache
File "/home/julio/miniconda3/envs/nick-rapids-22.10/lib/python3.9/site-packages/cupy/cuda/compiler.py", line 493, in _compile_module_with_cache
return _compile_with_cache_cuda(
File "/home/julio/miniconda3/envs/nick-rapids-22.10/lib/python3.9/site-packages/cupy/cuda/compiler.py", line 601, in _compile_with_cache_cuda
with tempfile.NamedTemporaryFile(dir=cache_dir, delete=False) as tf:
File "/home/julio/miniconda3/envs/nick-rapids-22.10/lib/python3.9/tempfile.py", line 545, in NamedTemporaryFile
(fd, name) = _mkstemp_inner(dir, prefix, suffix, flags, output_type)
File "/home/julio/miniconda3/envs/nick-rapids-22.10/lib/python3.9/tempfile.py", line 255, in _mkstemp_inner
fd = _os.open(file, flags, 0o600)
PermissionError: [Errno 13] Permission denied: '/home/julio/.cupy/kernel_cache/tmp5m2yd92w'

我尝试使用重塑(-1),但它返回一个类似的错误,唯一的区别是,最后一行是

PermissionError: [Errno 13] Permission denied: '/home/julio/.cupy/kernel_cache/tmpb9990pi6'

系统是ubuntu 22.04,拷贝版本是11.3.0。

我在load()和full()函数中遇到了类似的问题,但我设法避免了这些问题。但flatten()和shaping()的问题必须解决

似乎您在CuPy的默认缓存目录上有权限问题。您可以尝试解决这个问题的最简单的方法是删除该目录,并在重新创建该目录时以正确的权限重新运行代码:

rm -rf /home/julio/.cupy

如果仍然不起作用,您可能有一些系统配置(如umask)以某种意想不到的方式管理权限。假设您的用户名是julio,您可以尝试手动更正权限,例如:

chmod 700 /home/julio/.cupy
chown -R julio /home/julio/.cupy
find /home/julio/.cupy -type d exec chmod 700 {} ;
find /home/julio/.cupy -type f exec chmod 600 {} ;

如果您有意没有权限或不想在/home/julio/.cupy下写CuPy缓存,您可以将其更改为自定义目录。然后,您可以将该环境变量设置为您确定具有创建目录/写入文件权限的目录,例如CUPY_CACHE_DIR=/tmp/julio-cupy-cache。请注意,建议您将缓存保存在持久目录中,这样可以防止在重新启动后需要对内核进行jit编译。

最新更新