Forward DL

深度学习推理加速框架
授权协议 Apache 2.0
开发语言 C/C++ Python
所属分类 神经网络/人工智能、 机器学习/深度学习
软件类型 开源软件
地区 不详
投 递 者 靳举
操作系统 跨平台
开源组织 腾讯
适用人群 未知
 软件概览

Forward 是一款腾讯研发并开源的 GPU 高性能推理加速框架。它提出了一种解析方案,可直接加载主流框架模型(Tensorflow / PyTorch / Keras / ONNX)转换成 TensorRT 推理加速引擎,帮助用户节省中间繁杂的模型转换或网络构建步骤。

相对于直接使用 TensorRT,Forward 更易用以及更容易扩展支持更多模型和算子。目前,Forward 除了覆盖支持主流的 CV,NLP 及推荐领域的深度学习模型外,还支持一些诸如 BERT,FaceSwap,StyleTransfer 这类高级模型。

特性

  • 模型性能优化高:基于 TensorRT API 开发网络层级的支持,保证对于通用网络层级的推理性能优化处于最优级别;
  • 模型支持范围广:除了通用的 CV,NLP,及推荐类模型,还支持一些诸如 BERT,FaceSwap,StyleTransfer 这类高级模型;
  • 多种推理模式:支持 FLOAT / HALF / INT8 推理模式;
  • 接口简单易用:直接导入已训练好的 Tensorflow(.pb) / PyTorch(.pth) / Keras(.h5) / ONNX(.onnx) 模型文件,隐式转换为高性能的推理 Engine 进行推理加速;
  • 支持自研扩展:可根据业务模型扩展支持自定义网络层级
  • 支持 C++ 和 Python 接口调用

快速上手 Forward

环境依赖

  • 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 操作系统,需额外下载 Tensorflow 1.15.0,并将解压出来的 .so 文件拷贝至 Forward/source/third_party/tensorflow/lib 目录下)
  • Keras HDF5 (从 Forward/source/third_party/hdf5 源码构建)

项目构建

使用 CMake 进行构建生成 Makefiles 或者 Visual Studio 项目。根据使用目的,Forward 可构建成适用于不同框架的库,如 Fwd-Torch、Fwd-Python-Torch、Fwd-Tf、Fwd-Python-Tf、Fwd-Keras、Fwd-Python-Keras、Fwd-Onnx 和 Fwd-Python-Onnx。

以 Linux 平台构建 Fwd-Tf 为例,

步骤一:克隆项目

1 git clone https://github.com/Tencent/Forward.git

步骤二:下载 Tensorflow 1.15.0(仅在 Linux 平台使用 Tensorflow 框架推理时需要)

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

步骤三:创建 build 文件夹

1 cd ~/Forward/
2 rm -rf build
3 mkdir -p build
4 cd build/

步骤四:使用 cmake 生成构建关系,需指定 TensorRT_ROOT 安装路径

1 cmake ..  -DTensorRT_ROOT=<path_to_TensorRT> -DENABLE_TENSORFLOW=ON -DENABLE_UNIT_TESTS=ON

步骤五:使用 make 构建项目

1 make -j

步骤六:运行 unit_test 验证项目是否构建成功

cd bin/
./unit_test --gtest_filter=TestTfNodes.*

# 出现已下提示表示项目构建成
# [       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 文件,Forward 将使用该配置文件,更多内容可参考 Using-configuration-file
  • 若工作目录中不存在 forward_log.conf 文件,Forward 将使用默认配置,并将日志记录到 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

模型和算子支持

当前 Forward 的模型与算子支持如下所示,如有需要添加更多支持的,欢迎联系添加 Issue 反馈。如需要自行扩展添加支持的,可参考 开源共建:扩展添加支持操作的流程

模型

算子

参考资料

  1. 推理流程构建过程
  2. 推理引擎使用方法
  3. 工具与测试
  4. 常见问题
  • 写在前面 以下是本人根据Pytorch学习过程中总结出的经验,如果有错误,请指正。 正文 为什么都用def forward,而不改个名字? 在Pytorch建立神经元网络模型的时候,经常用到forward方法,表示在建立模型后,进行神经元网络的前向传播。说的直白点,forward就是专门用来计算给定输入,得到神经元网络输出的方法。 在代码实现中,也是用def forward来写forward前向传

  • mnist_forward.py import tensorflow as tf INPUT_NODE = 784 OUTPUT_NODE = 10 LAYER1_NODE = 500 def get_weight(shape, regularizer): w = tf.Variable(tf.truncated_normal(shape,stddev=0.1)) if reg

  • Artificial intelligence is any technique that enables machines — computers, in particular — to mimic human behaviour and perform similar tasks. Most software could fall under this broad definition. Ul

  • forward过程 假设以概率 p p p丢弃 K K K维输入向量 x = [ x 1 , x 2 , , , x K ] x=[x_1, x_2, ,, x_K] x=[x1​,x2​,,,xK​]的某些值。 那么经过dropout之后的向量定义为 d d d,有 x ′ = d r o p o u t ( x ) x' = dropout(x) x′=dropout(x) 这个过程相当于生成

  • Docker IP forward问题 在用Docker build一个基于openjdk:8-jdk-alpine的镜像时,遇到了以下错误: WARNING: IPv4 forwarding is disabled. Networking will not work. fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APK

  • DL之Transformer:Transformer的简介(优缺点/架构详解,基于Transformer的系列架构对比分析)、使用方法(NLP领域/CV领域)、案例应用之详细攻略 目录 Transformer的简介 1、Transformer的概述 2、Transformer模型的整体结构、各组件意义

  • 一、操作代码 # -*- coding: utf-8 -*- """ @author: lucas @Function: @file: backAndForwardAndRefresh.py @time: 2021/8/23 11:43 上午 """ import unittest from selenium import webdriver from time import sleep

  • Hi Aravinth, Thank you so much for the update. It was helpful but I still face same issue. Unable to find a way out. The issue happens with both M6.0.1_2.1.0.4.1 pre-build and as well as locally compi

  • 1、进入安装光盘,用上下键选择安装centos——Install Centos7(注意不可按Enter键),如图: 2、按Tab键,对安装进行额外配置,在屏幕最下方会显示如下字样: 3、在额外配置的命令行上添加配置: hpsa.hpsa_simple_mode=1 hpsa.hpsa_allow_any=1,如图所示: 4、按回车继续安装 经过以上几步,安装程序即可识别出HP服务器的硬盘。 参考:

  • 一、数据增广 %matplotlib inline import torch import torchvision from torch import nn from d2l import torch as d2l d2l.set_figsize() img = d2l.Image.open('/content/drive/MyDrive/DL/data/cat.jpg') d2l.plt

  • 原文链接:https://github.com/ShusenTang/Dive-into-DL-PyTorch,将《动手学深度学习》 原书中MXNet代码实现改为PyTorch实现。 第二章 2.2 数据操作 torch.Tensor是存储和变换数据的主要工具,它和NumPy的多维数组非常类似,但是Tensor提供GPU计算和自动求梯度等更多的功能。 2.2.1 创建Tensor 函数 方法 创建

  • 1、优化方法 https://blog.csdn.net/yinyu19950811/article/details/90476956---精读,讲的非常好 https://blog.csdn.net/u011984148/article/details/99800544--RADAM http://wulc.me/2019/03/18/Adam%E9%82%A3%E4%B9%88%E6%A3%9

  • request 5: 1)使用自己感兴趣的DL模型对赛题进行研究(例如:RCNN/fasttext/textCNN等),学习理论并用于实践; 2)线上提交结果; 要求:至少完成RCNN代码 + fasttext/textCNN中的一个 RCNN 由于电脑爆memory,可运用以下代码分块读取数据 import sys,csv import pandas as pd ‘’’ 解决报错:_csv.Er

  • Evaluating Model Performance As you train your model, you will want to test how well it performs. For that test, you will need a dedicated data set that will not be used for training but instead will

  • 报错代码: File "train_synpg.py", line 285, in <module> train(epoch, model, train_data, valid_data, train_loader, valid_loader, optimizer, criterion, dictionary, bpe, args) File "train_synpg.py", lin

 相关资料
  • 问题列表 《深度学习》 8.4 参数初始化策略 一般总是使用服从(截断)高斯或均匀分布的随机值,具体是高斯还是均匀分布影响不大,但是也没有详细的研究。 但是,初始值的大小会对优化结果和网络的泛化能力产生较大的影响。 一些启发式初始化策略通常是根据输入与输出的单元数来决定初始权重的大小,比如 Glorot and Bengio (2010) 中建议建议使用的标准初始化,其中 m 为输入数,n 为输出

  • 主要内容 课程列表 专项课程学习 辅助课程 论文专区 课程列表 课程 机构 参考书 Notes等其他资料 卷积神经网络视觉识别 Stanford 暂无 链接 神经网络 Tweet 暂无 链接 深度学习用于自然语言处理 Stanford 暂无 链接 自然语言处理 Speech and Language Processing 链接 专项课程学习 下述的课程都是公认的最好的在线学习资料,侧重点不同,但推

  • Google Cloud Platform 推出了一个 Learn TensorFlow and deep learning, without a Ph.D. 的教程,介绍了如何基于 Tensorflow 实现 CNN 和 RNN,链接在 这里。 Youtube Slide1 Slide2 Sample Code

  • torch是什么 torch就是诸多深度学习框架中的一种 业界有几大深度学习框架:1)tensorflow,谷歌主推,时下最火,小型试验和大型计算都可以,基于python,缺点是上手相对较难,速度一般;2)torch,facebook主推,用于小型试验,开源应用较多,基于lua,上手较快,网上文档较全,缺点是lua语言相对冷门;3)mxnet,大公司主推,主要用于大型计算,基于python和R,缺

  • 我太菜了,C++需要恶补才行,面试完基本上就知道自己寄,面试官特别好给我说了很多,也让我充分认识到自己的不足 如果是项目的话,会问你项目背景以及项目最终的实现结果等等 如果是自己学习的项目的话,会问你对这个项目的学习心得 最后问对C++对掌握程度 实现vector

  • 现在开始学深度学习。在这部分讲义中,我们要简单介绍神经网络,讨论一下向量化以及利用反向传播(backpropagation)来训练神经网络。 1 神经网络(Neural Networks) 我们将慢慢的从一个小问题开始一步一步的构建一个神经网络。回忆一下本课程最开始的时就见到的那个房价预测问题:给定房屋的面积,我们要预测其价格。 在之前的章节中,我们学到的方法是在数据图像中拟合一条直线。现在咱们不

  • 深度学习的总体来讲分三层,输入层,隐藏层和输出层。如下图: 但是中间的隐藏层可以是多层,所以叫深度神经网络,中间的隐藏层可以有多种形式,就构成了各种不同的神经网络模型。这部分主要介绍各种常见的神经网络层。在熟悉这些常见的层后,一个神经网络其实就是各种不同层的组合。后边介绍主要基于keras的文档进行组织介绍。

  • Python 是一种通用的高级编程语言,广泛用于数据科学和生成深度学习算法。这个简短的教程介绍了 Python 及其库,如 Numpy,Scipy,Pandas,Matplotlib,像 Theano,TensorFlow,Keras 这样的框架。