Forward DL深度學(xué)習(xí)推理加速框架
Forward 是一款騰訊研發(fā)并開源的 GPU 高性能推理加速框架。它提出了一種解析方案,可直接加載主流框架模型(Tensorflow / PyTorch / Keras / ONNX)轉(zhuǎn)換成 TensorRT 推理加速引擎,幫助用戶節(jié)省中間繁雜的模型轉(zhuǎn)換或網(wǎng)絡(luò)構(gòu)建步驟。
相對(duì)于直接使用 TensorRT,F(xiàn)orward 更易用以及更容易擴(kuò)展支持更多模型和算子。目前,F(xiàn)orward 除了覆蓋支持主流的 CV,NLP 及推薦領(lǐng)域的深度學(xué)習(xí)模型外,還支持一些諸如 BERT,F(xiàn)aceSwap,StyleTransfer 這類高級(jí)模型。
特性
- 模型性能優(yōu)化高:基于 TensorRT API 開發(fā)網(wǎng)絡(luò)層級(jí)的支持,保證對(duì)于通用網(wǎng)絡(luò)層級(jí)的推理性能優(yōu)化處于最優(yōu)級(jí)別;
- 模型支持范圍廣:除了通用的 CV,NLP,及推薦類模型,還支持一些諸如 BERT,F(xiàn)aceSwap,StyleTransfer 這類高級(jí)模型;
- 多種推理模式:支持 FLOAT / HALF / INT8 推理模式;
- 接口簡(jiǎn)單易用:直接導(dǎo)入已訓(xùn)練好的 Tensorflow(.pb) / PyTorch(.pth) / Keras(.h5) / ONNX(.onnx) 模型文件,隱式轉(zhuǎn)換為高性能的推理 Engine 進(jìn)行推理加速;
- 支持自研擴(kuò)展:可根據(jù)業(yè)務(wù)模型擴(kuò)展支持自定義網(wǎng)絡(luò)層級(jí);
- 支持 C++ 和 Python 接口調(diào)用。
快速上手 Forward
環(huán)境依賴
- NVIDIA CUDA >= 10.0, CuDNN >= 7 (推薦 CUDA 10.2 以上)
- TensorRT >= 7.0.0.11 (推薦 TensorRT-7.2.1.6)
- CMake >= 3.12.2
- GCC >= 5.4.0, ld >= 2.26.1
- PyTorch >= 1.7.0
- TensorFlow >= 1.15.0 (若使用 Linux 操作系統(tǒng),需額外下載 Tensorflow 1.15.0,并將解壓出來(lái)的
.so文件拷貝至Forward/source/third_party/tensorflow/lib目錄下) - Keras HDF5 (從
Forward/source/third_party/hdf5源碼構(gòu)建)
項(xiàng)目構(gòu)建
使用 CMake 進(jìn)行構(gòu)建生成 Makefiles 或者 Visual Studio 項(xiàng)目。根據(jù)使用目的,F(xiàn)orward 可構(gòu)建成適用于不同框架的庫(kù),如 Fwd-Torch、Fwd-Python-Torch、Fwd-Tf、Fwd-Python-Tf、Fwd-Keras、Fwd-Python-Keras、Fwd-Onnx 和 Fwd-Python-Onnx。
以 Linux 平臺(tái)構(gòu)建 Fwd-Tf 為例,
步驟一:克隆項(xiàng)目
1 git clone https://github.com/Tencent/Forward.git
步驟二:下載 Tensorflow 1.15.0(僅在 Linux 平臺(tái)使用 Tensorflow 框架推理時(shí)需要)
1 cd Forward/source/third_party/tensorflow/
2 wget https://github.com/neargye-forks/tensorflow/releases/download/v1.15.0/libtensorflow-cpu-linux-x86_64-1.15.0.tar.gz
3 tar -xvf libtensorflow-gpu-linux-x86_64-1.15.0.tar.gz
步驟三:創(chuàng)建 build 文件夾
1 cd ~/Forward/ 2 rm -rf build 3 mkdir -p build 4 cd build/
步驟四:使用 cmake 生成構(gòu)建關(guān)系,需指定 TensorRT_ROOT 安裝路徑
1 cmake .. -DTensorRT_ROOT=<path_to_TensorRT> -DENABLE_TENSORFLOW=ON -DENABLE_UNIT_TESTS=ON
步驟五:使用 make 構(gòu)建項(xiàng)目
1 make -j
步驟六:運(yùn)行 unit_test 驗(yàn)證項(xiàng)目是否構(gòu)建成功
cd bin/ ./unit_test --gtest_filter=TestTfNodes.* # 出現(xiàn)已下提示表示項(xiàng)目構(gòu)建成 # [ OK ] TestTfNodes.ZeroPadding (347 ms) # [----------] 22 tests from TestTfNodes (17555 ms total) # [----------] Global test environment tear-down # [==========] 22 tests from 1 test case ran. (17555 ms total) # [ PASSED ] 22 tests.
Logging 日志
Forward 使用 easylogging++ 作為日志功能,并使用 forward_log.conf 作為日志配置文件。
- 若工作目錄中存在
forward_log.conf文件,F(xiàn)orward 將使用該配置文件,更多內(nèi)容可參考 Using-configuration-file; - 若工作目錄中不存在
forward_log.conf文件,F(xiàn)orward 將使用默認(rèn)配置,并將日志記錄到logs/myeasylog.log。
forward_log.conf 文件配置樣例
* GLOBAL: FORMAT = "[%level] %datetime %fbase(%line): %msg" FILENAME = "Forward.log" ENABLED = true TO_FILE = true TO_STANDARD_OUTPUT = true PERFORMANCE_TRACKING = true MAX_LOG_FILE_SIZE = 2097152 ## 2MB - Comment starts with two hashes (##) LOG_FLUSH_THRESHOLD = 100 ## Flush after every 100 logs
模型和算子支持
當(dāng)前 Forward 的模型與算子支持如下所示,如有需要添加更多支持的,歡迎聯(lián)系添加 Issue 反饋。如需要自行擴(kuò)展添加支持的,可參考 開源共建:擴(kuò)展添加支持操作的流程
