译者:solerji
PyTorch C 前端 是PyTorch机器学习框架的一个纯C 接口。PyTorch的主接口是Python,Python API位于一个基础的C 代码库之上,提供了基本的数据结构和功能,例如张量和自动求导。C 前端暴露了一个纯的C 11的API,在C 底层代码库之上扩展了机器学习训练和推理所需的工具扩展。这包括用于神经网络建模的内置组件集合;扩展此集合的自定义模块API;流行的优化算法库(如随机梯度下降);使用API定义和加载数据集的并行数据加载程序;序列化例行程序等等。
本教程将为您介绍一个用C 前端对模型进行训练的端到端示例。具体地说,我们将训练一个 DCGAN——一种生成模型——来生成 MNIST数字的图像。虽然看起来这是一个简单的例子,但它足以让你对 PyTorch C frontend有一个深刻的认识,并勾起你对训练更复杂模型的兴趣。我们将从设计它的原因开始,告诉你为什么你应该使用C 前端,然后直接深入解释和训练我们的模型。
小贴士
可以在 this lightning talk from CppCon 2018 网站观看有关C 前端的快速介绍。
小贴士
这份笔记提供了C 前端组件和设计理念的全面概述。
小贴士
在 https://pytorch.org/cppdocs你可以找到工作人员的API说明文档,这些PyTorch C 生态系统的文档是很有用的。
动机
在我们开始令人兴奋的GANs和MNIST数字的旅程之前,让我们往回看,讨论一下为什么我们一开始要使用C 前端而不是Python。我们(the PyTorch team)创建了C 前端,以便在不能使用Python的环境中或者是没有适合该作业的工具的情况下进行研究。此类环境的示例包括:
- **低延迟系统:**您可能希望在具有高帧/秒和低延迟的要求的纯C 游戏引擎中进行强化学习研究。由于Python解释器的速度慢,Python可能根本无法被跟踪,使用纯C 库这样的环境比Python库更合适。
- **高度多线程环境:**由于全局解释器锁(GIL),一次不能运行多个系统线程。多道处理是另一种选择,但它不具有可扩展性,并且有显著的缺点。C 没有这样的约束,线程易于使用和创建。需要大量并行化的模型,像那些用于深度神经进化 Deep Neuroevolution的模型,可以从中受益。
- **现有的C 代码库:**您可能是一个现有的C 应用程序的所有者,在后台服务器上为Web页面提供服务,以在照片编辑软件中绘制3D图形,并希望将机器学习方法集成到您的系统中。C 前端允许您保留在C 中,免除了在Python和C 之间来回绑定的麻烦,同时保留了传统 PyTorch(Python)体验的大部分灵活性和直观性。
C 前端不打算与Python前端竞争,它是为了补充Python前端。我们知道由于它简单、灵活和直观的API研究人员和工程师都喜欢PyTorch。我们的目标是确保您可以在每个可能的环境中利用这些核心设计原则,包括上面描述的那些。如果这些场景中的一个描述了你的用例,或者如果你只是感兴趣的话,跟着我们在下面的文章中详细探究C 前端。
阅读全文/改进本文