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

0 ответов

Другие вопросы по тегам