Menguasai | Melepaskan |
---|---|
Pytorch - Py + Nim
Frontend Nim untuk pytorch, sebagian besar bertujuan untuk dibuat secara otomatis dan secara internal menggunakan Aten.
Karena Nim dikompilasi ke C++, ini bukan pustaka pembungkus atau pengikat. Ini menghasilkan kode Aten asli 1-ke-1.
Satu-satunya persyaratan dari pytorch adalah perpustakaan tensor inti Aten. Karena itu, nimtorch sangat serbaguna dan dapat dikompilasi pada perangkat apa pun.
Tahap awal
Declarations.yaml
, API Aten lengkap derivatives.yaml
, proses gradien Tujuan akhirnya adalah untuk menjadi sekompatibel mungkin dengan API pytorch.
Kemudahan penggunaan bahasa python sambil menjaga kinerja C++ asli sepenuhnya bare metal
# 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 : Distribusi terbaru yang setara dengan ubuntu 18.04 dalam hal libc dan perpustakaan dasar, kompiler gcc
macOS : Kami mengkompilasi dengan flag versi 10,13 menit tetapi mungkin berfungsi bahkan pada versi yang lebih rendah, XCode untuk kompiler
Windows : Windows 10, Visual Studio Runtime 2017 dan Visual Studio 2017 (edisi apa saja)
WASM : Kompiler dan alat Emscripten terbaru
Linux, macOS, dan Windows
conda create -n nimtorch -c fragcolor nimtorch
(tambahkan cuda10.0
hanya untuk cuda 10 linux atau tambahkan wasm
untuk versi wasm)
source activate nimtorch
atau di windows: conda activate nimtorch
Ini akan menginstal: biner nim dan Aten, fragmen dan nimtorch semuanya dalam satu perintah, tidak diperlukan lagi.
Pastikan Anda menggunakan conda versi terbaru dan memiliki kompiler yang terinstal di sistem Anda, di windows Anda harus menambahkan --cc:vcc
dan berada di prompt pengembang.
Pastikan sistem Anda terbaru (referensi ubuntu 18.04 / macOS High Sierra / Windows 10) dan Anda telah menginstal cuda 9.2 (jika Anda memerlukan cuda, hanya linux, lebih banyak versi cuda yang akan datang, silakan buka masalah jika Anda memerlukan versi tertentu).
Uji dengan sesuatu seperti:
nim cpp -o:test -r $ATEN/dist/pkgs/nimtorch-#head/tests/test_xor.nim
atau di windows... (karena dll harus berdampingan)
nim cpp -o:%ATEN%/lib/test.exe -r %ATEN%/dist/pkgs/nimtorch-#head/tests/test_xor.nim
Linux, macOS, dan Windows
Periksa versi Aten/PyTorch yang kita perlukan di conda/nimtorch/meta.yaml
- seharusnya seperti aten ==2018.10.10.1089
Catat versinya karena Anda akan membutuhkannya pada langkah berikutnya
conda create -n aten -c fragcolor aten={version}
atau
WASM
conda create -n aten -c fragcolor aten={version} wasm
atau Cuda 10.0 (khusus Linux)
conda create -n aten -c fragcolor aten={version} cuda10.0
aktifkan lingkungan aten
source activate aten
atau di windows: conda activate aten
choosenim devel
git clone -b release https://github.com/fragcolor-xyz/nimtorch.git
cd nimtorch
nimble develop
Akhirnya
jalankan self test nim cpp -o:test -r torch.nim
(gunakan -o:%ATEN%/lib/test.exe
sebagai ganti di windows karena lokasi dll)
dalam kasus WASM:
jalankan self test nim cpp -d:wasm -o:test.js torch.nim && node test.js
(membutuhkan node.js)
Membangun 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/
Uji buildnya
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
ke PASSIVE
ketika dijalankan pada CPU.