Nyakku Shigure
Nyakku Shigure
我们目前会将整个 SIR 函数用 `paddle.jit.to_static` 包装 https://github.com/PaddlePaddle/PaddleSOT/blob/3ca867a6ac2254063ff103ca0b53e63f0d014d50/symbolic_trace/symbolic/compile_cache.py#L43-L48 将其转换为动转静的 StaticFunction,转换的函数中主体逻辑就是利用 Interpreter 解释 SIR,进行组网,由于这部分可能有些动转静会出问题的语法,因此使用了 `paddle.jit.not_to_static` 进行装饰 https://github.com/PaddlePaddle/PaddleSOT/blob/3ca867a6ac2254063ff103ca0b53e63f0d014d50/symbolic_trace/symbolic/interpreter.py#L71-L83 然而实际情况我们有些 API 仍然需要 `to_static` 的代码转换,比如 `paddle.to_tensor`,因此我们希望不利用 `paddle.jit.not_to_static` 将整个函数装饰,而是只装饰部分,避免部分代码动转静转写出问题,并将组网代码进行转换
这里将会记录一些我们 repo 明显存在的问题(主要是开发相关的),欢迎大家在下面的 Comment 里指出,我们会不断迭代优化~ - 单元测试太少,大多是端到端测试,应该针对子功能增加完备的单元测试
目前我们会在 eval frame 的 callback 入口处检查是否是 Paddle 的函数,如果是则直接跳过,相关逻辑如下: https://github.com/2742195759/paddle-symbolic-trace/blob/6b77ad2326d74a91e80009699b30aa27137f774d/symbolic_trace/opcode_translator/transform.py#L9 https://github.com/2742195759/paddle-symbolic-trace/blob/6b77ad2326d74a91e80009699b30aa27137f774d/symbolic_trace/opcode_translator/skip_files.py#L93 `paddle.nn.Layer.__call__` 这个函数也会被这个规则跳过,而所有继承自 `Layer` 的网络都会去找到这个 `paddle.nn.Layer.__call__` 来作为函数入口,所以我们现在还不支持使用 `symbolic_trace` 函数直接装饰,需要一些 trick,用函数包装一下,如: https://github.com/2742195759/paddle-symbolic-trace/blob/6b77ad2326d74a91e80009699b30aa27137f774d/tests/test_17_paddle_layer.py#L18-L19 我们希望优化 Paddle 相关函数的 skip 机制,以支持直接装饰 `paddle.nn.Layer`
我们的项目在报错上应该有着严格的要求,不然 Fallback 和子图打断机制可能不能按照预期进行,我们需要一个文档统一梳理一下,并使用**流程图**来说明在何种情况使用哪个报错、会触发什么。 这里简要整理下都有哪些情况需要报错: - 用户错误书写的代码,本应在运行时该报错的 - 我们错误地模拟运行导致的错误 - (暂时懒得想啦,只想这俩,当然不是只有这俩)……
TODO,稍后写下描述
刚刚 @Aurelius84 提到的,暂时记一下~ 增加一个装饰器,以使某一个特定函数跑动态图 ```python @fallback_to_dygraph def b(): ... def foo() a() #
为了能够让 Paddle 内置的 Layer 中的代码不进行 Fallback,打断子图,我们扩展了 SIR 的功能,使 SIR 能够支持 call Layer,这些 Layer 会直接动转静,而不会跑字节码收集组网代码,我们默认会将 Paddle 的内置 Layer 放到 SIR call Layer 中,可以充分利用了 Paddle 内置 Layer 动静统一的特性,而用户自定义的 Layer 则会仍然跑字节码 为了能够更加自由地控制一个 Layer...
### PR Category Execute Infrastructure ### PR Types Devs ### Description 为 SOT 添加 kernel 信息统计工具,基于 Paddle Profiler,添加两个 `TracerEventType`,分别为 `DygraphKernelCall` 和 `StaticKernelCall`,用于标记 kernel 调用,这样通过 profiler 就可以直接获取动态图调用的 Kernel 数、时间以及静态图调用的 Kernel 数和时间,以用于...
### PR Category Execute Infrastructure ### PR Types Bug fixes ### Description  > [!TIP] > > 图中 `a -> b`,表示 b 持有 a(的引用) 原来 `to_static(model)` 的实现是 `model.forward =...
### PR Category Execute Infrastructure ### PR Types Bug fixes ### Description 0 size Tensor 初始化判断不应该包含 Allocation 的判断,只需要 holder 存在即可,0 size 即便没有 Allocation 也应该算是初始化完成 目前因为 `__deepcopy__` 实现里判断了 0 size Tensor...