cuda.Stream.synchronize(): cuStreamSynchronize failed: неопределенная ошибка запуска
Я столкнулся с "неопределенной ошибкой запуска" через некоторое время после запуска программы python3 с использованием pycuda. В настоящее время я работаю в системе идентификации объектов в реальном времени. Иногда программа может работать несколько часов или даже дней, но со временем перестает работать. Я не вижу в классе проблем, приводящих к сбою:
import pycuda.driver as cuda
stream = cuda.Stream()
self.ctx = cuda.Device(0).make_context()
# Deserialize the engine from file
with open(ENGINE_WEIGHTS, "rb") as f:
engine = runtime.deserialize_cuda_engine(f.read())
context = engine.create_execution_context()
def infer(self, image):
self.ctx.push()
stream = self.stream
context = self.context
engine = self.engine
host_inputs = self.host_inputs
cuda_inputs = self.cuda_inputs
host_outputs = self.host_outputs
cuda_outputs = self.cuda_outputs
bindings = self.bindings
batch_input_image = np.empty(shape=[self.batch_size, 3, self.input_h, self.input_w])
input_image, image_raw, origin_h, origin_w = self.processor_image.preprocess_image(image)
np.copyto(batch_input_image[0], input_image)
batch_input_image = np.ascontiguousarray(batch_input_image)
# Copy input image to host buffer
np.copyto(host_inputs[0], batch_input_image.ravel())
start = time.time()
# Transfer input data to the GPU.
cuda.memcpy_htod_async(cuda_inputs[0], host_inputs[0], stream)
# Run inference.
context.execute_async(batch_size=self.batch_size, bindings=bindings, stream_handle=stream.handle)
# Transfer predictions back from the GPU.
cuda.memcpy_dtoh_async(host_outputs[0], cuda_outputs[0], stream)
# Synchronize the stream
stream.synchronize()
end = time.time()
# Remove any context from the top of the context stack, deactivating it.
self.ctx.pop()
# Here we use the first row of output in that batch_size = 1
output = host_outputs[0]
# Do postprocess
t = end - start
image_raw = self.process_output(image_raw, origin_h, origin_w,output,t)
return image_raw,t