由Facebook创建的以Python为中心的深度学习框架PyTorch 1.0的官方候选版本可用于开发人员测试。 新版本最受吹捧的功能之一是能够通过编写可选择性加速的Python代码来定义模型,这与竞争框架的工作原理类似。
Python在机器学习中的传统作用一直是使用易于使用的前端语法来包装高速后端代码库。 任何使用Python编写机器学习模块的人都会很快发现,原生Python的速度不足以满足关键性能研究工作或生产使用的需求。
PyTorch的开发人员在PyTorch 1.0中引入了一项称为Torch Script的功能,该功能在Python的可访问语法和高性能代码之间取得了平衡。 Torch脚本是Python的子集,PyTorch可以及时将其编译为不依赖Python运行时的快速本机代码。
火炬脚本可以采用以下两种方式之一。 可以使用Torch脚本语言编写新代码,该语言在设计上可以很容易地编译为本机代码。 也可以获取现有的Python代码,使用@torch.jit.trace
装饰器@torch.jit.trace
装饰,并及时将其编译为本机代码。 但是,这不如使用Torch脚本有效。
根据Torch脚本文档,“ [Torch Script]使得可以使用熟悉的工具在PyTorch中训练模型,然后将模型导出到生产环境中,在该生产环境中,不宜将模型作为Python程序运行以实现性能和多用途。 -线程原因。”
Torch Script的方法与使用Python开发高性能软件的其他方法相呼应。 例如,Anaconda的Numba库使用即时或提前编译将指定的函数编译为本机代码。 Numba库可用于生成在不存在Numba本身的情况下运行的代码,但通常它与NumPy和Python具有运行时相关性。
另一个常用的软件包Cython允许通过自定义语法声明将Python逐步转换为C。 Cython可以与所有Python和C类型以及所有Python语法一起使用,但是Torch脚本仅限于对PyTorch张量,整数和浮点数进行操作。 而且,Torch Script不能使用异常之类的构造。