91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現Pytorch通過保存為ONNX模型轉TensorRT5

發布時間:2020-07-22 10:48:27 來源:億速云 閱讀:918 作者:小豬 欄目:開發技術

這篇文章主要講解了如何實現Pytorch通過保存為ONNX模型轉TensorRT5,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

1 Pytorch以ONNX方式保存模型

 def saveONNX(model, filepath):
  '''
  保存ONNX模型
  :param model: 神經網絡模型
  :param filepath: 文件保存路徑
  '''
  
  # 神經網絡輸入數據類型
  dummy_input = torch.randn(self.config.BATCH_SIZE, 1, 28, 28, device='cuda')
  torch.onnx.export(model, dummy_input, filepath, verbose=True)

2 利用TensorRT5中ONNX解析器構建Engine

 def ONNX_build_engine(onnx_file_path):
  '''
  通過加載onnx文件,構建engine
  :param onnx_file_path: onnx文件路徑
  :return: engine
  '''
  # 打印日志
  G_LOGGER = trt.Logger(trt.Logger.WARNING)

  with trt.Builder(G_LOGGER) as builder, builder.create_network() as network, trt.OnnxParser(network, G_LOGGER) as parser:
   builder.max_batch_size = 100
   builder.max_workspace_size = 1 << 20

   print('Loading ONNX file from path {}...'.format(onnx_file_path))
   with open(onnx_file_path, 'rb') as model:
    print('Beginning ONNX file parsing')
    parser.parse(model.read())
   print('Completed parsing of ONNX file')

   print('Building an engine from file {}; this may take a while...'.format(onnx_file_path))
   engine = builder.build_cuda_engine(network)
   print("Completed creating Engine")

   # 保存計劃文件
   # with open(engine_file_path, "wb") as f:
   #  f.write(engine.serialize())
   return engine

3 構建TensorRT運行引擎進行預測

 def loadONNX2TensorRT(filepath):
  '''
  通過onnx文件,構建TensorRT運行引擎
  :param filepath: onnx文件路徑
  '''
  # 計算開始時間
  Start = time()

  engine = self.ONNX_build_engine(filepath)

  # 讀取測試集
  datas = DataLoaders()
  test_loader = datas.testDataLoader()
  img, target = next(iter(test_loader))
  img = img.numpy()
  target = target.numpy()

  img = img.ravel()

  context = engine.create_execution_context()
  output = np.empty((100, 10), dtype=np.float32)

  # 分配內存
  d_input = cuda.mem_alloc(1 * img.size * img.dtype.itemsize)
  d_output = cuda.mem_alloc(1 * output.size * output.dtype.itemsize)
  bindings = [int(d_input), int(d_output)]

  # pycuda操作緩沖區
  stream = cuda.Stream()
  # 將輸入數據放入device
  cuda.memcpy_htod_async(d_input, img, stream)
  # 執行模型
  context.execute_async(100, bindings, stream.handle, None)
  # 將預測結果從從緩沖區取出
  cuda.memcpy_dtoh_async(output, d_output, stream)
  # 線程同步
  stream.synchronize()

  print("Test Case: " + str(target))
  print("Prediction: " + str(np.argmax(output, axis=1)))
  print("tensorrt time:", time() - Start)

  del context
  del engine

看完上述內容,是不是對如何實現Pytorch通過保存為ONNX模型轉TensorRT5有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

军事| 文登市| 蓝田县| 道孚县| 水城县| 东源县| 翼城县| 大名县| 郓城县| 台南县| 雷州市| 临沂市| 绥德县| 宁城县| 酒泉市| 兴仁县| 连南| 屯留县| 凌云县| 宁蒗| 五河县| 阳新县| 盈江县| 永宁县| 家居| 油尖旺区| 赤壁市| 稻城县| 南华县| 新野县| 龙门县| 庆元县| 和龙市| 平阳县| 佳木斯市| 金坛市| 东乌珠穆沁旗| 宜都市| 建德市| 九龙城区| 钟祥市|