編譯器:TPU-MLIR環境構建及使用指南(一)

江左子固發表於2024-04-11

編譯器:TPU-MLIR

TPU-MLIR是一種專用於處理器的TPU編譯器。該編譯器專案提供了一個完整的工具鏈,可以將來自不同深度學習框架(PyTorch, ONNX, TFLite和Caffe)的各種預訓練神經網路模型轉換為高效的模型檔案(bmodel/cvimodel),以便在SOPHON TPU上執行。透過量化到不同精度的bmodel/cvimodel,最佳化了模型在sophon計算TPU上的加速和效能。這使得可以將與物件檢測、語義分割和物件跟蹤相關的各種模型部署到底層硬體上以實現加速。


  1. 支援多種深度學習框架
    目前支援的框架包括PyTorch、ONNX、TFLite和Caffe。來自其他框架的模型需要轉換為ONNX模型。有關將其他深度學習架構的網路模型轉換為ONNX的指導,請參考ONNX官方網站:https://github.com/onnx/tutorials。

  2. 使用者友好的操作
    透過開發手冊和相關部署案例瞭解TPU-MLIR的原理和操作步驟,可以從頭開始進行模型部署。熟悉Linux命令和模型編譯量化命令對於動手實踐是足夠的。

  3. 簡化量化部署步驟
    模型轉換需要在SOPHGO提供的docker中執行,主要包括兩個步驟:使用model_transform.py將原始模型轉換為MLIR檔案,使用model_deploy.py將MLIR檔案轉換為bmodel格式。bmodel是可以在SOPHGO TPU硬體上加速的模型檔案格式。

  4. 適應多種架構和硬體模式
    量化的bmodel模型可以在PCIe和SOC模式下執行在TPU上進行效能測試。


AI編譯器的流程
啊


SophonSDK是算能科技基於其自主研發的 AI 晶片所定製的深度學習 SDK,涵蓋了神經網路推理階段所需的模型最佳化、高效執行支援等能力,為深度學習應用開發和部署提供易用、高效的全棧式解決方案。
基礎工具包:
• tpu-nntc 負責對第三方深度學習框架下訓練得到的神經網路模型進行離線編譯和最佳化,生成最終執行時需要的BModel。目前支援Caffe、Darknet、MXNet、ONNX、PyTorch、PaddlePaddle、TensorFlow等。
• libsophon 提供BMCV、BMRuntime、BMLib等庫,用來驅動VPP、TPU等硬體,完成影像處理、張量運算、模型推理等操作,供使用者進行深度學習應用開發。
• sophon-mw 封裝了BM-OpenCV、BM-FFmpeg等庫,用來驅動VPU、JPU等硬體,支援RTSP流、GB28181流的解析,影片影像編解碼加速等,供使用者進行深度學習應用開發。
• sophon-sail 提供了支援Python/C++的高階介面,是對BMRuntime、BMCV、BMDecoder、BMLib等底層庫介面的封裝,供使用者進行深度學習應用開發。
高階工具包:
• tpu-mlir 為TPU編譯器工程提供一套完整的工具鏈,可以將不同框架下預訓練的神經網路,轉化為可以在算能TPU上高效執行的二進位制檔案BModel。目前直接支援的框架包括tflite、onnx和Caffe。
• tpu-perf 為模型效能和精度驗證提供了一套完整工具包。
• tpu-kernel 是晶片底層開發介面,既可以呼叫專用指令實現深度學習業務邏輯的加速,又可以呼叫通用指令實現客制的各種演算法加速。


github的TPU-MLIR程式碼
sophon-sail 使用者手冊
a
目前直接支援的框架有PyTorch、ONNX、TFLite和Caffe。其他框架的模型需要轉換成ONNX模型。如何將其他深 度學習架構的網路模型轉換成ONNX, 可以參考ONNX官網ONNX官網

啊
模型轉換需要在指定的docker執行, 主要分兩步, 一是透過 model_transform.py 將原始模型 轉換成mlir檔案, 二是透過 model_deploy.py 將mlir檔案轉換成bmodel。
如果要轉INT8模型, 則需要呼叫 run_calibration.py生成校準表, 然後傳給 model_deploy.py。如果INT8模型不滿足精度需要, 可以呼叫
run_qtable.py 生成量化表, 用來決定哪些層採用浮點計算,然後傳給 model_deploy.py 生成混精度模型。

啊
TPU-NNTC針對不同深度學習框架需要不同的前端
編譯命令:
BMNetC: 面向Caffe model的BMCompiler前端
BMNetT: 面向TensorFlow model的BMCompiler前端
BMNetM: 面向MxNet model的BMCompiler前端
BMNetP: 面向PyTorch model的BMCompiler前端
BMNetD: 面向Darknet model的BMCompiler前端
BMNetO: 面向ONNX model的BMCompiler前端
BMPaddle: 面向PaddlePaddle model的BMCompiler前端


資料:

  1. 官網 我自己的這篇文章總結了官網的前兩章內容·引言&編譯器概述

相關文章