DEV Community

finaltype
finaltype

Posted on Originally published at finaltype.github.io

"[260917] 벤치마크 하네스 첫 검증 - 설정이 새는 지점을 하나씩 막았다"

어제 고친 모델 설정이 새로 만든 성능 측정 도구에는 하나도 안 들어가고 있었던 걸 발견해 하루 종일 하나씩 막았고, 11일째 방치돼 있던 안전장치 항목들도 오늘 전부 정리했습니다.

"어제 고친 설정, 새 도구에도 반영됐어?"

어제 AI 리포트용 모델들의 샘플링 설정을 바로잡았습니다.

오늘은 그 모델의 처리 속도를 측정하는 새 벤치마크 도구(perf-harness)의 첫 검증 실행을 준비하는 날이었습니다.

작업 도중 "어제 적용된 설정도 다 반영돼서 테스트가 도는 거 맞지?"라는 질문이 나왔습니다.

확인해보니 답은 "아니오"였습니다.

벤치마크 도구가 매 시행마다 새 임시 설정 객체를 최소한의 값만 채워서 만들고 있었고, 정작 어제 고친 값을 어디서도 참조하지 않고 있었습니다.

이 상태로 첫 검증을 돌렸다면, 검증 자체가 의미 없는 조건에서 실행될 뻔했습니다.

같은 유형의 누수가 세 군데서 더 나왔다

한 번 의심하고 나니 같은 문제가 연달아 나왔습니다.

벤치마크 요청이 서버를 새로 띄울 때 쓰는 시작 설정 값을 오히려 덮어쓰고 있던 경우, 그리고 실제 파이프라인을 그대로 재생하는 또 다른 측정 경로에서도 값이 안 실리고 있던 경우였습니다.

세 곳 모두 "값이 있으면 주입하고, 없으면 기존 방식을 유지한다"는 동일한 원칙으로 하나씩 고치고 테스트를 붙였습니다.

표본도 흔들리는 기준이었다

설계를 다시 들여다보다가 표본 방식 자체도 문제라는 게 보였습니다.

지금까지는 최근 7일치 실제 프롬프트를 매번 새로 뽑아서 썼는데, 이러면 몇 달치 벤치마크 기록을 비교할 때 "설정이 달라진 것"과 "표본이 달라진 것"이 서로 섞여버립니다.

그래서 특정 날짜의 표본을 하나 골라 고정 기준으로 저장해두고, 앞으로는 이 고정 표본으로 비교하기로 했습니다. 표본을 바꿔야 할 이유가 생기면 새 버전으로 명시적으로 갱신하는 방식입니다.

자동 실행 자체가 막혀 있었다

설정과 표본을 다 정리한 뒤 사람 개입 없이 도구를 자동으로 실행시키는 절차를 처음으로 시도했습니다.

첫 시도는 조용히 멈춰버렸습니다. 원인을 추적해보니, 자동 실행 절차가 명령어를 축약된 형태로 넘기면서 승인 대기 상태에 걸려 영원히 멈춰 있었던 것이었습니다.

사람이 지켜보고 있었다면 바로 승인해줬겠지만, 사람 개입 없이 도는 무인 실행이라 아무도 승인해줄 수 없는 구조였습니다.

이 축약이 그대로 실행됐어도 다른 문제가 있었을 걸로 보입니다. 축약된 명령어가 이 프로젝트 전용 환경이 아니라 시스템 기본 환경에서 실행되면서 필요한 구성요소를 못 찾았을 가능성이 높았습니다.

명령어를 축약될 여지가 없는 형태로 고정해서 해결했습니다.

이 과정에서 GPU를 예외적으로 더 쓸 수 있게 열어둔 시간대 하나가, 어제 고친 설정 버그가 아직 살아있던 기간에 등록된 것이었다는 사실도 함께 발견했습니다. 검증이 끝날 때까지 이 시간대는 임시로 닫아뒀습니다.

이 모든 걸 정리한 뒤에야 벤치마크가 실제로 첫 실행 단계를 통과했습니다. 다만 마침 진행 중이던 다른 작업과 자원이 겹쳐서 이번 실행은 뒤로 미뤄 다시 걸어두는 것으로 하루를 마무리했습니다.

11일째 방치돼 있던 안전장치 항목도 오늘 전부 정리

며칠 전 데이터 수집 관련 안전장치 문제를 하나 발견해서 AI에게 개선안을 자문받은 적이 있습니다.

그런데 정기 점검 중에, 그중 가장 급한 항목 하나만 반영되고 나머지는 11일째 그대로 방치돼 있었다는 걸 발견했습니다.

방치된 항목들을 다시 자문받아 현재도 유효한지부터 확인했습니다. 하나는 실제로 재발한 적이 있는 진짜 문제였고, 다른 하나는 이론상으로는 같은 유형이지만 실측해보니 실제로는 영향이 전혀 없는 걸로 확인됐습니다.

유효한 항목들을 오늘 안에 전부 반영했습니다. 엔진 자체가 죽은 경우와 외부 네트워크 문제를 구분해서 각각 다르게 대응하게 했고, 데이터 수집 중 문제가 생기면 조용히 다른 방법으로 넘어가는 대신 바로 실패로 알리게 바꿨습니다.

이 김에 테스트 코드가 실수로 운영 중인 프로세스를 건드리는 걸 원천 차단하는 안전장치도 함께 넣었습니다.

11일 동안 잊혔던 이유는 특별한 게 아니라, 자문받은 항목을 체계적으로 추적하는 절차가 없었기 때문입니다. 오늘은 전체 미완료 항목을 처음부터 끝까지 다시 훑어보는 점검도 같이 진행해서, 비슷하게 새어나간 게 더 없는지 확인했습니다.

앞으로

미뤄둔 벤치마크 첫 검증은 다음 자동 실행 시점에 다시 걸어뒀습니다.

이번에 자동 실행 명령어가 제대로 절대경로로 넘어가는지, 그리고 실제로 끝까지 완주하는지를 확인하는 게 다음 확인 과제입니다.

Top comments (0)