자주 발생하는 실패
학습 컨테이너가 플랫폼에서 실패하는 흔한 원인과 조치
학습 단계
| 증상 | 원인 | 조치 |
|---|---|---|
시작 직후 예외(active experiment ID does not match) | 트레이너가 mlflow.set_experiment() 를 직접 호출함 | 호출 삭제, 또는 os.environ["MLFLOW_EXPERIMENT_NAME"] 을 그대로 전달 |
| 학습 화면에 곡선이 표시되지 않음 | 지표를 print 로만 출력함, 또는 start_run() 을 두 번 호출해 다른 run 에 기록 | mlflow.log_metrics(..., step=epoch) 로 기록, run 은 하나만 |
| 진행률 막대가 표시되지 않음 | param epochs 가 없음 | mlflow.log_param("epochs", N) 추가 |
| 진행률과 곡선이 첫 점에서 멈춤 | log_metrics() 에 step 을 지정하지 않아 모든 값이 step 0 에 기록됨 | step=epoch 로 기록 |
| 학습은 완료되었지만 모델 버전이 생성되지 않음 | ⑪ 검토 단계에서 모델 레지스트리 등록 을 활성화하지 않음(기본 비활성화) | 등록을 활성화하고 제출. 완료된 학습은 상세의 모델 등록 으로 등록. |
| 모델 버전은 생성되었지만 서빙 이미지를 만들 수 없음(MLmodel 없음) | 가중치 파일만 아티팩트로 업로드하고 log_model() 을 호출하지 않음 | mlflow.pyfunc.log_model(...) 로 로깅 |
| 완료된 학습의 후처리 결과 에 "모델 평가 결과가 기록되지 않았습니다" | 모델 평가 실행 이 활성화되어 있지만(기본) eval/* 지표가 없음 | 평가를 지원하면 eval/<이름> 으로 기록, 아니면 마법사 ⑧ 에서 비활성화 |
학습 단계에서 실패, 사유가 메모리 부족(OOM)으로 종료되었습니다 로 시작(종료 코드 137) | 파드 메모리 상한(기본 64Gi)을 초과함 | 배치나 입력 크기 축소. 필요하면 운영자에게 메모리 상한이나 /dev/shm 조정 요청. |
| 학습 단계에서 실패, 로그에 데이터 관련 메시지 | 트레이너가 기대한 라벨 형식과 데이터셋이 다름(예: MNIST 예제는 meta.label 을 기대) | manifest.json 과 어노테이션 파일을 읽도록 수정(경로와 환경 변수 참고) |
| 진행 로그가 뒤늦게 일괄 표시됨 | 출력 버퍼링 | Dockerfile 에 ENV PYTHONUNBUFFERED=1 |
| 체크포인트 · 리포트가 삭제됨 | /geo/work 에만 저장 | mlflow.log_artifact() 로 업로드 |
서빙 단계 (학습 단계에서는 정상)
| 증상 | 원인 | 조치 |
|---|---|---|
| 추론 요청이 모두 실패 | signature 가 없어 입력이 float64 로 변환됨 | infer_signature() 로 서명을 생성해 전달 |
| 서빙 컨테이너가 기동되지 않음 | predictor.py 가 학습 코드를 import, 또는 시스템 패키지 누락 | predictor.py 가 학습 코드 없이 단독으로 실행되도록 수정, metadata.apt_packages 명시 |
| 체크포인트가 로드되지 않음 | pip_requirements 버전이 학습 환경과 다름 | 학습 환경 버전 그대로 고정, --env-manager virtualenv 로 검증 |
반입 · 실행 준비
| 증상 | 원인 | 조치 |
|---|---|---|
| 이미지 반입 거절 | 태그 없이 저장, 아키텍처 불일치, 아카이브에 이미지 여럿 | docker save <이름:태그> 로 다시 저장, 학습 노드 아키텍처로 빌드, 한 파일에 한 이미지 |
변형 목록에서 선택할 수 없음("이미지 없음"), 또는 제출 거절(학습 런타임 이미지 '…' 를 레지스트리에서 찾을 수 없습니다) | 변형이 가리키는 이미지가 레지스트리에 없음 | 반입이 완료되었는지, 주소가 올바른지 확인 |
제출 거절(데이터셋 스테이저 변형이 없습니다) | 데이터를 스테이징할 이미지가 테넌트에 없음 | 운영자에게 스테이저 변형 게시(또는 공유)를 요청 |
| 제출 거절: 런타임 변형이 다른 프레임워크용 | 프레임워크가 지정된 변형을 다른 프레임워크 학습에 선택함 | 외부 변형의 프레임워크 지정 해제(제한 없음), 또는 맞는 변형 선택 |
학습 환경 준비 단계 실패(namespaces "tenant-…" not found) | 클러스터에 테넌트 네임스페이스가 없음 | 운영자가 tenant-<테넌트 코드 소문자> 네임스페이스 생성 |
학습 환경 준비 단계 실패(이미지를 받지 못했습니다 — …) | 노드가 이미지를 내려받지 못함(외부 레지스트리 주소 오타, 접근 불가 등) | 줄표 뒤의 사유를 확인하고 주소와 접근 설정 수정 |
실패(파드가 15분 동안 시작되지 못했습니다 — …) | 파드를 배치할 노드가 없음(이미지 아키텍처에 맞는 노드나 GPU 여유가 없음 등) | 줄표 뒤의 사유를 운영자와 확인. 대기 한도는 서버 설정 GEO_MLOPS_TRAINING_POD_PENDING_TIMEOUT_S(기본 900초). |
| 학습이 의도하지 않은 이미지로 실행됨 | 테넌트 자기 변형에 그 프레임워크의 기본이 없어 "제한 없음" 기본 변형(외부 이미지)이 대신 사용됨. 공유받은 그 프레임워크 기본보다 우선. | 그 프레임워크의 자기 변형을 기본으로 지정하거나 외부 변형에 프레임워크를 지정(마법사에서 선택할 수 있도록 등록하기 참고) |