핵심 요약
- VFlash는 시각 언어 모델(VLM)이 경계 상자나 궤적의 좌표를 토큰 하나씩 생성하는 대신, 작은 초안 모델이 좌표 묶음 전체를 한 번의 순전파로 예측하게 하는 NVIDIA의 디코딩 방법입니다.
- 초안 모델은 대상 모델의 출력이 아닌 주석 좌표를 정답으로 학습하고, 추론(Inference) 시에는 대상 모델과 토큰이 일치하는지 확인하지 않습니다. 연구팀이 평가한 3차원 로봇 궤적에서 평균 변위 오차는 같은 모델의 자기회귀 디코딩보다 18\% 에서 61\% 낮았습니다.
- Jetson Thor에서 배치 크기 1로 측정한 MolmoSpaces 계획 한 단계의 지연 시간은 3552.7\,\mathrm{ms} 에서 703.3\,\mathrm{ms} 로 줄었습니다. 이 값은 모델 단계만 합산한 것이고, 센서 입력부터 구동까지의 전체 지연 시간은 아닙니다.
- 경계 상자는 형식 검사만으로 채택하면 F1 점수가 크게 떨어져 자기회귀 대체 생성이 필요했고, 조밀한 3차원 움직임 예측에서는 일부 지표가 자기회귀 방식보다 나빴습니다.
- Eagle Embodied 저장소에는 학습 및 평가 코드가 공개되어 있습니다. 대상 모델과 초안 모델의 체크포인트는 추후 공개 예정입니다.
VFlash 소개
좌표를 토큰 하나씩 생성하는 비용
VFlash는 로봇과 자율주행 차량에 쓰이는 시각 언어 모델(Vision-Language Model, VLM)이 좌표를 더 빠르게 출력하도록 만든 디코딩 방법으로, NVIDIA 연구팀이 기술 보고서로 공개하였습니다. 로봇 팔에게 서랍을 열라고 지시하면, 모델은 카메라 영상에서 손잡이의 위치를 찾고 집게가 어떤 경로로 움직일지 먼저 정해야 합니다. 최근의 피지컬 AI 시스템은 이런 중간 계획을 문장 대신 점, 경계 상자(Bounding Box), 궤적으로 표현합니다.
논문에서는 이 출력들을 시각 기본 요소(Visual Primitive), 이것으로 이루어진 계획을 시각 계획(Visual Plan) 이라고 부릅니다. 행동 모델은 이 계획을 조건으로 받아 실제 제어 명령을 계산합니다.
문제는 생성 속도입니다. 자기회귀(Autoregressive, AR) 방식의 VLM은 좌표 토큰을 하나씩 순서대로 생성합니다. 경유점(Waypoint) 10개로 이루어진 3차원 궤적은 좌표값만 30개이고, 이미지 평면의 2차원 좌표까지 함께 출력하면 50개로 늘어납니다. 궤적을 길게 잡거나 물체 수를 늘리면 순전파(Forward Pass) 횟수도 그만큼 늘어납니다. 새 관측이 들어올 때마다 계획을 갱신해야 하는 로봇은 정해진 지연 시간 안에서 계획의 정밀도와 갱신 주기 중 하나를 줄여야 합니다.
기존 병렬 디코딩 방법과 한계
순차 생성 비용을 줄이려는 기존 접근은 크게 세 가지로 나눌 수 있습니다.
첫 번째는 추측 디코딩(Speculative Decoding)입니다. 작은 초안 모델(Drafter)이 여러 토큰을 먼저 제안하고, 큰 대상 모델(Target)이 한 번의 순전파로 제안을 검증하는 방식입니다. DFlash는 블록 확산 방식의 초안 모델로 토큰 블록 전체를 한 번에 제안합니다. 다만 검증 단계에서는 대상 모델의 선택과 처음으로 어긋나는 토큰 앞까지만 채택합니다. 좌표를 1,001개 구간으로 나눠 토큰으로 표현하면, 한 칸만 달라도 다른 토큰이 됩니다. 거리 오차는 작아도 검증에서는 탈락하므로, 초안 블록을 길게 잡아도 채택되는 토큰 수는 그만큼 늘지 않습니다. 연구팀이 Jetson Thor에서 MolmoSpaces 과제로 측정했을 때 DFlash가 대상 모델의 순전파 한 번마다 확정한 토큰은 텍스트 구간에서 평균 5.5 개였지만 궤적 구간에서는 2.2 개에 그쳤습니다.
두 번째는 여러 토큰을 병렬로 복원하는 확산 언어 모델(Diffusion Language Model, dLLM)입니다. 논문은 선행 연구를 인용하여, 확산 언어 모델은 자기회귀 모델과 비교했을 때 속도와 품질이 서로 상충하는 경우가 많다고 설명합니다.
세 번째는 NVIDIA의 LocateAnything입니다. 경계 상자와 점을 한 단위로 병렬 디코딩하지만, 길이가 고정된 2차원 출력만 다룹니다. 로봇 궤적처럼 길이가 요청마다 달라지는 출력은 대상이 아니었습니다.
핵심 아이디어: 형식이 정해진 출력은 묶음 단위로 예측합니다
VFlash의 출발점은 시각 기본 요소의 구조가 예측 전에 이미 정해져 있다는 관찰입니다. 유형(상자인지 궤적인지), 차원(2차원인지 3차원인지), 길이(경유점 개수)가 정해지면 블록의 어느 자리에 어떤 좌표가 들어갈지 알 수 있습니다. 남은 일은 각 자리의 값을 채우는 것뿐입니다. 연구팀은 이 구조에 맞춰 블록 경계를 잡고, 초안 모델이 시각 기본 요소 하나를 한 번의 순전파로 예측하게 했습니다. 이 방식이 플래시 기본 요소 디코딩(Flash Primitive Decoding, FPD) 입니다.
두 번째 아이디어는 채택 기준을 바꾼 것입니다. 텍스트 생성에서 추측 디코딩이 토큰 일치를 요구하는 이유는 대상 모델의 출력 분포를 그대로 보존하기 위해서입니다. 좌표에서는 대상 모델과 같은 토큰을 내는 것보다 실제 위치에 가까운 값을 내는 것이 목표입니다. 논문은 이를 "공간 정확도를 위해 자기회귀 모델의 토큰열을 그대로 재현할 필요는 없다"고 표현합니다. VFlash는 초안 모델을 데이터의 주석 좌표로 학습하고, 추론 시 형식 검사를 통과한 블록을 대상 모델과 대조하지 않고 채택합니다. 텍스트 구간에는 기존의 검증 방식을 그대로 유지합니다.
그 결과 연구팀이 평가한 2차원 및 3차원 로봇 궤적 과제 모두에서, 초안 모델의 예측이 대상 모델의 자기회귀 출력보다 오차가 낮았습니다.
플래시 기본 요소 디코딩(FPD)의 동작 방식
도구 호출과 시작 토큰으로 블록의 배치를 정합니다
FPD에서는 좌표를 예측하기 전에 블록의 길이와 배치를 먼저 확정합니다. 길이가 달라지는 궤적은 대상 모델이 텍스트로 생성하는 도구 호출(Tool Call)이 블록 길이를 선언합니다:
<tool_call>{"name":"atomic_decoding","arguments":{"block_size":54}}</tool_call>
block_size 는 시작 토큰과 구분 토큰을 포함한 블록 전체의 토큰 수입니다. 도구 호출 뒤에 오는 시작 토큰(예: <robot_single_2d>)은 시각 기본 요소의 유형을 알려 줍니다. 이 두 정보로 블록 안 모든 자리의 역할이 정해집니다. 경계 상자처럼 길이가 고정된 출력은 도구 호출 없이 유형만으로 배치가 정해집니다. 아래 표는 논문 부록에 실린 배치 중 일부이며, P 는 경유점 개수입니다.
| 시각 기본 요소 | 블록 배치 | 블록 길이 |
|---|---|---|
| 경계 상자 | <box> u_1\,v_1\,u_2\,v_2 </box> |
6 |
| 로봇 3차원 궤적 | <robot_single> (x\,y\,z)^{P} </robot> |
3P+2 |
| 로봇 2차원 및 3차원 궤적 | 2차원 구간 (u\,v)^{P} 뒤에 3차원 구간 (x\,y\,z)^{P} | 5P+4 |
| 주행 2차원 및 3차원 궤적 | 2차원 구간 (u\,v)^{P} 뒤에 평면 구간 (x\,y)^{P} | 4P+4 |
경유점 10개짜리 로봇 궤적을 2차원과 3차원으로 함께 출력하면 블록 길이는 54입니다. 주행 궤적은 NAVSIM이 4초 동안 8개, Waymo가 5초 동안 20개의 경유점을 요구하므로 블록 길이가 각각 36과 84입니다. 같은 배치 틀에 길이만 바꿔 적용하므로, 하나의 디코더가 서로 다른 요구 길이를 처리합니다.
그림 출처는 NVIDIA의 VFlash 기술 보고서 그림 2입니다.
좌표 하나가 차지하는 자리 수를 고정합니다
병렬 예측을 하려면 각 좌표가 차지하는 토큰 수가 값에 따라 달라지지 않아야 합니다. 좌표를 일반 텍스트로 쓰면 7 과 1000 의 토큰 수가 달라서 뒤따르는 좌표의 위치가 밀립니다. 연구팀은 두 가지 표현을 모두 지원하도록 설계했습니다.
- 전용 좌표 토큰: 연구팀의 기본 VLM은
<0>부터<1000>까지 1,001개의 숫자 토큰을 사용합니다. 좌표 하나가 토큰 하나입니다. 이미지 좌표는 0에서 1,000 사이로 정규화합니다. 로봇의 3차원 좌표는 카메라 좌표계에서 축마다 10\,\mathrm{m} 범위를 균등하게 나누므로 해상도는 1\,\mathrm{cm} 입니다. - 고정 폭 숫자 칸: 좌표를 텍스트로 출력하는 기존 모델(MolmoMotion-AR)에는 좌표마다 부호 한 자리와 숫자 다섯 자리를 배정합니다. 쓰지 않는 높은 자릿수는 마스크 토큰으로 채웁니다. 예측이 끝나면 대상 모델이 쓰는 텍스트 형식으로 되돌립니다. 대상 모델의 어휘는 바꾸지 않습니다.
이미지 밖으로 벗어난 경유점은 2차원 구간에서 <oof> 토큰 한 쌍으로 표기하고, 3차원 좌표는 그대로 유지합니다.
초안 모델은 주석 좌표를 정답으로 학습합니다
학습은 두 단계입니다. 먼저 자기회귀 대상 모델을 시각 기본 요소 출력 형식에 맞춰 미세조정(Fine-tuning)한 뒤 가중치를 고정합니다. 다음으로 고정된 대상 모델의 중간 표현을 입력받는 초안 모델을 학습합니다.
연구팀의 기본 VLM은 Qwen3-4B 언어 모델에 MoonViT 비전 인코더를 MLP로 연결한 구조입니다. 초안 모델은 DFlash의 구조를 따라 트랜스포머 5층으로 구성하였으며 학습 파라미터는 약 5억 3,700만 개입니다. 대상 모델의 36개 층 중 5개 층에서 뽑은 표현을 이어 붙여 문맥으로 사용하고, 입력 임베딩과 출력 투영층은 대상 모델의 것을 공유합니다. 블록 안의 위치들은 앞뒤 순서와 관계없이 서로를 참조하고, 블록 앞에 있는 대상 모델의 문맥도 참조합니다.
초안 모델은 시작 토큰 a_0 과 마스크로 채워진 나머지 자리를 입력받아 모든 자리의 토큰을 한 번에 예측합니다. 손실 함수는 위치별 교차 엔트로피의 가중합입니다:
여기서 B(s) 는 블록 길이, H_\theta(x) 는 대상 모델이 관측과 지시를 처리해 만든 표현입니다. DFlash와 다른 점은 2가지입니다. 하나는 정답 a_j 가 대상 모델이 생성한 토큰이 아니라 데이터에 주석으로 달린 좌표라는 점입니다. 다른 하나는 가중치 w_j 입니다. 텍스트용 추측 디코딩은 앞쪽 토큰이 틀리면 뒤쪽이 모두 버려지므로 앞 위치에 큰 가중치를 주지만, 시각 기본 요소 블록에는 모든 위치에 같은 가중치를 줍니다. 대상 모델의 로짓이나 은닉 표현을 따라 배우는 증류(Distillation) 손실은 쓰지 않았습니다.
응답에 텍스트가 섞인 과제에서는 짧은 텍스트 블록도 함께 학습합니다. 그래서 초안 모델 하나가 검증을 거치는 텍스트 경로와 바로 채택되는 좌표 경로를 모두 처리합니다.
추론: 텍스트는 검증하고, 좌표 블록은 형식 검사 후 채택합니다
추론 과정은 다음 순서로 진행됩니다.
- 텍스트 구간은 16자리 블록 단위로 DFlash 방식의 추측 디코딩을 수행합니다. 대상 모델이 블록을 검증하여 일치하는 앞부분만 채택합니다. 도구 호출도 이 경로에서 생성됩니다.
- 시각 기본 요소의 시작 토큰이 채택되면, 디코더가 도구 호출에 선언된 길이와 유형으로 블록 배치를 확정합니다.
- 초안 모델이 블록 전체를 한 번의 순전파로 예측합니다. 이때 좌표 자리에는 숫자 토큰만, 구분 자리에는 정해진 구분 토큰만 나오도록 위치별로 어휘를 제한합니다. 이 제한은 이미 계산된 로짓에 적용하므로 신경망 연산이 추가되지 않습니다.
- 블록이 형식 검사를 통과하면 대상 모델과 대조하지 않고 전체를 채택합니다. 경계 상자에는 LocateAnything의 공간 신뢰도 검사를 추가로 적용합니다.
- 대상 모델이 채택된 블록을 한 번 처리합니다. 이 순전파에서 캐시를 갱신하고, 다음 토큰을 예측하며, 행동 모델에 전달할 은닉 표현을 만듭니다.
- 형식 검사에 실패한 블록은 대상 모델이 같은 형식 제약 아래에서 자기회귀로 다시 생성합니다.
이 구조에서 유효한 시각 기본 요소 하나에 필요한 토큰당 지연 시간은 다음과 같습니다:
t_{\mathrm{par}} 는 초안 모델의 순전파 한 번, t_{\mathrm{target}} 은 대상 모델의 순전파 한 번에 걸리는 시간입니다. 자기회귀 디코딩은 좌표마다 대상 모델의 순전파가 한 번씩 필요합니다. FPD에서는 블록이 길어져도 순전파 횟수가 2번으로 유지되므로, 경유점을 늘려도 순차 디코딩 단계가 늘지 않습니다.
실험 결과
연구팀은 깔끔한 비교를 위해 과제마다 대상 모델을 미세조정한 뒤 고정하고, 같은 데이터로 초안 모델을 학습했습니다. 아래 수치에서 자기회귀와 VFlash는 같은 대상 모델을 쓰고 디코더만 다릅니다. 모든 수치는 NVIDIA 연구팀이 자체적으로 측정해 공개한 값입니다.
로봇 궤적 예측: 초안 모델이 대상 모델보다 정확했습니다
2차원 궤적은 ShareRobot-Bench와 VABench-V에서 평가했습니다. VFlash는 두 벤치마크의 궤적 오차 지표 6개를 모두 낮췄습니다. 감소 폭은 하우스도르프 거리(Hausdorff Distance)에서 약 7\%, 이산 프레셰 거리(Discrete Fréchet Distance)와 평균제곱근오차(RMSE)에서 3\% 에서 6\% 입니다.
3차원 궤적은 InternA1, AgiBot, MolmoBot 데이터로 평가했습니다. 로봇을 실제로 움직이지 않고, 예측한 경유점 10개를 정답 궤적과 비교하는 방식입니다. 아래 표는 평균 변위 오차(Average Displacement Error, ADE)이며, 단위는 미터입니다. 대상 모델은 출력 형식과 학습 데이터에 따라 세 가지로 나뉩니다.
| 대상 모델의 출력 형식 | 디코더 | InternA1 ↓ | AgiBot ↓ | MolmoBot ↓ |
|---|---|---|---|---|
| 3차원만 출력 | 자기회귀 | 0.101 | 0.083 | 0.066 |
| 3차원만 출력 | VFlash | 0.065 | 0.042 | 0.054 |
| 2차원과 3차원 함께 출력 | 자기회귀 | 0.153 | 0.105 | 0.076 |
| 2차원과 3차원 함께 출력 | VFlash | 0.062 | 0.041 | 0.055 |
| 2차원과 3차원 함께 출력, 손목 카메라 영상을 학습에 추가 | 자기회귀 | 0.130 | 0.084 | 0.066 |
| 2차원과 3차원 함께 출력, 손목 카메라 영상을 학습에 추가 | VFlash | 0.060 | 0.036 | 0.052 |
위 표를 통해 3가지를 알 수 있습니다. 우선 9개 조합 모두에서 VFlash의 오차가 낮았고, 감소 폭은 18\% 에서 61\% 입니다. 다음으로 자기회귀 디코딩은 2차원 좌표를 함께 출력하게 하면 3차원 오차가 15\% 에서 51\% 커졌습니다. 반면 VFlash는 두 구간을 한 번에 예측하며 비슷한 오차를 유지했습니다. 마지막으로 AgiBot에서 오차가 5\,\mathrm{cm} 안쪽인 경유점의 비율은 2차원과 3차원을 함께 출력하는 설정에서 39.8\% 에서 73.9\% 로 높아졌습니다.
논문은 초안 모델이 더 정확한 이유를 주석 좌표로 학습한 점과 블록 전체를 함께 예측하는 점으로 설명합니다. 한 가지 참고할 점은 학습 설정입니다. 논문 부록에 따르면 로봇 궤적용 대상 모델은 데이터를 약 1회 학습했고, 초안 모델은 같은 데이터를 3회 학습했습니다. 두 모델의 학습률도 다릅니다. 이러한 학습량 차이가 정확도 차이에 얼마나 기여했는지를 분리한 실험은 논문에 실려 있지 않습니다. (학습 설정의 상세한 내용은 논문의 Appendix B를 참고해주세요)
경계 상자와 조밀한 3차원 움직임: 개선되지 않은 지표도 있습니다
VFlash가 모든 출력에서 자기회귀 디코딩을 앞선 것은 아닙니다.
경계 상자는 COCO와 Dense200에서 평가했습니다. 형식 검사만 통과하면 바로 채택하는 설정에서는 Dense200의 평균 F1 점수가 60.10\% 에서 39.09\% 로 떨어졌습니다. 좌표의 신뢰도가 낮은 상자를 자기회귀로 다시 생성하는 대체 경로를 추가하면 61.78\% 로 회복했고, 초당 생성 상자 수는 자기회귀의 약 2.6\times 였습니다. 다만 겹침 기준이 가장 엄격한 IoU 0.95에서는 대체 경로를 써도 F1 점수가 16.95\% 에서 12.11\% 로 낮았습니다. COCO의 평균 F1 점수도 48.68\% 에서 47.79\% 로 소폭 낮았습니다.
조밀한 3차원 움직임 예측은 PointMotionBench에서 평가했습니다. 장면 속 질의 점 8개가 앞으로 최대 30프레임 동안 어디로 움직일지 예측하는 과제입니다. 이 실험에서는 공개된 MolmoMotion-AR을 미세조정 없이 대상 모델로 고정하고 초안 모델만 학습했습니다. DAVIS에서는 평균 변위 오차가 27\%, 최종 지점 오차가 19\% 줄었습니다. 반면 HOT3D의 평균 변위 오차는 0.109\,\mathrm{m} 에서 0.122\,\mathrm{m} 로, WorldTrack의 최종 지점 오차는 0.261\,\mathrm{m} 에서 0.300\,\mathrm{m} 로 커졌습니다. 오차가 1, 2, 5, 10, 20\,\mathrm{cm} 미만인 예측의 비율을 평균한 PWT 지표는 세 데이터셋 모두에서 자기회귀보다 낮았습니다.
초록에 실린 약 25\times 는 이 과제의 생성 시간 비교입니다. H100 한 장에서 배치 크기 1로 같은 입력을 한 번씩 생성했을 때, HOT3D 기준 자기회귀는 79.8\,\mathrm{s}, VFlash는 3.21\,\mathrm{s} 가 걸렸습니다. 연구팀은 이 수치를 예비 측정이라고 밝히고 있습니다. 이 과제에서 병렬화되는 범위는 한 프레임 안의 점과 좌표이고, 프레임은 여전히 하나씩 순서대로 생성합니다.
저장소의 상세 결과 문서는 약 25\times 가 한 번 생성하는 시간의 비교이며 위 정확도 수치와는 별개라고 적고 있습니다. 평가 안내 문서의 평가 스크립트는 두 디코더에 서로 다른 설정을 씁니다. VFlash는 후보 5개를 차례로 샘플링한 뒤 정답과의 평균 변위 오차가 가장 낮은 후보를 고르고, 자기회귀는 탐욕적 디코딩으로 답 하나를 생성합니다. 논문에는 정확도 수치를 어떤 디코딩 설정으로 얻었는지 적혀 있지 않습니다.
행동 모델에 시각 계획을 전달했을 때
좌표 오차가 줄어도 로봇이 과제를 더 잘 수행하는지는 별개의 질문입니다. 연구팀은 VLM을 고정한 채, 행동 모델이 VLM의 은닉 표현을 교차 어텐션(Cross-Attention)으로 참조하게 하는 방식으로 세 가지 환경에서 평가했습니다. 궤적 위치의 표현은 채택된 블록을 대상 모델이 처리해서 만듭니다.
MolmoSpaces: 로봇 조작 시뮬레이션
MolmoSpaces는 물체 집기(Pick), 집어서 놓기(Pick & Place), 열기(Open), 닫기(Close)의 네 가지 과제 묶음으로 이루어진 시뮬레이션 벤치마크입니다. 행동 모델은 Cosmos-Predict2.5를 로봇 제어용으로 추가 학습한 월드 행동 모델(World Action Model, WAM)입니다. 기준 모델은 이 WAM의 원래 텍스트 인코더를 그대로 사용합니다. 나머지 구성은 텍스트 인코더를 연구팀의 VLM으로 교체하고, 질문, 하위 과제 텍스트, 궤적 위치의 표현을 전달합니다. 궤적 좌표를 숫자로 인코딩하는 별도의 모듈은 두지 않았습니다. 아래는 성공률(%)입니다.
| 구성 | 평균 ↑ | Pick | Pick & Place | Open | Close |
|---|---|---|---|---|---|
| 기준 모델 (원래 텍스트 인코더) | 62.6 | 81.1 | 55.7 | 49.3 | 64.2 |
| 자기회귀로 생성한 2차원 및 3차원 궤적 | 61.0 | 81.2 | 50.4 | 29.8 | 82.4 |
| VFlash, 궤적 대신 이미지 표현 전달 | 63.7 | 80.2 | 52.5 | 44.3 | 77.8 |
| VFlash, 3차원 궤적 | 69.3 | 81.7 | 73.0 | 48.3 | 74.2 |
| VFlash, 2차원 및 3차원 궤적 | 70.2 | 83.6 | 67.3 | 52.8 | 77.0 |
VFlash로 생성한 궤적을 전달한 구성의 평균 성공률은 70.2\% 로, 기준 모델보다 7.6 퍼센트포인트 높았고, 논문이 함께 비교한 공개 모델 중 가장 높은 PrimeR0(60.3\%)도 앞섰습니다. 같은 형식의 궤적을 자기회귀로 생성해 전달한 구성은 61.0\% 로 기준 모델보다 낮았습니다. 궤적 표현을 이미지 표현으로 바꾸면 63.7\% 로 내려갔습니다. 연구팀은 이 결과를 궤적이 언어 외의 정보를 전달한다는 근거로 제시합니다. 과제별로는 차이가 있습니다. 집어서 놓기에서는 3차원 궤적만 전달한 구성이 73.0\% 로 가장 높았고, 닫기에서는 자기회귀 궤적을 전달한 구성이 82.4\% 로 가장 높았습니다.
이 결과를 해석할 때 확인할 조건이 있습니다. 각 행은 학습 시드 하나와 평가 시드 하나의 결과입니다. 또한 평가에서 시뮬레이터는 계획을 생성하는 동안 멈춰 있으므로, 이 성공률에는 디코딩 속도의 차이가 반영되지 않습니다.
LIBERO 계열: 조건을 바꾼 평가에서 차이가 커졌습니다
그림 출처는 NVIDIA의 VFlash 기술 보고서 그림 3입니다.
LIBERO 계열에서는 흐름 정합(Flow Matching) 방식의 행동 헤드를 같은 구조로 두고 조건만 바꿔 비교했습니다. 위 그림에서 회색은 고정된 Qwen3-VL-4B가 이미지와 지시만 인코딩한 기준 모델, 보라색은 연구팀의 VLM이 생성한 하위 과제 텍스트까지만 전달한 구성, 녹색은 궤적까지 포함한 전체 계획을 전달한 구성입니다.
기준 모델 대비 향상 폭은 LIBERO에서 0.8, LIBERO-Plus에서 1.9, 물체, 위치 교환, 지시문, 과제 변형을 적용해 평가하는 LIBERO-PRO에서 6.8 퍼센트포인트였습니다. 궤적 자체의 기여는 벤치마크마다 달랐습니다. LIBERO-PRO에서는 하위 과제만 전달한 구성보다 1.7 퍼센트포인트 높았지만, LIBERO-Plus에서는 두 구성이 62.6\% 로 같았습니다.
자율주행: NAVSIM과 Waymo
자율주행에서는 고정된 VLM이 2차원 및 3차원 궤적을 계획으로 생성하고, ReCogDrive에서 가져온 확산 트랜스포머 행동 헤드가 이를 조건으로 연속 궤적을 출력합니다. 지도 학습만 했을 때 NAVSIM의 주행 점수(PDM Score, PDMS)는 87.1 이었고, 행동 헤드만 강화 학습으로 추가 학습하면 90.7 로 높아졌습니다. 이 값은 논문이 비교한 Qwen-Drive-1.0-RL과 같습니다. Waymo 테스트 분할에서는 강화 학습 후 RFS가 7.86 으로, 비교 대상 중 가장 높은 7.91 보다 0.05 낮았습니다. 연구팀은 이 결과를 최고 성능이 아니라 "경쟁력 있는(competitive)" 수준으로 표현합니다. 강화 학습 단계에서도 VLM과 VLM이 생성하는 계획은 바뀌지 않습니다.
추론 지연 시간 분석
VFlash의 속도 측정은 로봇과 차량에 탑재하는 Jetson Thor, 데스크톱급인 DGX Spark, 서버용 H100에서 이루어졌습니다. 연구팀은 TensorRT Edge-LLM 런타임을 수정하여 사용했고, 비전 인코더, 대상 모델, 초안 모델을 모두 반정밀도(FP16) TensorRT 엔진으로 실행했습니다.
그림 출처는 NVIDIA의 VFlash 기술 보고서 그림 4입니다.
아래 표는 Jetson Thor에서 배치 크기 1로 측정한 계획 한 단계의 지연 시간입니다. 전체 시간은 전처리, 비전 인코딩, 입력 문맥을 처리하는 프리필(Prefill), 디코딩, 행동 모델의 단계별 평균을 합산한 값입니다.
| 과제 (블록 길이) | 디코더 | 디코딩 (ms) ↓ | 전체 (ms) ↓ |
|---|---|---|---|
| MolmoSpaces (54) | 자기회귀 | 3107.6 | 3552.7 |
| MolmoSpaces (54) | DFlash | 1383.3 | 1828.4 |
| MolmoSpaces (54) | VFlash | 258.2 | 703.3 |
| NAVSIM (36) | 자기회귀 | 1380.0 | 1842.5 |
| NAVSIM (36) | DFlash | 1147.0 | 1609.5 |
| NAVSIM (36) | VFlash | 71.9 | 534.4 |
| Waymo (84) | 자기회귀 | 3254.0 | 3949.7 |
| Waymo (84) | DFlash | 2431.6 | 3127.3 |
| Waymo (84) | VFlash | 78.3 | 774.0 |
MolmoSpaces에서 전체 지연 시간은 자기회귀의 약 \frac{1}{5} 로 줄었습니다(5.1\times ). DGX Spark에서는 5.2\times, H100에서는 3.6\times 였습니다. 감소분은 대부분 디코딩 단계에서 나왔습니다. Thor에서 자기회귀 디코딩은 과제에 따라 전체 시간의 75\% 에서 87\% 를 차지했고, VFlash는 이 단계를 12\times 에서 42\times 줄였습니다. 토큰 일치 검증을 유지하는 DFlash는 디코딩 시간을 절반 정도로 줄이는 데 그쳤습니다.
블록 길이와 디코딩 시간의 관계도 표에서 확인할 수 있습니다. 주행 궤적의 블록 길이가 36(NAVSIM)에서 84(Waymo)로 늘어나는 동안 VFlash의 디코딩 시간은 71.9\,\mathrm{ms} 에서 78.3\,\mathrm{ms} 로 거의 변하지 않았습니다. 같은 구간에서 자기회귀 디코딩 시간은 1380.0\,\mathrm{ms} 에서 3254.0\,\mathrm{ms} 로 늘었습니다.
디코딩이 줄어든 뒤에는 다른 단계가 지연 시간의 대부분을 차지합니다. Thor의 NAVSIM에서 VFlash의 전체 534.4\,\mathrm{ms} 중 약 437\,\mathrm{ms} 는 전처리, 비전 인코딩, 프리필에 쓰였습니다. MolmoSpaces에서는 행동 모델이 339.8\,\mathrm{ms} 로 가장 큰 비중을 차지했습니다.
측정 조건은 다음과 같습니다. (상세한 내용은 논문의 Appendix E를 참고해주세요)
- 지연 시간은 모델 단계만 측정한 값입니다. 모델 로딩, 엔진 빌드, 워밍업, 측정 모듈 밖의 CPU 전처리, 출력 디토크나이즈는 제외했습니다. 연구팀도 센서 입력부터 구동까지의 전체 지연 시간이 아니라고 밝히고 있습니다.
- 도구 호출 JSON은 모델이 생성하지 않고 세 디코더 모두에 미리 제공했습니다.
- VFlash의 디코딩 시간에는 채택된 블록을 대상 모델이 한 번 더 처리하여 행동 모델용 표현을 만드는 시간이 포함됩니다.
- MolmoSpaces의 자기회귀 디코딩 시간은 출력 전용 엔진으로 따로 측정한 이전 프로파일에서 가져온 값입니다.
한계와 확인할 점
VFlash의 결과는 구조가 미리 정해진 출력에 한정됩니다. 형식 검사는 구분 토큰의 위치, 좌표 자리의 토큰 종류, 경유점 개수를 확인할 뿐, 좌표가 실제 위치와 가까운지는 판정하지 않습니다. 대상 모델의 검증을 건너뛰기 때문에 좌표의 정확도는 전적으로 초안 모델에 달려 있습니다. 경계 상자 실험에서 대체 경로 없이는 F1 점수가 약 20점 떨어진 결과가 이 한계를 보여줍니다. 궤적에는 이런 신뢰도 검사가 적용되지 않습니다.
실험 조건에서도 확인할 점이 있습니다. 궤적 정확도 평가는 로봇을 움직이지 않고 좌표만 비교한 것이고, 로봇 조작 성공률은 모두 시뮬레이션에서 측정했습니다. 논문에 실제 로봇으로 측정한 결과는 없습니다. 평가에 쓴 정답 경유점은 이동 거리를 기준으로 균등하게 다시 뽑은 것이어서 경로의 모양을 나타내며, 일정한 시간 간격의 제어 명령과는 다릅니다. Waymo의 강화 학습 체크포인트는 보상 계산에 쓴 것과 같은 검증 장면 479개로 선택했습니다. 최종 점수는 별도의 테스트 분할에서 측정했습니다.
연구팀은 후속 연구로, 같은 관측에서 서로 보완하는 시각 기본 요소 여러 개를 생성하면 정해진 지연 시간 안에서 제어 성능이 나아지는지 살펴볼 계획이라고 밝혔습니다. 논문은 이 방식을 빠른 판단을 뜻하는 시스템 1(System-1)에 빗대어 설명하며, 시각적 출력에서는 자기회귀 디코딩의 품질이 상한선이 아닐 수 있다고 결론짓습니다.
코드 공개 범위와 사용 방법
VFlash의 코드는 Eagle 저장소의 Embodied/ 디렉터리에 LocateAnything과 함께 공개되어 있습니다. 코드는 Apache 2.0 라이선스이고, 모델에는 연구 및 평가 목적의 비상업적 사용만 허용하는 NVIDIA License가 별도로 적용됩니다.
저장소 문서에 따르면 공개 범위는 다음과 같습니다.
- 공개된 것: 대상 모델 미세조정과 초안 모델 학습 코드, 로봇 궤적/주행 궤적/조밀한 움직임/경계 상자 평가 코드, 추론 예제
- 추후 공개 예정: 대상 모델과 초안 모델의 체크포인트
- 이번 공개에 포함되지 않은 것: 조밀한 움직임 실험에 쓴 MolmoMotion용 구현, MolmoSpaces와 LIBERO, 자율주행 실험의 행동 모델, 지연 시간 측정에 쓴 TensorRT 런타임
공개된 구현의 좌표 형식은 논문과 일부 다릅니다. 저장소의 데이터 준비 문서에 따르면 주행 궤적은 경유점마다 방향각을 포함하여 블록 길이가 3P+2 이고, 조밀한 움직임은 고정 폭 숫자 칸 대신 전용 좌표 토큰을 사용합니다.
따라서 지금은 논문의 수치를 내려받은 가중치로 바로 재현할 수 없고, 직접 학습한 체크포인트가 있어야 추론 예제를 실행할 수 있습니다. 설치는 CUDA용 PyTorch 2.8을 먼저 설치한 뒤 아래 명령으로 진행합니다:
git clone https://github.com/NVlabs/Eagle.git eagle
cd eagle/Embodied
pip install -e '.[vflash]'
학습은 논문과 같은 두 단계입니다. 아래 명령은 저장소의 VFlash 사용 문서에 실린 예시이며, 노드 8대에 GPU 8장씩을 사용하는 분산 학습 설정입니다:
# 1단계: 자기회귀 대상 모델 미세조정
GPUS=8 NNODES=8 NODE_RANK=<node-rank> MASTER_ADDR=<master-address> \
bash shell/vflash/train_ar.sh <recipe.json> <target-output-dir> <base-eagle-embodied-checkpoint>
# 2단계: 1단계의 대상 모델을 고정하고 5층 초안 모델 학습
GPUS=8 NNODES=8 NODE_RANK=<node-rank> MASTER_ADDR=<master-address> \
bash shell/vflash/train_drafter.sh <recipe.json> <drafter-output-dir> <target-checkpoint>
평가 스크립트는 --draft 옵션으로 초안 모델 체크포인트를 지정하면 VFlash로, 생략하면 같은 대상 모델의 자기회귀 디코딩으로 실행됩니다. 벤치마크별 수치는 저장소의 상세 결과 문서에서 확인할 수 있습니다.
VFlash: Fast, Accurate Visual Planning via Flash Primitive Decoding 논문
VFlash 프로젝트 홈페이지
Eagle Embodied GitHub 저장소
더 읽어보기
-
DFlash: 블록 확산(Block Diffusion) 기반으로 LLM 추론 속도를 높이는 오픈소스 라이브러리 (feat. Z.ai)
-
TensorRT Edge-LLM으로 DGX Spark에서 Nemotron 3.5 Lightning 실행하기 (DSpark로 생성 속도 최대 1.7배)
이 글은 GPT 모델로 정리한 초안을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 댓글로 알려주시기를 부탁드립니다. ![]()
이 글은 파이토치 한국 사용자 모임
이 직접 정리한 글입니다. 새 글을 놓치지 않으시려면 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로 알림을 받으시고, 회원으로 가입하시면 주요 글들을 이메일
로도 보내드립니다! ![]()
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()



