2024-07-19,   Gun-ha, KANG

이번 포스팅에서는 Java Application에서 PyTorch 사용을 위한 libtorch 윈도우/리눅스 설정 가이드를 공유해보려고 합니다.

개요

Java Application에서의 PyTorch 사용 (3가지)

  • (1) libtorch 설정을 통한 PyTorch 사용
    • PyTorch의 JIT 컴파일러를 활용하여 모델을 TorchScript로 변환
    • 변환된 모델을 Java 바인딩을 제공하는 라이브러리를 사용하여 Java에서 사용
      • 이때, libtorch 가 필수
  • (2) Deep Java Library (DJL)
  • (3) ONNX Runtime

이 중 libtorch 설정을 통한 PyTorch 사용을 위해 필요한 사전 설정 방법 사용

  • 장/단점
    • 직접적인 PyTorch C++ API 접근으로 높은 성능
    • 단, 시스템 환경에 따라 설정이 다르며, 좀 복잡

※ 테스트: libtorch-CPU (Not use GPU, CUDA) 버전 사용

  • 현 시간 기준, 2.3.0(stable) 은 dll 인식이 잘 안되서 2.2.2 를 사용했음

1. Window

  • 1.1 libtorch 다운로드 및 설치
    • 릴리즈(배포용) 버전 사용
      • 디버깅 정보 삽입X, 코드를 최적화하여 실행파일 크기를 최대한 줄여준 버전

1

  • 1.2 윈도우의 시스템환경변수에 등록
    • ex. C:\Program Files\libtorch\lib

2

  • 1.3 PC 재부팅

2. Linux

리눅스는 윈도우에 비해, 버전 호환성이 더 까다로운 느낌

예시. 서버 디렉토리 구조

/path/to/app/4.pytorch
├── Dockerfile
├── docker-compose.yml
├── target
│   ├── pytorch-java-1.0-SNAPSHOT.jar
│   └── lib/
├── ext
│   ├── model
│   │   └── lstm_v2.pt
│   └── example
│       ├── main.cpp
│       └── CMakeLists.txt

예시. 컨테이너 내부 디렉토리 구조

/app
├── pytorch-java-1.0-SNAPSHOT.jar
└── lib/

/home/libtorch
├── 설치 파일들
├── CMakeLists.txt  # 빌드 테스트용, 없어도 무방
└── example
    └── main.cpp  # 빌드 테스트용, 없어도 무방
  • 2.1 libtorch URL 복붙

    • c++11 이전에 컴파일된 라이브러리들과의 호환성을 지원하는 pre-cxx11 ABI 사용

3

  • 2.2 Dockerfile 및 docker-compose.yml 작성

    • openjdk:8
      • Debian GNU/Linux 11 (bullseye)
      • 패키지 매니저: apt 사용
    • openjdk:17
      • Red Hat Enterprise Linux(RHEL) 8.5
      • 패키지 매니저: microdnf 사용

5

  • 선택. libtorch Build Test를 원하면,

6

결론

libtorch 설정을 통해 java에서 PyTorch 모델이 사용가능함을 확인

참고


Contact Author. KangGunha Email. zxcvbnm9931@epozen.com

업데이트: