NVIDIA가 Jetson AGX Orin의 딥러닝 가속기(DLA)에서 추론을 실행하고 관리하는 파이썬 바인딩을 공개했다. 개발자는 C++로 런타임을 제어하지 않고도 추론을 DLA에 맡기고, 같은 프로그램에서 GPU 작업과 연결할 수 있다.
1. 런타임 관리가 파이썬으로 들어온다
새 바인딩은 CUDA 파이썬 프로젝트의 cuda-bindings 13.3.0에 들어간 cuda.bindings.cudla다. 바인딩은 기존 API를 다른 언어에서 쓰도록 연결하는 층으로, 이번에는 장치 생성부터 추론 작업 제출까지 파이썬에서 처리하게 한다.
DLA 런타임, 프로그램 실행을 지원하는 기반 소프트웨어는 JetPack에 포함돼 있어 별도로 설치할 필요가 없다. 이미 컴파일된, 실행 가능한 코드로 변환된 모델을 실행할 때는 이 런타임을 사용하고, TensorRT는 모델을 실행 가능한 형식으로 바꿀 때만 필요하다.
바인딩의 최소 요구 버전은 파이썬 3.10이다. NVIDIA는 필요할 때 3.12 가상 환경을 준비해 설치하는 방법도 안내한다.
2. 모델 변환과 기기 내 실행을 나눈다
DLA loadable은 학습된 네트워크를 전용 가속기가 바로 읽을 수 있게 바꾼 바이너리 파일이다. TensorRT의 trtexec로 한 번 만들면, 추론할 때마다 모델 변환 도구를 다시 실행할 필요가 없다.
NVIDIA의 빌드 예시는 Jetson AGX Orin에서 JetPack 7.2.2 이상을 사용한다.
도구 버전은 TensorRT 11.4.1과 CUDA 13.4 Update 1이다.
아래 명령은 입력 크기가 고정된 ONNX 모델을 대상으로 한다. 모델 텐서는 16비트 부동소수점 형식이며, 명령에서 첫 번째 DLA 엔진, 추론 연산을 수행하는 실행 단위와 입출력 데이터의 배치 형식, 데이터를 배열하는 순서를 지정한다.
trtexec \
--onnx=your_model_fp16.onnx \
--useDLACore=0 \
--inputIOFormats=chw16 \
--outputIOFormats=chw16 \
--memPoolSize=dlaSRAM:1 \
--saveEngine=model.bin \
--buildDLAStandalone이 명령으로 만드는 파일은 추론 시 모델 변환 도구 없이 실행하는 DLA용 바이너리다. 빌드 결과물과 실행을 분리하면, 파이썬 애플리케이션은 준비된 모델을 불러와 작업을 제출하는 데 집중할 수 있다.
3. 하나의 작업 대기열로 GPU와 DLA를 잇는다
GPU와 DLA가 협업하는 하이브리드 모드에서는 작업을 순서대로 넣는 대기열인 CUDA 스트림을 쓴다. GPU 전처리, DLA 추론, GPU 후처리를 같은 대기열에 넣으면 입력 준비부터 결과 처리까지 한 흐름으로 이어진다.
실행은 CUDA를 초기화하고 모델을 적재한 뒤, 모델의 텐서, 여러 차원으로 배열된 숫자 데이터, 정보에 맞춘 GPU 메모리를 DLA에 등록하는 순서로 시작한다. 입력을 복사하고 추론 작업을 제출한 다음, 완료된 결과를 CPU 메모리로 가져와 파이썬에서 후처리한다.
모델에서 읽은 텐서 정보에는 버퍼, 데이터를 잠시 담아 두는 메모리 공간, 크기와 데이터 형식이 들어 있다. 이를 메모리 할당과 입출력 데이터 배치에 활용하면 모델마다 크기를 코드에 고정하는 수고를 줄일 수 있다. 반환된 바이트 배열도 이 정보에 맞춰 해석해 파이썬의 후속 처리로 넘긴다.
4. GPU 여유를 얻는 대신 모델과 메모리를 챙긴다
NVIDIA 설명에 따르면 DLA에 지원 연산을 맡기면 전력 효율을 높이고 GPU의 여력을 다른 애플리케이션 작업에 남길 수 있다. 개발자는 가속기를 나눠 쓰면서도 실행을 조율하는 코드는 파이썬 안에 유지할 수 있다.
DLA는 GPU보다 지원 레이어가 적어 모델 그래프, 모델 안에서 연산이 연결된 구조의 앞뒤 연산을 다듬는 작업이 필요할 수 있고, 개발자가 버퍼 등록·복사와 동기화, 작업 완료 시점을 맞추는 절차·자원 해제를 맡아야 한다. 이번 바인딩은 하이브리드 모드만 지원하며, 장치 핸들은 파이썬의 자동 메모리 회수로 해제되지 않는다.
5. 오류 처리와 종료도 파이썬 흐름에 묶는다
cuDLA 호출이 실패하면 상태 코드와 읽을 수 있는 오류 이름을 담은 파이썬 예외가 발생한다. 개발자는 이를 받아 잘못된 인자나 하드웨어 오류에 맞는 처리를 작성할 수 있다.
NVIDIA는 정리 코드를 try/finally에 두는 방식을 권한다. 등록 메모리, 모델 모듈과 장치, GPU 메모리, 스트림을 생성에 대응하는 해제 호출로 정리하는 절차다. 모델 실행뿐 아니라 오류 대응과 종료까지 한 프로그램의 흐름으로 묶는 셈이다.
cuDLA 파이썬 바인딩은 전용 가속기에 추론을 맡기고 GPU를 다른 작업에 활용하려는 엣지 개발자에게, 실행 흐름을 한 언어로 관리하는 선택지를 제공한다.
