왜 엣지에서의 메모리 효율이 중요한가?
클라우드와 달리 엣지 디바이스는 CPU와 GPU가 제한된 메모리를 공유합니다. Jetson Orin Nano 8GB 모듈의 경우 실제 사용 가능한 메모리는 약 7.6GB에 불과하죠. 여기에 GUI 서비스, 불필요한 커널 서비스, 카메라/디스플레이용 Carveout 영역까지 차지하면 실제 AI 워크로드에 쓸 수 있는 메모리는 훨씬 줄어듭니다.
이 글에서는 NVIDIA Jetson 플랫폼에서 BSP/OS → 커널 → 사용자 공간 → 추론 파이프라인 → 추론 프레임워크 → 모델 양자화까지 5개 계층을 최적화하여 최대 10~12GB의 메모리를 절약하는 방법을 단계별로 소개합니다. 특히 국내 SI/제조 현장에서 자주 마주하는 '메모리 부족(OOM)' 문제를 실제 코드 레벨에서 해결하는 데 초점을 맞췄어요.
이 가이드는 Jetson Orin NX 및 Orin Nano 기준이며, IGX 플랫폼에도 일부 적용 가능합니다.

1단계: BSP/OS 계층 최적화 (최대 1GB 절약)
GUI 및 불필요 서비스 비활성화
프로덕션 환경에서는 GUI가 필요 없습니다. systemd 타겟을 변경하여 헤드리스 모드로 부팅하세요.
# GUI 서비스 비활성화 (약 865MB 절약)
sudo systemctl set-default multi-user.target
sudo reboot
# 네트워크/로깅 등 불필요 서비스 비활성화 (약 32MB 추가 절약)
sudo systemctl disable bluetooth.service
sudo systemctl disable cups.service
sudo systemctl disable avahi-daemon.service
Carveout 영역 최적화 (약 68MB 추가 절약)
Carveout은 부트 시 특정 하드웨어 엔진용으로 예약된 물리 메모리입니다. 디스플레이나 카메라를 사용하지 않는다면 해당 Carveout을 비활성화할 수 있습니다.
디스플레이 Carveout 비활성화 예제 (/bootloader/generic/BCT/tegra234-mb1-bct-misc-p3767-0000.dts):
// Display-related carveouts 모두 0MB로 설정
aux_info@CARVEOUT_BPMP_DCE {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>;
};
aux_info@CARVEOUT_DCE_TSEC {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>;
};
// ... (DCE, DISP_EARLY_BOOT_FB, TSEC_DCE 동일 패턴)
카메라 Carveout 비활성화 예제 (동일 파일):
aux_info@CARVEOUT_CAMERA_TASKLIST {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>;
};
aux_info@CARVEOUT_RCE {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>;
};
변경 후 dtc 툴로 DTS를 DTB로 재컴파일하고 플래시해야 적용됩니다.
2단계: 커널 및 사용자 공간 최적화
SWIOTLB 튜닝
Jetson Orin은 하드웨어 IOMMU가 내장되어 있어 SWIOTLB가 불필요한 경우가 많습니다. 만약 필요하다면 크기를 조정하세요.
# 커널 부트 파라미터에 추가 (4MB 버퍼 예시)
# swiotlb=2048 (각 slab 2KB, 총 2048개 = 4MB)
# /boot/extlinux/extlinux.conf 에서 APPEND 라인 수정
메모리 사용량 진단
# CPU 메모리 사용량 분석
git clone https://github.com/csimmonds/procrank_linux.git
cd procrank_linux && make
sudo ./procrank # PSS 기준 정렬
# GPU/멀티미디어 메모리 사용량 확인
sudo cat /sys/kernel/debug/nvmap/iovmm/clients
결과에서 gnome-shell, Xorg, pulseaudio, 불필요한 python3 프로세스를 식별하고 비활성화하세요.
3단계: 추론 파이프라인 최적화 (최대 412MB 절약)
DeepStream 기반 파이프라인에서 Tiler/OSD(화면 표시)와 FakeSink를 비활성화하면 헤드리스 환경에서 큰 효과를 봅니다.
# DeepStream 파이프라인 예시 (Python → C++ 전환도 고려)
# FakeSink 사용으로 디스플레이 단계 제거
pipeline = """
...
nvvidconv ! video/x-raw,width=1280,height=720 ! \nfakesink sync=false
"""
| 최적화 항목 | 절약 메모리 |
|---|---|
| Container → Bare Metal | ~70MB |
| Python → C++ | ~84MB |
| Tiler/OSD + FakeSink | ~258MB |
| 합계 | ~412MB |
4단계: 모델 양자화 (가장 큰 효과, 최대 10GB 절약)
핵심은 정확도 요구사항을 만족하는 가장 낮은 정밀도를 선택하는 것입니다. FP16 → W4A16(4비트 가중치)만으로도 모델 크기를 1/4로 줄일 수 있습니다.
# Llama.cpp로 Qwen3 8B 모델 W4A16 양자화 실행 예시
./quantize --model qwen3-8b-fp16.gguf --type q4_k_m --output qwen3-8b-q4_k_m.gguf
| 모델 | 양자화 전 | 양자화 후 | 절약 |
|---|---|---|---|
| Qwen3 8B | FP16 (~16GB) | W4A16 (~6GB) | ~10GB |
| Qwen3 4B | BF16 (~8GB) | INT4 (~2.4GB) | ~5.6GB |
주의사항: 양자화로 인한 정확도 저하가 발생하면 양자화 인지 증류(QAD) 기법으로 복원할 수 있습니다. 먼저 FP16 베이스라인을 확보한 후 단계적으로 낮은 정밀도를 테스트하세요.

실제 사례: Reachy Mini Jetson Assistant
위 최적화를 모두 적용한 실제 사례입니다. 8GB Jetson Orin Nano에서 멀티모달 AI 로봇을 구동했습니다.
| 최적화 계층 | 최적화 전 (Orin NX 16GB) | 최적화 후 (Orin Nano 8GB) | 메모리 사용량 변화 |
|---|---|---|---|
| BSP/OS | Ubuntu Desktop (GNOME) | Headless 모드 | 1.8GB → 1.1GB (-0.7GB) |
| 모델 양자화 | VLM FP16 (6.6GB) | VLM Q4_K_M (2.2GB) | 6.6GB → 2.2GB (-4.4GB) |
| 전체 시스템 | VLM만으로 87% RAM 사용 (OOM) | 전체 파이프라인 60% 사용 | >7.6GB → 4.5GB (-5.1GB+) |
추가 팁: 전용 가속기 활용
Jetson 플랫폼에는 GPU 외에도 ISP(이미지 신호 처리), NVENC/NVDEC(비디오 코덱), PVA(프로그래머블 비전 가속기)가 내장되어 있습니다. 특히 PVA는 상시 대기 전력으로 움직임 감지, 객체 추적 같은 경량 비전 작업을 처리하여 GPU를 AI 추론에 집중시킬 수 있습니다.
PVA SDK(cuPVA)는 현재 Early Access 단계입니다. NVIDIA에 문의하여 접근 권한을 요청하세요.

결론: 엣지 AI 개발자를 위한 핵심 전략
엣지 디바이스에서 대규모 모델을 실행하기 위한 3가지 핵심 원칙을 기억하세요:
- 필요 없는 것은 모두 꺼라 — GUI, 블루투스, 카메라, 불필요한 Carveout을 비활성화하세요.
- 양자화는 가장 강력한 무기다 — 정확도가 허용하는 한 가장 낮은 비트 정밀도(W4A16, INT4, NVFP4)를 선택하세요.
- 파이프라인을 가볍게 유지하라 — Python보다 C++ 기반 추론 프레임워크(Llama.cpp, TensorRT-Edge-LLM)를 사용하고, 디스플레이 단계는 제거하세요.
국내 엣지 AI 환경(스마트팩토리, 자율주행 로봇, CCTV 분석)에서도 동일한 원칙이 적용됩니다. 특히 Jetson Orin Nano 8GB는 가성비가 뛰어나지만 메모리가 빠듯하므로, 이 가이드의 최적화를 꼭 적용해보세요.
다음 단계 학습 방향
- NVIDIA JetPack SDK 설치 및 헤드리스 설정 실습
- Llama.cpp 또는 TensorRT-Edge-LLM으로 자체 모델 양자화 시도
- PVA(cuPVA)를 활용한 전력 효율적인 비전 파이프라인 구성
함께 보면 좋은 글
근거자료: NVIDIA Developer Blog - Maximizing Memory Efficiency to Run Bigger Models on NVIDIA Jetson