체크포인트에 실제로 담아야 하는 것
체크포인트는 나중에 다시 불러올 수 있는 딕셔너리야. 모델 상태 사전, 옵티마이저 상태 사전, scheduler 상태 사전, GradScaler 상태 사전(혼합 정밀도를 쓴다면), 단계 번호, 에폭 번호, 설정을 담아야 해. 그래야 이 체크포인트로 무엇을 학습했는지 알 수 있어.
모델 상태 사전만 저장해도 추론에는 문제가 없지만, 학습을 재개하기에는 부족해. 옵티마이저와 scheduler에는 모델만으로 복원할 수 없는 이동 평균과 momentum이 들어 있거든.
팁: 옵티마이저도 항상 저장해. 누군가 '모델만' 불러와서 재개했다가 공들여 조정한 학습률이 0부터 다시 시작하는 모습을 정말 셀 수 없이 많이 봤어.
최적 체크포인트와 최신 체크포인트
최적 — 지금까지 검증 지표가 가장 높았던 체크포인트야. 배포할 때 사용해.
최신 — 지표와 관계없이 가장 최근에 저장한 체크포인트야. 중단 후 학습을 재개할 때 사용해.
둘 다 필요해. 최적은 운영을 위한 것이고, 최신은 엔지니어링을 위한 것이야. 서로 다른 파일명으로 저장해서 한쪽이 다른 쪽을 덮어쓰지하지 않게 해.
저장 위치
짧은 학습이라면 로컬 디스크에 저장해도 괜찮아. 여러 날에 걸친 실행이라면 노드가 죽어도 체크포인트가 남도록 S3 / GCS / 파일 서버에 저장해. 일부 학습 프레임워크(PyTorch Lightning, Composer, HF Trainer)는 이 작업을 대신 처리해 줘.
원칙: 체크포인트 저장은 보험이야. 학습이 80% 진행된 시점에 무언가 중단해서 GPU 시간 한 주를 날리지 않게 해 주는 가장 싼 일이야.