Maître | Libérer |
---|---|
Pytorch - Py + Nim
Une interface Nim pour pytorch, visant à être principalement générée automatiquement et en interne utilisant ATen.
Étant donné que Nim compile en C++, il ne s'agit pas d'un wrapper ou d'une bibliothèque de liaison. Il génère du code ATen natif 1 pour 1.
La seule exigence de pytorch est la bibliothèque de tenseurs de base d'ATen. Pour cette raison, nimtorch est extrêmement polyvalent et peut compiler sur n’importe quel type d’appareil.
Stade précoce
Declarations.yaml
, l'API ATen complète derivatives.yaml
, processus de dégradé L'objectif final est d'être le plus compatible possible avec l'API pytorch.
Facilité d'utilisation du langage python tout en conservant des performances C++ natives entièrement nues
# 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 : Une distribution récente à égalité avec Ubuntu 18.04 en terme de libc et de librairies basic, compilateur gcc
macOS : Nous compilons avec les indicateurs de version 10,13 min mais pouvons fonctionner même sur des versions inférieures, XCode pour les compilateurs
Windows : Windows 10, Visual Studio Runtime 2017 et Visual Studio 2017 (toute édition)
WASM : derniers compilateurs et outils Emscripten
Linux, macOS et Windows
conda create -n nimtorch -c fragcolor nimtorch
(ajoutez cuda10.0
pour cuda 10 Linux uniquement ou ajoutez wasm
pour la version wasm)
source activate nimtorch
ou sous windows : conda activate nimtorch
Cela installera : les binaires nim et ATen, les fragments et nimtorch en une seule commande, rien d'autre n'est nécessaire.
Assurez-vous d'utiliser une version récente de conda et d'avoir un compilateur installé sur votre système, sous Windows, vous devez ajouter --cc:vcc
et être sur une invite de développeur.
Assurez-vous que votre système est récent (référence Ubuntu 18.04 / macOS High Sierra / Windows 10) et que cuda 9.2 est installé (si vous avez besoin de cuda, linux uniquement, d'autres versions de cuda à venir, veuillez ouvrir un ticket si vous avez besoin d'une version spécifique).
Testez avec quelque chose comme :
nim cpp -o:test -r $ATEN/dist/pkgs/nimtorch-#head/tests/test_xor.nim
ou sous Windows... (car les DLL doivent être côte à côte)
nim cpp -o:%ATEN%/lib/test.exe -r %ATEN%/dist/pkgs/nimtorch-#head/tests/test_xor.nim
Linux, macOS et Windows
Vérifiez de quelle version d'ATen/PyTorch nous avons besoin dans conda/nimtorch/meta.yaml
- devrait ressembler à quelque chose comme aten ==2018.10.10.1089
Notez la version car vous en aurez besoin à l'étape suivante
conda create -n aten -c fragcolor aten={version}
ou
WASM
conda create -n aten -c fragcolor aten={version} wasm
ou Cuda 10.0 (Linux uniquement)
conda create -n aten -c fragcolor aten={version} cuda10.0
activer l'environnement aten
source activate aten
ou sous windows : conda activate aten
choosenim devel
git clone -b release https://github.com/fragcolor-xyz/nimtorch.git
cd nimtorch
nimble develop
enfin
exécutez l'autotest nim cpp -o:test -r torch.nim
(utilisez plutôt -o:%ATEN%/lib/test.exe
sous Windows en raison de l'emplacement de la DLL)
dans le cas de WASM :
exécuter l'autotest nim cpp -d:wasm -o:test.js torch.nim && node test.js
(nécessite node.js)
Construire 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/
Tester la construction
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
sur PASSIVE
lors de l'exécution sur CPU.