볼트를 초과하는 시대, 달리는 로봇을 어떻게 멈출까? GPU로 9,600회 강화학습
2026년 8월, 중국 베이징의 휴머노이드 로봇 경진대회에서는 100m를 8초대에 주파하는 로봇이 화제가 되었습니다.[1] 한편, 골인 후 제대로 멈추지 못하고 매트에 충돌하는 장면도 보도되었습니다.[3]
2026년 휴머노이드 로봇 경진대회. 골인 후 보호 매트와 충돌하는 모습. (출처: Reuters)
단순히 빠르게 달리는 것뿐만 아니라, 달리기를 마친 후에 어떻게 감속하느냐. 이것 또한 휴머노이드 로봇에게 중요한 과제입니다.
지난 글에서는 MacBook Air를 이용해 휴머노이드 로봇의 보행 학습에 도전했습니다. 이번에는 이미 학습된 주행 AI를 사용하여 100m 골인 후 5m 이내에 안정적으로 정지하는 것을 목표로 합니다.
이번 글에서는 먼저 두 가지 종류의 정지 규칙을 정의하여 시도해 볼 것입니다. 이어서 로봇의 속도나 자세에 따라 정지 방법을 선택할 수 있도록 강화학습(RL)에 도전합니다.
다만, AI에게 멈추는 법을 학습시키려면 시뮬레이터 상에서 반복적으로 주행과 정지를 시도해야 합니다. 그래서 이번에는 NVIDIA A100을 사용하여 시행착오를 가속화합니다.
AI는 어떤 방식으로 멈추는 법을 배울까요? 그리고 GPU로 그 학습을 얼마나 빠르게 할 수 있을까요?
실험을 통해 확인해 보겠습니다.
※본 기사는 MuJoCo 시뮬레이션 실험입니다. 베이징 대회에 출전한 기체나 사고 원인을 재현하는 것이 아니며, 실기 안전성을 검증하는 것도 아닙니다.
이번에 시도할 것
| 항목 | 내용 |
|---|
| 로봇 | Unitree G1 (손가락 장착 모델) |
| ... | |
| 본 기사에서는 달리는 방법은 재학습하지 않고, 정지 판단만을 학습시킵니다. | |
참고로, G1이나 MuJoCo와 같은 기본 용어에 대해서는 지난 글을 참고해 주십시오.
1. 🤖 학습된 AI로 G1 구동하기
G1은 로봇 본체를, GEAR-SONIC은 그 움직임을 배운 AI 모델을 지칭합니다. NVIDIA가 공개한 이 제어 모델에 '달리기(run)', '걷기(walk)', '대기(idle)' 등의 동작과 목표 속도를 전달하면, 전신 관절의 움직임을 계산합니다.
이번에는 NVIDIA 공식 GitHub에서 공개된 프로그램과 Hugging Face에서 공개된 학습된 모델을 이용했습니다. 모델 추론은 Python으로 실행하여 MuJoCo 상의 G1을 구동하고 있습니다.
액션 플래너에 전달되는 입력 일부는 다음과 같습니다.
feeds = {
# 직전 로봇의 자세・관절 각도
"context_mujoco_qpos": context_qpos[None].astype(np.float32),
...
'4.0m/s로 달려라'라고 지시하면, GEAR-SONIC이 각 관절의 움직임을 계산하고, MuJoCo가 실제 신체 움직임을 재현합니다. 동작 지령은 0.1초마다, 관절 움직임은 0.02초마다 업데이트했습니다.
지령 속도와 실제 속도는 다릅니다
다만, 자동차의 목표 속도와 마찬가지로 '4.0m/s로 달려라'라고 지시해도, 자세나 모터의 제약으로 인해 그 속도가 나올 것이라는 보장은 없습니다.
| 지령 속도 | 100m 라인 통과 시 평균 실제 속도 |
|---|
| 2.5m/s | 2.02m/s |
| 4.0m/s | 3.49m/s |
고속 조건에서는 최대 4.19m/s를 기록했지만, 대회 100m 기록(8.64초, 평균 약 11.6m/s)에는 미치지 못합니다. 이번에 사용한 GEAR-SONIC의 공식 조작 UI에서는 주행 지령 상한이 3.0m/s였으나, 실험에서는 이를 초과하는 4.0m/s까지 시도했습니다.
이번에는 위 대회의 최고 속도를 재현하는 것이 아니라, 기존 주행 AI로 어떻게 정지할 수 있는지 검증해 나갈 것입니다.
참고로 아래 GIF는 정지 지령을 내리기 전의 주행만 잘라낸 것입니다.
2.5m/s가 조금 조깅하는 느낌이 나는 것을 알 수 있습니다.
2.5m/sと4.0m/sの走行比較
동일한 seed에서의 주행 비교. 상단이 2.5m/s 지령, 하단이 4.0m/s 지령.
2. 🏁 100m 통과 후, 어떻게 멈출까?
골인은 좌표로 판정합니다
이번에는 카메라로 흰 선을 인식시키지 않습니다. MuJoCo에서 얻는 G1의 골반 전진 방향 위치를 사용하여, 시작 지점을 0m, 골인 지점을 100m로 설정했습니다.
if obs.along < self.goal_line: # 골반 전진 위치가 100m 미만
self.phase = "cruise" # 주행을 계속
...
...
판정은 0.1초 간격으로 이루어지므로, 정지 명령으로 전환되는 시점은 실제 라인 통과 후 최대 약 0.1초 뒤입니다. 실기(실제 장비)의 경우, 여기에 이미지 인식이나 위치 추정 메커니즘이 별도로 필요합니다.
강화학습을 사용하지 않고 먼저 2가지 방식을 시도하다
우선 강화학습을 사용하지 않고, 여기서 정지 절차를 두 가지로 정의하여 비교해 보겠습니다.
| 방법 | 골 지점 이후 명령 |
|---|
| A: 즉시 제자리(立位) 명령 | 직후 idle로 전환 |
| B: 단계적 감속 | run → walk → slow_walk → idle |
idle은 제자리를 유지하기 위한 동작 모드이며, 전환하는 순간 완전히 멈추는 것은 아닙니다. 또한, 주행 속도를 0으로 지정하는 것만으로는 발 구르기가 계속되는 경우가 있었기 때문에, 마지막에는 idle로 전환합니다. 두 방식 모두 골 지점 직전에는 감속하지 않습니다.
A/Bの停止方法の比較
왼쪽은 A(골 통과 직후 즉시 idle로 전환), 오른쪽은 B(run→walk→slow_walk→idle)입니다. 둘 다 골 지점 직전에는 감속하지 않으며, 골 통과 후의 정지 명령만 변경했습니다 (2.5m/s 명령・seed 1234).
실험해 본 결과, 골 통과 속도가 평균 2.02m/s인 조건에서는 두 방식 모두 10/10회 성공했습니다. 평균 정지 거리는 A가 1.15m, B가 3.59m였습니다.
하지만 고속 조건에서는 다음과 같은 차이가 나타났습니다.
| 4.0m/s 명령・각 10회 | A: 즉시 제자리 | B: 단계적 감속 |
|---|---|
| 5m 이내에서 정지 | 9/10 | 8/10 |
| ... |
A에서는 4.19m/s로 통과한 시도가, 정지 명령 약 2.15초 후에 전방으로 넘어졌습니다. B는 넘어지지 않았지만, 2회는 5m를 초과했습니다. 짧은 거리에서 멈추는 것과, 부드럽게 멈추는 것은 양립하지 않을 때가 있습니다.
高速走行後に即idleへ切り替えて転倒した例
4.0m/s 명령・seed 4. 넘어짐 판정 시점은 골 통과 후 약 6.84m, 미끄러진 후 최종 위치는 약 7.44m입니다.
그렇다면 속도나 자세에 따라 언제 idle로 전환할지 AI에게 선택하게 한다면 어떨까요?
3. 🧠 '멈추는 방법'을 강화학습하다
주행 AI는 그대로, 판단 역할만 학습
여기서 사용하는 것이 **PPO (Proximal Policy Optimization)**라는 강화학습(RL) 기법입니다. 행동 선택 방식을 한 번에 크게 바꾸지 않고 안정적인 학습을 목표로 하는 것이 특징입니다.
주행이나 관절 제어는 GEAR-SONIC에 맡기고, 새로운 AI가 로봇의 속도나 자세를 바탕으로 0.2초마다 다음 세 가지 명령 중 하나를 선택합니다.
| 선택지 | 내용 |
|---|
| 유지 | 현재 명령을 지속한다 |
| 한 단계 감속 | run에서 walk 등 다음 저속 모드로 진입한다 |
| 제자리로 전환 | idle로 전환한다 |
정지 제어는 run 1.5m/s부터 시작하며, 골 지점 직전에는 PPO가 작동할 수 없습니다. 새롭게 학습하는 것은 정지 판단 AI만입니다.
停止判断AI・GEAR-SONIC・MuJoCoの役割分担
PPO가 동작 명령을 선택하고, GEAR-SONIC이 관절 움직임을 계산한다. MuJoCo가 그 움직임을 시뮬레이션하고, 정지 결과에 따른 보상(Reward)을 바탕으로 PPO를 학습시킨다.
무엇을 보고, 무엇을 칭찬할까?
PPO에는 로봇의 위치・속도・자세 등을 입력하여, 정지 결과에 따라 보상을 부여합니다.
| 구분 | 항목 | 내용 |
|---|---|
| 입력 | 위치・속도 | 골 지점 이후 거리, 횡방위 위치, 전후・좌우 속도 |
| ... || 보상 | 안정 정지 | 5m 이내에서 2초간 거의 정지: +10점 |
| | 보상 | 넘어짐: −15점 |
| | 보상 | 기타 실패 | 코스 이탈・5m 초과・시간 만료: 각 −10점 |
| 감점 | 급감속 | 최대 감속도가 2.0m/s²를 초과할 때 |
| ... |
※각 감점의 상한은 −2점입니다. 안정 정지는 평균 속도 0.05m/s 미만이 2초 지속되는 것을 의미합니다.
우선 5m 이내에서 안정적으로 멈추는 것을 우선하고, 그 위에 급감속이나 자세 무너짐, 정지에 시간・거리가 너무 오래 걸리는 것을 억제하도록 설계했습니다.
매번 100m를 다시 달리지 않다
정지만 연습하고 싶은데도 불구하고, 매번 100m의 가속 주행(助走)부터 시작하는 것은 비효율적입니다. 그래서 미리 달리게 한 골 지점 직후의 상태를 저장하여, 그 지점부터 정지 부분만 반복했습니다.
저장하는 것은 위치나 속도뿐 아니라, GEAR-SONIC의 동작 계획이나 이력까지 포함한 '상태'입니다. 이를 통해 100m 가속 주행을 매번 반복하지 않고, 골 통과 직후의 118가지 상태에서 정지만 학습할 수 있습니다.
한편, 최종 평가에서는 미사용된 20가지 조건으로 출발부터 100m를 달리게 하여 정지 성능을 확인합니다.
100mの助走を省いて停止試行を繰り返す仕組み
조주(가속 구간)를 한 번 기록하면, 그 후에는 정지 부분만 반복할 수 있다.
4. ⚡ A100으로 9,600회 학습시키면?
강화학습의 시도 횟수와 실험 조건
이번에는 학습 진행 방식과 계산 시간을 확인하기 위해, 96회의 시도를 1세트로 하여 총 100세트, 즉 9,600회의 정지 시도를 진행했습니다.
9,600회는 최적의 횟수로 도출된 것이 아니라, 우선 학습 경향을 파악하기 위해 설정한 횟수입니다.
GPU가 담당하는 처리
CPU 위에서 24개의 MuJoCo 시뮬레이션을 병렬 실행하여 로봇의 움직임을 물리적으로 계산합니다. 한편, 각 관절의 동작 방식을 구하는 GEAR-SONIC의 AI 추론은 A100이 담당합니다.
24개의 프로세스가 1장의 GPU를 효율적으로 공유하기 위해 CUDA MPS를 사용했습니다. 정지 시도를 반복하며 데이터를 수집하고, PPO(Proximal Policy Optimization) 학습 업데이트 또한 GPU에서 진행합니다.
CPUとA100による24並列学習
CPU로 물리 시뮬레이션을, GPU로 AI 추론을 분담. A100을 통한 고속화의 주된 요인은 GEAR-SONIC의 추론을 효율적으로 병렬 처리할 수 있다는 점입니다.
17.5분 만에 가상 정지 동작 12.1시간 분량
A100 + MPS를 사용했을 때, 9,600회 시도의 학습이 17.5분 만에 종료되었습니다. 시도 과정 중 시뮬레이터 내에서 진행된 시간은 총 **43,409초(약 12.1시간)**입니다. 이는 실제 대기 시간이 아니라, 각 로봇의 정지 동작을 합산한 가상 시간이며, 100m 조주는 포함되어 있지 않습니다.
PPOの学習曲線
좌상단: 보상, 우상단: 정지 성공률, 좌하단: 정지 거리, 우하단: 전도율. 보상은 학습 초기에 개선되었으나, 성공률은 처음부터 높았고, 정지 거리는 오히려 길어졌습니다.
GPU로 정지 AI 학습이 약 3배 빨라진다
CPU만으로 실행하는 경우와 GPU(A100)를 사용하는 경우를 비교하여, 96회의 정지 시도 및 PPO 업데이트에 걸리는 시간을 측정했습니다.
사용된 서버는 CPU가 Intel Xeon Silver 4310 (12코어/24스레드, 2.10GHz), GPU가 NVIDIA A100 80GB, 메모리가 약 251GiB입니다. 모두 24개 프로세스로 측정했습니다.
| 계산 방식 | 96회 시도 + 업데이트 1세트 | 100세트 |
|---|
| CPU만 사용 | 25.9초 | 약 54분(추정) |
| A100・MPS 미사용 | 45.3초 | 약 93분(추정) |
| A100 + MPS | | 17.5분(실측) |
A100 + MPS를 사용했을 때, CPU 단독 사용 대비 약 3배 빨라졌습니다. 반면, MPS를 사용하지 않았을 때는 GPU를 사용했음에도 느려졌습니다.
이는 24개 프로세스에서 GPU로 추론 요청이 빈번하게 이루어질 때 처리 대기나 전환 부하가 발생하기 때문으로 분석됩니다. CUDA MPS는 여러 프로세스의 GPU 처리를 효율적으로 실행하는 메커니즘이며, 이번 고속화에 결정적인 역할을 했습니다.
CPUとA100の処理時間比較
좌측부터 ① 시뮬레이션 처리 속도, ② PPO 업데이트 시간, ③ 1세트 처리 시간, ④ 100세트 총 시간. GPU의 효과는 주로 GEAR-SONIC의 추론에 있으며, PPO 자체 업데이트는 CPU가 더 빠른 결과를 보였습니다. 참고로, 100세트의 CPU 시간은 단시간 측정값으로부터 추정한 값입니다.
5. 🏃 학습된 정지 방식은 어떻게 변했나?
여기서는 골인 후의 정지 방식을 결정하는 세 가지 방법을 비교합니다.
두 가지는 사람이 설정한 규칙이며, 나머지 한 가지는 강화학습으로 배운 방식입니다.
- A: 즉시(即)… 골 통과 후 바로 직립 모드(
idle)로 전환
- B: 단계 감속…
run → walk → slow_walk → idle 순서로 단계적으로 전환 -
- PPO… 학습된 정지 판단 AI가 0.2초마다 다음 명령을 선택
미사용된 20개의 seed를 사용하여, 출발부터 100m를 달리게 하여 이 세 가지 방식을 비교했습니다.
3方式の停止比較
좌측부터 A: 즉시 idle, B: 단계 감속, PPO. 골 통과 시점은 약 4.10m/s였으며, 세 정지 방식의 차이를 비교했습니다.
| 지표 | 즉 idle | 단계 감속 | PPO |
|---|
| 5m 이내 정지 성공 | 18/20 | 18/20 | 18/20 |
| ... | | | |
성공 횟수는 세 방식 모두 18/20이었습니다. 나머지 2건은 골 전 코스 이탈과 전도입니다. 정지 거리 등의 평균은, 이탈 후에도 달리기를 완료한 1건을 포함하여 19회 시도로 집계되었습니다.
PPO는 성공률을 높이지 못했지만, 즉각적인 idle보다 감속이 온화하고 단계 감속(staged deceleration)보다 짧은 시간 안에 멈췄습니다.
한편, 학습 전후를 비교했을 때, PPO는 정지 시 급감속이나 자세 붕괴를 억제하는 방향으로 변화했습니다. 다만, 정지 거리는 길어졌고, 학습을 통해 모든 지표가 개선된 것은 아닙니다.
AI가 학습한 것은 '약 1초 후에 직립 자세로 전환하는 것'
PPO는 골 통과 후 목표 속도 1.5m/s의 저속 주행을 지시하고, 19회 시도 중 14회는 1.0초 후, 나머지 5회는 0.8초 후에 idle로 전환했습니다. 실제 속도는 그 사이에도 감소하여 평균 3.07m에서 정지했습니다.
PPOのidle切替時刻の解析
좌상단: 전환 시각과 골 통과 속도. 우하단: 전환 시각과 골반 기울기. 속도와의 명확한 관계는 없으며, 일부 시도는 자세에 따라 더 일찍 전환하고 있습니다.
고정적으로 1초 후에 idle로 전환하는 규칙과 비교해도, 19회 시도 중 14회는 동일한 동작을 보였으며, 평균 정지 거리 차이는 약 0.06m였습니다. 이번 조건에서는 PPO가 단순한 고정 규칙을 크게 능가했다고 말하기 어렵습니다.
한편, PPO는 로봇의 자세에 따라 정지 타이밍을 변경하는 동작도 학습했습니다. 이처럼 상황에 맞는 판단을 사람의 손으로 세밀한 규칙을 정의하지 않고 얻을 수 있다는 것이 강화학습(RL)의 장점입니다.
6. 🔍 요약
이번에 학습된 GEAR-SONIC을 사용하여, 주행 동작을 재학습하지 않고 정지 판단만 강화학습할 수 있었습니다.
학습된 PPO는 규칙 기반의 즉각적인 idle보다 급감속을 억제하고, 단계 감속보다 짧은 시간 안에 정지했습니다. 다만, 정지 성공률은 모든 방법에서 18/20으로 고정 1초 규칙과 비교했을 때 우위성이 제한적이었습니다.
한편, A100 + CUDA MPS에서는 9,600회의 정지 시도를 17.5분 만에 학습하여, CPU 단독 사용 대비 세트당 약 3배 빠르게 속도를 높였습니다. GPU의 가치는 정지 성능을 직접적으로 향상시키는 것이 아니라, 시도 조건이나 보상을 변경하며 개선을 반복하는 시간을 단축할 수 있다는 데 있습니다.
이번에는 시뮬레이터 상에서 골 위치를 파악했지만, 실제 로봇에서는 카메라 영상 등으로부터 주변 상황을 인식하고 판단해야 합니다.
향후에는 시각 정보를 바탕으로 주변 상황을 이해하고 행동으로 연결하는 VLA (Vision-Language-Action) 모델 등, 더욱 고도화된 로봇 AI 실험에도 참여할 계획입니다.
이 글을 작성한 사람
おむ
이미지 인식・LLM 중심으로, AI 시스템의 개발 및 기술 검증에 임하는 AI 엔지니어.
참고 자료
[1] IT之家「天工Ultraの100m決勝8.64秒」 https://www.ithome.com/0/994/751.htm (대회의 기체는 본 실험과 다름)
[2] Luo et al., SONIC: Supersizing Motion Tracking for Natural Humanoid Whole-Body Control, https://arxiv.org/abs/2511.07820 . 공개 모델: https://huggingface.co/nvidia/GEAR-SONIC , 공식 구현: https://github.com/NVlabs/GR00T-WholeBodyControl
[3] Reuters, After outrunning Bolt, China's robot champion races towards real-world work, https://www.reuters.com/world/asia-pacific/after-outrunning-bolt-chinas-robot-champion-races-towards-real-world-work-2026-09-10/
Discussion