PyTorch 1.5 釋出了,此版本包括新增加了幾個主要的 API 和一些改進、對 C++ 前端有重大更新、用於計算機視覺模型的“通道維持(channels last)”儲存格式,以及用於模型並行訓練的分散式 RPC 框架的穩定版本。
同時,此版本還提供了針對 hessian 和 jacobian 的 autograd 的新 API,以及一個受 pybind 啟發的允許建立 Custom C++ Class(定製類)的 API。
C++ FRONTEND API (STABLE)
之前被標記為實驗性質的 C++ 前端 API 現在已經與 Python 地位相當,並且總體特性已移至“穩定”狀態。一些主要亮點包括:
‘CHANNELS LAST’ MEMORY FORMAT FOR COMPUTER VISION MODELS (EXPERIMENTAL)
用於計算機視覺模型的“通道維持(channels last)”儲存格式,目前處於實驗階段。該格式的記憶體佈局可以充分發揮效能高效的卷積演算法和硬體(NVIDIA 的 Tensor Core、FBGEMM、QNNPACK)的能力。此外,它被設計為透過運算子自動傳播,從而允許在記憶體佈局之間輕鬆切換。
CUSTOM C++ CLASSES (EXPERIMENTAL)
此版本添加了一個新的 API torch.CutomClassHolder,用於將自定義 C++ 類同時繫結到 TorchScript 和 Python,該 API 的語法與 pybind11 幾乎相同。它允許開發者向 TorchScript 型別系統和執行時系統暴露其 C++ 類及其方法,以便他們可以例項化和操作 TorchScript/Python 中的任意 C++ 物件。C++ 繫結示例:
template <class T>
struct MyStackClass : torch::CustomClassHolder {
std::vector<T> stack_;
MyStackClass(std::vector<T> 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_<MyStackClass<std::string>>("myclasses", "MyStackClass")
.def(torch::init<std::vector<std::string>>())
.def("push", &MyStackClass<std::string>::push)
.def("pop", &MyStackClass<std::string>::pop)
.def("size", [](const c10::intrusive_ptr<MyStackClass>& self) {
return self->stack_.size();
});
它暴露了可以在 Python 和 TorchScript 中使用的類,如下所示:
@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"]
DISTRIBUTED RPC FRAMEWORK APIS (NOW STABLE)
分散式 RPC 框架在 1.4 版本中以實驗性形式出現,現在它已經處於穩定狀態。此過程涉及許多增強功能和 bug 修復,以使分散式 RPC 框架總體上更可靠和更健壯。同時還添加了兩個新特性,包括概要分析支援,在 RPC 中使用 TorchScript 函式以及一些易於使用的增強功能。
此外,從 1.5 開始,PyTorch 不再支援 Python 2,今後,對 Python 的支援將僅限於 Python 3,特別是 Python 3.5、3.6、3.7 和 3.8。
更多具體的細節見釋出公告:
https://pytorch.org/blog/pytorch-1-dot-5-released-with-new-and-updated-apis
[admin
]