I want to run a pyCUDA code on a flask server. The file runs correctly directly using python3 but fails when the corresponding function is called using flask.
Here is the relevant code:
cudaFlask.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()
server.py (only the part which calls the function):
@app.route('/bundle', methods=['POST'])
def bundle_edges():
cudaTest()
return "success"
On running python cudaFlask.py I get the output done as expected but on starting the server and doing POST request at website/bundle I get the following error on the flask console:
pycuda._driver.LogicError: cuModuleLoadDataEx failed: invalid device context -
on the line mod = SourceModule...
Where am I going wrong? There is a similar question out there but it has not been answered yet.
Solved the issue with lazy loading in flask and making the context manually (i.e. without pycuda.autoinit in PyCUDA.
Refer this for lazy loading in flask.
My views.py file:
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"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With