nb1-code_chanhee 의 Colab 파일 3개 → KO/EN 최신본 · 손 편집 노트북을 생성물로%%vla 매직이 다리 역할을 합니다.scripts/make_colab_nb.py 로 빈칸본에서 순수 변환하게 바꿨습니다.vla-lecture 커널), 저 RAM 로더가 표준 로더와 텐서 813개 완전 동일. 검증 못 한 것: 실제 Colab 런타임(Drive, install.sh 의 sudo+apt 분기, T4 bf16).사용자 제보: nb1-code_chanhee/ 에 Colab 에서 돌아가게 만든 버전이 있으니 그 부분만 가져와 고쳐 달라. 현재 KO/EN 최신본(9/6 미니멀 마크다운)과 비교해 보니 차이는 두 가지뿐이었습니다.
README.md(한국어 띄어쓰기 정리만), scripts/build_notebook.py(내 미니멀화 diff). setup/, vla_lecture/, vla_utils.py, verify_runtime.sh 는 완전 동일.colab_setup.py, vla_colab.py, vla_colab_policy.py.Colab 은 파이썬 3.11, 강의 환경은 3.10 입니다 (robocasa 가 numpy 1.23 을 핀). 한 프로세스에 못 올리므로 강의 코드는 별도 커널에서 돌리고 출력만 가져옵니다.
| 파일 | 하는 일 |
|---|---|
colab_setup.py | /content/vla 에 setup/install.sh 로 환경 설치, 커널 등록, kernel.json 격리 패치 |
vla_colab.py | KernelManager 로 vla-lecture 커널 기동 + %%vla 셀 매직. iopub 메시지(stdout / display / error)를 Colab 으로 되돌린다 |
vla_colab_policy.py | meta 디바이스 + safetensors 텐서 단위 GPU 업로드 (CPU fp32 사본 회피) |
scripts/make_colab_nb.py 신규 | 빈칸본 → Colab 판 순수 변환 |
kernel.json 에 붙는 인자 3개(--IPKernelApp.kernel_class, extensions=[], extra_extensions=[])와 IPYTHONDIR 의 정체는 Colab 이 심어 둔 google.colab 확장 자동 로드를 막는 것입니다. 그 패키지는 3.10 venv 에 없습니다.
| # | 문제 | 수정 |
|---|---|---|
| 1 | env={**os.environ} 로 Colab 3.11 의 PYTHONPATH 가 3.10 커널로 샌다. activate.sh 가 PYTHONPATH 를 덧붙이므로 그대로 살아남는다 | 환경변수 8개 제거 후 전달 |
| 2 | 인라인 백엔드 미설정 → plt.show() 가 조용히 아무것도 안 그릴 위험 | connect() 에서 %matplotlib inline silent 실행 |
| 3 | kernel.json 을 두 번 쓰고 spec['env'] 를 통째 교체 | 한 번만 쓰고 병합 |
| 4 | GPU 없는 런타임에서 install.sh 중간까지 갔다 죽음 | nvidia-smi 선검사 + 메뉴 안내 |
| 5 | 커널 종료 수단 없음 | shutdown() |
| 6 | %%vla 셀마다 "이미 연결됨" 출력 (33회) | connect(quiet=True) |
| 7 | 가드 문구가 "커널 'VLA (강의)' 를 고르세요" — Colab 에선 커널을 고르지 않는다 | Colab 용 문구로 교체 |
| 8 | update_display_data 미처리, gradient_checkpointing 무조건 접근 | 처리 추가 / getattr |
| 9 | 배포 zip 에 Colab 파일 없음 | INCLUDE 에 노트북 + 모듈 3개 |
| 10 | README 에 Colab 안내 없음 | KO/EN 에 4-1 절 추가 |
vla-lecture 커널로11 PASS / 0 FAIL: 커널 기동, stdout 전달, 셀 간 변수 유지, plt.show() → image/png, 에러의 예외 전파, 에러 후 커널 생존, MUJOCO_GL=egl/CKPT_ROOT/sys.path 주입, vla_utils import, shutdown.
| colab 로더 | 표준 로더 | |
|---|---|---|
| 텐서 수 / 파라미터 | 813 / 4,143,404,816 | 813 / 4,143,404,816 |
| 로드 시간 | 11.4 s | 70.5 s |
| 최대 CPU RSS | 8.16 GB | 15.03 GB |
| GPU 할당 | 7.48 GB | 7.49 GB |
| 전 / 후처리 스텝 | 6 / 2 | 6 / 2 |
01_robot_loop_and_vla_colab.ipynb (KO/EN): 78 cells (md 42 / code 36), %%vla 33, 빈칸 6. EN 한글 0셀.nb1-code.zip 3,201,574 B · nb1-code-en.zip 3,194,923 B (각 68 files, +33 KB)./content/vla 로의 install.sh 완주(= sudo+apt 분기, 여태 한 번도 안 탄 경로), Colab IPython 설정 격리가 실제로 먹는지, T4 에서 bf16 이 도는지. 배포 전 Colab 무료 런타임 1회 완주(30~50분)가 필요합니다.nb1-code_chanhee/ 는 그대로 뒀습니다. README 의 한국어 띄어쓰기 정리는 반영하지 않았습니다 (사용자 확인 필요).vla_lecture/ 내부 주석 영어화 여부.사용자 질문: "실제 Colab 무료 런타임에서 한 번 돌려볼 수는 없어?" → 불가능합니다. 이 환경에는 브라우저도 구글 인증도 없고, 무료 Colab 런타임을 붙일 API 도 없습니다 (google.colab 모듈 없음, gcloud/colab CLI 없음). 대신 Colab 이 탈 경로 중 여기서 재현 가능한 것 두 개를 실제로 돌렸습니다.
이 클러스터는 sudo 가 없어 micromamba 분기만 검증돼 있었습니다. Colab 은 root + sudo 라 apt 분기를 탑니다. 로그인 노드의 DinD 사이드카로 Colab 과 같은 조건(ubuntu:22.04 · root · sudo 설치 · 가짜 nvidia-smi)을 만들어 진짜 install.sh 를 돌렸습니다. 의존성 9.2 GB 는 범위 밖이라 [2/6] 로그에서 중단했습니다.
-v 는 조용히 빈 디렉터리가 됩니다) → 코드를 tar 로 stdin 에 밀어 넣었습니다.sudo -n true OK → apt 분기 진입 → libEGL.so.1 / libGL.so.1 / libavcodec.so 셋 다 설치 확인. 시스템에 EGL ICD 가 없으므로 install.sh 가 /vla/sys/egl_vendor.d/10_nvidia.json 을 생성하는 것까지 확인.colab_setup.py 가 kernel.json 에 심는 argv 3개 + IPYTHONDIR 은 chanhee 원본에서 그대로 가져온 것이라 "왜 필요한지" 를 검증한 적이 없었습니다. 확인하다가 처음 두 번은 테스트가 틀렸습니다 — 적대적 설정을 JUPYTER_CONFIG_DIR 에 심었는데 커널이 멀쩡히 떴습니다.
IPKernelApp.config_file_paths 를 직접 찍어 보니 비어 있었습니다. IPKernelApp 은 BaseIPythonApplication 이라 설정을 Jupyter 설정 폴더가 아니라 IPython 프로필 폴더에서 읽습니다. 즉 Colab 설정의 진짜 관문은 JUPYTER_CONFIG_DIR 이 아니라 IPYTHONDIR 이고, colab_setup.py 의 IPYTHONDIR 지정이 핵심 장치입니다. argv 3개는 CLI 가 config 를 이기므로 붙이는 이중 안전장치입니다. 코드 주석을 이 사실에 맞게 고쳤습니다 (KO/EN).
적대적 설정을 IPYTHONDIR/profile_default/ipython_kernel_config.json 으로 옮기니 테스트가 의미를 갖게 됐습니다.
| 케이스 | 결과 |
|---|---|
| A. 적대적 설정 + 맨몸 커널 | 죽는다 — kernel_class ... could not be imported → Kernel died before replying to kernel_info |
| B. 같은 설정 + 격리 장치 | 뜬다 |
C. 적대 env 를 그대로 넘기면 PYTHONPATH 가 커널까지 새는가 | 샌다 (확인) |
C. _kernel_env 가 PYTHONPATH / IPYTHONDIR / JUPYTER_* 제거 | 제거됨 |
C. 걸러낸 env 로 커널 기동 + sys.path 에 가짜 경로 없음 | 확인 |
/content/vla 로의 install.sh 완주(여기서는 [1/6] 까지만 — 나머지 5단계는 이 클러스터에서 이미 통과), Colab 이 실제로 심어 두는 설정의 내용(위 테스트는 "같은 자리에 같은 방식으로 들어간 설정" 으로 모사), T4(sm_75) 에서 bf16 이 도는지.부품은 전부 검증됐고 조립만 미검증입니다. 배포 전 Colab 무료 런타임 1회 완주(30~50분)는 여전히 필요합니다.
피드백: "colab 에 띄우니까 기본 30~50이 처음에 걸리고, 이후에도 image 안보이고, 뭐 되게 별론데?"
노트북 마크다운이  처럼 상대경로를 참조합니다. 로컬 Jupyter 는 노트북 폴더를 HTTP 로 서빙하므로 보이지만, Colab 은 Drive 폴더를 파일로 서빙하지 않습니다. 8장 전부 깨집니다. Colab 판을 한 번도 열어 보지 않고 넘긴 것이 원인입니다.
make_colab_nb.py 가 마크다운 이미지를 data URI 로 노트북에 임베드합니다. KO/EN 각 8장, 남은 상대경로 0, base64 디코드 8/8 정상. 노트북 68 KB → 1.22 MB. 사용자가 확인하지 못했던 영상·그래프는 정답본 Colab 노트북(*_colab_solution.ipynb)을 새로 만들어 끝까지 돌려볼 수 있게 했습니다.받는 것은 의존성 9.2 GB + 에셋 9.5 GB + 체크포인트 7 GB + 데이터셋 1.8 GB ≈ 27.5 GB. 이 중 에셋이 압도적으로 낭비였습니다. Colab 무료 런타임은 vCPU 2개라 다운로드보다 수만 개 파일 압축 해제가 더 오래 걸립니다.
| # | 깨진 곳 | 원인 | 고친 방법 |
|---|---|---|---|
| 1 | arenas/empty_kitchen_arena.xml | robosuite 가 파이썬에서 ET.parse 로 직접 연다 — XML 의 file= 스캔에 안 잡힘 | arenas/scenes 무조건 포함 |
| 2 | fixtures/fixture_registry/wall.yaml | robocasa 가 open() 으로 읽는 설정 | 메시·텍스처를 뺀 비바이너리 전량(2,236 파일 14.8 MB) 포함 |
| 3 | objects/objaverse/milk/milk_0/...obj | 설계 오류: env 생성자가 관측 공간을 잡으려고 내부에서 한 번 더 reset() 하는데 그 씬을 안 봤다 | 강의의 결정적 접근 패턴을 그대로 재현 |
RoboCasa 는 reset 마다 방해 물체를 새로 뽑습니다. 24회 reset 을 돌려도 합집합이 수렴하지 않았습니다 (회당 +68~141 파일, 24회에 1.1 GB, objaverse 카테고리 48/81 종). 어떤 시드에서도 안전하게 만들려면 카테고리를 통째로 담아야 하는데 그러면 7.8 GB 라 9.5 GB 대비 1.7 GB 밖에 못 줄입니다.
대신 강의가 env 를 쓰는 방식은 결정적입니다. make_env(task, n_envs=N, seed=0) 이 하위 env i 를 seed 0+i 로 생성하고, reset(seed=0) 이 seed 0+i 로 리셋합니다. 그래서 i = 0..N-1 각각의 (생성 씬, 리셋 씬) 두 개씩만 담으면 정확히 커버됩니다. 노트북 N=2, verify N=8, 기본값 10 이므로 seed 0~11 을 담았습니다.
| 경량 팩 | 원본 | |
|---|---|---|
| 압축 | 788 MB | 3.7 GB (zip 4개) |
| 해제 후 | 1,325 MB · 5,056 파일 | 8,461 MB · 34,929 파일 |
| 검증 | seed 0~9 생성+reset 10/10 정상 렌더 (eye_in_hand std 25~79) | |
| 설치 총량 | 19.4 GB | 27.5 GB |
검증은 ~/vla 를 건드리지 않고 robocasa 패키지의 심볼릭 링크 사본에 경량 에셋만 얹어서 했습니다. VLA_SLIM_ASSETS=1 일 때만 쓰이고, colab_setup.py 가 이를 지정합니다. 로컬 설치의 기본값은 그대로 전체 에셋입니다.
VLA_N_ENVS 를 12 이상으로 올리면 팩에 없는 에셋을 찾을 수 있습니다. 그때는 VLA_SLIM_ASSETS 없이 다시 설치해야 합니다 (README·install.sh 주석에 명시). 데이터셋 1.8 GB 는 Part 4-2 의 dataloader 가 shuffle=True 라 아무 에피소드나 열 수 있어 트리밍하지 않았습니다.DAVIAN-Robotics/vla-lecture-env 에 올렸습니다 (787,849,918 B + manifest 312 kB). install.sh 와 같은 파이프라인(curl -sfL --retry 3 | tar xz)으로 실제 다운로드+해제까지 확인 — HTTP 200, 5,056 파일 / 1,274 MB, apple_0/model.xml·arenas·fixture_registry/wall.yaml 존재, generative_textures 없음(의도대로).