Maestro | Liberar |
---|---|
Pytorch-Py + Nim
Una interfaz de Nim para pytorch, cuyo objetivo es generarse principalmente de forma automática y utilizar ATen internamente.
Debido a que Nim compila en C++, esta no es una biblioteca contenedora o vinculante. Genera código ATen nativo 1 a 1.
El único requisito de pytorch es la biblioteca de tensores centrales de ATen. Por esta razón, nimtorch es extremadamente versátil y puede compilar en cualquier tipo de dispositivo.
Etapa temprana
Declarations.yaml
, la API ATen completa derivatives.yaml
, proceso de gradiente El objetivo final es ser lo más compatible posible con la API de pytorch.
Facilidad de uso del lenguaje Python manteniendo al mismo tiempo el rendimiento nativo de 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 : una distribución reciente a la par de ubuntu 18.04 en términos de libc y bibliotecas básicas, compilador gcc
macOS : compilamos con indicadores de versión de 10,13 min, pero es posible que funcionen incluso en versiones inferiores, XCode para los compiladores
Windows : Windows 10, Visual Studio Runtime 2017 y Visual Studio 2017 (cualquier edición)
WASM : último compilador y herramientas de Emscripten
Linux, macOS y Windows
conda create -n nimtorch -c fragcolor nimtorch
(agregue cuda10.0
solo para cuda 10 linux o agregue wasm
para la versión wasm)
source activate nimtorch
o en windows: conda activate nimtorch
Esto instalará: nim y ATen binarios, fragmentos y nimtorch, todo en un solo comando, no se necesita nada más.
Asegúrese de utilizar una versión reciente de conda y de tener un compilador instalado en su sistema; en Windows debe agregar --cc:vcc
y estar en un mensaje de desarrollador.
Asegúrese de que su sistema sea reciente (referencia de ubuntu 18.04 / macOS High Sierra / Windows 10) y tenga instalado cuda 9.2 (si necesita cuda, solo Linux, habrá más versiones de cuda, abra un problema si necesita una versión específica).
Pruebe con algo como:
nim cpp -o:test -r $ATEN/dist/pkgs/nimtorch-#head/tests/test_xor.nim
o en Windows... (porque los archivos DLL deben estar uno al lado del otro)
nim cpp -o:%ATEN%/lib/test.exe -r %ATEN%/dist/pkgs/nimtorch-#head/tests/test_xor.nim
Linux, macOS y Windows
Compruebe qué versión de ATen/PyTorch necesitamos en conda/nimtorch/meta.yaml
; debería ser algo así como aten ==2018.10.10.1089
Anota la versión, ya que la necesitarás en el siguiente paso.
conda create -n aten -c fragcolor aten={version}
o
WASM
conda create -n aten -c fragcolor aten={version} wasm
o Cuda 10.0 (solo Linux)
conda create -n aten -c fragcolor aten={version} cuda10.0
activar el entorno aten
source activate aten
o en windows: conda activate aten
choosenim devel
git clone -b release https://github.com/fragcolor-xyz/nimtorch.git
cd nimtorch
nimble develop
finalmente
ejecute la autoprueba nim cpp -o:test -r torch.nim
(use -o:%ATEN%/lib/test.exe
en su lugar en Windows debido a la ubicación de la dll)
en el caso de WASM:
ejecute la autoprueba nim cpp -d:wasm -o:test.js torch.nim && node test.js
(necesita node.js)
Construir 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/
Prueba la construcción
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
en PASSIVE
cuando se ejecuta en la CPU.