00. 환경 구축 — Genesis 설치하고 첫 시뮬레이션 돌리기

이번 단계 목표: 내 컴퓨터에 Genesis를 설치하고, “정말 잘 깔렸나?”를 작은 시뮬레이션(큐브가 바닥으로 떨어지는 장면)으로 직접 확인합니다.


들어가기 전에 — 준비물

Genesis는 GPU를 쓰면 훨씬 빠르지만, 없어도 CPU로 돌아갑니다. 이 기록은 아래 환경에서 만들었습니다.

항목 이 PC의 사양 최소 권장
GPU NVIDIA RTX 4060 Ti 16GB NVIDIA GPU 권장(없어도 CPU 가능)
OS Linux Mint 22 (Ubuntu 24.04 기반) Linux / Windows / macOS
Python 3.12 3.10 ~ 3.13
그래픽 X11 + NVIDIA 드라이버 실시간 창(뷰어) 보려면 필요

왜 Python 버전이 중요한가요? 파이썬 라이브러리들은 특정 파이썬 버전에서만 동작하도록 만들어진 경우가 많습니다. Genesis는 3.10~3.13만 지원하니, 너무 낮거나(3.9 이하) 너무 높은(3.14+) 버전을 피하세요.


1단계. 격리된 작업 공간(conda 환경) 만들기

여러 프로젝트를 한 컴퓨터에서 하다 보면 “A 프로젝트는 이 버전, B는 저 버전”처럼 라이브러리 버전이 충돌합니다. 그래서 프로젝트마다 독립된 방(가상환경)을 만들어 격리합니다. 여기서는 conda를 썼습니다.

conda create -n genesis python=3.12 -y   # 'genesis'라는 이름의 방을 만들고 파이썬 3.12 설치
conda activate genesis                    # 그 방으로 들어가기

conda가 없다면? Miniforge를 설치하면 됩니다. conda 대신 파이썬 기본 도구인 python -m venv .venv를 써도 됩니다(원리는 같습니다).


2단계. PyTorch 먼저, 그다음 Genesis

Genesis는 내부 계산에 PyTorch(딥러닝/텐서 연산 라이브러리)를 사용합니다. 그래서 PyTorch를 먼저 깔고, 그다음 Genesis를 깝니다. 순서가 중요합니다.

pip install torch torchvision          # PyTorch (GPU가 있으면 CUDA 버전이 자동 설치됨)
pip install genesis-world              # Genesis 본체
pip install "imageio[ffmpeg]"          # 나중에 시뮬레이션을 mp4 영상으로 저장하기 위한 도구

genesis가 아니라 genesis-world? 네, pip으로 설치할 때 패키지 이름은 genesis-world입니다. 하지만 코드에서 불러올 때는 import genesis로 씁니다. 헷갈리기 쉬운 부분이에요.

imageio[ffmpeg]는 왜? 영상(mp4)을 저장하려면 ffmpeg라는 도구가 필요합니다. 시스템에 ffmpeg가 없어도, imageio[ffmpeg]를 깔면 파이썬 안에 ffmpeg가 같이 들어와 편합니다.

설치 용량이 수 GB라 시간이 좀 걸립니다(인터넷 속도에 따라 몇 분~십여 분).


3단계. 잘 깔렸는지 확인 — 첫 시뮬레이션

설치가 끝났으면, 정말 동작하는지 눈으로 확인할 차례입니다. scripts/00_smoke_test.py는 아주 단순한 장면을 만듭니다: 바닥 + 공중에 뜬 큐브 하나. 시뮬레이션을 시작하면 중력 때문에 큐브가 바닥으로 떨어져야 정상입니다.

python scripts/00_smoke_test.py

“smoke test”는 “연기 테스트”라는 뜻으로, 전자제품에 전원을 넣어 연기가 나는지(=고장인지) 먼저 보는 데서 온 말입니다. “일단 켜지긴 하나?”를 보는 가장 기초적인 점검이에요.

실행 결과

콘솔에 이런 출력이 나오면 성공입니다.

[Genesis] Running on [NVIDIA GeForce RTX 4060 Ti] with backend gs.cuda. Device memory: 15.57 GB.
[Genesis] Genesis initialized. version: 1.0.0
...
[Genesis] Running at 1994.66 FPS.

================  SMOKE TEST 결과  ================
큐브 높이(z):  시작 1.000 m  →  끝 0.100 m
큐브가 중력으로 떨어졌습니다. 물리 시뮬레이션 정상 동작!
  • backend gs.cudaGPU를 제대로 잡았다는 뜻입니다. (CPU면 gs.cpu로 나옵니다.)
  • 1994 FPS → 초당 약 2,000번 step을 계산했다는 뜻. 굉장히 빠르죠. 이게 Genesis의 강점입니다.
  • 큐브 높이가 1.0m → 0.1m로 줄었습니다. 큐브 높이의 절반이 0.1m이니, 바닥에 정확히 안착한 것.

그리고 outputs/ 폴더에 떨어지기 전/후 스크린샷이 저장됩니다.

떨어지기 전 떨어진 후
큐브가 공중에 있는 모습 큐브가 바닥에 떨어진 모습

체크무늬 바닥 위에 흰 큐브가 놓여 있습니다. 화면(뷰어) 없이도 카메라로 이미지를 뽑은 것 — 이게 헤드리스 렌더링입니다. 블로그용 자료는 대부분 이 방식으로 만듭니다.

실시간으로 떨어지는 걸 직접 보고 싶으면 --vis 옵션을 붙이세요.

python scripts/00_smoke_test.py --vis

회고 — 막혔던 점 & 배운 것

설치하며 실제로 겪은 점들을 정리합니다.

  • pip install genesis-world의 패키지 이름 ≠ import 이름. 설치는 genesis-world, 코드에서는 import genesis. 처음엔 pip install genesis를 쳐서 엉뚱한 패키지가 깔릴 뻔했습니다.
  • PyTorch는 Genesis보다 먼저. Genesis가 내부적으로 PyTorch에 의존해서, 순서를 지켜야 의존성이 깔끔합니다. 이 PC에서는 CUDA 13용 torch 2.12가 자동으로 잡혔습니다.
  • GPU 드라이버의 CUDA 버전과 PyTorch의 CUDA 버전은 달라도 됩니다. 드라이버가 CUDA 13을 지원하면, 그보다 낮은 CUDA로 빌드된 torch도 잘 돌아갑니다(상위 호환). “버전이 정확히 안 맞는데?” 하고 겁먹지 않아도 됩니다.
  • 첫 실행은 느립니다. Genesis는 처음 돌릴 때 시뮬레이션 커널을 컴파일(Compiling simulation kernels...)하느라 십수 초 걸립니다. 두 번째부터는 캐시 덕분에 빨라집니다. 멈춘 게 아니니 기다리세요.
  • 환경 박제는 지금 해두기. 나중에 “되던 게 안 될 때” 되돌릴 수 있도록 requirements.txtenvironment.yml을 만들어 두었습니다. (pip freeze, conda env export)

이번에 깐 핵심 버전 — Genesis 1.0.0 / PyTorch 2.12.0 (CUDA 13) / Python 3.12. 전체 패키지 목록은 바로 위에서 박제해 둔 requirements.txt에 그대로 남습니다.


다음 단계

설치와 첫 실행을 확인했으니, 다음 문서에서는 코드를 한 줄씩 뜯어보며 Genesis의 기본 개념(Scene, Entity, step 등)을 정리합니다 → 01. Genesis 기본 개념