PyTorch 1.0 has released!!
Convergence Lab. の木村です。
PyTorch 1.0 がリリースされましたね。ここでは 1.0 の新機能について見ていこうと思います。
PyTorchとは?
PyTorchは Facebook を中心として開発されている Deep Learning フレームワークです。Deep Learning フレームワークといえば、 GoogleのTensorFlowが有名です。しかし、このTensorFlowはやや開発しにくい部分があって好みは別れます。コンラボ的には PyTorchのほうが好きですね。
PyTorch の特徴といえば、以下が挙げられると思います。
- Define by Runでデバッグしやすい
- Python との親和性
PyTorch 1.0 の新機能
それでは、https://github.com/pytorch/pytorch/releases を読んでいきましょう。
JIT
PyTorch に JIT がつきました。これにより、書きやすさを維持したままパフォーマンスが向上するはずです。以下のように書くだけで良いとのこと。
ドキュメントは以下です。
分散学習の刷新
torch.distributed のバックエンドが増えました。以下がサポートされます。
- Gloo
- NCCL
- MPI
Gloo (https://github.com/facebookincubator/gloo) は Facebook が開発した分散学習ライブラリのようです。基本的には Gloo を使っていくことになるのだろうか。
PyTorchが C++ でもかけるようになりました。 Py とは何かとか考えてはいけません。
[Python]
import torch
model = torch.nn.Linear(5, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
prediction = model.forward(torch.randn(3, 5))
loss = torch.nn.functional.mse_loss(prediction, torch.ones(3, 1))
loss.backward()
optimizer.step()
[C++]
#include <torch/torch.h>
torch::nn::Linear model(5, 1);
torch::optim::SGD
optimizer(model->parameters(), /*lr=*/0.1);
torch::Tensor prediction = model->forward(torch::randn({3, 5}));
auto loss = torch::mse_loss(prediction, torch::ones({3, 1}));
loss.backward();
optimizer.step();
という感じで、ほぼそっくりにかけます。
TensorFlow hubに対抗して PyTorch にも 学習済みモデルのホスティング環境が整備されました。
ドキュメントの整理はまだこれからのようですね。
その他の目玉機能です。個人的には以下の2つに注目しました。
- CELU活性化関数
- CTCLoss のサポート
CELU関数 (https://pytorch.org/docs/master/nn.html#torch.nn.CELU) は、 ELUは x=0 で微妙に滑らかじゃないのを修正した関数です。ELU自体を使うメリットはもうないのかな?という感じ。
CTCLoss (https://pytorch.org/docs/master/nn.html#torch.nn.CTCLoss)は音声認識をよくやる私には嬉しい追加です。これまで、PyTorchでCTCLossを使おうとすると、WarpCTC(https://github.com/SeanNaren/warp-ctc)を使っていました。少しだけ面倒な部分もありました。これからは、pytorch をインストールするだけで使えるので便利です。
あと、Trainer は削除されました。Trainer っぽいものがほしい人は、 Ignite を使うと良いでしょう。
まとめ