掘金 人工智能 前天 12:50
理解深度学习框架计算图的动态图与静态图:机制、实现与应用
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了深度学习框架中动态图和静态图的概念、实现方式、代码差异以及动转静技术。通过对比PyTorch和TensorFlow等框架,文章揭示了两种计算图在训练和推理阶段的不同优势和应用场景。动态图以其灵活性和易调试性在开发阶段占据优势,而静态图则在推理部署中展现出更高的性能和优化潜力,尤其是在内存优化、图算子融合和跨平台部署方面。文章还探讨了动转静技术,以及为何在训练和推理阶段选择不同的计算图模式。

🤔 动态图与静态图是深度学习中构建模型的两种核心方式,计算图描述了神经网络中计算操作与数据依赖关系的有向图。节点代表操作,边代表张量流动,每一步训练或推理都可抽象为图中的前向或反向传播计算。

💡 动态图在运行时动态创建,逐行执行,方便调试和修改,例如PyTorch。静态图在执行前构建完整图,需要预编译,但性能更高,例如TensorFlow 1.x。两者在构建方式、控制流支持、调试体验和性能优化上存在显著差异。

🚀 动转静技术是将动态图转换为静态图,以实现更高效的性能部署。PyTorch提供了`torch.jit.trace`等工具,可以将动态模型转换为静态模型,从而进行内存优化、图算子融合和跨平台部署,提升推理效率。

🧐 训练阶段通常使用动态图,因为其便于实验、Debug和梯度自动追踪。推理阶段则倾向于使用静态图,因为其执行效率更高,易于部署,并且可以进行更彻底的图级优化,例如常量折叠、算子融合等。

前置背景

在深度学习框架中,动态图和静态图是构建和执行模型的两种核心方式。随着Pytorch、TensorFlow、PaddlePaddle等框架的发展,动态图与静态图在功能、性能、可用性上的差异逐渐明显,并在训练和推理的不同阶段承担着不同的角色。本文会从基本概念、实现方式、代码差异、动转静技术、实际应用场景等角度,系统剖析两种计算图机制。

一、什么是计算图

计算图是一种表示神经网络中计算操作与数据依赖关系的有向图。每个节点表示一个操作(比如加减乘除)边表示张量的流动。在深度学习中,训练或者推理的每一步都可以抽象为图中的一次前向或反向传播计算。

二、动态图与静态图的定义与区别

个人总结:动态图像Python脚本,灵活但是执行效率不高,方便调试。静态图像C++,需要预编译,复杂但性能高。

动态图(Dynamic Graph)静态图(Static Graph)
图的构建方式运行时动态创建,边定义边执行执行前一次性构建完整图,之后执行
控制流支持使用 Python 原生控制流(if/for需使用特殊图操作(如 tf.cond()
调试与开发体验简洁、直观、便于调试不易调试,需借助可视化和日志工具
性能与部署难以优化,运行时构图存在开销可做全图优化(图融合、内存复用等),更快
代表框架PyTorch、TF Eager、Paddle动态图TensorFlow 1.x、Paddle静态图、ONNX、XLA

三、代码层次对比:动态图 vs 静态图

import torchx = torch.tensor([2.0])y = 2 * x + 3print(y)  # 输出 tensor([7.])
import tensorflow.compat.v1 as tftf.disable_v2_behavior()x = tf.placeholder(tf.float32)y = 2 * x + 3with tf.Session() as sess:    result = sess.run(y, feed_dict={x: [2.0]})    print(result)  # 输出 [7.]

四、动转静--实现高效性能部署

Pytorch动转静

import torchimport torch.nn as nn# 定义模型class SimpleModel(nn.Module):    def forward(self, x):        return 2 * x + 3model = SimpleModel()example_input = torch.tensor([2.0])# 动转静:跟踪方式scripted_model = torch.jit.trace(model, example_input)# 保存静态模型scripted_model.save("model.pt")# 加载执行loaded = torch.jit.load("model.pt")print(loaded(torch.tensor([3.0])))  # 输出 tensor([9.])

小问题:训练用动态图 vs 推理用静态图,Why

参考

openmlsys.github.io/chapter_mod…

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

动态图 静态图 深度学习 PyTorch TensorFlow
相关文章