주인 | 풀어 주다 |
---|---|
Pytorch - Py + Nim
대부분 자동 생성되고 내부적으로 ATen을 사용하는 것을 목표로 하는 pytorch용 Nim 프런트엔드입니다.
Nim은 C++로 컴파일하기 때문에 이것은 래퍼나 바인딩 라이브러리가 아닙니다. 1:1 네이티브 ATEN 코드를 생성합니다.
pytorch의 유일한 요구 사항은 ATen의 핵심 텐서 라이브러리입니다. 이 때문에 nimtorch는 매우 다재다능하며 모든 종류의 장치에서 컴파일할 수 있습니다.
초기 단계
Declarations.yaml
에서 자동으로 생성됩니다. 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 컴파일러 및 도구
리눅스, 맥OS, 윈도우
conda create -n nimtorch -c fragcolor nimtorch
(cuda 10 linux 전용 cuda10.0
추가 또는 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
리눅스, 맥OS, 윈도우
conda/nimtorch/meta.yaml
에서 필요한 ATen/PyTorch 버전을 확인하세요. 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
에이텐 환경 활성화
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
실행 (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
로 설정하는 것이 좋습니다.