해당 포스팅은 공부 및 기록 목적으로 작성한 글로써 시간이 지남에 따라 코드가 일부 작동하지 않거나 틀린 부분이 존재할 수 있습니다.

개요

현재 업무상 Jetson Xavier AGX 장비를 사용하는데 최근 Jetpack 5.1.1 버전으로 전체적으로 밀어버렸다. Jetpack SDK 내에 onnx 패키지는 포함되어 설치되어있는데 onnxruntime은 같이 설치되어있지 않다. 각종 스택오버플로, nvidia 포럼을 보면 오가는 질의속에 해당링크https://elinux.org/Jetson_Zoo#ONNX_Runtime 에서 휠파일을 받아 설치할 수 있다는 말들이 많았고 본인도 Jetpack 4.x 버전 이용 시 많이 이용했다. 하지만 지금은 Jetpack 5.0 것 까지만 올라와 있고 5.1 버전의 휠은 제공하지 않으니 직접 빌드해서 설치해보기로 했다.(5.0 버전의 휠파일을 5.1에서 설치 시 에러가 난다. 당연히 빌드환경이 달랐을 테니 어떤 부분이 안맞았을지 원인은 몰라도 당연히 될 것이라고 생각하면 안된다.)

설치

소스 코드 기반에서 휠파일까지 빌드하기 위한 방식은 어떤 패키지든지 대부분 공식문서에 나와있을 것이라 생각한다. onnxruntime 역시 공식문서에 있었고 여러 하드웨어 가속화 관련되어 아예 Jetson 용이 존재하였다. 처음엔 CUDAtensorRT 용으로 빌드해야하나 생각했는데 대부분이 X86 기반일거라 여기서는 NVIDIA Jetson을 명시한 메뉴얼을 따르기로 하였다.

설치할 버전의 OnnxRuntime 소스코드 받기

우리가 설치할 휠파일이 중요하니까 git tag 명령어등을 이용해서 원하는 버전을 정확히 체크아웃 해준다. 본인은 다른 데스크탑에서 사용하고 있는 1.14.1 버전을 선택하였다.

$ git clone https://github.com/microsoft/onnxruntime.git
$ git tag

>>
5de47af
orttraining_rc2
orttraining_rc3
orttraining_rc3.1
v0.1.4
v0.1.5
...
...
...
v1.12.1
v1.13.1
v1.14.0
v1.14.1
v1.15.0
v1.15.1

$ git checkout v1.14.1

필수 패키지 설치

대부분 Jetpack 설치 후 이미 설치되어있을 것인데 확인차 한번 더 돌려준다. packaging 파이썬 패키지는 해당 모듈이 없으니 최종 빌드할 때 휠파일 빌드를 못하는 이슈가 있었다. 설치해주자.

$  sudo apt install -y --no-install-recommends \
    build-essential software-properties-common libopenblas-dev \
    libpython3.6-dev python3-pip python3-dev python3-setuptools python3-wheel

$ pip3 install packaging

CMAKE 업그레이드

CPU 버전 소스코드 빌드 방식 공식문서에서 CMake3.26 버전보다 높게 설치하라는 글이 있다. 또한 Jetson 용 빌드방법에서도 Cmake를 버전을 올려야 한다고 언급한다. 최소 3.18이 필요하다하는데 기본으로 설치되어있는 버전이 3.16 이었나 그랬다. 테스트 버전을 3.23으로 언급한 것으로 보아 최신버전이어도 괜찮겠다 생각했고 https://cmake.org/download/ 페이지에서 Unix/Linux 버전의 소스코드(.tar.gz 확장자의) 파일을 적당한 경로에 받아 압축해제 후 들어가서 https://cmake.org/install/ 페이지의 내용을 보며 설치를 진행하였다. 내용은 다음과 같다.

# Cmake tar.gz -> extract -> excute terminal in directory
cmake .
make -j$(nporc)   # if other program is working, decrease cores number. ex) -j 6
make install 

웬만해서는 여기서 오류과정을 거치지 않을 것이라 생각하는데 만약 문제가 생긴다면 소스코드의 버전을 하나씩 내려가며 다시해보자.

ONNXRUNTIME 빌드 및 설치

메뉴얼에 있는대로 빌드 스크립트를 실행한다. 메뉴얼과 조금 다른점은 --cuda_home/usr/local/cuda의 심볼릭 링크가 나는 없었어서 실제 디렉토리인 /usr/local/cuda-11.4로 명시하였다.

# onnxruntime source code directory
$ ./build.sh --config Release --update --build --parallel --build_wheel \
 --use_cuda --cuda_home /usr/local/cuda-11.4 --cudnn_home /usr/lib/aarch64-linux-gnu

>>
...
...
...
[100%] Building CXX object CMakeFiles/onnxruntime_test_all.dir/home/complexion/Downloads/onnxruntime/onnxruntime/test/shared_lib/test_inference.cc.o
[100%] Building CXX object CMakeFiles/onnxruntime_test_all.dir/home/complexion/Downloads/onnxruntime/onnxruntime/test/unittest_main/test_main.cc.o
[100%] Linking CXX executable onnxruntime_test_all
[100%] Built target onnxruntime_test_all
removing build/bdist.linux-aarch64/wheel
2023-07-11 10:37:29,169 util.run [DEBUG] - Subprocess completed. Return code: 0
2023-07-11 10:37:29,171 build [INFO] - Build complete

위와 같이 빌드가 무사히 완료되었음을 볼 수 있다. 문제가 생겨서 중간에 끊키면 에러 메시지를 살펴보면 어지간한 건 메시지에서 답을 준다. 처음 본인은 소스코드 버전 v1.15.0 버전으로 빌드하려했는데 뭔가 실패하였다. 그래서 v1.14.1로 내렸다.

그 후 빌드된 디렉토리 내로 가면 빌드된 파이썬 패키지 및 휠파일을 찾을 수 있는데 나는 깔끔하게 사용되길 원하니 빌드 된 휠파일로 재설치를 하였다. 휠파일 경로는 onnxruntime/build/Linux/Release/dist 였다.

# cur dir == onnxruntime
$ cd ./build/Linux/Release/dist
$ pip install onnxruntime_gpu-1.14.1-cp38-cp38-linux_aarch64.whl

참고링크 onnxruntime Jetson 빌드

댓글남기기