掌握 | 發布 |
---|---|
Pytorch - Py + Nim
pytorch 的 Nim 前端,旨在主要自動產生並在內部使用 ATen。
因為 Nim 編譯為 C++,所以這不是包裝器或綁定函式庫。它會產生一對一的本機 ATen 程式碼。
pytorch 的唯一要求是 ATen 的核心張量庫。正因為如此,nimtorch 的用途極其廣泛,可以在任何類型的裝置上進行編譯。
早期
Declarations.yaml
自動產生完整的 ATen API derivatives.yaml
,梯度過程最終目標是盡可能與 pytorch API 相容。
易於使用 python 語言,同時保持完全裸機本機 C++ 效能
# GRUCell
gi = x . matmul ( w_input . t ()) + b_input
gh = hidden . matmul ( w_recur . t ()) + b_recur
i_r , i_i , i_n = gi . chunk ( 3 , 1 )
h_r , h_i , h_n = gh . chunk ( 3 , 1 )
resetgate = ( i_r + h_r ). sigmoid ()
inputgate = torch . sigmoid ( i_i + h_i )
newgate = ( i_n + resetgate * h_n ). tanh ()
hy = newgate + inputgate * ( hidden - newgate )
# GRUCell
let
gi = x. matmul (w_input. t ()) + b_input
gh = hidden. matmul (w_recur. t ()) + b_recur
(i_r, i_i, i_nn) = gi. chunk ( 3 , 1 )
(h_r, h_i, h_n) = gh. chunk ( 3 , 1 )
resetgate = (i_r + h_r). sigmoid ()
inputgate = torch. sigmoid (i_i + h_i)
newgate = (i_nn + resetgate * h_n). tanh ()
hy = newgate + inputgate * (hidden - newgate)
Linux :最新發行版在 libc 和基本函式庫、gcc 編譯器方面與 ubuntu 18.04 相當
macOS :我們使用 10.13 分鐘版本標誌進行編譯,但甚至可以在較低版本上運行,編譯器的 XCode
Windows :Windows 10、Visual Studio Runtime 2017 和 Visual Studio 2017(任何版本)
WASM :最新的 Emscripten 編譯器與工具
Linux、macOS 和 Windows
conda create -n nimtorch -c fragcolor nimtorch
(僅針對 cuda 10 linux 新增cuda10.0
或針對 wasm 版本新增wasm
)
source activate nimtorch
或在 Windows 上: conda activate nimtorch
這將在一個命令中安裝:nim 和 ATen 二進位檔案、fragments 和 nimtorch,不需要其他任何東西。
確保您使用最新版本的 conda 並在系統中安裝了編譯器,在 Windows 上您必須新增--cc:vcc
並處於開發人員提示字元下方。
確保您的系統是最新的(ubuntu 18.04參考/macOS High Sierra/Windows 10)並且安裝了cuda 9.2(如果您需要cuda,僅linux,更多cuda版本即將推出,如果您需要特定版本,請開啟問題) 。
用類似的東西進行測試:
nim cpp -o:test -r $ATEN/dist/pkgs/nimtorch-#head/tests/test_xor.nim
或在 Windows 上...(因為 dll 需要並排)
nim cpp -o:%ATEN%/lib/test.exe -r %ATEN%/dist/pkgs/nimtorch-#head/tests/test_xor.nim
Linux、macOS 和 Windows
檢查conda/nimtorch/meta.yaml
中我們需要什麼版本的 ATen/PyTorch - 應該類似於aten ==2018.10.10.1089
請記下版本,因為您在下一步中將需要它
conda create -n aten -c fragcolor aten={version}
或者
WASM
conda create -n aten -c fragcolor aten={version} wasm
或 Cuda 10.0(僅限 Linux)
conda create -n aten -c fragcolor aten={version} cuda10.0
啟動aten環境
source activate aten
或在 Windows 上: conda activate aten
choosenim devel
git clone -b release https://github.com/fragcolor-xyz/nimtorch.git
cd nimtorch
nimble develop
最後
執行自測試nim cpp -o:test -r torch.nim
(由於 dll 位置,在 Windows 上使用-o:%ATEN%/lib/test.exe
代替)
對於 WASM:
執行自測試nim cpp -d:wasm -o:test.js torch.nim && node test.js
(需要node.js)
建構ATEN
pip2 install pyyaml typing
git clone -b fragcolor-devel https://github.com/fragcolor-xyz/pytorch.git
cd pytorch
git reset --hard < commit hash > # from torch/commit.txt
git submodule update --init
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DUSE_CUDA=OFF -DBUILD_ATEN_ONLY=ON -DCMAKE_INSTALL_PREFIX= ` pwd ` /output ../
make -j4
make install
# also copy derivatives if we want to run generator.nim or nimble test
# notice generator.nim might need python3 and pyyaml
cp ../tools/autograd/derivatives.yaml ` pwd ` /output/share/
測試構建
cd <nimtorch repo>
ATEN=<installation path of ATEN> nim cpp -r -f -o:/tmp/z01 torch.nim # for eg: ATEN=pathto/pytorch/build/output/
OMP_WAIT_POLICY
環境變數設定為PASSIVE
。