歡迎您光臨本站 註冊首頁

PyTorch 1.5 釋出,C++ 前端重大更新、引入新儲存格式提高效能

←手機掃碼閱讀     admin @ 2020-04-23 , reply:0

PyTorch 1.5 釋出了,此版本包括新增加了幾個主要的 API 和一些改進、對 C++ 前端有重大更新、用於計算機視覺模型的“通道維持(channels last)”儲存格式,以及用於模型並行訓練的分散式 RPC 框架的穩定版本。

同時,此版本還提供了針對 hessian 和 jacobian 的 autograd 的新 API,以及一個受 pybind 啟發的允許建立 Custom C++ Class(定製類)的 API。

C++ FRONTEND API (STABLE)

之前被標記為實驗性質的 C++ 前端 API 現在已經與 Python 地位相當,並且總體特性已移至“穩定”狀態。一些主要亮點包括:

  • 現在覆蓋率達到約 100%,並提供有關 C++ torch::nn 模組/函式的文件,開發者可以輕鬆地將其模型從 Python API 轉換為 C++ API。
  • C++ 中的最佳化器與 Python 中的有所不同:C++ 最佳化器不能將引數組作為輸入,而 Python 可以。此外,步驟函式的實現也不完全相同。在 1.5 版本中,C++ 最佳化器的行為將始終與 Python 等效器相同。
  • C++ 中缺少張量多維度索引 API 是一個眾所周知的問題,並在 PyTorch GitHub issue 跟蹤器和論壇中引起了很多討論。以前的解決方法是結合使用 arrow/select/index_select/masked_select,與 Python API 的優雅張量 [:, 0, ..., mask] 語法相比,它比較笨拙且容易出錯。在 1.5 版本中,開發者可以使用 tensor.index({Slice(), 0, “...”, mask}) 達到相同的目的。

‘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 ]

來源:OsChina
連結:https://www.oschina.net/news/115100/pytorch-1-5-released
PyTorch 1.5 釋出,C++ 前端重大更新、引入新儲存格式提高效能已經有190次圍觀

http://coctec.com/news/all/show-post-231374.html