14.2.2 골든 데이터셋(Golden Dataset)의 버전 제어 (DVC, Git LFS 활용)
자동화된 CI/CD 파이프라인 투기장 안에서, 우리가 10장에 걸쳐 강박적으로 축조했던 압도적 규모의 ’골든 데이터셋(Golden Dataset)’은 오라클(Oracle) 심판관이 새로 푸시(Push) 된 AI 모델의 지능 퇴행(Regression) 여부를 채점하는 유일한 수능 기출문제이자, 결정론적 진실(Ground Truth)의 척도 그 자체다.
그러나 이 위대한 진리의 덩어리는 결코 가벼운 텍스트 코드 몇 줄이 아니다. 그것은 수만 장의 고해상도 재무 영수증 이미지, 뒤틀린 PDF 스캔본 문서, 그리고 테라바이트(TB) 급에 달하는 거대한 구조화 JSON 답변 파일들로 얽혀 있는 초대용량의 늪이다.
초보적인 MLOps 엔지니어가 이 거대한 수십 GB 크기의 데이터 홀더를 경량의 텍스트 버전 관리 툴인 Git 생태계에 무작정 git add . 명령어로 쑤셔 넣는 순간, 회사의 중앙 원격 레포지토리(Repository) 서버는 메모리 예외를 토하며 폭파되고, 동료 개발자들의 아침 출근길 git pull 명령 데이터 다운로드는 영원히 끝나지 않는 끔찍한 네트워크 마비 사태를 초래하게 된다.
1. 대용량 물리 데이터의 분리 독립 (Git LFS와 DVC의 투트랙 전략)
이 비극을 시스템적으로 피하기 위한 아키텍처 디자인 패턴은 분명하다. **“텍스트 코드는 Git이 관리하되, 무거운 데이터셋의 ’물리적 픽셀 실체’는 외부의 거대 블록 스토리지 공간(AWS S3, GCS 등)으로 유배(Offloading) 보내고, Git 에는 오직 그 거대 데이터의 ‘가상 위치 주소와 지문(Hash) 텍스트’ 만을 아주 가벼운 포인터(Pointer) 파일로 기록하는 이원화(Decoupling) 인프라”**를 구축하는 것이다.
이를 구현하는 양대 생태계 도구는 다음과 같이 전개된다.
- Git LFS (Large File Storage):
주로 수백 MB에 달하는 단일 멀티미디어 파일이나 오디오 에셋의 추적을 위해 GitHub가 공식 지원하는 플러그인이다. 설정이 간편하지만, 데이터 과학자들이 1만 개의 디렉터리로 쪼개진 데이터셋 폴더 전체의 복합적 버전을 스냅샷(Snapshot) 찍거나, 데이터 처리 파이프라인 그래프(DAG)를 코드로 형상 관리하는 복잡한 MLOps 씬과 결합하기에는 뼈대가 너무 경직되어 있는 한계가 존재한다. - DVC (Data Version Control):
현재 엔터프라이즈 AI 데이터 관리의 표준이자 지배자로 자리 잡은 오픈소스 도구다.
개발자들에게 친숙한 Git 명령어(예:dvc add data/,dvc commit) 구문을 그대로 복제하여 제공하면서도, 그 뒷단에서는 기가 막히게 무거운 수 테라바이트 데이터 덩어리들을 AWS S3나 로컬 네트워크 NAS 에 자동으로 병렬 업로드하고 은닉해 버린다. 그리고 내 로컬 Git 소스 코드 폴더에는 고작 1KB 크기밖에 안 되는data.dvc라는 매우 짧은 ‘MD5 해시(Hash) 주소 텍스트 파일’ 하나만을 예쁘게 떨어뜨려 놓는다.
2. Git 코드 타임라인과 DVC 데이터 타임라인의 영혼 동기화 (Soul-Binding)
골든 데이터셋 통합 제어 아키텍처의 가장 핵심적인 설계 철학은, 개발자의 ’프롬프트 소스 코드 버전(Git Commit)’과 그 코드를 잔인하게 테스트해야 할 ’문제집 데이터의 버전(DVC Hash)’이 언제나 한 쌍의 논리적 캡슐로 묶여 영구적으로 보존되어야 한다는 점이다.
- [장면 1 - 병렬 수정]: 백엔드 개발자 A가 신규 기능 추가를 위해 챗봇의 핵심 시스템 프롬프트를 1줄 새롭게 수정했다. (Git 소스 코드 변경 발생)
- [장면 2 - 데이터의 진화]: 완벽히 같은 시각, 데이터 엔지니어 B는 앞으로 있을 시각적 환각 테스트를 더욱 가혹하게 만들고자, 골든 데이터셋 딥 폴더 안에 화면이 절반쯤 찢어진 악조건 고해상도 이미지 1,000장을 새로 부어 넣었다. (
dvc add-> 데이터가 S3로 올라가고, 로컬의.dvc파일 내부 해시 문자열 값이 은밀하게 업데이트 됨) - [장면 3 - 운명적 병합(Binding)]: 개발자 A는 자신이 수정한
prompt.py파이썬 파일과 갱신된dataset.dvc포인터 텍스트 파일을 한 번에git commit하여, 이 두 변경 사항을 오직 “하나의 Git 해시 식별자” 밑으로 묶어서 중앙 브랜치에 사정없이 밀어 올린다.
[CI/CD 타임머신 폭발]: 이제 메인 CI/CD 컨테이너 러너(Runner)가 깨어난다. 젠킨스가 git checkout [특정_버전]을 수행하는 순간, 소스 코드뿐만 아니라 디렉터리에 놓인 1KB짜리 .dvc 추적 파일도 과거의 텍스트로 즉각 롤백된다. 뒤이어 컨테이너가 dvc pull 명령어를 치는 순간, 시스템은 그 1KB짜리 .dvc 파일 안에 적혀있던 해시 좌표를 들고 S3 클라우드로 달려가, 미래형 데이터는 쳐다보지도 않은 채 오직 프롬프트 코드가 묶여있던 ’그 시절, 정확히 그 타이밍의 10,000장짜리 과거 데이터셋 뭉치’만을 로컬 캐시로 끌어내려 복원해 낸다.
이 완벽한 시공간 동기화 메커니즘을 통해, 파이프라인 정중앙에 위치한 결정론적 오라클은 언제나 자신이 채점할 “그 시절의 프롬프트와, 그 시절의 정답 문제집“을 1비트의 오차도 없이 공급받는다. 어제와 오늘의 파이프라인 테스트가 완벽히 고립 통제된 실험 환경에서 멱등성(Idempotency) 있게 재상영됨을 수학적으로 증명해 내는 것, 그것이 DVC 아키텍처의 위대함이다.