제8부 자율주행
8.4 DLA·PVA I — DLA 오프로드
8.4.1 이 장에서 배우는 것 / 선수 지식
8.2에서 DRIVE SoC의 이기종 블록 중 DLA(Deep Learning Accelerator) 가 표준 DNN 추론을 GPU보다 효율적으로(TOPS/W) 처리한다고 했다. 이 장은 그 DLA를 깊게 판다 — 왜 GPU에서 DLA로 오프로드하나, DLA의 제약은 무엇인가, TensorRT로 어떻게 DLA를 타깃하고 GPU 폴백을 다루나. 전력 천장(8.1) 안에서 인지 처리량을 극대화하는 핵심 도구. PVA는 8.5.
핵심 통찰: DLA는 "효율 vs 유연"의 효율 쪽이다. 고정기능이라 표준 DNN 레이어를 GPU보다 적은 전력으로 처리하지만, 지원 연산·정밀도가 제한적이라 모든 모델이 그대로 맞지는 않는다. 그래서 DLA로 주력 오프로드 + GPU로 폴백·보완이 실무 패턴이고, GPU와 DLA가 병렬로 동시에 돌아 전력당 총 추론 처리량을 높인다. INT8(5.4)이 DLA 효율의 핵심 요인이다.
배우는 것:
- 왜 DLA 오프로드 — 전력 효율(TOPS/W), GPU 자유화, GPU+DLA 병렬로 총 처리량↑.
- DLA의 동작·제약 — 고정기능 DNN 파이프라인, 지원 연산·정밀도(INT8 우선) 제한.
- TensorRT + DLA(5.2) — DLA 타깃 빌드, GPU 폴백(미지원 레이어)과 그 오버헤드.
- 다중 DLA·병렬 — 여러 DLA + GPU 동시 실행으로 인지 모델 분배.
- INT8과 DLA(5.4) — DLA 효율의 핵심 요인, 정확도 검증.
- 결정성 — DLA의 예측 가능한 지연(실시간, 8.1·8.6).
선수 지식: 8.2(이기종 SoC·DLA)·8.1(전력·TOPS/W·결정성), 5.2(TensorRT DLA 타깃·폴백)·5.4(INT8 양자화), 1.11(텐서코어 대조). PVA는 8.5, 안전은 8.8. 환경은 DRIVE SoC.
정직: DLA의 지원 연산·정밀도·기능은 세대·버전 의존이다 — 이 장은 오프로드 원리·제약·워크플로를 가르치고 구체 지원 목록은 "그 버전 문서로 확인". 자율주행은 safety-critical(8.8~8.11). 수치는 환경 의존, 실측.
8.4.2 왜 DLA 오프로드 — 전력 효율
8.1에서 차량은 전력이 천장이라 효율(TOPS/W)이 결정적이라 했다. DLA가 그 답의 핵심이다:
세 이점:
- 전력 효율(TOPS/W): 고정기능이라 범용 GPU의 오버헤드 없이 표준 추론을 효율적으로 — 전력 천장 안에서 더 많은 추론.
- GPU 자유화: 인지 DNN을 DLA로 오프로드하면 GPU는 DLA가 못 하는 유연·신규 작업·전처리·융합·계획에 집중.
- 병렬 처리량: GPU + DLA(들)가 동시에 추론 → 한 엔진만 쓸 때보다 전력당 총 처리량↑. 여러 인지 모델을 엔진에 분배.
핵심: DLA의 가치는 "더 빠른 추론"이 아니라 "같은 추론을 더 적은 전력으로 + GPU와 병렬로" 다. 전력 천장(8.1)이 본질이라, 효율과 병렬이 자율주행 인지 처리량을 정한다.
8.4.3 DLA의 동작과 제약
DLA는 고정기능(fixed-function) 딥러닝 가속기다 — 표준 DNN 레이어를 위한 전용 하드웨어 파이프라인.
효율 vs 유연의 트레이드오프:
| DLA | GPU | |
|---|---|---|
| 효율(TOPS/W) | 높음(고정기능) | 낮음(범용) |
| 유연성 | 제한적(지원 연산) | 높음(프로그래머블) |
| 정밀도 | INT8 우선·FP16 일부 | 폭넓음(FP32·FP16·INT8·FP8...) |
| 신규 연산 | 미지원 가능 | 지원(커스텀·플러그인 5.6) |
| 지연 | 예측 가능(결정적) | 가변(스케줄) |
| 용도 | 표준·안정 DNN | 유연·신규·전처리·overflow |
핵심: DLA는 표준이고 안정적인 인지 DNN(검출·분할·깊이)에 강하다 — 그것이 자율주행 인지의 다수다. 그러나 신규 구조·커스텀 연산·특수 정밀도는 GPU가 필요. 모델이 DLA에 맞는지가 오프로드의 관건이고, INT8 양자화(5.4)가 효율의 전제.
8.4.4 TensorRT + DLA — 타깃·폴백
DLA에 모델을 탑재하는 길은 TensorRT(5.2)다 — DLA를 빌드 타깃으로 지정하고, DLA가 못 하는 레이어는 GPU로 폴백.
TensorRT DLA 타깃 빌드:
trtexec --onnx=model.onnx --useDLACore=0 --int8 --allowGPUFallback ...
· --useDLACore=N: N번 DLA 코어를 타깃
· --int8(또는 fp16): DLA 정밀도(INT8 우선)
· --allowGPUFallback: DLA 미지원 레이어를 GPU로 폴백
결과:
· DLA 지원 레이어 → DLA에서 실행(효율)
· 미지원 레이어 → GPU 폴백 → DLA↔GPU 데이터 이동(오버헤드)
폴백의 비용·관리:
워크플로:
견해: DLA 오프로드는 "모델이 DLA에 맞는가 + 폴백이 적은가" 가 성패다. 표준 검출·분할 모델은 대개 잘 맞지만, 최신·커스텀 구조는 폴백이 많아 효율이 떨어진다 — 그러면 모델을 DLA 친화적으로 재설계하거나 GPU로. INT8 정확도는 안전 critical이라 더 엄격히 검증(5.4·8.11).
8.4.5 다중 DLA·병렬 — 엔진에 분배
SoC는 보통 여러 DLA 코어를 가진다(세대 의존). GPU + 여러 DLA를 동시에 써 인지 모델을 분배한다:
- 병렬 처리량: 여러 엔진이 동시에 다른 모델을 → 직렬보다 총 처리량↑(전력 예산 안).
- 결정성: DLA의 예측 가능한 지연으로 각 모델의 종단 지연을 보장하기 쉬움(8.1·8.6).
- 분배 설계: 어느 모델을 어느 엔진에(DLA 적합? GPU 필요?)가 핵심 — 8.2의 워크로드→엔진 매핑.
핵심: 자율주행 인지는 여러 모델(검출·분할·깊이·차선...)을 매 프레임 실행한다. 이를 GPU + 여러 DLA에 분배해 병렬로 실행하는 것이 전력 예산 안에서 처리량을 극대화하는 방법 — DLA가 효율적인 표준 모델을 맡고, GPU가 나머지·융합을. 분배·병렬이 자율주행 추론 설계의 핵심.
8.4.6 워크스루 — DLA 오프로드
1) 모델을 DLA 타깃으로 빌드:
trtexec --onnx=detector.onnx --useDLACore=0 --int8 \
--allowGPUFallback --saveEngine=detector_dla.plan
(DLA는 INT8 우선 → 캘리브레이션 캐시 제공, 5.4)
2) DLA vs GPU 폴백 확인:
빌드 로그·프로파일에서 각 레이어가 DLA인지 GPU 폴백인지
→ 폴백 많으면: 미지원 연산 파악 → 재설계 또는 GPU 전체
3) 정확도 검증(안전 critical):
INT8 DLA 엔진의 태스크 지표(검출 mAP 등)를 FP16/FP32 대비(5.4)
→ 자율주행은 허용 하락이 더 보수적
4) 병렬 분배:
여러 모델을 DLA0·DLA1·GPU에 분배 → 동시 실행 → 전력·처리량·지연 측정
→ GPU가 인지 오프로드로 자유로워져 융합·계획에 쓰이는지
체크: DLA 오프로드 후
· 전력↓(같은 추론을 적은 W) · GPU 여유↑(다른 작업 가능)
· 총 처리량↑(병렬) · 지연 예측 가능(결정적)
· 정확도 허용 안(INT8 검증) · 폴백 오버헤드 작음
실무: DLA가 효율적이라고 모든 것을 DLA에 밀면 폴백·미지원·정확도 문제가 생긴다 — 표준·안정 모델을 INT8로 DLA에, 나머지를 GPU에 분배하고, 폴백·정확도를 측정으로 관리. 안전 critical이라 INT8 정확도는 보수적으로(8.11).
8.4.7 중간 점검 (체크포인트)
- [ ] DLA 오프로드의 세 이점(전력 효율 TOPS/W·GPU 자유화·병렬 처리량)을 전력 천장(8.1)과 연결해 안다.
- [ ] DLA가 고정기능이라 효율적이되 지원 연산·정밀도(INT8 우선)가 제한적임을, 효율 vs 유연으로 설명한다.
- [ ] TensorRT DLA 타깃·GPU 폴백(5.2)과 폴백 오버헤드, 폴백 최소화를 안다.
- [ ] 다중 DLA + GPU 병렬로 인지 모델을 분배해 전력당 처리량을 높임을 안다.
- [ ] INT8(5.4) 이 DLA 효율의 핵심 요인이고, 안전 critical이라 정확도 검증이 보수적임을 안다.
증상→의심: DLA 오프로드했는데 효율 안 남 → 폴백 많음(미지원 연산) → 재설계·GPU. 인지로 전력·열 초과 → GPU로만 → DLA 오프로드. DLA INT8 정확도 미달 → 양자화 검증(5.4)·민감 레이어 → 혼합·재캘리브레이션. 모델이 DLA에서 안 됨 → 미지원 연산 → 폴백·GPU·재설계. 여러 모델 직렬로 느림 → 엔진 분배 안 함 → DLA들·GPU 병렬. 지연이 가변 → GPU 가변 → DLA 결정성 활용(8.6).
8.4.8 트레이드오프·대안
| 결정 | 트레이드오프 |
|---|---|
| DLA vs GPU(모델) | 효율·제한 vs 유연·전력↑ |
| 폴백 허용 vs 재설계 | 빠른 적용·오버헤드 vs 효율·노력 |
| INT8(DLA) vs FP16 | 효율·정확도 검증 필요 vs 정확도·전력↑ |
| 다 DLA vs 분배 | 미지원·정확도 문제 vs 적합 모델만 |
| 단일 엔진 vs 병렬 분배 | 단순 vs 처리량(전력당) |
견해: 표준·안정 인지 모델을 INT8로 DLA에 오프로드(효율), 신규·커스텀·DLA 미지원을 GPU에, 여러 엔진에 병렬 분배가 정석이다. 폴백이 많으면 재설계나 GPU로. INT8 정확도는 안전 critical이라 보수적 검증(5.4·8.11). DLA는 범용이 아니라 "표준 추론의 효율 엔진" — 모델 적합성·폴백·정확도를 측정으로 관리.
비엔비디아 정직: 고정기능 DNN 가속기는 다른 엣지 SoC·NPU에도 있다(각 벤더의 NPU·가속기). DLA의 강점은 TensorRT 통합·GPU와의 병렬·DRIVE 스택·결정성이다. 모델이 가속기에 맞는지·정확도·툴체인은 어느 가속기든 핵심 — 피크 TOPS가 아니라 실제 모델 매핑·효율·정확도로 판단.
8.4.9 흔한 함정
- DLA를 GPU처럼 가정. 지원 연산·정밀도 제한 — 모델이 맞아야. 안 맞으면 폴백·재설계·GPU.
- 모든 것을 DLA에. 미지원·폴백·정확도 문제 → 적합한 표준 모델만 DLA, 나머지 GPU.
- 폴백 오버헤드 무시. 많은 폴백은 DLA↔GPU 전환 비용으로 효율 잠식 → 폴백 최소화·재설계.
- INT8 정확도 미검증. 안전 critical이라 더 엄격 — 태스크 지표로 검증(5.4·8.11), 보수적 허용.
- 단일 엔진만. GPU·여러 DLA를 병렬 안 쓰면 처리량 손해 → 분배.
- DLA 결정성 안 씀. DLA의 예측 가능 지연은 실시간에 유리(8.6) — 가변 GPU만 쓰면 데드라인 보장 어려움.
- 지원 목록을 버전 불문. DLA 연산·정밀도 지원이 세대·버전 의존 — 그 버전 문서.
- TOPS만 비교. 실제 모델이 DLA에 매핑되는지·효율·정확도가 중요(피크 아님).
8.4.10 연습문제
연습 1 (왜 오프로드). 인지 DNN을 GPU로만 실행하던 팀이 전력·열 한계에 부딪혔다. DLA 오프로드가 어떻게 돕는지 세 가지로 설명하라.
정답
① 전력 효율(TOPS/W): DLA는 고정기능이라 표준 DNN 레이어(conv·pool·activation)를 GPU의 프로그래머블 오버헤드(범용 회로·스케줄링) 없이 적은 전력으로 처리 → 같은 추론을 더 좋은 TOPS/W로, 전력·열 천장(8.1) 완화. ② GPU 자유화: 인지 DNN을 DLA로 보내면 GPU가 비어 융합·계획·전처리·신규 모델 등 DLA가 못 하는 유연한 작업에 쓰임 → 같은 칩으로 더 많은 일. ③ 병렬 처리량: GPU + DLA(들)가 동시에 추론 → 한 엔진만 쓸 때보다 전력당 총 추론 처리량↑, 여러 인지 모델을 분배. 전제: 모델이 DLA 지원 연산으로 구성되고 INT8(5.4)로 양자화돼야 효율, 폴백이 적어야. 핵심: DLA는 "더 빠른 추론"이 아니라 "같은 추론을 적은 전력으로 + GPU 병렬"로 전력 천장 안에서 처리량을 푼다.
연습 2 (제약·폴백). 최신 트랜스포머 기반 검출 모델을 DLA에 탑재하려는데 빌드 후 절반이 GPU로 폴백된다. 원인과 대응, 그리고 언제 GPU만으로 충분한가?
정답
원인: DLA는 고정기능이라 지원 연산·레이어가 제한적(8.4.3) — 표준 conv/pool은 되지만 트랜스포머의 어텐션·신규 연산은 미지원일 수 있어 GPU로 폴백. 절반 폴백은 모델이 DLA 친화적이지 않다는 뜻. 대응: ① 폴백 비율·지점 확인(빌드 로그·프로파일) — 어느 연산이 미지원인지. ② DLA 친화적 재설계 — 미지원 연산을 지원 연산으로 대체(가능하면), 또는 폴백 지점을 모델 앞/뒤로 몰아 중간 DLA↔GPU 전환↓(전환마다 데이터 이동 오버헤드). ③ INT8 검증(5.4). 언제 GPU로: 폴백이 너무 많으면(예 절반) DLA↔GPU 전환 오버헤드가 DLA 효율 이득을 까먹어 차라리 GPU 전체가 나음 — 잦은 전환보다 일관된 GPU 실행이 빠르고 단순할 수 있다. 즉 DLA는 폴백이 적은(대부분 지원) 표준 모델에 유리하고, 트랜스포머처럼 폴백이 많으면 GPU로(또는 차세대 SoC의 트랜스포머 지원 8.3 대기). 측정으로 결정: DLA(폴백 포함) vs GPU 전체의 실제 처리량·효율 비교.
연습 3 (INT8·안전). DLA는 INT8에 최적이다. 자율주행에서 INT8 양자화를 쓸 때 일반 추론보다 무엇을 더 조심해야 하나?
정답
DLA 효율의 핵심 요인은 INT8(5.4)이지만, 자율주행은 safety-critical이라 일반 추론보다 정확도 검증이 더 엄격해야: ① 보수적 허용 하락 — 일반 서비스는 "top-1 −1% OK"여도, 자율주행 인지(검출·분할)의 정확도 저하는 안전 사고로 이어질 수 있어 허용 하락이 훨씬 보수적이고, 안전 관련 클래스(보행자·차량)는 특히 엄격. ② 엣지케이스·드물지만 치명적 — 평균 mAP만이 아니라 드문 위험 상황(야간·악천후·가려진 보행자)의 인지 저하를 봐야 — INT8이 그런 케이스를 더 망칠 수 있음. ③ 민감 레이어 혼합정밀(5.4) — 안전 critical 출력(검출 신뢰도·좌표)은 더 높은 정밀도 유지 고려. ④ 대표·안전 평가셋 — decontamination·운영 분포·안전 시나리오 포함, 시뮬레이션(8.15) 보강. ⑤ AI 인지 안전 검증(8.11) — 양자화가 인지 안전 케이스에 미치는 영향을 체계적으로. 핵심: INT8은 효율을 주지만 자율주행에선 정확도 = 안전이라, 보수적 허용·엣지케이스·민감 레이어·안전 평가로 검증. 자격 있는 안전 엔지니어·표준(ISO 26262·SOTIF 8.8~8.10)의 영역.
연습 4 (병렬 분배). 자율주행 인지가 매 프레임 검출·분할·깊이·차선 4개 모델을 실행한다. SoC에 GPU 1개·DLA 2개가 있다. 어떻게 분배·병렬화하나?
정답
분배 원리: 표준·안정·INT8 친화 모델을 DLA에, 신규·복잡·DLA 미지원·고정밀 필요 모델을 GPU에, 모두 병렬로 동시 실행해 전력당 처리량↑. 예: DLA0 = 검출 모델(표준 conv, INT8), DLA1 = 분할 모델(표준, INT8), GPU = 깊이 모델(DLA 미지원 연산·FP16 필요할 수 있음) + 차선(또는 차선도 DLA 가능하면 DLA에, 깊이만 GPU) + 융합·전처리. 4모델을 3엔진(GPU·DLA0·DLA1)에 분배해 직렬이 아니라 동시에 → 매 프레임 종단 지연 안에 모두 처리(병렬로 데드라인 충족, 8.1). 추가: PVA(8.5)로 깊이의 스테레오 전처리·렉티피케이션을 오프로드해 GPU 더 자유화, ISP/비디오로 카메라 ingest. 분배 결정: 각 모델의 DLA 적합성(폴백 비율)·정밀도·정확도(안전)를 측정해 매핑. DLA들이 효율적인 표준 모델을 맡아 GPU를 융합·계획에 남김. 핵심: 인지 다모델을 GPU+다중 DLA에 병렬 분배 = 전력 예산 안 처리량의 핵심(8.2 워크로드→엔진 매핑).
연습 5 (의사결정). 어떤 인지 모델을 DLA에 탑재할지 GPU에 둘지 결정하는 체크리스트를 만들어라.
정답
체크리스트: ① 연산 지원 — 모델 레이어가 DLA 지원 연산인가(빌드 후 폴백 비율 확인)? 대부분 지원·폴백 적음 → DLA 후보. 폴백 많음(트랜스포머·커스텀) → GPU. ② 정밀도 — INT8로 양자화 가능하고 정확도(안전 critical 허용)가 통과하나? 통과 → DLA(효율). INT8 부족·고정밀 필요 → GPU(또는 혼합). ③ 표준·안정성 — 표준·안정 모델(검출·분할·깊이)인가 신규·자주 바뀌는가? 표준·안정 → DLA. 신규·실험 → GPU(유연). ④ 전력 예산 — 전력 여유가 적어 효율이 필요한가? → DLA 오프로드. ⑤ 결정성 — 예측 가능한 지연이 데드라인에 필요한가? → DLA(결정적, 8.6). ⑥ GPU 부하 — GPU가 다른 작업(융합·계획·신규)으로 바쁜가? → 인지를 DLA로 보내 GPU 자유화. 결정: ①②③ 통과(지원·INT8 정확도·표준)면 DLA로 오프로드(효율·병렬·결정성), 하나라도 제약이 되면(폴백 많음·INT8 부족·신규) GPU로. 측정으로 검증(DLA 폴백 포함 vs GPU 전체 실제 효율·처리량·정확도). 안전은 자격 있는 엔지니어가 별도 검증(8.11).
8.4.11 요약 · 다음 장
- DLA 오프로드는 표준 DNN 추론을 GPU에서 고정기능 DLA로 보내 전력 효율(TOPS/W)·GPU 자유화·병렬 처리량을 얻는다 — 전력 천장(8.1) 안에서 인지 처리량을 푸는 핵심.
- DLA는 고정기능이라 효율적이되 지원 연산·정밀도(INT8 우선)가 제한적 — 효율 vs 유연. 표준·안정 모델에 강하고, 신규·커스텀은 GPU.
- TensorRT로 DLA 타깃 빌드 + GPU 폴백(5.2) — 폴백이 많으면 DLA↔GPU 전환 오버헤드로 효율 손실, 폴백 최소화·재설계·또는 GPU 전체. INT8(5.4)이 효율의 핵심 요인.
- 다중 DLA + GPU 병렬로 인지 다모델을 분배해 전력당 처리량↑. DLA의 결정성은 실시간 데드라인에 유리.
- 정직: DLA 지원·정밀도는 세대·버전 의존, INT8 정확도는 안전 critical이라 보수적 검증(5.4·8.11), 모델 적합성·폴백·정확도를 측정으로.
다음 장: 8.5 DLA·PVA II — PVA·VPI·GPU 분업. DLA가 DNN을 맡았으니, PVA(Programmable Vision Accelerator) 가 맡는 클래식 비전(스테레오·특징·필터·렉티피케이션)과, 비전 가속 라이브러리 VPI, 그리고 GPU·DLA·PVA·ISP의 분업으로 자율주행 비전 파이프라인을 전력 예산 안에서 완성하는 법을 본다. 이로써 DLA·PVA(8.4~8.5)를 마무리한다.