يتقن | يطلق |
---|---|
بيتورتش - بي + نيم
واجهة Nim الأمامية لـ pytorch، تهدف في الغالب إلى أن يتم إنشاؤها تلقائيًا واستخدام ATen داخليًا.
نظرًا لأن Nim يقوم بالتحويل البرمجي إلى C++، فهذه ليست مكتبة مجمعة أو مكتبة ربط. يقوم بإنشاء رمز ATen الأصلي من 1 إلى 1.
الشرط الوحيد من pytorch هو مكتبة الموتر الأساسية لـ ATen. ولهذا السبب، يعد برنامج nimtorch متعدد الاستخدامات للغاية ويمكن تجميعه على أي نوع من الأجهزة.
مرحلة مبكرة
Declarations.yaml
derivatives.yaml
وprocs المتدرجة الهدف النهائي هو أن تكون متوافقًا قدر الإمكان مع واجهة برمجة تطبيقات pytorch.
سهولة استخدام لغة بايثون مع الحفاظ على أداء 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
لينكس، ماك وويندوز
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
أو على النوافذ... (لأن ملفات dll يجب أن تكون جنبًا إلى جنب)
nim cpp -o:%ATEN%/lib/test.exe -r %ATEN%/dist/pkgs/nimtorch-#head/tests/test_xor.nim
لينكس، ماك وويندوز
تحقق من إصدار 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
أو كودا 10.0 (لينكس فقط)
conda create -n aten -c fragcolor aten={version} cuda10.0
تفعيل بيئة آتون
source activate aten
أو على الويندوز: 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
بدلاً من ذلك على النوافذ بسبب موقع dll)
في حالة WASM:
قم بتشغيل الاختبار الذاتي nim cpp -d:wasm -o:test.js torch.nim && node test.js
(يحتاج إلى العقدة js)
بناء آتين
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
عند التشغيل على وحدة المعالجة المركزية.