Jetson에서 컨테이너를 이용한 AI 애플리케이션 패키징: JetPack 의존성 및 배포 문제 해결하기
NVIDIA는 JetPack 6.x (6.0 / 6.2) 버전부터 Ubuntu 22.04 기반의 환경(L4T 36.x 시리즈)을 공식 채택했습니다. 이는 개발자들에게 매우 반가운 업그레이드이지만, AI 애플리케이션의 의존성이 JetPack의 마이너 버전마다 각각 나뉘어 있다는 숙제는 여전히 남아 있습니다.
본 가이드에서는 Docker 컨테이너 기술을 활용하여 JetPack 6.0 및 6.2 환경에서 AI 모델과 애플리케이션을 빠르고 안정적으로, 그리고 버전 제약 없이 배포하는 방법을 소개합니다.
1. JetPack 6.x의 의존성 문제
JetPack 6.0과 6.2는 다음과 같은 차이가 있습니다.
| JetPack 버전 | L4T 버전 | Ubuntu | 주요 라이브러리 |
|---|---|---|---|
| 6.0 | 36.3.0 | 22.04 | CUDA 12.2, TensorRT 8.6 |
| 6.2 | 36.4.3 | 22.04 | CUDA 12.6, TensorRT 10.3 |
두 버전 모두 Ubuntu 22.04를 기반으로 하지만, GPU 드라이버, CUDA 툴킷, TensorRT 엔진 버전이 서로 다릅니다. 이로 인해 다음과 같은 문제가 발생할 수 있습니다.
-
JetPack 6.0에서 컴파일된 TensorRT 엔진이 6.2에서 정상 작동하지 않을 수 있음
-
PyTorch GPU 버전이 특정 CUDA 및 드라이버 버전과 일치해야 하므로 크로스 버전 배포 시 오류 발생 가능성 높음
-
여러 대의 장치에 동일한 추론 애플리케이션을 일관되게 배포하기 어려움
2. 컨테이너화(Containerization)의 장점
JetPack 의존성 분리
Docker 컨테이너를 사용하여 AI 런타임 환경(CUDA, cuDNN, TensorRT, PyTorch 등 포함)을 패키징하면, 모든 의존성 버전을 컨테이너 내부에 고정할 수 있습니다. 이를 통해 하위 JetPack 버전의 제약에서 벗어날 수 있습니다.
-
호환성: 동일한 컨테이너를 JetPack 6.0과 6.2 환경 모두에서 실행할 수 있습니다.
-
유지보수: NVIDIA 공식 L4T 컨테이너 베이스 이미지(예:
dustynv/pytorch:2.1-r36.2.0)를 사용하면 L4T 36.2 버전과의 호환성이 보장됩니다. 향후 JetPack이 업그레이드되더라도 GPU 드라이버가 호환되는 한 기존 배포 환경을 그대로 유지할 수 있습니다.
3. 구축 방법 (How To)
Docker 런타임 설정
컨테이너 내부에서 GPU를 사용하려면(예: 빌드 과정에서 NVCC 컴파일러 사용 등), 기본 Docker 런타임을 nvidia로 설정하는 것이 권장됩니다.
1단계 : nvidia-container 설치 및 Docker 설정
sudo apt update
sudo apt install -y nvidia-container curl
curl https://get.docker.com | sh && sudo systemctl --now enable docker
sudo nvidia-ctk runtime configure --runtime=docker
2단계 : 서비스 재시작 및 사용자 권한 부여
sudo systemctl restart docker
sudo usermod -aG docker $USER
newgrp docker
3단계 : Docker 설정 파일 수정 /etc/docker/daemon.json 파일을 생성하거나 열어 다음 내용을 추가합니다.
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia"
}
4단계 : Docker 재시작
sudo systemctl restart docker
4. Jetson Orin용 CUDA 컨테이너 활용
NVIDIA는 Jetson 환경을 위한 최적화된 컨테이너를 제공합니다. Jetson-containers 도구를 설치하여 관리 효율을 높입니다.
cd $HOME
git clone https://github.com/dusty-nv/jetson-containers
bash jetson-containers/install.sh
5. 생성형 AI 예시: Ollama 추론 실행
최신 LLM 모델인 Gemma 3를 AIR-030에서 실행하는 방법입니다.
- Docker 이미지 다운로드
docker pull dustynv/ollama:0.6.8-r36.4
- 컨테이너 실행
jetson-containers run dustynv/ollama:0.6.8-r36.4
- Gemma 3 모델로 Ollama 실행
ollama run gemma3
[!TIP] 성능 최적화 팁: AIR-030(Jetson Orin)에서 대규모 모델을 돌릴 때는 메모리 부족 현상을 방지하기 위해 사용하지 않는 GUI 서비스를 끄거나 Swap 메모리를 충분히 확보하는 것이 좋습니다.
이 가이드와 관련하여 특정 AI 모델의 TensorRT 최적화 방법이 궁금하신가요? 요청하시면 추가 정보를 안내해 드릴 수 있습니다.
