Quant Trading Bot Devlog

Read in English

[260712] 어제 "뒤집었다"던 결과, 오늘 다시 파보니 더 복잡했다

속도는 진짜 빨라졌는데 일관성이 흔들린다는 걸 알게 됐고, 그 와중에 전원 케이블 사고로 재부팅까지 겪었다

아직 오늘 하루가 다 안 끝났지만, 지금까지 진행된 내용을 정리해봅니다. 어제 얘기의 후속편 성격이 강한 하루였습니다.

어제 "뒤집었다"던 결과, 다시 파보니 더 복잡했다

어제 예전에 접어뒀던 병렬 처리 방식을 다시 꺼내서 속도가 꽤 빨라졌다고 적었는데, 오늘 더 깊이 파보니 이야기가 좀 더 복잡했습니다. 속도가 빨라진 건 맞습니다(다시 재봐도 확인됨). 그런데 같은 입력, 같은 설정으로 반복 실행했을 때 결과가 매번 조금씩 달라진다는 걸 발견했습니다.

처음엔 "동시에 여러 요청을 처리하다 보니 서로 간섭이 생기나?"라고 의심했습니다. 그런데 대조군을 만들어서 확인해보니, 동시 처리를 아예 안 하고 요청 하나만 반복 실행해도 결과가 조금씩 달라졌습니다. 범인이 동시 처리가 아니라, 그보다 더 근본적인 곳에 있었던 겁니다 — GPU에서 같은 계산을 여러 번 돌려도 부동소수점 연산 순서 같은 게 매번 완전히 똑같이 재현되진 않는다는, 원래 있던 문제였습니다. 동시 처리는 그 흔들림을 아주 조금 더 키우는 정도였지, 주범이 아니었던 거죠.

결론적으로 이 병렬 방식은 실제 채점에 쓰는 파이프라인에는 당분간 안 쓰기로 했습니다. 결과가 흔들리면 "어제와 오늘 판단이 다른 게 진짜 시장이 바뀐 건지, 그냥 계산이 흔들린 건지" 구분이 안 되기 때문입니다. 대신 이번에 새로 생긴 두 번째 그래픽카드를 활용해서, 완전히 독립된 두 계산을 나란히 돌려 흔들림 없이 속도만 얻는 방향으로 다시 틀었습니다. "어제 결론 냈던 걸 오늘 다시 뒤집는" 게 하루이틀 사이에도 일어날 수 있다는 걸 보여준 사례였습니다.

밤사이 전원 케이블 사고 + 재부팅이 알려준 버그

어젯밤엔 순전히 물리적인 사고도 하나 있었습니다 — 그래픽카드 전원 케이블이 헐거워지면서 컴퓨터가 갑자기 재부팅됐습니다. 다행히 백그라운드에서 자동으로 돌아야 하는 서비스들은 재부팅 후에도 알아서 다시 살아났고, 데이터베이스도 손상 없이 멀쩡했습니다.

다만 재부팅 직후에 미묘한 버그 하나를 발견했습니다. 컴퓨터가 켜지고 나서 네트워크가 아직 붙기 전인 짧은 순간에, 어제 소개했던 새 아카이빙 작업(과거 뉴스를 모으는 백그라운드 크롤러)이 하필 그 타이밍에 돌면서 "네트워크 연결 실패"를 "오늘은 수집할 뉴스가 없음"으로 잘못 해석해버렸습니다. 그대로 뒀으면 실제로는 아직 안 모은 며칠 치를 "다 모았다"고 착각하고 넘어갈 뻔했습니다. "네트워크가 잠깐 끊긴 것"과 "데이터가 진짜로 없는 것"을 구분하지 않은 게 원인이라, 재시도 로직과 함께 "재부팅 직후엔 네트워크가 붙을 때까지 기다렸다가 시작하라"는 안전장치를 추가했습니다.

그 밖에


오늘은 "어제 좋아졌다고 결론 낸 것"을 다시 의심하고 더 깊이 파보는 하루였습니다. 겉보기엔 같은 결론을 두 번 확인하는 것 같아도, 파고들 때마다 매번 새로운 게 나옵니다.