PyTorch 1.5上線:加入穩定C++前端,高級自動梯度API

機器之心報道

機器之心編輯部

在新版本中,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 版同等豐富,之前實驗性的功能都已移到「穩定版」中。主要亮點如下:

PyTorch 1.5上線:加入穩定C++前端,高級自動梯度API

專為計算機視覺設計的「Channels last」儲存格式(實驗型)

PyTorch 1.5上線:加入穩定C++前端,高級自動梯度API

「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 總覽:

PyTorch 1.5上線:加入穩定C++前端,高級自動梯度API

全新的高級 autograd API(實驗型)

PyTorch 1.5上線:加入穩定C++前端,高級自動梯度API

PyTorch 將包括 jacobian,hessian,jvp,vjp,hvp 和 vhp 在內的新函數導入到了 torch.autograd.functional 子模塊中。這個特性建立在當前的 API 之上,允許用戶輕鬆地執行這些函數。

不再支持 Python 2

PyTorch 1.5上線:加入穩定C++前端,高級自動梯度API

從 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/


分享到:


相關文章: