Jev, Laya, 파인튜닝된 ModernCE 및 Qwen3.5에게 둠(Doom) 조종을 맡겨봤습니다
I gave Jev, Laya, finetuned ModernCE and Qwen3.5 the controls to Doom
핵심 요약
다양한 LLM 모델을 활용해 둠 게임을 플레이하게 한 실험 결과와 모델별 성능을 비교 분석했습니다.
- 모델별 둠 플레이 — Jev, Laya, ModernCE, Qwen3.5 모델이 둠을 조종함
- 실험 방식 — ViZDoom의 시각적 데이터를 텍스트로 변환해 모델이 행동을 결정함
- 성능 비교 — Jev가 킬 수에서 앞서지만, 로컬 모델들도 충분히 경쟁력 있는 성능을 보임
- 오픈 소스 지향 — 로컬 모델로도 충분히 구현 가능하며 오픈 웨이트 버전의 필요성이 제기됨

Jev, Laya, 파인튜닝된 ModernCE-base-nli, 그리고 파인튜닝된 Qwen3.5-4B한테 둠(Doom) 조종을 맡겨봤다. Jev 쓸 수 있게 해준 TypeSafe AI한테 감사.
영상은 같은 시드(seed)로 시작하는 네 개의 게임을 나란히 보여준다. 그 이후로는 각 모델이 내리는 행동에 따라 게임 상황이랑 다음에 보이는 화면이 달라짐. 영상에는 각 시나리오별로 모델당 하나씩 미리 고른 에피소드가 나오고, 화면에 행동 확률, 킬 수, 생존 시간이 표시된다.
-
입력: ViZDoom의 객체 라벨, 바운딩 박스, HUD 값(체력, 탄약)을 읽어오는 결정론적 파이썬 어댑터가 생성한 짧은 텍스트 설명.
-
출력: 버튼 액션 하나. 'Defend the Center'에서는 왼쪽, 오른쪽, 발사 중 하나고, 'Health Gathering'에서는 체력이 깎이는 동안 메디킷을 찾으러 왼쪽, 오른쪽, 앞으로 이동하는 식임.
각 로컬 모델이랑 게임은 NVIDIA GB10이랑 128GB 통합 메모리가 박힌 DGX Spark 한 대에서 돌렸다. Jev는 TypeSafe에서 호스팅하는 API를 썼음. ViZDoom은 320 × 240 해상도, 35Hz 게임 클럭으로 돌렸고 초당 5번 의사결정을 내리는 걸 목표로 잡았다. 모델이 응답하는 동안에도 게임은 계속 돌아감.
영상에 나온 깔끔한 장면 묘사를 바탕으로, 시나리오별로 시드 8개씩 돌린 평균 결과는 아래와 같다. 에피소드는 게임 시간 기준 30초로 제한함.
| Model | Mean Kills | Mean survival (s) | Call p50 (ms) | Call p95 (ms) |
|---|---|---|---|---|
| Jev 1.13 | 5.63 | 13.03 | 117.3 | 199.8 |
| Laya English | 1.25 | 11.89 | 16.2 | 17.1 |
| Finetuned ModernCE-base-nli | 1.25 | 11.66 | 7.6 | 8.8 |
| Finetuned Qwen3.5-4B (LoRA) | 3.63 | 11.31 | 146.8 | 150.9 |
호출 지연 시간(Call latency)은 12개의 공유 합성 둠 장면에서 요청부터 응답까지 걸린 시간이고, 모델당 48번씩 반복 측정했다. p50은 중앙값, p95는 95퍼센타일임. 로컬 모델 측정값에는 Spark 한 대에서의 루프백 HTTP 시간이 포함돼 있고, Jev는 호스팅 API 왕복 시간이 포함됨. 여기에 행동을 적용하면 컨트롤러랑 게임 틱 지연 시간이 추가된다. 이 모델들 중 이번 테스트를 위해 둠 관련 추가 학습을 받은 건 하나도 없음.


