昇思25天学习打卡营第10天 | 使用静态图加速
文章目录
- 昇思25天学习打卡营第10天 | 使用静态图加速
- 动态图的开启方式
- 静态图的开启方式
- 基于全局context的开启方式
- 基于修饰器的开启方式
- 总结
- 打卡
AI编译框架分为两种运行模式:
- 动态图模式: 计算图的构建和计算同时发生(define by run),符合python的解释执行方式。在调试模型时较为方便,能够实时得到中间结果的值。但由于所有节点都需要保存,导致难以对整个计算图进行优化。
- 静态图模式: 计算图的构建和实际计算分开(define and run)。在MindSpore中静态图模式又称Graph模式,基于图优化、计算图整图下沉等技术,编译器可以对图进行全局的优化,获得较好的性能。适用于网络固定且需要高性能的场景。
动态图的开启方式
在MindSpore中,动态图又被称为PyNative模式。可以通过:
mindspore.set_context(mode=mindspore.PYNATIVE_MODE)
进行全局启用。
静态图的开启方式
基于全局context的开启方式
mindspore.set_context(mode=mindspore.GRAPH_MODE)
基于修饰器的开启方式
使用jit
修饰器修饰Python函数或者Python类的成员函数使其被编译成计算图。而模型的其他部分任旧使用解释执行方式,在性能优化的同时而不丢失动态图的灵活性。
@mindspore.jit # 使用ms.jit装饰器,使被装饰的函数以静态图模式运行
def run(x):model = Network()return model(x)output = run(input)
或者
def run(x):model = Network()return model(x)run_with_jit = ms.jit(run)
output = run(input)
总结
这一节的内容对MindSpore框架中的两种计算模式进行了介绍,动态图模式十分灵活,可以方便的获取中间结果,但由于节点是运行时定义并计算的,所以难以进行优化。而静态图模式模式直接编译计算图,可以方便的进行性能优化。通过jit
修饰器可以在不失动态图灵活性的情况下对部分计算进行优化。