龙空技术网

PyTorch1.5更新发布,与Python配合使用的C ++前端API奇偶校验

clarkfei 104

前言:

当前姐妹们对“python循环判断奇偶数”大体比较关怀,小伙伴们都需要学习一些“python循环判断奇偶数”的相关文章。那么小编同时在网上汇集了一些有关“python循环判断奇偶数””的相关内容,希望小伙伴们能喜欢,兄弟们快快来了解一下吧!

PyTorch团队发布

今天,我们宣布PyTorch 1.5以及新的和更新的库的可用性。此版本包括几个主要的新API添加和改进。PyTorch现在包括对C ++前端的重大更新,用于计算机视觉模型的“通道最后”存储格式,以及用于模型并行训练的分布式RPC框架的稳定版本。该发行版还提供了针对粗麻布和雅各布派的autograd的新API,以及一个允许创建受pybind启发的Custom C ++类的API。

你可以在下面的链接中找到详细的发行说明:

C ++前端API(稳定)

现在,C ++前端API与Python相当,并且总体功能已移至“稳定”状态(以前标记为实验性)。一些主要亮点包括:

现在覆盖率达到100%,并提供有关C ++ torch :: nn模块/功能的文档,用户可以轻松地将其模型从Python API转换为C ++ API,从而使模型创作体验更加流畅。C ++中的优化器已经偏离了Python等效器:C ++优化器不能将参数组作为输入,而Python可以。此外,步骤功能的实现也不完全相同。在1.5版中,C ++优化器的行为将始终与Python等效器相同。C ++中缺少张量多维度索引API是一个众所周知的问题,并在PyTorch Github问题跟踪器和论坛中引起了很多帖子。先前的解决方法是使用narrow/ select/ index_select/ 的组合,masked_select与Python API的优雅tensor[:, 0, ..., mask]语法相比,此组合笨拙且容易出错。在1.5版本中,用户可以使用tensor.index({Slice(), 0, "...", mask})以达到相同的目的。COMPUTER VISION模型的“ CHANNELS LAST”存储格式(实验性)

“最后使用通道”的内存布局释放了使用高效性能卷积算法和硬件(NVIDIA的Tensor Core,FBGEMM,QNNPACK)的能力。此外,它被设计为通过运算符自动传播,从而允许在内存布局之间轻松切换。

在此处了解更多有关如何编写内存格式感知运算符的信息。

自定义C ++类(实验性)

此版本添加了新的API,torch.CutomClassHolder用于将自定义C ++类同时绑定到TorchScript和Python。该API的语法与pybind11几乎相同。它允许用户向TorchScript类型系统和运行时系统公开其C ++类及其方法,以便他们可以实例化和操作TorchScript和Python中的任意C ++对象。C ++绑定示例:

template <class T>struct MyStackClass : torch::CustomClassHolder {  std::vector<T> stack_;  MyStackClass(std::vector<T> init) : stack_(std::move(init)) {}  void push(T x) {    stack_.push_back(x);  }  T pop() {    auto val = stack_.back();    stack_.pop_back();    return val;  }};static auto testStack =  torch::class_<MyStackClass<std::string>>("myclasses", "MyStackClass")      .def(torch::init<std::vector<std::string>>())      .def("push", &MyStackClass<std::string>::push)      .def("pop", &MyStackClass<std::string>::pop)      .def("size", [](const c10::intrusive_ptr<MyStackClass>& self) {        return self->stack_.size();      });

它公开了可以在Python和TorchScript中使用的类,如下所示:

@torch.jit.scriptdef do_stacks(s : torch.classes.myclasses.MyStackClass):    s2 = torch.classes.myclasses.MyStackClass(["hi", "mom"])    print(s2.pop()) # "mom"    s2.push("foobar")    return s2 # ["hi", "foobar"]

您可以在这里的教程中尝试一下。

分布式RPC框架API(现在稳定)

分布式RPC框架在1.4版本中以实验性形式启动,该提议是将分布式RPC框架标记为稳定且不再具有实验性。这项工作涉及许多增强功能和错误修复,以使分布式RPC框架总体上更可靠和更健壮,并添加了两个新功能,包括概要分析支持,在RPC中使用TorchScript函数以及多项易于使用的增强功能。以下是框架内各种API的概述:

RPC API

RPC API允许用户指定要在远程节点上运行的函数和要实例化的对象。这些功能被透明记录,因此可以使用Distributed Autograd通过远程需求反向传播梯度。

分布式Autograd

分布式Autograd连接跨多个节点的autograd图,并允许在向后传递过程中流经渐变。渐变被累积到一个上下文中(与Autograd中的.grad字段相反),用户必须在with dist_autograd.context()管理器下指定其模型的前向传递,以确保正确记录所有RPC通信。当前,仅实现FAST模式(有关FAST和SMART模式之间的差异,请参见)。

分布式优化器

分布式优化器使用需要渐变的参数在每个工作器上为优化器创建RRef,然后使用RPC API远程运行优化器。用户必须收集所有远程参数并将它们包装在中RRef,因为这是对分布式优化器的必需输入。用户还必须指定分布式自动梯度,context_id以便优化器知道在哪个上下文中寻找梯度。

在此处了解有关分布式RPC框架API的更多信息。

新的高级AUTOGRAD API(实验性)

PyTorch 1.5为torch.autograd.functional子模块带来了新功能,包括jacobian,hessian,jvp,vjp,hvp和vhp 。此功能建立在当前API的基础上,并允许用户轻松执行这些功能。

不再支持PYTHON 2

从PyTorch 1.5.0开始,我们将不再支持Python 2,特别是2.7版。今后,对Python的支持将仅限于Python 3,特别是Python 3.5、3.6、3.7和3.8(在PyTorch 1.4.0中首次启用)。

感谢整个PyTorch团队和社区为这项工作做出的所有贡献。

标签: #python循环判断奇偶数