DEV Community

finaltype
finaltype

Posted on Originally published at finaltype.github.io

"[2609] 공유계좌 실거래 확장과 GPU 이중화, 그 사이 측정 도구 자체의 결함들"

이번 달은 공유계좌로 실거래 범위를 넓히고 두 번째 그래픽카드로 처리 능력을 이중화하는 진전이 있었고, 그 과정에서 벤치마크·리포트·안전장치 같은 측정 도구 자체의 결함을 반복해서 찾아 고쳤습니다

9월은 원장 오염 사고로 시작해서 공유계좌 실거래 확장을 거쳐, 측정 도구 자체를 의심하는 흐름으로 이어지다가 GPU 이중화 시도와 그 실패로 마무리됐습니다.

원장이 또 오염됐고, 이번엔 증권사 데이터 자체가 원인이었다

첫째 주 초입에 모의계좌 검증 트랙의 라운드 하나가 흔적도 없이 통째로 빠지는 사고가 있었습니다.

원인을 파고드니 증권사 API가 체결 평균단가 값을 실제보다 훨씬 작게 보내고 있었고, 이 왜곡된 값이 원장에 쌓이면서 기준값 재설정 로직이 이를 자금 이동으로 오판해 킬스위치가 허위로 발동한 것이었습니다. 정정 과정은 다른 AI에게 미리 자문을 구해 순서와 검증값을 받아두는 방식으로 진행했고, 실제 결과는 그 자문이 예측한 값과 소수점까지 일치했습니다.

같은 주에 순위 산출 상주 프로세스가 코드 수정 후 재시작되지 않은 채 며칠째 구버전으로 돌던 것도 함께 드러났는데, "돌아가고는 있는데 아무것도 확인하지 않고 있었던" 유형의 문제가 이번 달 내내 반복될 조짐을 예고한 사고였습니다.

이 주 후반엔 검증 전용으로 그래픽카드를 한 장 더 들였습니다. 메인 프로덕션 카드를 바꾸려는 목적이 아니라, 검증 중인 로컬 모델을 완전히 분리된 환경에서 오프라인으로 돌려보기 위해서였습니다. 두 카드를 함께 써서 처리량을 끌어올리려는 시도는 실전 조건에서 오히려 손해로 드러나 폐기하고, 원래 쓰던 단순한 배분 방식으로 되돌아왔습니다.

공유계좌로 실거래를 넓히면서, 계좌 식별자 누락이 반복됐다

둘째 주의 핵심은 사람과 자동매매가 함께 쓰는 공유계좌로 실거래를 확대한 것이었습니다.

이 구조에서는 개인 자금과 봇 자금을 구분해서 매수 여력을 계산하고, 매도 시 개인 보유분을 건드리지 않는 판단이 새로 필요했습니다. 자금 이동도 실제 계좌이체가 아니라 원장상으로만 자동 환산하는 방식으로 설계했는데, 이 실계좌 주문 실행과 안전장치 설계(새 창)는 별도로 정리해뒀습니다.

이 주엔 같은 원인에서 나온 버그가 세 번 반복됐습니다. 계좌 식별자가 계좌별로 따로 관리되지 않고 하나로 공유되는 구조였던 탓에, 자금 환산이 조용히 멈추거나, 이미 옮긴 보유 종목을 다시 매도해버리거나, 모의검증 트랙의 값이 실계좌 킬스위치 기준에 섞여 들어가 허위로 큰 손실을 표시하는 사고가 연달아 났습니다. 셋 다 주말 전에 잡아냈습니다.

몇 주째 이어지던 GPU 인식 실패의 진짜 원인도 이 주에 밝혀졌습니다. 전력 절약 기능이 아니라, 화면 담당 프로세스가 죽었다 재시작되면서 다중 GPU 환경에서 접근 권한이 다른 시스템 계정으로 넘어가버리는 구조적 문제였고, 재부팅으로 검증까지 마쳤습니다.

측정 도구 자체의 결함을 연달아 찾았다

셋째 주는 "측정하는 도구가 측정 대상만큼이나 틀릴 수 있다"는 걸 반복해서 확인한 한 주였습니다.

월요일엔 외부 시세 데이터 제공처가 시가총액 값을 전부 빈 값으로 보내고 있었는데, 시스템이 이를 알아채지 못하고 원래 순서를 그대로 "시가총액 순위"로 착각해 처리했습니다. 소스·갱신·최종 확인의 3단계 방어를 새로 얹었습니다.

같은 주에는 계좌 이체 금액이 원금 계산에서는 빠지고 평가금액 계산에는 들어가 수익률이 부풀려 보이던 버그, 테스트 코드가 운영 텔레그램으로 알림을 스팸처럼 쏘던 버그, 증권사 조회가 일부만 실패해도 조용히 넘어가던 계약을 명시적 오류로 바꾼 작업이 함께 있었습니다.

수요일엔 AI 리포트 모델의 샘플링 설정이 몇 주째 잘못돼 있었다는 걸 발견했습니다. 이전 A/B 테스트에서 실험값이 서버까지 전달되지 않고 코드 단계에서 누락되고 있었고, 별도로 운영 중인 모드와 샘플링 기본값의 조합도 어긋나 있었습니다. AI 추천 파이프라인(새 창)의 합의 로직이 애초에 신뢰할 수 있는 입력을 받고 있었는지부터 다시 의심해야 하는 발견이었습니다.

금요일엔 새로 만든 성능 측정 도구 자체가 동시 처리된 시간을 순차 처리처럼 합산해 GPU 사용량을 실제보다 훨씬 크게 계산하고 있었고, 응답 대기시간을 너무 짧게 잡아 정상 처리 중인 요청을 실패로 오분류하고 있었다는 것도 드러났습니다. 이 오분류를 고치자 "더 느리다"고 판정했던 설정이 사실은 더 빨랐다는 걸로 순위 자체가 뒤집혔습니다.

사전등록한 규칙을 뒤집은 첫 사례

같은 주 주말엔 이틀에 걸친 온도(샘플링) A/B 실험 결과가 나왔는데, 방향은 뚜렷했지만 크기는 다른 AI의 재분석을 거쳐도 결론이 나지 않았습니다.

다음 날 저는 사전에 정해둔 판정 규칙이 "기각"이라고 말하는데도 그 결과를 뒤집기로 했습니다. 기존 설정이 애초에 검증된 기준값이 아니라 우연히 굳어진 기본값이었다는 점, 그리고 판정 기준 하나가 이 시스템에 맞지 않는 전제 위에 세워져 있었다는 점을 근거로 들었고, 이 전제를 새로 제시한 뒤에야 자문 AI의 권고도 "유지"로 바뀌었습니다.

번복 과정은 원래 규칙 문구, 규칙이 내린 실제 판정, 번복 사유, 승인 주체를 전부 문서로 남기고, 되돌릴 수 있는 재검토 시점을 못박는 방식으로 처리했습니다. 이후 이 실험에 썼던 입력 데이터 자체가 외부 소스 두 개가 조용히 죽어 있던 손상 데이터였다는 것도 추가로 드러나, 다음 재검토는 깨끗한 데이터로 다시 하기로 했습니다.

넷째 주, 안전장치를 겹겹이 쌓고 전제를 재검증했다

넷째 주엔 지난주 미봉책으로 끝났던 뉴스 수집 문제를 제대로 고쳤습니다. 야간 배치 실행 시각만 옮겼던 이전 수정은 수집 범위 자체가 거래일 기준에 묶여 있는 진짜 원인을 건드리지 못했다는 걸 외부 검토로 알게 됐고, 이번엔 수집 범위를 거래일 기준에서 완전히 떼어냈습니다.

로컬 추론 서버가 같은 토큰을 반복하며 멈추는 결함이 한 종목을 기본 등급으로 잘못 채점한 사고도 있었는데, 같은 날 감지·격리·복구까지 자동으로 처리하는 장치를 만들어 과거 로그 수천 건으로 오탐 없음을 검증했습니다. 반복 측정을 통해 재현성만 따로 확인하던 기존 장치는 샘플링 온도가 결과를 바꾼다는 게 이미 확인된 이상 의미가 없다고 판단해 이번 주에 퇴역시켰습니다.

마지막 주, GPU 이중화가 첫 실전에서 무너졌다가 복구됐다

dense27b 모델을 메인 프로덕션 모델로 전환하는 작업이 이번 주에 마무리됐고, 앞서 들였던 보조 그래픽카드는 별도 계열 모델을 병행 관측하는 백업 경로로 배선을 마쳤습니다.

배선 이틀째 밤, 이 백업 경로의 처리 슬롯 네 개가 한 시간 안에 전부 멈추는 사고가 났습니다. 전날 급하게 붙인 자가치유 로직은 거의 작동하지 않았고, 목표치의 절반도 못 채운 채 GPU가 몇 시간 방치됐습니다.

다음 날 원인을 다시 짚는 과정에서 두 번 오진단을 했습니다. 먼저 무관한 외부 데이터 오류를 의심했다가, 이후엔 전날 붙인 재시작 로직을 의심했지만 실제로는 발동조차 하지 않았던 것으로 확인됐습니다. 진짜 원인은 수동 재개 과정에서 정규장 시간대 GPU 자동차단 안전장치를 꺼두는 걸 잊은 것이었고, 이는 예전에도 한 번 겪었던 실수의 재발이었습니다.

이 사고를 계기로 슬롯 단위 자가치유만으로는 부족하다는 걸 확인하고, 슬롯이 다시 죽으면 서버 전체를 재시작으로 단계를 높이는 안전장치를 추가했습니다. 이후엔 재시도 없이 100종목 전체를 정상 처리하며 한 주를 마쳤습니다.

마지막 날엔 모의계좌 완전자동 검증 트랙(새 창)의 다른 계좌에서 장부대조 잔차가 "저절로 해소됐다"고 넘겼던 게 사실은 안전장치가 매매 자체를 막아버려 잔차가 줄어들 기회조차 없었던 것으로 드러났습니다. "경보가 조용해졌다"는 게 "문제가 해결됐다"를 뜻하지 않을 수 있다는 걸 다시 확인한 마무리였습니다.


9월을 관통한 건 두 갈래였습니다.

하나는 공유계좌 실거래 확장과 GPU 이중화라는, 눈에 보이는 전진이었습니다.

다른 하나는 그 전진을 뒷받침해야 할 측정 도구들 — 벤치마크의 시간 계산, 리포트의 샘플링 설정, 원장 재구성 로직 — 이 스스로도 틀릴 수 있다는 걸 반복해서 확인하고, 그때마다 도구 자체를 고쳐나간 과정이었습니다.

사전등록한 판정 규칙을 뒤집은 것도, GPU 이중화가 첫 실전에서 무너졌다가 복구된 것도 결국 같은 맥락이었습니다. 시스템이 내놓는 답뿐 아니라, 그 답을 만드는 측정과 판정의 틀 자체를 계속 의심해야 한다는 확인이 이번 달의 결론이었습니다.

Top comments (0)