360M 모델로 터미널 에뮬레이터 만들기
원제 WorldTUI: I trained a 360M model to pretend to be a terminal
169 포인트댓글 53

Key Point
시뮬레이션·에뮬레이션 구현 없이 자가 수정 학습과 병렬 디코딩으로 소형 모델을 브라우저에서 구동 가능한 터미널 에뮬레이터로 만든 기술 구현 사례로, 제약된 환경에서 큰 모델의 능력을 소형화하는 방법을 보여준다.
핵심 요약
- 360M 파라미터 언어 모델을 파인튜닝해 실제 쉘 없이 터미널처럼 동작하는 에뮬레이터를 개발했으며, 각 키 입력마다 모델이 화면 변화를 예측한다.
- 파일 생성, vim과 tmux 실행, 스네이크 게임 등이 가능하고, 자신의 실수를 수정하는 능력과 행(row)을 병렬로 디코딩하는 기술로 성능을 크게 개선했다.
- 터미널을 문자 그리드로 모델링했으며, Qwen2.5-Coder-0.5B를 기반으로 Docker에서 실제 프로그램 실행 기록으로 파인튜닝했다.
- 입력 크기, 콘텐츠, 커서 위치로 시작하는 스냅샷 형식을 사용하고, 각 키 입력을 원본 터미널의 바이트 그대로 입력으로 받으며, 모델이 수정할 행과 커서 위치를 출력한다.
- COPY 연산을 추가해 스크롤 비용을 토큰 96개에서 3개로 줄였으며, 전체 모델은 333개 토큰의 작은 어휘를 사용한다.
- Docker 컨테이너에서 실제 명령어를 실행해 336k 에피소드(약 2B 토큰) 학습 데이터를 생성했으며, 사용자명·호스트명·디렉토리를 무작위화하고 1.2% 오타율을 적용했다.
- DAgger 기법을 적용한 자가 수정 학습으로 ShellBench 점수를 24/47에서 38/47로 개선했으며, 모델이 자신의 실수를 감지하고 이전 화면에서 본 정보로 수정하도록 훈련했다.
- 행들이 독립적이므로 각 행마다 배치 요소를 할당해 병렬 생성하면 전체 행 길이(약 100 토큰)로 감소해 지연시간이 6.7초에서 0.87초로 단축됐으나, 행 간 조정 불가로 인한 오류 발생으로 추측 디코딩을 추가했다.
- 151,936개 토큰 어휘 중 필요한 333개만 사용해 임베딩 테이블을 축소한 후 int4 양자화로 모델을 494M에서 360M 파라미터, 716MB에서 208MB로 줄였으며 WebGPU를 통해 브라우저에서 실행된다.
- 메모리 테스트(두 값을 파일에 쓰고 별도 세션에서 읽기) 결과 WorldTUI는 64개 중 9개를 정확히 맞춘 반면, 프롬프트 기반 모델은 2~3개만 맞춰 일관성 유지 능력에서 우수하나 여전히 신뢰도가 낮다.
- RTX 4090에서 전체 훈련에 약 75 GPU 시간이 소요됐으며, M4 맥의 브라우저에서는 문자 입력이 약 60ms, man 명령 같은 큰 업데이트는 병렬 처리로 0.9초 정도 걸린다.
- 레이어 제거 실험에서 특정 레이어(1, 7, 15, 22)가 메모리 기능에 필수적임을 발견했으며, 16개 레이어 모델도 64/64 메모리 테스트를 통과했으나 셸 명령 정확도는 감소했다.
- vim의 모드 전환, tmux의 여러 창 관리, Python REPL(간단한 연산은 정확하나 복잡한 계산은 부정확), 환경변수 확장 등을 지원하지만, 중첩 디렉토리 생성 시 경로 혼동, Python의 복잡한 연산 오류, Firefox에서 20배 느린 성능 등의 한계가 있다.
- 실제 터미널 규칙을 구현하지 않고도 일관된 세계를 유지할 수 있는 약한 세계 모델을 성공적으로 만들었으며, 향후 확산 기반 디코딩이나 미지의 애플리케이션 동작 예측으로 개선할 계획이다.