GIST CILab 인턴십 — IPCGRL 연구 참여 회고
2025년 1~2월, GIST CILab에서 약 두 달간 인턴십을 수행했습니다. IEEE CoG 2025에 Accept된 논문 IPCGRL의 저자 중 한 명으로 참여했습니다.
연구의 전체적인 배경과 결과는 Research — IPCGRL 페이지에서 확인할 수 있습니다. 이 글에서는 연구 내용보다는 인턴으로서 겪은 기술적 문제와 해결 과정에 집중하려 합니다.
왜 이 연구실에 갔나
2024년 말, PCG와 강화학습을 결합한 연구가 흥미로워서 지원했습니다. 특히 자연어를 게임 생성의 조건으로 사용한다는 아이디어가 “이게 실제로 될까?” 하는 궁금증을 불러일으켰습니다.
면접에서 연구실 교수님께서 던지신 질문이 기억납니다.
“이 연구에서 가장 어려운 부분이 뭔 것 같아요?”
당시에는 방법론 쪽을 예상했는데, 실제로 인턴십을 합류하고 보니 데이터가 가장 큰 문제였습니다.
첫 번째 문제: 숨어 있는 편향
인턴 첫 주에 받은 과제는 훈련 데이터의 분포를 분석하는 것이었습니다. 86K개의 상태 샘플과 대응하는 언어 지시를 살펴 보는 작업이었죠.
처음에는 그저 데이터를 정리하고 시각화하는 일상적인 작업이라고 생각했습니다. 하지만 맵 패턴의 시각화 결과를 보니 뭔가 이상했습니다. 특정 구조의 맵이 지나치게 많이 등장하는 거예요.
동전을 100번 던졌는데 70번이 앞면이 나온다면, 동전이 조작되었을 가능성을 의심하죠. 데이터도 마찬가지였습니다. 기준 모델 학습 중 수집된 데이터인데, 모델의 생성 특성이 데이터에 그대로 남아 있었던 것입니다.
이 훈련 데이터 편향을 팀에 공유했고, 이후 데이터 수집 시 샘플링 전략을 수정하는 데 참고 자료로 사용되었습니다.
두 번째 문제: 502GB의 괴수
데이터 전처리 파이프라인을 처음 실행했을 때 서버 모니터링 대시보드를 보고 깜짝 놀랐습니다. RAM 사용량이 502GB까지 치솟아 있었습니다.
서버의 물리 메모리가 512GB였기 때문에 스왑까지 쓰면서 간신히 돌아가고 있었죠. 한 번 실행에 2시간이 걸렸습니다. 하루에 실험을 세 번밖에 못 돌리는 상황이었습니다.
원인을 분석해 보니, 전처리 과정의 중간 결과물을 전부 메모리에 상주시키는 구조였습니다. NumPy 배열을 여러 번 복사하고, 사용이 끝난 배염도 해제하지 않은 채로 다음 단계로 넘어가고 있었습니다.
해결 과정
처음에는 단순히 gc.collect()를 넣거나 배열을 즉시 삭제하는 방식을 시도했습니다. 하지만 근본적인 문제는 아키텍처에 있었습니다.
기존 파이프라인은 다음과 같은 순서로 작동했습니다.
- 원본 데이터를 전부 메모리에 로드
- 전처리 A 적용 → 중간 결과 저장
- 전처리 B 적용 → 중간 결과 저장
- 전처리 C 적용 → 최종 출력
각 단계에서 메모리 사용량이 누적되면서 502GB에 도달했던 것입니다.
새로운 구조는 이렇게 바꿨습니다.
- 원본 데이터를 chunk 단위로 스트리밍
- 각 chunk에 전처리 A, B, C를 파이프라인으로 연결
- 중간 결과는 디스크에 임시 저장, 즉시 메모리 해제
- 최종 출력만 메모리에 유지
이 구조로 바꾸니 RAM 사용량이 150GB로 떨어졌습니다. 처리 시간도 1시간으로 단축되었습니다.
| 지표 | Before | After |
|---|---|---|
| RAM 사용량 | 502GB+ | 150GB |
| 처리 시간 | 2시간 | 1시간 |
하루에 실험을 네 번 돌릴 수 있게 되었습니다. 단순한 알고리즘 교체가 아니라 데이터 흐름 전체를 다시 설계한 작업이었습니다.
논문이 Accept되고 나서
IEEE CoG 2025 Accept 소식을 들었을 때는 인턴십이 끝난 지 한 달쯤 지난 시점이었습니다. 제 이름이 저자 목록에 올라가 있다는 사실 자첸 의미가 있었지만, 그보다 더 값진 건 연구 파이프라인의 병목을 직접 찾아내고 해결한 경험이었습니다.
좋은 알고리즘만큼이나, 좋은 데이터 파이프라인이 연구 속도를 결정한다는 걸 몸소 체감했습니다. 502GB라는 거대한 숫자를 다루면서 메모리 관리와 I/O 설계가 얼마나 중요한지 배웠고, 이 경험은 이후 다른 프로젝트에서도 큰 도움이 되고 있습니다.
참고 링크
- arXiv 논문: arxiv.org/abs/2503.12358
- 연구 상세 페이지: Research — IPCGRL