요즘 Physical AI라는 키워드가 자주 보입니다. CES 2025에서 NVIDIA 젠슨 황이 "AI의 다음 단계는 Physical AI"라고 강조한 이후로, 로봇이 시뮬레이션에서 스스로 걷고 물건을 잡는 영상들이 쏟아지고 있죠. 영상을 볼 때마다 "저건 대체 어떻게 학습시킨 거지?"라는 궁금증이 있었는데, 그래서 NVIDIA Isaac Lab on AWS 워크샵을 직접 따라 해봤습니다.

이 글은 워크샵을 따라 하면서 정리한 내용입니다. Physical AI가 뭔지, 로봇이 어떻게 스스로 걷는 법을 배우는지, 그리고 이걸 AWS 클라우드에서 어떻게 돌리는지를 초보자 관점에서 정리해 봤습니다.


Physical AI, 왜 관심을 가지게 됐나?

저는 주로 Detection, Classification, OCR, LLM 같은 영역에서 AI를 다뤄왔습니다. 그러다 보니 Physical AI, 즉 로봇이 물리적 세계에서 동작하는 AI는 좀 먼 이야기처럼 느껴졌습니다. 하지만 최근 Boston Dynamics의 Atlas, Tesla의 Optimus, Figure의 휴머노이드 로봇 등이 눈에 띄게 발전하면서, 이 분야가 빠르게 실용화 단계로 가고 있다는 걸 체감했습니다.

출처: Nvidia

특히 인상적이었던 건 이 로봇들이 사람이 일일이 프로그래밍한 게 아니라, 시뮬레이션에서 강화학습으로 스스로 학습한다는 점이었습니다. 수천 번 넘어지면서 걷는 법을 배우고, 그 결과를 실제 로봇에 전이(Sim-to-Real)하는 방식이죠. 이게 어떻게 동작하는지 직접 경험해보고 싶었습니다.

로봇 학습이란?

워크샵 내용에 들어가기 전에, 로봇 학습의 기본 개념을 간단히 정리하겠습니다.

전통적으로 로봇은 수학적 모델링으로 제어했습니다. "이 각도에서 이 힘을 가하면 이렇게 움직인다"는 식의 물리 공식을 직접 계산해서 프로그래밍하는 방식이죠. 예를 들어 로봇 팔이 왼쪽에서 오른쪽으로 물건을 옮긴다고 하면, 사람은 직선으로 쭉 이동시키는 걸 상상합니다. 하지만 실제 로봇 팔은 각 관절이 회전 운동을 하기 때문에 호를 그리면서 이동합니다. 저도 이걸 몰랐다가 실제 로봇 팔이 작동하는 걸 보고 알게 됐는데, 직선으로 움직이게 하려면 각 관절의 각도를 동시에 정밀하게 계산(역기구학, Inverse Kinematics) 해야 합니다. 이런 계산을 사람이 직접 하는 거죠. 문제는 환경이 조금만 바뀌어도 다시 계산해야 하고, 복잡한 동작일수록 수학적으로 모델링하기가 극도로 어렵다는 겁니다.

로봇 학습은 이 한계를 넘기 위한 접근입니다. 로봇이 데이터와 환경 상호작용을 통해 스스로 동작을 배우는 것이죠. 크게 네 가지 방식이 있습니다.

학습 방식 핵심 개념 예시
지도학습 (Supervised) 라벨링된 데이터로 학습 물체 인식, 포즈 추정
비지도학습 (Unsupervised) 라벨 없이 패턴 발견 환경 맵핑, 이상 탐지
모방학습 (Imitation) 전문가 시연을 따라 학습 텔레오퍼레이션 데이터로 조립 학습
강화학습 (Reinforcement) 시행착오로 보상을 최대화 보행, 물체 파지

이 중에서 로봇의 행동 자체를 학습시킬 때 주로 사용되는 건 모방학습과 강화학습입니다. 이번 워크샵에서 다루는 건 강화학습입니다.

강화학습, 간단히 말하면

강화학습은 사람이 자전거를 배우는 과정과 비슷합니다. 넘어지면 "이건 아니다"(패널티), 균형을 잡으면 "이게 맞다"(보상)라는 피드백을 받으면서 점점 나아지는 거죠.

로봇 강화학습의 루프는 이렇습니다.

  1. 로봇(에이전트)이 환경을 관측(Observation)합니다 — 자기 몸의 위치, 관절 각도, 지형 정보 등
  2. 정책(Policy) 네트워크가 관측값을 받아 행동(Action)을 출력합니다 — 각 관절을 어떻게 움직일지
  3. 환경에서 행동을 수행하고 보상(Reward)을 받습니다 — 앞으로 전진하면 +, 넘어지면 -
  4. 이 과정을 수만~수십만 번 반복하면서 정책을 업데이트합니다

여기서 핵심은 보상 함수(Reward Function) 설계입니다. "어떤 상태가 좋고 나쁜지"를 정의하는 건 사람이 해야 합니다. 예를 들어 휴머노이드 보행 학습이라면, 전진 속도에 비례한 보상, 에너지 소비에 대한 패널티, 넘어지면 에피소드 종료 같은 식으로 설계하는 거죠.

이번 워크샵에서 사용된 알고리즘은 PPO(Proximal Policy Optimization)입니다. Isaac Lab에서 가장 널리 쓰이는 강화학습 알고리즘이고, 학습이 안정적이라는 장점이 있습니다.


NVIDIA Isaac Lab이란?

Isaac Lab은 NVIDIA의 로봇 학습 프레임워크입니다. 쉽게 말해 로봇에게 행동을 가르치기 위한 도구입니다.

NVIDIA는 로봇 시뮬레이션 분야에서 여러 도구를 발전시켜 왔습니다. Isaac Gym → OIGE → Orbit 등을 거쳐 현재 Isaac Lab으로 통합된 형태입니다. Isaac Lab은 Isaac Sim(물리 시뮬레이션 엔진) 위에서 동작하며, 역할 분담은 이렇습니다.

도구 역할
Isaac Sim 물리 시뮬레이션 + 렌더링 (물리 세계를 만드는 엔진)
Isaac Lab 학습 파이프라인 관리 (상태 → 관측 → 정책 → 행동 루프)

데이터 흐름을 좀 더 구체적으로 보면 이렇습니다.

  1. Isaac Sim이 물리 시뮬레이션으로 로봇의 상태(State)를 생성합니다 — 관절 위치, 속도 등의 순수 데이터
  2. Isaac Lab이 상태를 받아 노이즈를 추가합니다 — 실제 센서처럼 약간의 오차를 넣어 Sim-to-Real 전이 성능을 높입니다
  3. 노이즈가 추가된 관측(Observation)이 정책 네트워크로 전달됩니다
  4. 정책이 행동(Action)을 출력합니다
  5. 행동이 다시 Isaac Sim에 전달되어 물리 시뮬레이션이 실행됩니다
  6. 이 사이클이 반복되면서 정책이 점점 개선됩니다

최종 산출물은 .pt 또는 .onnx 형태의 학습된 정책 파일입니다. 이 파일이 바로 "로봇의 뇌"라고 볼 수 있습니다.

Isaac Lab에는 Cartpole 같은 단순 환경부터 Unitree H1 휴머노이드, Boston Dynamics Spot, Franka 로봇 팔까지 다양한 로봇과 26개 이상의 사전 구축 환경이 포함되어 있습니다. Berkeley, Fourier, ETH 등 여러 연구팀이 실제로 Isaac Lab을 사용해서 Sim-to-Real 전이까지 진행하고 있습니다.


직접 해본 것: Unitree H1 휴머노이드 보행 학습

제가 해본 건 Unitree H1 휴머노이드 로봇이 울퉁불퉁한 지형에서 걷는 법을 강화학습으로 학습시키는 것입니다. 그리고 이 과정을 AWS 클라우드 GPU 환경에서 실행했습니다.

전체 흐름은 크게 세 가지입니다. GPU 1개로 학습을 돌려보고, 여러 GPU로 분산 학습을 해보고, 학습이 끝난 모델로 실제 걷는 모습을 확인하는 것이죠.

GPU 1개로 학습 시작해 보기

먼저 EC2 인스턴스(g6.4xlarge, L40S GPU 1개)에 Amazon DCV로 원격 접속합니다. DCV는 GPU 가속 원격 데스크톱인데, Isaac Sim 같은 그래픽 중심의 애플리케이션을 원격에서 실행할 수 있게 해 줍니다. 접속하면 Ubuntu 데스크톱 환경이 나타나고, 터미널에서 Isaac Lab Docker 컨테이너를 실행해 학습을 시작합니다.

Ubuntu 데스크톱 접속 화면

# Docker 컨테이너 실행
cd environment/IsaacLab
xhost +
docker run --shm-size=60g --name isaac-lab --entrypoint bash -it --gpus all \
  -e "ACCEPT_EULA=Y" --rm --network=host \
  -e DISPLAY -e "PRIVACY_CONSENT=Y" \
  isaaclab-batch:latest

# 컨테이너 안에서 학습 시작
/isaac-sim/python.sh -m torch.distributed.run --nnodes=1 --nproc_per_node=1 \
  scripts/reinforcement_learning/skrl/train.py \
  --task=Isaac-Velocity-Rough-H1-v0

Isaac-Velocity-Rough-H1-v0이 학습 태스크 이름입니다. Unitree H1 휴머노이드가 거친 지형(Rough Terrain)에서 목표 속도로 걷는 법을 학습하는 환경이죠.

약 5분 정도 기다리면 Isaac Sim GUI가 뜨면서 시뮬레이션 화면이 나타납니다. 처음에는 로봇이 바로 넘어지는 게 보입니다. 아직 아무것도 배우지 못한 상태니까요. (여러 로봇이 계속 넘어지니까 좀비 같아 보이기도 하네요.)

학습 중에 TensorBoard를 띄워서 메트릭을 확인할 수 있는데, 주요 지표는 두 가지입니다.

  • mean_episode_length: 에피소드 평균 길이. 로봇이 넘어지지 않고 버티는 시간이라고 보면 됩니다. 학습이 잘 되면 이 값이 점점 늘어납니다.
  • mean_reward: 평균 보상. 학습이 진행될수록 높아져야 합니다.

이 태스크의 전체 학습은 72,000 에포크, 약 3시간이 소요됩니다. GPU 1개로도 돌아가긴 하지만, 복잡한 로봇 학습은 이것보다 훨씬 오래 걸리기 때문에 GPU를 더 쓸 필요가 있습니다.

AWS Batch로 GPU 8개 분산 학습

여기서 AWS Batch를 사용해 2노드 × 4 GPU(총 8 GPU)로 분산 학습을 실행해 봤습니다. Isaac Lab Docker 이미지를 ECR에 올리고, Batch에서 Compute Environment → Job Definition → Job Queue를 설정한 뒤 작업을 제출하면 됩니다.

Job Definition에서 핵심 환경 변수는 이렇습니다.

환경 변수 설명
TASK Isaac-Velocity-Rough-H1-v0 학습 태스크
PROC_PER_NODE 4 노드당 GPU 수
MAX_ITERATIONS 100 학습 에포크 수
NCCL_SOCKET_IFNAME eth0 멀티노드 통신 인터페이스

작업을 제출하면 AWS Batch가 알아서 EC2 인스턴스를 프로비저닝 하고, Docker 컨테이너를 띄우고, 분산 학습을 실행합니다. CloudWatch Logs에서 학습 진행 상황을 모니터링할 수 있고, 전체 학습은 약 12분 정도 소요됩니다. GPU 1개에서 3시간 걸리던 게 8개로 늘리니 확실히 빨라지는 걸 체감할 수 있었습니다.

학습된 모델로 걷는 모습 확인

가장 재미있는 부분입니다. 72,000 에포크를 학습한 모델(agent_72000.pt)을 EFS에서 마운트 해서 로드하고, 테스트 모드로 실행합니다.

cd /workspace/IsaacLab
./isaaclab.sh -p scripts/reinforcement_learning/skrl/play.py \
  --task=Isaac-Velocity-Rough-H1-v0 \
  --num_envs 25 \
  --checkpoint=/workspace/IsaacLab/TrainedModel/agent_72000.pt

--num_envs 25는 25개의 로봇을 동시에 시뮬레이션한다는 의미입니다. 약 2-3분 후 Isaac Sim GUI가 뜨면, 25개의 휴머노이드 로봇이 울퉁불퉁한 지형 위를 넘어지지 않고 걸어가는 모습을 볼 수 있습니다. 처음에 바로 넘어지던 것과 비교하면 확실히 다릅니다.

인터랙티브 데모도 있습니다.

cd /workspace/IsaacLab
/isaac-sim/python.sh scripts/demos/h1_locomotion.py

시뮬레이션이 로드되면 로봇을 클릭해서 1인칭 시점으로 전환하고, 방향키로 직접 조종할 수 있습니다. 위쪽 방향키를 누르면 전진, 아래쪽은 정지, 좌우로 방향 전환이 됩니다. 직접 조종해 보니까 울퉁불퉁한 지형에서도 균형을 잡으면서 걸어가는 게 신기했습니다. 제가 방향만 지시하면 나머지는 학습된 정책이 알아서 처리하는 거죠. 경사면에서 살짝 비틀거리다가도 다시 균형을 잡는 모습을 보면, 72,000 에포크 동안 수없이 넘어지면서 배운 결과가 이거구나 싶었습니다.


학습 데이터는 뭘 썼나?

"데이터가 뭔데?"라는 질문이 나올 수 있습니다. 일반적인 머신러닝과 다르게, 강화학습에서는 사전에 준비된 데이터셋이 없습니다. 데이터는 학습 과정에서 실시간으로 생성됩니다.

Isaac Sim이 물리 시뮬레이션으로 로봇의 상태를 생성하고, 로봇이 행동을 취하면 그 결과(다음 상태, 보상)가 새로운 데이터가 됩니다. 이 과정을 수만 번 반복하면서 정책이 개선되는 거죠.

다만 사전에 정의해야 하는 것들이 있습니다.

요소 설명
관측 공간 (Observation Space) 로봇이 "볼 수 있는" 정보 — 관절 위치/속도, 몸체 방향, 지형 높이맵 등
행동 공간 (Action Space) 로봇이 "할 수 있는" 행동 — 각 관절의 목표 위치/토크
보상 함수 (Reward Function) 좋은/나쁜 행동의 기준 — 전진 보상, 에너지 패널티, 넘어짐 종료 등
환경 (Environment) 거친 지형, 평평한 바닥 등 시뮬레이션 세계의 설정

Isaac-Velocity-Rough-H1-v0이라는 태스크 이름 자체가 이 설정을 담고 있습니다. Isaac Lab의 Velocity 추적 태스크, Rough(거친) 지형, H1(Unitree H1 로봇), v0(버전 0)이라는 뜻이죠. 이 태스크의 환경, 보상 함수, 관측/행동 공간은 Isaac Lab에 이미 정의되어 있어서 별도로 작성할 필요 없이 바로 학습을 시작할 수 있었습니다.


이걸로 뭘 더 해볼 수 있을까?

워크샵은 사전 정의된 태스크를 그대로 실행하는 수준이지만, 여기서 확장할 수 있는 방향은 꽤 많습니다.

  • 환경 변경: Isaac-Velocity-Rough-H1-v0 대신 Isaac-Velocity-Flat-H1-v0(평평한 지형)으로 바꿔서 학습 난이도에 따른 차이를 비교해 볼 수 있습니다.
  • 로봇 변경: H1 대신 Unitree Go2(사족보행 로봇)나 ANYmal 같은 다른 로봇으로 바꿔볼 수 있습니다. Isaac Lab에 다양한 로봇 에셋이 포함되어 있어서 태스크 이름만 바꾸면 됩니다.
  • 보상 함수 커스터마이징: 기본 보상 함수를 수정해서 "더 빨리 걷기", "에너지를 적게 쓰면서 걷기" 같은 다른 목표로 학습시킬 수 있습니다.
  • 모방학습 시도: 강화학습 대신 텔레오퍼레이션 데이터를 수집해서 모방학습(Behavior Cloning)으로 학습시켜 보는 것도 가능합니다.
  • Sim-to-Real 전이: 시뮬레이션에서 학습한 정책을 실제 로봇에 배포하는 단계까지 나아갈 수 있습니다. 노이즈 추가(Domain Randomization)가 이 과정의 핵심인데, Isaac Lab의 파이프라인에 이미 포함되어 있습니다.

개인적으로는 사족보행 로봇의 계단 오르기 같은 태스크를 직접 설계해 보면 재미있을 것 같습니다.


비용 참고

리소스 인스턴스 타입 시간당 비용 (On-Demand)
DCV 인스턴스 (학습/추론) g6.4xlarge 약 $3
Batch 노드 (분산 학습) g6.12xlarge × 2 약 $10.50 × 2 = $21

본인 계정으로 진행한다면, 반드시 완료 후 CloudFormation 스택을 삭제해야 합니다. g6 인스턴스가 계속 돌아가면 비용이 빠르게 늘어납니다.


마무리

Physical AI는 아직 저에게 익숙한 영역은 아닙니다. 하지만 이 워크샵을 통해 "로봇이 어떻게 스스로 걷는 법을 배우는지"의 전체 파이프라인을 경험할 수 있었습니다. Isaac Sim이 물리 세계를 시뮬레이션하고, Isaac Lab이 학습 루프를 관리하고, AWS가 GPU 인프라를 제공하는 구조가 깔끔하게 정리됐습니다.

특히 인상적이었던 건, 72,000 에포크를 학습한 모델이 울퉁불퉁한 지형에서 넘어지지 않고 걷는 모습이었습니다. 처음에 바로 넘어지던 모습과 비교하면, 강화학습의 효과를 직관적으로 확인할 수 있었습니다.

앞으로 로봇 학습 분야가 어떻게 발전할지 기대됩니다. Isaac Lab에는 이번에 사용한 Unitree H1 휴머노이드 외에도 Boston Dynamics Spot, ANYmal 같은 사족보행 로봇, Franka나 UR10 같은 로봇 팔, Crazyflie 쿼드콥터까지 다양한 로봇이 포함되어 있습니다. NVIDIA에서 제공하는 이 로봇들을 하나씩 바꿔가면서 학습시켜 볼 예정입니다.

참고: 이 워크샵은 2월에 진행했고 글도 그때 대부분 작성해 뒀는데, 일이 많아서 미루고 미루다 이제야 올립니다.

반응형