아마존 리눅스 2023 aarch64에서 LibTorch v2.0.0을 CPU-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
산출물 구조
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를 기본값으로 삼는다.