ผู้เชี่ยวชาญ | ปล่อย |
---|---|
ไพทอร์ช - ไพ + นิม
ส่วนหน้าของ Nim สำหรับ pytorch โดยมีเป้าหมายที่จะสร้างโดยอัตโนมัติเป็นส่วนใหญ่และใช้ ATen ภายใน
เนื่องจาก Nim คอมไพล์เป็น C++ จึงไม่ใช่ wrapper หรือไลบรารีการรวม มันสร้างรหัส ATen ดั้งเดิมแบบ 1 ต่อ 1
ข้อกำหนดเดียวจาก pytorch คือไลบรารีเทนเซอร์หลักของ ATen ด้วยเหตุนี้ nimtorch จึงมีความหลากหลายอย่างยิ่งและสามารถคอมไพล์บนอุปกรณ์ทุกประเภท
ระยะเริ่มต้น
Declarations.yaml
ซึ่งเป็น ATen API แบบเต็ม derivatives.yaml
, procs การไล่ระดับสี เป้าหมายสุดท้ายคือการเข้ากันได้กับ pytorch API ให้ได้มากที่สุด
ใช้งานง่ายของภาษา Python ในขณะที่ยังคงประสิทธิภาพ C++ ดั้งเดิมของ 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 : การกระจายล่าสุดเทียบเท่ากับ Ubuntu 18.04 ในแง่ของ libc และไลบรารีพื้นฐาน คอมไพเลอร์ gcc
macOS : เราคอมไพล์ด้วยการตั้งค่าสถานะเวอร์ชัน 10.13 นาที แต่อาจทำงานได้แม้ในเวอร์ชันที่ต่ำกว่า, XCode สำหรับคอมไพเลอร์
Windows : Windows 10, Visual Studio Runtime 2017 และ Visual Studio 2017 (ทุกรุ่น)
WASM : คอมไพเลอร์และเครื่องมือ Emscripten ล่าสุด
ลินุกซ์, macOS และ Windows
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
หรือบน windows... (เพราะ dll จำเป็นต้องอยู่เคียงข้างกัน)
nim cpp -o:%ATEN%/lib/test.exe -r %ATEN%/dist/pkgs/nimtorch-#head/tests/test_xor.nim
ลินุกซ์, macOS และ Windows
ตรวจสอบว่าเราต้องการ ATen/PyTorch เวอร์ชันใดใน conda/nimtorch/meta.yaml
- ควรเป็นเช่น 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 (ลินุกซ์เท่านั้น)
conda create -n aten -c fragcolor aten={version} cuda10.0
เปิดใช้งานสภาพแวดล้อม Aten
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
(ใช้ -o:%ATEN%/lib/test.exe
แทนบน windows เนื่องจากตำแหน่ง dll)
ในกรณีของ WASM:
รันการทดสอบตัวเอง nim cpp -d:wasm -o:test.js torch.nim && node test.js
(ต้องการ node.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
เมื่อทำงานบน CPU