PyTorch 1.5 发布,C++ 前端重大更新、引入新存储格式提高性能
PyTorch 1.5 发布了,此版本包括新增加了几个主要的 API 和一些改进、对 C++ 前端有重大更新、用于计算机视觉模型的“通道维持(channels last)”存储格式,以及用于模型并行训练的分布式 RPC 框架的稳定版本。
同时,此版本还提供了针对 hessian 和 jacobian 的 autograd 的新 API,以及一个受 pybind 启发的允许创建 Custom C++ Class(定制类)的 API。
C++ FRONTEND API (STABLE)
之前被标记为实验性质的 C++ 前端 API 现在已经与 Python 地位相当,并且总体特性已移至“稳定”状态。一些主要亮点包括:
- 现在覆盖率达到约 100%,并提供有关 C++ torch::nn 模块/函数的文档,开发者可以轻松地将其模型从 Python API 转换为 C++ API。
- C++ 中的优化器与 Python 中的有所不同:C++ 优化器不能将参数组作为输入,而 Python 可以。此外,步骤函数的实现也不完全相同。在 1.5 版本中,C++ 优化器的行为将始终与 Python 等效器相同。
- C++ 中缺少张量多维度索引 API 是一个众所周知的问题,并在 PyTorch GitHub issue 跟踪器和论坛中引起了很多讨论。以前的解决方法是结合使用 arrow/select/index_select/masked_select,与 Python API 的优雅张量 [:, 0, ..., mask] 语法相比,它比较笨拙且容易出错。在 1.5 版本中,开发者可以使用 tensor.index({Slice(), 0, “...”, mask}) 达到相同的目的。
‘CHANNELS LAST’ MEMORY FORMAT FOR COMPUTER VISION MODELS (EXPERIMENTAL)
用于计算机视觉模型的“通道维持(channels last)”存储格式,目前处于实验阶段。该格式的内存布局可以充分发挥性能高效的卷积算法和硬件(NVIDIA 的 Tensor Core、FBGEMM、QNNPACK)的能力。此外,它被设计为通过运算符自动传播,从而允许在内存布局之间轻松切换。
CUSTOM C++ CLASSES (EXPERIMENTAL)
此版本添加了一个新的 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"]
DISTRIBUTED RPC FRAMEWORK APIS (NOW STABLE)
分布式 RPC 框架在 1.4 版本中以实验性形式出现,现在它已经处于稳定状态。此过程涉及许多增强功能和 bug 修复,以使分布式 RPC 框架总体上更可靠和更健壮。同时还添加了两个新特性,包括概要分析支持,在 RPC 中使用 TorchScript 函数以及一些易于使用的增强功能。
此外,从 1.5 开始,PyTorch 不再支持 Python 2,今后,对 Python 的支持将仅限于 Python 3,特别是 Python 3.5、3.6、3.7 和 3.8。
更多具体的细节见发布公告:
https://pytorch.org/blog/pytorch-1-dot-5-released-with-new-and-updated-apis

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Visual Studio Code 4 月 Python 扩展更新
微软发布了 4月的 Visual Studio Code Python 扩展更新,该版本包括 Jypyter Notebooks 中的 ipywidgets 支持以及 Django 和 Flask 自动重装的调试器支持。 Jypyter Notebooks 中的 ipywidgets 支持 新版本支持 VS Code 中 Jupyter Notebooks 中的所有 ipywidgets(包括自定义的)。这意味着可以将所有交互式绘图库(例如 beakerX、bqplot 等)与 Notebooks 和 VS Code 中的数据进行交互及可视化。 对 Django 和 Flask 自动重新加载的Debugger支持 在 Python 扩展的 3 月发行版中,引入了新的 Python 调试器 debugpy。现在, 它支持实时重新加载 Django 和 Flask 等 Web 应用程序。对应用程序进行编辑时,无需重新启动调试器即可进行应用。保存更改后,将在相同的调试会话中自动重新加载 Web 服务器。 其他改进 确保打印图适合 PDF 页面(#9403) 支持使用 “esc” 或 “ctr...
- 下一篇
深入理解 CI/CD:工具、方法、环境、基础架构的全面指南
本文来自Rancher Labs 持续集成和持续交付(CI/CD)是DevOps背后的助推力之一。如果你的企业正在考虑使用DevOps,那么CI/CD绝对是需要考虑的其中一部分。但是CI/CD到底意味着什么?为什么它如此重要呢?为了对你的DevOps工具包和IT部署进行战略规划,深入理解CI/CD至关重要。本文中,我们将探讨CI/CD所需解决的难点、需要的工具以及预期的收益。 首先,我们从大局着手。DevOps旨在创建一个流畅的工作流程,并尽可能减少越区切换和建立快速反馈回路。这意味着什么呢?工作会从第一步开始一直向前推进,并且在理想状态中,无需倒退再进行修复,因为它们应该能够验证和修复问题。为此,开发人员需要快速的反馈回路。该反馈通过快速自动化测试提供,并且该测试将验证代码在进入下一阶段之前能否按照预期工作。 为了减少越区切换,成员较少的小组将使用较小的功能并且掌控整个流程:创建请求、提交、QA以及部署。其重点是快速推出小段代码,因为变更越小,诊断、修复和补救就越容易。 持续集成(CI)实现了从第一步到最后一步的快速流程,并通过持续交付(CD)将其扩展到实际生产部署。我们将其称为CI...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度