带着Flask的皮库达给了皮库达_驱动程序逻辑错误:cuModuleLoadDataEx

2024-10-02 22:32:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在flask服务器上运行pyCUDA代码。该文件直接使用python3正确运行,但当使用flask调用相应的函数时,该文件将失败。在

以下是相关代码:

在库达夫拉斯克.py以下内容:

import pycuda.autoinit
import pycuda.driver as drv
import numpy

from pycuda.compiler import SourceModule

def cudaTest():
    mod = SourceModule("""
        int x = 4;
    """)

    print ("done")
    return

if __name__ == "__main__":
    cudaTest()

在服务器.py(仅调用函数的部分):

^{pr2}$

在运行python cudaFlask.py时,我得到了预期的输出done,但是在启动服务器并在^{上执行POST请求时,我在烧瓶控制台上得到以下错误:

pycuda._driver.LogicError: cuModuleLoadDataEx failed: invalid device context - 

mod = SourceModule...线上

我哪里出错了? 外面有一个similar question,但还没有人回答。在


Tags: 文件函数代码pyimportpycuda服务器mod
2条回答

PyCUDA可能与WSGI web服务器上下文不兼容。 如果使用某种类型的消息队列(如celeri),HTTP请求在队列上放置一个作业,队列另一端的工作人员运行CUDA程序,那么就可以让它正常工作。在

编辑:一个简单快捷的方法是使用Python Subprocess check_output function

在web请求中:

subprocess.check_output(['python', 'cudaFlask.py'])

解决了flask中延迟加载和手动生成{}的问题(即在PyCUDA中没有{}。在

请参考this中的延迟加载flask。在

我的views.py文件:

import numpy as np
import pycuda.driver as cuda
from pycuda.compiler import SourceModule

def index():
    cuda.init()
    device = cuda.Device(0) # enter your gpu id here
    ctx = device.make_context()

    mod = SourceModule("""
        int x = 4;
    """)

    ctx.pop() # very important

    print ("done")
    return "success"

相关问题 更多 >