Владелец | Выпускать |
---|---|
Пайторч — Ру + Ним
Интерфейс Nim для pytorch, который будет генерироваться автоматически и внутри компании с использованием ATen.
Поскольку Nim компилируется в C++, это не оболочка или библиотека привязки. Он генерирует собственный код ATen 1:1.
Единственное требование от pytorch — это базовая тензорная библиотека ATen. По этой причине nimtorch чрезвычайно универсален и может компилироваться на любом устройстве.
Ранняя стадия
Declarations.yaml
полный API ATen. derivatives.yaml
градиента. Конечная цель — обеспечить максимальную совместимость с API pytorch.
Простота использования языка 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 : недавний дистрибутив, аналогичный Ubuntu 18.04, с точки зрения libc и базовых библиотек, компилятора gcc.
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
(добавьте cuda10.0
только для cuda 10 linux или добавьте wasm
для версии Wasm)
source activate nimtorch
или в Windows: conda activate nimtorch
Это установит: двоичные файлы nim и ATen, фрагменты и 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
Проверьте, какая версия ATen/PyTorch нам нужна в conda/nimtorch/meta.yaml
— должно быть что-то вроде aten ==2018.10.10.1089
Запишите версию, она понадобится вам на следующем шаге.
conda create -n aten -c fragcolor aten={version}
или
ВАСМ
conda create -n aten -c fragcolor aten={version} wasm
или Cuda 10.0 (только Linux)
conda create -n aten -c fragcolor aten={version} cuda10.0
активировать атенскую среду
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
(вместо этого используйте -o:%ATEN%/lib/test.exe
в Windows из-за расположения dll)
в случае 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
при работе на процессоре.