機器之心報道
機器之心編輯部
在新版本中,Facebook 與 AWS 還合作共同推出了大規模生產級工具庫 TorchServe。
今天,PyTorch 1.5 宣佈上線,此版本主要包括幾個新的 API 的添加和改進。新版 PyTorch 包括對 C++前端的重大更新,用於計算機視覺模型的「channels last」存儲格式,以及用於模型並行訓練的分佈式 RPC 框架的穩定版本。該版本還提供了針對自動求導機制中黑塞和雅可比的新 API,以及受 pybind 啟發,允許用戶創建自定義 C++類的一個 API。另外,torch_xla 已可在 PyTorch 1.5 版中使用,並在 1.5 版本中進行了測試,可提供成熟的 Cloud TPU 體驗。
版本說明:https://github.com/pytorch/pytorch/releases/tag/v1.5.0
主要變化
以下是 PyTorch 1.5 版本的主要變化
C++ 前端 API(穩定型)
現在 C++前端 API 與 Python 版同等豐富,之前實驗性的功能都已移到「穩定版」中。主要亮點如下:
專為計算機視覺設計的「Channels last」儲存格式(實驗型)
「Channels last」儲存佈局解鎖了使用高效卷積算法與硬件的能力。另外,它被設計為在眾多運算中自動傳播,使得用戶能在不同儲存佈局間輕鬆切換。
自定義 C++類(實驗型)
這次發佈的版本中加入了 torch.CutomClassHolder 這一新的 API,能夠將自定義的 C++類同時綁定到 TorchScript 和 Python 中。該 API 的用法幾乎與 pybind11 相同,它允許用戶將自定義的 C++類與方法暴露給 TorchScript 類型的系統,這使得用戶能夠從 TorchScript 和 Python 中實例化並操縱任意 C++對象。
以下為一個官方給出的實例:
template
struct MyStackClass : torch::CustomClassHolder {
std::vector stack_;
MyStackClass(std::vector 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_("myclasses", "MyStackClass")
.def(torch::init())
.def("push", &MyStackClass::push)
.def("pop", &MyStackClass::pop)
.def("size", [](const c10::intrusive_ptr& self) {
return self->stack_.size();
});
上述代碼就暴露了一個類,用戶可在 TorchScript 和 Python 中用如下方式調用:
@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"]
分佈式 RPC 框架 API(穩定型)
分佈式 RPC 框架在 1.4 版中作為實驗性功能發佈。當前版本涉及大量針對分佈式 RPC 框架的可靠性與魯棒性的功能強化以及錯誤修復,並加入瞭如性能調試支持、在 RPC 中使用 TorchScript 功能等一系列新功能。以下為該框架下各種 API 總覽:
全新的高級 autograd API(實驗型)
PyTorch 將包括 jacobian,hessian,jvp,vjp,hvp 和 vhp 在內的新函數導入到了 torch.autograd.functional 子模塊中。這個特性建立在當前的 API 之上,允許用戶輕鬆地執行這些函數。
不再支持 Python 2
從 1.5.0 開始,PyTorch 將不再支持 Python 2,具體來說是 Python 2.7。PyTorch 對 Python 的支持將僅限於 Python 3,特別是 Python 3.5、3.6、3.7 和 3.8(首先在 PyTorch 1.4.0 中啟用)。
參考鏈接:https://pytorch.org/blog/pytorch-1-dot-5-released-with-new-and-updated-apis/