マスター | リリース |
---|---|
パイトーチ - パイ + ニム
pytorch 用の Nim フロントエンド。ほとんどが自動生成され、内部で ATen を使用することを目指しています。
Nim は C++ にコンパイルされるため、これはラッパーまたはバインディング ライブラリではありません。 1 対 1 のネイティブ ATen コードを生成します。
pytorch からの唯一の要件は、ATen のコア tensor ライブラリです。このため、nimtorch は非常に多用途であり、あらゆる種類のデバイスでコンパイルできます。
早期
Declarations.yaml
から完全な ATen API が自動的に生成されますderivatives.yaml
から自動的に生成される勾配プロシージャ最終的な目標は、pytorch API と可能な限り互換性を持たせることです。
完全にベアメタルのネイティブ C++ パフォーマンスを維持しながら、Python 言語を使いやすくする
# 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 バイナリ、フラグメント、nimtorch がすべて 1 つのコマンドでインストールされます。他には何も必要ありません。
最新バージョンの 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 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
アテン環境をアクティブにする
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
に設定することをお勧めします。