<p>Python 张量与动态神经网络 PyTorch 1.0 发布了。</p> <p style="text-align:center"><img alt="PyTorch 1.0发布,JIT、全新的分布式库、C++前端" src="https://simg.open-open.com/show/953bc14a7beddd84945358fe289be827.png" width="977" height="300" /></p> <p>此版本的主要亮点包括 JIT 编译、全新并且更快的分布式库与 C++ 前端等。</p> <p><strong>JIT 编译器</strong></p> <p>JIT(Just-In-Time)是一组编译工具,用于弥合 PyTorch 研究与生产之间的差距。</p> <p>它允许创建可以在不依赖 Python 解释器的情况下运行的模型,并且可以更积极地进行优化。使用程序注解可以将现有模型转换为 PyTorch 可以直接运行的 Python 子集 Torch Script。模型代码仍然是有效的 Python 代码,可以使用标准的 Python 工具链进行调试。</p> <p>PyTorch 1.0 提供了 torch.jit.trace 和 torch.jit.script 两种方式使现有代码与 JIT 兼容。一经注解,Torch Script 代码便可以被积极地优化,并且可以被序列化以在新的 C++ API 中使用,并且 C++ API 不依赖于 Python。</p> <pre> <span style="color:#008000">#</span><span style="color:#008000"> Write in Python, run anywhere!</span> <span style="color:#000000">@torch.jit.script </span><span style="color:#0000ff">def</span><span style="color:#000000"> RNN (x, h, W_h, U_h, b_h): y </span>=<span style="color:#000000"> [] </span><span style="color:#0000ff">for</span> t <span style="color:#0000ff">in</span><span style="color:#000000"> range (x.size (0)): h </span>= torch.tanh (x[t] @ W_h + h @ U_h +<span style="color:#000000"> b_h) y </span>+=<span style="color:#000000"> [h] </span><span style="color:#0000ff">return</span> torch.stack (y), h</pre> <p><strong>全新并且更快的分布式库</strong></p> <p>torch.distributed 软件包和 torch.nn.parallel.DistributedDataParallel 模块采用了重新设计的全新分布式库,亮点包括:</p> <ul> <li> <p>新的 torch.distributed 是性能驱动的,并且对所有后端完全异步操作,包括:Gloo、NCCL 和 MPI。</p> </li> <li> <p>显着的分布式数据并行性能改进,尤其适用于网络较慢的主机,如基于以太网的主机。</p> </li> <li> <p>为 torch.distributed 包中的所有分布式集合操作添加异步支持。</p> </li> <li> <p>在 Gloo 后端添加了一些 CPU 操作:send、recv、reduce、all_gather、gather 与 scatter。</p> </li> <li> <p>在 NCCL 后端添加 <a href="/misc/goto?guid=5047997720325574838">barrier</a> 操作。</p> </li> <li> <p>在 NCCL 后端添加 <a href="/misc/goto?guid=5047997720417049953">new_group</a> 支持。</p> </li> </ul> <p><strong>C++ 前端</strong></p> <p>C++ 前端是 PyTorch 后端的纯 C++ 接口,它遵循已建立的 Python 前端的 API 和体系结构,旨在实现高性能、低延迟和裸机 C++ 应用的研究。它提供了 torch.nn、torch.optim、torch.data 和 Python 前端的其它组件的等价物。下边是两种语言前端的简单比较:</p> <p>python</p> <pre> <span style="color:#0000ff">import</span><span style="color:#000000"> torch model </span>= torch.nn.Linear (5, 1<span style="color:#000000">) optimizer </span>= torch.optim.SGD (model.parameters (), lr=0.1<span style="color:#000000">) prediction </span>= model.forward (torch.randn (3, 5<span style="color:#000000">)) loss </span>= torch.nn.functional.mse_loss (prediction, torch.ones (3, 1<span style="color:#000000">)) loss.backward () optimizer.step ()</span></pre> <p>C++</p> <pre> #include <torch/torch.h><span style="color:#000000"> torch::nn::Linear model (</span><span style="color:#800080">5</span>, <span style="color:#800080">1</span><span style="color:#000000">); torch::optim::SGD optimizer (model</span>->parameters (), <span style="color:#008000">/*</span><span style="color:#008000">lr=</span><span style="color:#008000">*/</span><span style="color:#800080">0.1</span><span style="color:#000000">); torch::Tensor prediction </span>= model->forward (torch::randn ({<span style="color:#800080">3</span>, <span style="color:#800080">5</span><span style="color:#000000">})); auto loss </span>= torch::mse_loss (prediction, torch::ones ({<span style="color:#800080">3</span>, <span style="color:#800080">1</span><span style="color:#000000">})); loss.backward (); optimizer.step ();</span></pre> <p>注意,目前 C++ API 还处于 unstable 阶段。</p> <p>此外还有一系列更新信息,详情查看<a href="/misc/goto?guid=5047997720550432250">发布公告</a>。</p> <p>下载地址:</p> <ul> <li> <p><a href="/misc/goto?guid=5047997720643730265">Source code (zip)</a></p> </li> <li> <p><a href="/misc/goto?guid=5047997720741519542">Source code (tar.gz)</a></p> </li> </ul> <p>来自: 开源中国社区</p>