Huny's Dev Blog

libtorch_cpu arm64 build

ARM64용 LibTorch v2.0.0 CPU-only 빌드 튜토리얼. Amazon Linux 2023에서 의존성 설치, cmake 구성, Lite Interpreter 최적화와 XNNPACK/QNNPACK 활성화, 배포 구조 정리.
Hun Jang
Hun JangOct 10, 2025
libtorch_cpu arm64 build


아마존 리눅스 2023 aarch64에서
LibTorch v2.0.0CPU-only + Lite Interpreter로 빌드한 기록이다. 배포 zip(libtorch-shared-with-deps-…)과 동일한 레이아웃은 cmake --install로 만든다.

대상 환경

  • OS: Amazon Linux 2023 (aarch64)
  • 인스턴스: c6g, c7g 권장
    • c6g: Graviton2, Arm Neoverse N1
    • c7g: Graviton3, 더 높은 단일·다중 스레드 성능
    • 메모리 16GB 이상, 스왑 8–16GB 확보 권장

버전 고정

  • PyTorch/LibTorch: v2.0.0
  • Python: 3.8–3.11 중 하나. 여기서는 3.9 사용

빌드 로그(명령)

sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y git cmake ninja-build python3 python3-pip \
  gcc gcc-c++ openblas-devel protobuf-devel zlib-devel \
  libjpeg-turbo-devel libpng-devel numactl-devel

git clone --recursive https://github.com/pytorch/pytorch.git
cd pytorch
git checkout v2.0.0
git submodule sync && git submodule update --init --recursive

which python3.9
PY=python3.9
$PY --version

$PY -m ensurepip -U
$PY -m pip install -U pip setuptools wheel
$PY -m pip install -U typing_extensions pyyaml jinja2 ninja cmake requests
# 확인
$PY - <<'PY'
import typing_extensions, yaml, jinja2; print("ok")
PY

cmake -G Ninja -S . -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_SHARED_LIBS=ON \
  -DBUILD_TEST=OFF -DBUILD_PYTHON=OFF \
  -DBUILD_LITE_INTERPRETER=ON \
  -DUSE_CUDA=OFF -DUSE_ROCM=OFF -DUSE_MPS=OFF \
  -DUSE_NCCL=OFF -DUSE_DISTRIBUTED=OFF \
  -DUSE_XNNPACK=ON -DUSE_QNNPACK=ON \
  -DUSE_MKLDNN=OFF -DUSE_OPENMP=ON \
  -DCMAKE_INSTALL_PREFIX="$PWD/out/libtorch" \
  -DCMAKE_INSTALL_RPATH='$ORIGIN/../lib'

ninja -C build
ninja -C build install    # == cmake --build build --target install
bash

산출물 구조

  • DCMAKE_INSTALL_PREFIX="$PWD/out/libtorch"로 설치되며 다음과 같이 정리된다.
out/libtorch/
  ├─ include/                # 헤더(생성 헤더 포함)
  ├─ lib/                    # libc10.so, libtorch_cpu.so, ...
  ├─ bin/                    # 필요 시 도구들(비어있어도 정상)
  └─ share/cmake/Torch/      # TorchConfig.cmake 등

기존 CMake 프로젝트는 CMAKE_PREFIX_PATH=/abs/path/to/out/libtorch 지정 후 find_package(Torch REQUIRED)로 그대로 쓴다.

옵션 해설(요지)

  • DBUILD_PYTHON=OFF

    파이썬 패키지 생략. C++ 배포 전용.

  • DBUILD_LITE_INTERPRETER=ON

    모바일 러ntime 경량화. 첫 호출 지연 및 메모리 사용 축소.

  • DUSE_CUDA/ROCM/MPS/NCCL/DISTRIBUTED=OFF

    GPU·분산 비활성. CPU-only 보장.

  • DUSE_XNNPACK=ON -DUSE_QNNPACK=ON

    Arm용 연산 최적화 활성. Android와 유사한 실행 특성.

  • DUSE_MKLDNN=OFF

    Intel oneDNN 비활성. Arm 환경에서 불필요.

  • DUSE_OPENMP=ON

    멀티스레딩 사용.

  • DBUILD_SHARED_LIBS=ON

    공유 라이브러리로 배포.

  • DCMAKE_INSTALL_RPATH='$ORIGIN/../lib'

    실행 시 상대 경로로 lib/를 찾게 함. 배포 편리.

메모

  • 첫 추론 지연을 줄이려면 TorchScript + optimize_for_mobile + channels_last로 모델을 사전 최적화한 후 사용하면 효과가 크다.
  • ninja -C build install만으로 배포 zip과 유사한 libtorch/ 레이아웃을 재현한다.
  • c7g가 c6g 대비 지연·처리량 모두 유리했다. 예산 허용 시 c7g를 기본값으로 삼는다.