자동 업데이트가 커널 모듈과 라이브러리 버전을 어긋나게 만들었는데, 재부팅부터 복구 확인까지 전부 자동화해서 넘겼습니다.
GPU가 갑자기 안 보이기 시작했다
저녁에 자동으로 걸린 시스템 업데이트 하나가 그래픽카드 드라이버를 새 버전으로 깔았습니다.
문제는 절반만 적용됐다는 겁니다. 디스크에 깔린 라이브러리는 새 버전인데, 커널에 이미 올라가 있는 모듈은 아침에 부팅할 때 올라온 옛 버전 그대로였습니다.
둘이 서로 다른 버전으로 엇갈리면서 GPU를 쓰는 작업이 전부 막혔습니다. 마침 진행 중이던 비교 실험 하나도 그 자리에서 멈췄습니다.
재부팅하면 디스크에 있는 새 버전으로 맞춰질 상황이었습니다. 다만 밤 사이 예정된 정규 작업과 겹치지 않을 시간을 골라야 했고, 재부팅으로 끊기는 가상머신이나 백업 작업이 없는지도 먼저 확인해야 했습니다.
재부팅 자체를 조건부로 걸어뒀다
바로 재부팅하지 않고, 안전한 조건이 맞을 때만 자동으로 재부팅하도록 예약을 걸었습니다.
가상머신이 꺼져 있고, 백업이 끝나 있고, 특정 시간대 이전이고, GPU를 쓰는 다른 작업이 겹치지 않는지를 모두 확인한 뒤에만 실행되는 조건이었습니다. 조건 하나라도 안 맞으면 재부팅 대신 알림만 보내고 사람 확인을 기다리게 해뒀습니다.
재부팅하면 지금 보고 있는 작업 세션 자체도 끊어집니다. 그래서 재부팅 이후에 할 일 — 드라이버 버전이 제대로 맞춰졌는지 확인하고, 멈췄던 실험을 이어서 재개하는 것까지 — 전부 사람 없이 이어지도록 미리 예약해 뒀습니다.
실제로는 예약된 자동 재부팅 시각보다 먼저 직접 재부팅을 했는데, 그래도 뒤에 걸어둔 확인·재개 절차가 그대로 작동해서 중복 재부팅 없이 깔끔하게 넘어갔습니다.
버전이 맞춰진 뒤에는 GPU를 쓰는 작업을 하나 실제로 돌려봐서 새 드라이버가 정상인지 확인했고, 멈췄던 실험도 다시 이어졌습니다.
전체 구성도를 처음으로 그려봤다
같은 날, 이 프로젝트(새 창) 전체가 어떤 순서로 돈을 움직이고 어떤 장치들이 지키고 있는지를 한 장의 구성도로 처음 정리했습니다.
여러 달에 걸쳐 조각조각 만들어온 구조라, 전체를 한 눈에 보는 그림이 그동안 없었습니다.
이 구성도를 AI에게 통째로 검토시켜서, 지금까지 놓치고 있던 감시 공백이 있는지 찾아달라고 했습니다.
몇 가지가 나왔습니다. 예를 들어 특정 사전 계산이 실패했을 때 조용히 다른 경로로 넘어가는 지점이 있는데, 이때 아무 기록도 알림도 남지 않는 구조였습니다. 실패 자체는 드물지만, 실패했을 때 그걸 알아챌 방법이 없다는 게 문제였습니다.
외부 시세를 가져오는 경로 하나가 대체 경로 없이 단일 경로에만 의존하고 있다는 점, 백업은 매일 돌지만 실제로 복원해본 적은 한 번도 없다는 점도 같이 나왔습니다.
당장 고치는 대신, 우선순위를 매겨 할 일 목록에 등재해두고 하나씩 순서대로 처리하기로 했습니다.
왜 중요한가
오늘 GPU 사고는 원인을 찾는 데는 오래 걸리지 않았지만, 복구 과정에서 사람이 자리를 비워도 되게 만든 게 핵심이었습니다.
조건을 안전하게 걸어두고, 재부팅 뒤에 할 확인·재개까지 미리 예약해두는 식으로요. 밤에 예정된 정규 작업까지 이어지는 시간이라 이 부분이 특히 중요했습니다.
전체 구성도를 처음 그려본 것도 비슷한 맥락입니다. 조각조각 알고 있던 구조를 한 장으로 모아보니, 평소에는 안 보이던 감시 공백이 눈에 들어왔습니다.
하나씩 순서대로 메워나갈 예정입니다.
Top comments (0)