PyTorch C++ API

这些页面提供了 PyTorch C++ API 公共部分的文档。这个 API 大致可以分为五个部分:

  • ATen: 构建所有其他内容的基础张量和数学运算库。
  • Autograd: 通过自动微分增强 ATen。
  • C++ Frontend: 用于训练和评估机器学习模型的高级构造。
  • TorchScript: TorchScript JIT 编译器和解释器的接口。
  • C++ Extensions: 一种使用自定义 C++ 和 CUDA 例程扩展 Python API 的方法。

结合起来,这些构建块形成了一个研究和生产就绪的 C++ 库,用于张量计算和动态神经网络,重点是 GPU 加速和快速的 CPU 性能。它目前在 Facebook 的研究和生产中使用;我们期待欢迎更多 PyTorch C++ API 用户。

  • 目前,C++ API 应该被认为是“beta”稳定性;我们可能会对后端进行重大的重大更改,以改进 API,或为 PyTorch 提供 Python 接口,这是我们最稳定和最受支持的接口。

ATen

ATen 本质上是一个张量库,PyTorch 中几乎所有其他 PythonC++ 接口都建立在它之上。它提供了一个核心 Tensor 类,在该类上定义了数百个操作。这些操作中的大多数都有 CPUGPU 实现,Tensor 类将根据其类型动态调度到它们。一个使用 ATen 的小例子如下所示:

#include <ATen/ATen.h>

at::Tensor a = at::ones({2, 2}, at::kInt);
at::Tensor b = at::randn({2, 2});
auto c = a + b.to(at::kInt);

这个 Tensor 类和 ATen 中的所有其他符号都可以在 at:: 命名空间中找到,记录在此处

Autograd

我们所说的 autograd 是 PyTorch’s C++ API 的一部分,它通过自动微分功能增强了 ATen Tensor 类。autograd 系统记录对张量的操作以形成 autograd 图。对该图中的叶变量调用“backwards()”,通过跨越 autograd 图中的函数和张量网络执行反向模式微分,最终产生梯度。以下示例提供了此界面的体验:

#include <torch/csrc/autograd/variable.h>
#include <torch/csrc/autograd/function.h>

torch::Tensor a = torch::ones({2, 2}, torch::requires_grad());
torch::Tensor b = torch::randn({2, 2});
auto c = a + b;
c.backward(); // a.grad() will now hold the gradient of c w.r.t. a.

ATen 中的at::Tensor 类默认是不可微的。要添加 autograd API 提供的张量的可微性,您必须使用来自 torch:: 命名空间而不是 at:: 命名空间的张量工厂函数。例如,虽然使用 at::ones 创建的张量将不可微,但使用 torch::ones 创建的张量将是可微的。

C++ Frontend

PyTorch C++ 前端为神经网络和一般 ML(机器学习)研究和生产用例提供了一个高级的纯 C++ 建模接口,在设计和提供的功能上很大程度上遵循 Python API。 C++ 前端包括以下内容:

  • 通过分层模块系统定义机器学习模型的接口(如torch.nn.Module);
  • 用于最常见建模目的(例如卷积、RNN、批量归一化等)的预先存在模块的“标准库”;
  • 优化 API,包括流行优化器的实现,如 SGD、Adam、RMSprop 等;
  • 一种表示数据集和数据管道的方法,包括在多个 CPU 内核上并行加载数据的功能;
  • 用于存储和加载训练任务 checkpoints 的序列化格式(如torch.utils.data.DataLoader);
  • 模型在多个 GPU 上的自动并行化(如“torch.nn.parallel.DataParallel”);
  • 支持使用pybind11轻松将C++模型绑定到Python的代码;
  • TorchScript JIT 编译器的入口点;
  • 有助于与 ATen 和 Autograd API 接口的有用实用程序。

有关 C++ 前端的更详细说明,请参阅 本文档torch:: 命名空间中与 C++ Frontend 相关的相关部分包括 torch::nntorch::optim, torch::data, torch::serialize, torch::jittorch::python。C++ 前端的示例可以在这个存储库中找到,它正在持续和积极地扩展。

  • 除非你有特别的理由限制自己只使用 ATen 或 Autograd API,否则 C++ 前端是 PyTorch C++ 生态系统的推荐入口点。虽然它仍处于测试阶段,因为我们收集用户反馈(来自您!),但它提供了比 ATen 和 Autograd API 更多的功能和更好的稳定性保证。

TorchScript

TorchScript 是一种 PyTorch 模型的表示,可以被 TorchScript 编译器理解、编译和序列化。从根本上说,TorchScript 本身就是一种编程语言。它是使用 PyTorch API 的 Python 子集。TorchScript 的 C++ 接口包含三个主要功能:

  • 一种在 Python 中定义的加载和执行序列化 TorchScript 模型的机制;
  • 用于定义扩展 TorchScript 标准操作库的自定义操作符的 API;
  • 从 C++ 实时编译 TorchScript 程序。

如果您想尽可能在 Python 中定义模型,但随后将它们导出到 C++ 以用于生产环境和非 Python 推理,则第一种机制可能对您很感兴趣。 您可以通过点击这个链接了解更多相关信息。第二个 API 涉及您希望使用自定义运算符扩展 TorchScript 的场景,这些运算符同样可以在推理期间从 C++ 序列化和调用。最后,torch::jit::compile 函数可用于直接从 C++ 访问 TorchScript 编译器。

C++ Extensions

C++ 扩展 提供了一种访问上述所有接口的简单而强大的方法,目的是扩展 PyTorch 的常规 Python 用例。C++ 扩展最常用于在 C++ 或 CUDA 中实现自定义运算符,以加速对普通 PyTorch 设置的研究。C++ 扩展 API 没有向 PyTorch C++ API 添加任何新功能。 相反,它提供了与 Python setuptools 的集成以及允许访问 ATen 的 JIT 编译机制,来自 Python 的 autograd 和其他 C++ API。要了解有关 C++ 扩展 API 的更多信息,请阅读本教程

内容

笔记

指数和表格

致谢

这个 PyTorch C++ 领域的文档网站由 Exhale 项目启用,并由其维护者 svenevs 投入大量时间和精力。 我们感谢 Stephen 在 PyTorch C++ 文档方面所做的工作和努力。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值