掌握 | 发布 |
---|---|
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
。