百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

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

toyiye 2024-06-21 12:39 28 浏览 0 评论

PyTorch团队发布

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

你可以在下面的链接中找到详细的发行说明:https://github.com/pytorch/pytorch/releases

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.script
def 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"]

您可以在这里的教程中尝试一下。https://pytorch.org/tutorials/recipes/recipes/torsh_script_custom_classes.html

分布式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模式之间的差异,请参见https://pytorch.org/docs/stable/notes/distributed_autograd.html#smart-mode-algorithm)。

分布式优化器

分布式优化器使用需要渐变的参数在每个工作器上为优化器创建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团队和社区为这项工作做出的所有贡献。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码