본문 바로가기

Tech

Torch7를 사용하는 cpptorch의 Visual Studio 컴파일 방법

Torch7는 lua기반으로 되어 있는데 cpp에서 사용하려면 cpptorch라는 Wrapper를 이용해야 한다.

이 cpptorch를 가장 최근의 Torch7와 사용하기 위해서 약간의 에러 픽스가 필요하다.

 

Torch7이 업데이트되면서 THNN 모듈이 빠졌기 때문에 본 포스팅에서는 합쳐서 컴파일하는 방식으로 진행한다.

 

먼저 3가지 파일을 다운받는다.

 

https://github.com/torch/torch7

 

torch/torch7

http://torch.ch. Contribute to torch/torch7 development by creating an account on GitHub.

github.com

https://github.com/torch/nn

 

torch/nn

Contribute to torch/nn development by creating an account on GitHub.

github.com

https://github.com/tuotuoxp/cpp-torch

 

tuotuoxp/cpp-torch

cpp-torch is a C++ library, implemented as a wrapper around Torch libraries. - tuotuoxp/cpp-torch

github.com

각각 압축을 풀어서 torch/nn을 torch/torch7에 합친다.

충돌이 몇 가지 나오는데 torch/torch7을 기준으로 하여 Overwrite 하지 않는다.

 

필자는 C:\TorchWorkspace\torch7-master 경로에 압축을 풀었다.

이 경로를 Base로 하여 C:\TorchWorkspace\torch7-master\lib\CMakeLists.txt를 수정한다.

 

하이라이트된 항목을 추가한다

 

C:\TorchWorkspace\torch7-master\lib\THNN\CMakeLists.txt 에서 Torch를 찾는 코드를 해제한다.

 

4-6라인을 코멘트화 한다.

이제 CMake를 실행해 보자.

WITH_OPENMP 가 체크되어 있는데 해제한 뒤에 [Configure]->[Generate]를 한다.

Warning은 나오지만 넘어가도 무방하다.

 

 

솔루션 파일을 열면 몇 가지 프로젝트가 보이는데 선택된 두 항목만 컴파일할 것이다.

 

 

먼저 TH부터 컴파일한다. 무사히 컴파일될 것이다.

그다음 THNN의 속성에서 포함 디렉터리를 아래와 같이 추가한다.

 

 

이 역시 빌드 성공이다. 이제 Torch7의 컴파일은 끝났다.

이제 cpptorch를 컴파일할 차례이다.

 

Configure를 해보면 Torch_DIR을 찾는데 cmake버전에 따라 넣어줘도 안 되는 경우가 있다.

그래서 C:\TorchWorkspace\cpp-torch-master\CMakeLists.txt를

14-16 라인의 Find Torch를 해제하자.

 

14-16 라인을 주석처리한다.

 

CMake에서 THNN_LIBRARY와 TH_LIBRARY 두 항목을 세팅한다.

 

 

[Generate] 후 VS를 열고 다음 4가지 포함 디렉터리를 세팅한다.

 

 

자. 이제 세팅은 다 되었는데 컴파일하면 에러가 난다.

이 에러는 소스를 직접 수정해줘야 한다.

에러 상황은 cpptorch가 torch7의 업데이트를 반영하지 못한 것이다.

 

 

에러 위치에 parameter 0을 추가해준다. 다음과 같이 고쳐진다.

 

이제 컴파일하면 성공하는 것을 볼 수가 있다.

 

Visual Studio를 관리자 권한으로 실행하여 solution을 다시 열자.

그리고 INSTALL project 만 build 하자.

보기 좋고 사용하기 좋게 라이브러리화 되어 정리된다.

 

bin 폴더에 cpptorch.dll이, lib 폴더에 cpptorch.lib가 들어있는 것을 볼 수 있다.