에이전트가 "1,000달러어치를 팔라"는 지시를 1,000주 매도로 착각해 190,000달러짜리 사고를 냈는데 API는 200 OK를 30밀리초 만에 돌려줘 대시보드는 멀쩡했다는 사례로 시작함. 온도를 0으로 낮춰도 결정적이지 않은 이유를 부동소수점 연산·배치 불변성·MoE 라우팅까지 네 가지로 짚고, 발표자들이 만든 크로니클(Chronicle)이라는 도구로 노드 경계마다 입출력을 기록해 실패한 실행을 그대로 되감고 테스트 케이스로 재사용하는 법을 보여줌.
한줄 코멘트. 에이전트가 운영에서 망가지는 순간 잃는 것이 재현할 능력이라는 것이 이 발표의 붙잡는 자리다. 같은 입력에 늘 같은 결과가 나오게 만드는 일은 포기하고, 대신 그때 있었던 일을 그대로 되감을 수 있게 만들자는 쪽이다. 온도를 0으로 낮춰도 결정적이지 않은 이유를 넷으로 갈라 짚는 대목이 그 주장을 받친다.
조용히 틀린다
망가졌는데 아무 일도 없어 보인다
두 사람이 나와 발표한다. 문제를 세우는 사례가 첫머리에 나온다.
증권 주문을 낼 수 있는 에이전트에게 사용자가 1,000달러어치 주식을 팔아 달라고 말한다. 에이전트는 금액을 수량으로 바꾸는 계산을 하지 않고 숫자 1,000을 그대로 수량 칸에 넣는다. 1,000달러가 아니라 1,000주가 팔린다.
주당 190달러라면 19만 달러짜리 사고가 된다.
무서운 대목은 그다음이다. 응답은 30밀리초 만에 정상으로 돌아왔고 예외도 경보도 하나 없었다. 화면에서는 아무 일도 없어 보인다.
같은 것을 다시 돌려 보면 되지 않느냐는 물음에 발표가 답하는 자리다.
결정적이지 않은 네 가지 이유
| 이유 | 무슨 뜻인가 |
|---|---|
| 뽑는 방식이 결정적이어도 시스템은 아니다 | 모델이 고르는 방식만 굳혀서는 모자란다 |
| 소수점 계산의 순서가 결과를 바꾼다 | 같은 수를 더해도 묶는 순서에 따라 값이 달라진다 |
| 몇 개를 묶어 돌리느냐가 결과를 바꾼다 | 한 번에 처리한 양이 달라지면 값도 달라진다 |
| 어느 전문가로 보내느냐가 갈린다 | 여러 갈래로 나뉜 모델에서 가는 길이 달라진다 |
그래서 같은 결과를 다시 만들려 하지 말고 그때 있었던 일을 되감자는 것이 이 발표의 방향이다.
발표자들이 만든 도구는 마디마다 경계를 그어 두고 그 경계에서 드나든 것을 적는다.
시연에 쓴 것은 세 마디짜리다. 사용자 입력을 받는 계획 마디, 주문을 내는 도구, 답을 만들어 돌려주는 마디다. 셋 다 경계에 표시가 붙는다.
실제로 돌려 보이자 모델이 1,000을 수량으로 잘못 잡아 주문 도구를 불렀고, 도구는 그것을 그대로 실행했다.
전체 흐름은 일곱 걸음으로 정리한다. 표시하고, 기록하고, 눈에 보이게 만들고, 무슨 일인지 이해하고, 고치고, 다시 돌리고, 확인한다.
사고를 시험으로 바꾸는 순서
이 발표에서 가장 실용적인 대목이다. 남은 자취를 그냥 보는 데서 끝내지 않고 시험으로 바꾼다.
자취를 불러오고, 재생 모드를 켜고, 어떤 마디는 그때 값으로 굳혀 놓고 나머지는 실제로 돌린다. 모델을 부르는 자리는 굳히고 도구는 진짜로 돌리는 식이다. 그러고 나온 값이 맞는지 *단언을 건다.
그래야 같은 자리를 되풀이해 밟으면서도 고친 것이 정말 고쳐졌는지 볼 수 있다.
기록을 남기는 값이 없다. 마디마다 드나든 것을 다 적는 방식이라 기록량이 실행량을 따라 늘어나는데, 얼마나 쌓이고 얼마가 드는지가 나오지 않는다.
되감기가 얼마나 잘 맞는지도 없다. 굳혀 놓은 자리와 실제로 도는 자리를 섞는 방식이라 원래 사고와 완전히 같지는 않은데, 그 차이가 얼마나 되는지가 없다.
견줄 대상이 없다. 이 도구 없이 같은 사고를 쫓을 때와 견줘 무엇이 얼마나 빨라지는지가 나오지 않는다.
수치는 사고 사례 안의 것뿐이다. 30밀리초와 19만 달러는 그 이야기를 그리는 값이지 이 도구를 잰 값이 아니다. 자막이 이 대목의 숫자를 뭉개고 있어 정확한 표기는 원문에서 갈린다.
용어