Memorizing/Jetson

Jetson Orin Nano에 ONNXRUNTIME 환경 설정하기

Mingi Kim 2024. 12. 21. 15:27

아래의 절차에 따라 진행하면 될 것 같다.

https://onnxruntime.ai/docs/build/eps.html#nvidia-jetson-tx1tx2nanoxavierorin

 

Build with different EPs

Learm how to build ONNX Runtime from source for different execution providers

onnxruntime.ai

1. 먼저 onnxruntime의 레포지토리를 클론한다.

2. cuda 11.8이 기본 버전인데, 초기에 jetpack 5.x를 설치하면 cuda11.4가 설치되어 있기 때문에 cuda11.8로 업데이트를 해주어야한다. 원래라면 jetpack을 다시 설치해야하지만, 11.4에서 11.8은 그냥 소프트웨어만 업데이트할 수 있다고 한다.
https://developer.nvidia.com/blog/simplifying-cuda-upgrades-for-nvidia-jetson-users/

 

Simplifying CUDA Upgrades for NVIDIA Jetson Users | NVIDIA Technical Blog

With CUDA Toolkit 11.8 and NVIDIA JetPack 5.0, you can upgrade to the latest CUDA release without updating NVIDIA JetPack or Jetson Linux BSP software.

developer.nvidia.com

3. onnxruntime을 빌드한다.

./build.sh --config Release --update --build --parallel --build_wheel \
--use_tensorrt --cuda_home /usr/local/cuda --cudnn_home /usr/lib/aarch64-linux-gnu \
--tensorrt_home /usr/lib/aarch64-linux-gnu

위의 코드를 통해서 빌드하였는데 에러가 발생했다.

[ 29%] Building CXX object _deps/abseil_cpp-build/absl/strings/CMakeFiles/absl_strings.dir/str_split.cc.o
/home/mingi/workspace/onnxruntime/onnxruntime/core/util/math_cpu.cc:31:10: fatal error: Eigen/src/Core/arch/Default/Half.h: 그런 파일이나 디렉터리가 없습니다
   31 | #include "Eigen/src/Core/arch/Default/Half.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/onnxruntime_util.dir/build.make:76: CMakeFiles/onnxruntime_util.dir/home/mingi/workspace/onnxruntime/onnxruntime/core/util/math_cpu.cc.o] 오류 1
make[1]: *** [CMakeFiles/Makefile2:2029: CMakeFiles/onnxruntime_util.dir/all] 오류 2
make[1]: *** 끝나지 않은 작업을 기다리고 있습니다....
[ 29%] Building CXX object _deps/abseil_cpp-build/absl/strings/CMakeFiles/absl_strings.dir/substitute.cc.o
[ 29%] Linking CXX static library libabsl_strings.a
[ 29%] Built target absl_strings
make: *** [Makefile:146: all] 오류 2
Traceback (most recent call last):
  File "/home/mingi/workspace/onnxruntime/tools/ci_build/build.py", line 2964, in <module>
    sys.exit(main())
  File "/home/mingi/workspace/onnxruntime/tools/ci_build/build.py", line 2862, in main
    build_targets(args, cmake_path, build_dir, configs, num_parallel_jobs, args.target)
  File "/home/mingi/workspace/onnxruntime/tools/ci_build/build.py", line 1721, in build_targets
    run_subprocess(cmd_args, env=env)
  File "/home/mingi/workspace/onnxruntime/tools/ci_build/build.py", line 868, in run_subprocess
    return run(*args, cwd=cwd, capture_stdout=capture_stdout, shell=shell, env=my_env)
  File "/home/mingi/workspace/onnxruntime/tools/python/util/run.py", line 49, in run
    completed_process = subprocess.run(
  File "/usr/lib/python3.8/subprocess.py", line 516, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/usr/local/bin/cmake', '--build', '/home/mingi/workspace/onnxruntime/build/Linux/Release', '--config', 'Release', '--', '-j2']' returned non-zero exit status 2.

메뉴얼을 보니 onnxruntime, cuda, tensorrt 버전을 맞추어야한다고 되어있었다. 따라서 아래의 명령어로 checkout을 해준 후, 다시 설치하였다.
https://onnxruntime.ai/docs/execution-providers/TensorRT-ExecutionProvider.html#requirements

 

NVIDIA - TensorRT

Instructions to execute ONNX Runtime on NVIDIA GPUs with the TensorRT execution provider

onnxruntime.ai

git checkout v1.15.1
sudo ./build.sh --config Release --update --build --parallel --build_wheel --use_tensorrt --cuda_home /usr/local/cuda --cudnn_home /usr/lib/aarch64-linux-gnu --tensorrt_home /usr/lib/aarch64-linux-gnu

위와 같이 설치했는데 다시 eigen과 관련한 에러가 계속 발생했다..

$ ./build.sh --config Release --update --build --parallel --build_wheel \
> --use_tensorrt --cuda_home /usr/local/cuda --cudnn_home /usr/lib/aarch64-linux-gnu \
> --tensorrt_home /usr/lib/aarch64-linux-gnu
2024-12-21 00:21:37,403 build [DEBUG] - Command line arguments:
  --build_dir /home/mingi/workspace/onnxruntime/build/Linux --config Release --update --build --parallel --build_wheel --use_tensorrt --cuda_home /usr/local/cuda --cudnn_home /usr/lib/aarch64-linux-gnu --tensorrt_home /usr/lib/aarch64-linux-gnu
2024-12-21 00:21:37,414 build [INFO] - Build started
2024-12-21 00:21:37,414 util.run [INFO] - Running subprocess in '/home/mingi/workspace/onnxruntime'
  git submodule sync --recursive
하위 모듈 URL을 'cmake/external/eigen'에 대해 동기화
하위 모듈 URL을 'cmake/external/emsdk'에 대해 동기화
하위 모듈 URL을 'cmake/external/libprotobuf-mutator'에 대해 동기화
하위 모듈 URL을 'cmake/external/onnx'에 대해 동기화
하위 모듈 URL을 'cmake/external/onnx/third_party/benchmark'에 대해 동기화
하위 모듈 URL을 'cmake/external/onnx/third_party/pybind11'에 대해 동기화
하위 모듈 URL을 'cmake/external/onnxruntime-extensions'에 대해 동기화
2024-12-21 00:21:37,705 util.run [DEBUG] - Subprocess completed. Return code: 0
2024-12-21 00:21:37,707 util.run [INFO] - Running subprocess in '/home/mingi/workspace/onnxruntime'
  git submodule update --init --recursive
'/home/mingi/workspace/onnxruntime/cmake/external/eigen'에 복제합니다...


error: RPC 실패; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: the remote end hung up unexpectedly
fatal: 너무 빨리 파일이 끝남
fatal: index-pack 실패
fatal: 'https://gitlab.com/libeigen/eigen.git'에서 하위 모듈 경로 '/home/mingi/workspace/onnxruntime/cmake/external/eigen'에 복제하는데 실패했습니다
'cmake/external/eigen' 복제하는데 실패했습니다. 재시도 예정
'/home/mingi/workspace/onnxruntime/cmake/external/onnxruntime-extensions'에 복제합니다...
'/home/mingi/workspace/onnxruntime/cmake/external/eigen'에 복제합니다...
error: RPC 실패; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: the remote end hung up unexpectedly
fatal: 너무 빨리 파일이 끝남
fatal: index-pack 실패
fatal: 'https://gitlab.com/libeigen/eigen.git'에서 하위 모듈 경로 '/home/mingi/workspace/onnxruntime/cmake/external/eigen'에 복제하는데 실패했습니다
두번째 'cmake/external/eigen' 복제하는데 실패했습니다. 중지합니다
Traceback (most recent call last):
  File "/home/mingi/workspace/onnxruntime/tools/ci_build/build.py", line 2599, in <module>
    sys.exit(main())
  File "/home/mingi/workspace/onnxruntime/tools/ci_build/build.py", line 2375, in main
    update_submodules(source_dir)
  File "/home/mingi/workspace/onnxruntime/tools/ci_build/build.py", line 786, in update_submodules
    run_subprocess(["git", "submodule", "update", "--init", "--recursive"], cwd=source_dir)
  File "/home/mingi/workspace/onnxruntime/tools/ci_build/build.py", line 781, in run_subprocess
    return run(*args, cwd=cwd, capture_stdout=capture_stdout, shell=shell, env=my_env)
  File "/home/mingi/workspace/onnxruntime/tools/python/util/run.py", line 49, in run
    completed_process = subprocess.run(
  File "/usr/lib/python3.8/subprocess.py", line 516, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['git', 'submodule', 'update', '--init', '--recursive']' returned non-zero exit status 1.

뭐 이래저래 eigen, nsync등의 설치 문제가 있어서 이것들을 수정하고 v1.14.1로 변경하니 정상적으로 설치가 되었다.

git checkout v1.14.1
./build.sh --config Release --update --build --parallel 2 --build_wheel --use_tensorrt --cuda_home /usr/local/cuda-11.8 --cudnn_home /usr/lib/aarch64-linux-gnu --tensorrt_home /usr/lib/aarch64-linux-gnu