如何将 CUDA 与 vaex(一个 Python 库)一起使用
Posted
技术标签:
【中文标题】如何将 CUDA 与 vaex(一个 Python 库)一起使用【英文标题】:How can I use CUDA with vaex (a Python library) 【发布时间】:2020-10-20 06:37:39 【问题描述】:我的代码如下:
df['O_ID'] = (df.apply(get_match_id, arguments=[df['pickup_longitude'], df['pickup_latitude']])).jit_cuda()
第一次使用这个函数——jit_cuda(),报错“No Module named cupy”
但是,当我安装了 cupy-cuda101(适应我的 CUDA 版本) 我收到一个新错误
Traceback (most recent call last):
File "F:\Anaconda3\lib\site-packages\vaex\dataframe.py", line 3580, in table_part
values[name] = df.evaluate(name)
File "F:\Anaconda3\lib\site-packages\vaex\dataframe.py", line 2616, in evaluate
return self._evaluate_implementation(expression, i1=i1, i2=i2, out=out, selection=selection, filtered=filtered, internal=internal, parallel=parallel, chunk_size=chunk_size)
File "F:\Anaconda3\lib\site-packages\vaex\dataframe.py", line 5352, in _evaluate_implementation
dtypes[expression] = df.data_type(expression, internal=False)
File "F:\Anaconda3\lib\site-packages\vaex\dataframe.py", line 1998, in data_type
data = self.evaluate(expression, 0, 1, filtered=True, internal=True, parallel=False)
File "F:\Anaconda3\lib\site-packages\vaex\dataframe.py", line 2616, in evaluate
return self._evaluate_implementation(expression, i1=i1, i2=i2, out=out, selection=selection, filtered=filtered, internal=internal, parallel=parallel, chunk_size=chunk_size)
File "F:\Anaconda3\lib\site-packages\vaex\dataframe.py", line 5427, in _evaluate_implementation
value = scope.evaluate(expression)
File "F:\Anaconda3\lib\site-packages\vaex\scopes.py", line 97, in evaluate
result = self[expression]
File "F:\Anaconda3\lib\site-packages\vaex\scopes.py", line 139, in __getitem__
self.values[variable] = self.evaluate(expression) # , out=self.buffers[variable])
File "F:\Anaconda3\lib\site-packages\vaex\scopes.py", line 103, in evaluate
result = eval(expression, expression_namespace, self)
File "<string>", line 1, in <module>
File "F:\Anaconda3\lib\site-packages\vaex\expression.py", line 1073, in __call__
return self.f(*args, **kwargs)
File "F:\Anaconda3\lib\site-packages\vaex\expression.py", line 1120, in wrapper
return cupy.asnumpy(func(*args))
File "cupy\core\fusion.pyx", line 905, in cupy.core.fusion.Fusion.__call__
File "cupy\core\fusion.pyx", line 754, in cupy.core.fusion._FusionHistory.get_fusion
File "<string>", line 6, in f
NameError: name 'lambda_function_1' is not defined
我该如何解决?
【问题讨论】:
【参考方案1】:我的理解是,vaex 中的即时编译仅适用于虚拟列,或主要使用 numpy 方法或纯 python 算术的各种算术运算计算的表达式/列。
使用apply
时,一个函数可以非常抽象,基本上是你想要的,所以它可能无法编译。
如果您可以使用 numpy 表达式重写您的 .apply
函数,那么您很可能可以使用 jit_cuda
方法来加速它。 Vaex 不建议使用.apply
,因为它很难并行化,应该作为“最后的手段”使用。
来源:https://vaex.io/docs/tutorial.html#Just-In-Time-compilation
【讨论】:
以上是关于如何将 CUDA 与 vaex(一个 Python 库)一起使用的主要内容,如果未能解决你的问题,请参考以下文章
如何将 cuda 驱动程序 api 与 cuda 运行时 api 混合使用?
如何将 cuda-gdb 与使用 nvcc 编译的静态库的 g++ 链接程序一起使用?
如何将 cuPrintf 与 .cpp 文件中具有 main() 的 cuda 项目一起使用?