Index
2026-09-18 — Engineering

Shared-static compositor oracle — 3회 GPU 시도가 loader → clip → translation 순으로 계층별 실패 (job 135927/136000/136025)

R2S | GPU oracle 3회 + CPU 진단 2회 | 모두 negative result로 보존, DROID fit 미승인

TL;DR

3
GPU oracle attempts
0
numerical PASS
19
CPU tests (final)
130.34s
gsplat JIT setup (136025)
2:30
136025 elapsed

1 배경 / 목적

Gaussian splat appearance를 native MuJoCo mesh와 합성하려면 (i) mesh depth 앞에 있는 Gaussian만 채택하고 (ii) actor/block 전경은 parent fallback을 그대로 유지하며 (iii) color/opacity 경로 gradient가 유효해야 한다. 이를 DROID fit 전에 synthetic fixture로 먼저 검증하는 one-oracle 계획(post-CAD handoff)이 승인되었다. 앞선 runtime smoke 134747은 nvcc 증거 누락으로 formal FAIL이었으므로 절대경로 compiler probe가 필수 조건이었다.

2 작업 내용

Fixture : 64×64, 2-Gaussian. 조건: centre depth가 mesh depth보다 1 mm 초과로 앞이면 채택, 1 mm tie band는 mesh 우선 Compositor : gsplat 1.5.3 contributor 순서(front-to-back) + PyTorch alpha/transmittance 재계산, 4-subpixel resolve Gradient : color/opacity value-path만 assert (contributor membership은 discrete → position 미검증) Runtime : .venv-gsplat (py3.11, Torch 2.7.1+cu128) + .venv-sim (py3.13, MuJoCo 3.3.7) native child /usr/local/cuda-12.8/bin/nvcc --version + gcc identity를 renderer import 전에 persist Job spec: --qos=own --gres=gpu:1 --cpus-per-gpu=8 --mem=32G --time=00:15:00 --export=NONE, image nvcr.io/nvidia/cuda@sha256:09d8951b… , fresh /tmp/$SLURM_JOB_ID cache Loader 수리: .venv-osmesa/runtime-overlay-jammy-20260918/ (inventory SHA-256 e1a3d209…) — 개인 additive overlay, worker/system 미변경

cutoff 특성: gsplat 1.5.3 CUDA path는 1/255 미만 contributor를 생략하고 next transmittance ≤ 1e-4일 때 종료 contributor를 생략할 수 있어, 두 cutoff를 고정·기록·테스트했다.

3 결과 (수치)

Job유형상태 / 시간실패 원인 및 증거
135927GPU oracle #1FAILED 1:0 / 3 s'NoneType' object has no attribute 'glGetError' (OSMesa import). stdout 비어 있음, complete/manifest/runtime/PNG 없음
135937CPU 진단 (1 CPU/1 GiB)COMPLETED / 1 sctypes.CDLL로 libOSMesa.so.8 로드 시 libedit.so.2 부재; ldd: libxml2.so.2 => not found. "PYOPENGL_PLATFORM 미설정" 가설은 철회(MuJoCo가 import 전에 설정)
135972CPU preflight (1 CPU/2 GiB)COMPLETED / 5 sunresolved loader dependency 0, absolute-path/SONAME CDLL 성공, MuJoCo 3.3.7/PyOpenGL OSMesaPlatform + glGetError import 성공 (context 생성·렌더는 미증명)
136000GPU oracle #2FAILED 1:0 / 5 snvcc 12.8.61, gcc 11.4.0 기록됨. XML znear .002 × extent 5 → float32 저장값 0.010000000474974513, 기대 0.01과 Δ 4.749745128e-10 > tol 1e-12 → native near-clip guard 거부
136025GPU oracle #3FAILED 1:0 / 2:30clip 수정(Decimal 비교 + float32 유도값 기록) 후 native·CUDA 호출 도달, composite_and_gradient stage translation self-check 실패. gsplat JIT 130.34 s. native evidence/NPZ/PNG/manifest/complete 없음
CPU 테스트 (main / independent)시점
10 pass (13.421 s / 17.349 s)135927 제출 전
15 pass (24.951 s / 19.041 s)136000 제출 전 (loader overlay 반영, checker가 실제 preflight dependency map 검증하도록 수정)
19 pass (31.964 s / 28.851 s)136025 제출 전 (native-clip 표현 규칙)
공통 사실: 세 GPU 시도 모두 numerical PASS·gradient contract·independent checker 검증이 없으며, 각각 one-attempt 계획에 따라 자동 재시도 없이 종료되었다.

4 Takeaway

의미

실패가 loader(135927) → native clip 표현(136000) → native translation(136025)로 한 계층씩 아래로 이동하며 각 layer가 독립 증거로 분리됐다. 특히 float32 clip mismatch는 epsilon을 임의로 키우지 않고 stored float32 field 또는 half-ULP 유도 bound로만 바꿔야 한다는 원칙을 남겼다. 반면 136025는 임시 arrays가 삭제되어 실패 국소화 자체가 불가능했고, 이는 후속 계획의 "assertion 전에 seal" 규칙의 직접 근거가 되었다.

5 Next Steps

미해결 한계

136025의 translation 실패 원인은 미확정(discard된 arrays 복구 불가). verifier는 아직 ideal exact clip 값을 요구해 producer/verifier의 단일 representation rule이 필요.

다음 작업

native-only 2-case CPU 진단으로 translation 불변성만 분리 (job 136150, 136204 → unlit native fixture 카드). DROID fit은 independent oracle PASS 전까지 승인 불가.