Pytorch 0.3.0發布,實現多方面提速,增加對ONNX支持
2017 年初,非死book 在機器學習和科學計算工具 Torch 的基礎上,針對 Python 語言發布了一個全新的機器學習工具包 PyTorch。一經發布,這款開源工具包就受到廣泛關注和討論,經過幾個月的發展,目前 PyTorch 已經成為從業者最重要的研發工具之一。經過將近一年的發展,日前,迎來了 PyTorch 0.3.0 版本。
根據官方文檔的介紹,此次增加了多個函數和功能,多方面的性能均實現提升。
重大變更
0. 3 版本中刪掉了 Variable.reinforce () 等隨機函數,因為它們的功能有限,并且會影響到性能。設置隨機函數的初衷是為了避免采樣值的 book-keeping,在實際中,由于各種各樣的原因,用戶的代碼中仍然會包括 book-keeping。他們引入了 torch.distributions 包來代替隨機函數。
之前的代碼如下:
probs = policy_network (state)
action = probs.multinomial ()
next_state, reward = env.step (action)
action.reinforce (reward)
action.backward ()
現在的代碼如下:
probs = policy_network (state)
# NOTE: categorical is equivalent to what used to be called multinomial
m = torch.distributions.Categorical (probs)
action = m.sample ()
next_state, reward = env.step (action)
loss = -m.log_prob (action) * reward
loss.backward ()
新的功能
1、目前,有些損失函數能直接計算 mini-batch 中每個 sample 的損失值。
2、構建了一個 in-built Profiler,能對模型進行瓶頸分析,這個 Profiler 同時支持 CPU 和 CUDA 模型。
更多信息可以參見 http://pytorch.org/docs/0.3.0/autograd.html#profiler
3、增加 Higher order gradients 模塊,支持如下層:
-
ConvTranspose, AvgPool1d, AvgPool2d, LPPool2d, AvgPool3d, MaxPool1d, MaxPool2d, AdaptiveMaxPool, AdaptiveAvgPool, FractionalMaxPool2d, MaxUnpool1d, MaxUnpool2d, nn.Upsample, ReplicationPad2d, ReplicationPad3d, ReflectionPad2d
-
PReLU, HardTanh, L1Loss, SoftSign, ELU, RReLU, Hardshrink, Softplus, SoftShrink, LogSigmoid, Softmin, GLU
-
MSELoss, SmoothL1Loss, KLDivLoss, HingeEmbeddingLoss, SoftMarginLoss, MarginRankingLoss, CrossEntropyLoss
-
DataParallel
4、優化器
- optim.SparseAdam:能實現適用于稀疏張量的簡單亞當算法
- 優化器中增加了 add_param_group 函數,能在構建好的優化器中增加新的參數組。
除此之外,還增加了新的張量函數和功能,在新版本中,能通過 ONNX 將模型遷移到其他框架上。另外,在加速方面,重寫 gpu kernel 之后,softmax 和 log_softmax 的速度能實現 4-256 倍的提升;在分布式 AllReduce 中,能實現 2.5-3 倍的性能提升;torch.norm 函數的 backward 能實現 1.5 倍的加速;pack_padded_sequence 的性能也有提升。
具體的介紹可以參加說明文檔:https://github.com/pytorch/pytorch/releases/tag/v0.3.0
來自: 雷鋒網