Pytorch 0.3.0发布,实现多方面提速,增加对ONNX支持

jopen 6年前
   <p>2017 年初,非死book 在机器学习和科学计算工具 Torch 的基础上,针对 Python 语言发布了一个全新的机器学习工具包 PyTorch。一经发布,这款开源工具包就受到广泛关注和讨论,经过几个月的发展,目前 PyTorch 已经成为从业者最重要的研发工具之一。经过将近一年的发展,日前,迎来了 PyTorch 0.3.0 版本。</p>    <p style="text-align:center"><img alt="Pytorch 0.3.0发布,实现多方面提速,增加对ONNX支持" src="https://simg.open-open.com/show/88aabb533379b238d9a10eda090a3115.jpg" /></p>    <p>根据官方文档的介绍,此次增加了多个函数和功能,多方面的性能均实现提升。</p>    <p><strong>重大变更</strong></p>    <p>0. 3 版本中删掉了 Variable.reinforce () 等随机函数,因为它们的功能有限,并且会影响到性能。设置随机函数的初衷是为了避免采样值的 book-keeping,在实际中,由于各种各样的原因,用户的代码中仍然会包括 book-keeping。他们引入了 torch.distributions 包来代替随机函数。</p>    <p>之前的代码如下:</p>    <blockquote>     <p>probs = policy_network (state)</p>     <p>action = probs.multinomial ()</p>     <p>next_state, reward = env.step (action)</p>     <p>action.reinforce (reward)</p>     <p>action.backward ()</p>    </blockquote>    <p>现在的代码如下:</p>    <blockquote>     <p>probs = policy_network (state)</p>     <p># NOTE: categorical is equivalent to what used to be called multinomial</p>     <p>m = torch.distributions.Categorical (probs)</p>     <p>action = m.sample ()</p>     <p>next_state, reward = env.step (action)</p>     <p>loss = -m.log_prob (action) * reward</p>     <p>loss.backward ()</p>    </blockquote>    <p><strong>新的功能</strong></p>    <p>1、目前,有些损失函数能直接计算 mini-batch 中每个 sample 的损失值。</p>    <p>2、构建了一个 in-built Profiler,能对模型进行瓶颈分析,这个 Profiler 同时支持 CPU 和 CUDA 模型。</p>    <p>更多信息可以参见 <a href="/misc/goto?guid=4959011883558547643" rel="nofollow">http://pytorch.org/docs/0.3.0/autograd.html#profiler</a></p>    <p>3、增加 Higher order gradients 模块,支持如下层:</p>    <ul>     <li> <p>ConvTranspose, AvgPool1d, AvgPool2d, LPPool2d, AvgPool3d, MaxPool1d, MaxPool2d, AdaptiveMaxPool, AdaptiveAvgPool, FractionalMaxPool2d, MaxUnpool1d, MaxUnpool2d, nn.Upsample, ReplicationPad2d, ReplicationPad3d, ReflectionPad2d</p> </li>     <li> <p>PReLU, HardTanh, L1Loss, SoftSign, ELU, RReLU, Hardshrink, Softplus, SoftShrink, LogSigmoid, Softmin, GLU</p> </li>     <li> <p>MSELoss, SmoothL1Loss, KLDivLoss, HingeEmbeddingLoss, SoftMarginLoss, MarginRankingLoss, CrossEntropyLoss</p> </li>     <li> <p>DataParallel</p> </li>    </ul>    <p>4、优化器</p>    <ul>     <li>optim.SparseAdam:能实现适用于稀疏张量的简单亚当算法</li>     <li>优化器中增加了 add_param_group 函数,能在构建好的优化器中增加新的参数组。</li>    </ul>    <p>除此之外,还增加了新的张量函数和功能,在新版本中,能通过 ONNX 将模型迁移到其他框架上。另外,在加速方面,重写 gpu kernel 之后,softmax 和 log_softmax 的速度能实现 4-256 倍的提升;在分布式 AllReduce 中,能实现 2.5-3 倍的性能提升;torch.norm 函数的 backward 能实现 1.5 倍的加速;pack_padded_sequence 的性能也有提升。</p>    <p>具体的介绍可以参加说明文档:<a href="/misc/goto?guid=4959011883656855949" rel="nofollow">https://github.com/pytorch/pytorch/releases/tag/v0.3.0</a></p>    <p>来自: <a href="/misc/goto?guid=4959011883751091854" id="link_source2">雷锋网</a></p>