训练(training)和推理\推断(inference)的关系?

训练(Training)

打个比方,你现在想要训练一个能区分苹果还是橘子的模型,你需要搜索一些苹果和橘子的图片,这些图片放在一起称为训练数据集(training dataset),训练数据集是有标签的,苹果图片的标签就是苹果,橘子亦然。一个初始神经网络通过不断的优化自身参数,来让自己变得准确,可能开始10张苹果的照片,只有5张被网络认为是苹果,另外5张认错了,这个时候通过优化参数,让另外5张错的也变成对的。这整个过程就称之为训练(Traning)。

推理(Inference)

你训练好了一个模型,在训练数据集中表现良好,但是我们的期望是它可以对以前没看过的图片进行识别。你重新拍一张图片扔进网络让网络做判断,这种图片就叫做现场数据(live data),如果现场数据的区分准确率非常高,那么证明你的网络训练的是非常好的。我们把训练好的模型拿出来遛一遛的过程,称为推理(Inference)。


 简答来说训练与推理的区别

深度学习中涉及到训练(Training)推断(Inference),简单来说:
1、训练也就是搜索和求解模型最优参数的阶段。
2、当模型参数已经求解出来,使用和部署模型,则称为推断阶段。

我们可以把深度学习的训练看成学习过程。人工神经网络是分层的、是在层与层之间互相连接的、网络中数据的传播是有向的。训练神经网络的时候,训练数据被输入到网络的第一层。然后所有的神经元,都会根据任务执行的情况,根据其正确或者错误的程度如何,分配一个权重参数(权值)。

训练需要分 batch 多次迭代,inference 只需要分 batch 执行一次计算流图。训练是计算密集型的,以 GPU 资源为主,CPU 主要用于通信,参数更新等低消耗的任务。单次训练任务计算量大,需要用分布式系统才能较快得到结果。训练过程主要关心分布式集群的资源利用率。


推断过程关注的指标为:

推断过程常用的工具:TensorFlow Serving 是一个用于机器学习模型 serving 的高性能开源库。它可以将训练好的机器学习模型部署到线上,使用 gRPC 和 Restful 作为接口接受外部调用。它支持模型热更新与自动模型版本管理。这意味着一旦部署 TensorFlow Serving 后,你再也不需要为线上服务操心,只需要关心你的线下模型训练。

  1. 推断的网络权值已经固定下来,无后向传播过程,模型固定,可以对计算图进行优化。还可以输入输出大小固定,做 memory 优化(fine-tuning 只是在已有的训练好的模型上做小的改动和调优,本质上仍然是训练过程,TensorRT 没有 fine-tuning)

  2. 推断的 batch size 要小很多,如果 batch size 很大,吞吐可以很大。比如每秒可以处理 1024 个 batch,500 毫秒处理完,吞吐可以达到 2048,可以很好地利用 GPU;但是推断关心延迟 latency,不能有 500 毫秒处理延迟。所以 batch 可以是 8 或者 16,吞吐降低,没有办法很好地利用 GPU。

  3. 训练的时候因为要保证前后向传播,每次梯度的更新很微小,需要相对较高的精度,一般来说需要 float 型,如 FP32,32 位的浮点型来处理数据。但是推断对精度的要求没有那么高,可以使用低精度的技术,很多研究表明可以用如半长(16)的 float 型,即 FP16,或者 8 位的整型(INT8)来做推断,研究结果表明没有特别大的精度损失,尤其对 CNN。对 Binary(二进制)的使用也处在研究中,即权值只有 0 和 1。低精度计算的好处是一方面可以减少计算量,原来计算 32 位的单元处理 FP16 的时候,理论上可以达到两倍的速度,处理 INT8 的时候理论上可以达到四倍的速度。另一方面是模型需要的空间减少,不管是权值的存储还是中间值的存储,应用更低的精度,模型大小会相应减小。用于 inference 的模型要进行简化、压缩、针对运行性能优化:查找神经网络中经过训练后并没有用到、尚未激活的清洗掉。把神经网络中的多个层融合为一个单独的计算步骤。(通过神经网络剪枝、训练量化和 Huffman 编码等压缩模型),但仍能达到几乎一样的预测、识别准确率

另外还有结构重参数化:

请阅读:解读模型压缩6:结构重参数化技术:进可暴力提性能,退可无损做压缩 - 知乎

为了做模型压缩用的

深度学习中训练和推断的区别 · 大专栏

深度学习的宏观框架——训练(training)和推理(inference)及其应用场景_木子山石的学习笔记-CSDN博客_inference

DevOps到底是什么意思? - 知乎

  • 19
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
深度学习推理优化器是用来优化神经网络模型推理(即预测)阶段的速度和效率的工具。在训练阶段,我们通常使用反向传播算法和梯度下降等优化器来更新权重和偏置参数,以最小化损失函数。但在推理阶段,我们不需要更新参数,而是需要快速地计算出模型的输出结果。因此,推理优化器的目的是通过减少计算量和内存占用来加速推理过程。 常见的深度学习推理优化器包括: 1. 剪枝(Pruning):去除模型中不必要的神经元或连接,减少计算量和内存占用。 2. 量化(Quantization):将模型中的浮点数参数转换为更小的整数或定点数,减少内存占用和计算量。 3. 分组卷积(Grouped Convolution):将卷积操作分成多个小组进行计算,减少计算量和内存占用。 4. 转换(Translation):将模型转换为更快速的计算框架或硬件平台,例如将模型转换为TensorRT或使用专门设计的ASIC芯片。 5. 缓存(Caching):缓存模型中的中间结果,以便在后续计算中重复使用,减少计算量。 6. 并行计算(Parallel Computing):将计算分配到多个处理器或计算机上并行计算,加快推理速度。 7. 知识蒸馏(Knowledge Distillation):使用一个小型的模型来学习一个大型模型的知识,从而减少计算量和内存占用。 综上所述,深度学习推理优化器是提高模型推理速度和效率的重要工具,可以通过剪枝、量化、分组卷积、转换、缓存、并行计算和知识蒸馏等方法来实现。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马鹏森

太谢谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值