자주 나는 실패
학습 컨테이너가 플랫폼에서 실패하는 흔한 원인과 조치
학습 단계
| 증상 | 원인 | 조치 |
|---|---|---|
시작하자마자 예외(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 나 지표의 step 이 없음 | mlflow.log_param("epochs", N) 추가 |
| 학습은 완료인데 모델 등록이 건너뛰어짐 | 가중치 파일만 아티팩트로 올리고 log_model() 을 안 부름 | mlflow.pyfunc.log_model(...) 로 로깅 |
| 학습 단계에서 실패, 로그에 데이터 관련 메시지 | 트레이너가 기대한 라벨 모양과 데이터셋이 다름(예: 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 <이름:태그> 로 다시 저장, linux/amd64 로 빌드, 한 파일에 한 이미지 |
| 변형 목록에서 고를 수 없음("이미지 없음") | 변형이 가리키는 이미지가 레지스트리에 없음 | 반입이 완료됐는지, 주소가 맞는지 확인 |
제출 거절(데이터셋 스테이저 변형이 없습니다) | 데이터를 스테이징할 이미지가 테넌트에 없음 | 운영자에게 스테이저 변형 게시(또는 공유)를 요청 |
| 제출 거절: 런타임 변형이 다른 프레임워크용 | 프레임워크가 지정된 변형을 다른 프레임워크 학습에 고름 | 외부 변형의 프레임워크를 비우거나(제한 없음) 맞는 변형을 고른다 |
학습 환경 준비 단계 실패(namespaces "tenant-…" not found) | 클러스터에 테넌트 네임스페이스가 없음 | 운영자가 tenant-<테넌트 코드 소문자> 네임스페이스를 만든다 |
| 학습이 엉뚱한 이미지로 돔 | 그 프레임워크의 기본 변형이 없어 "제한 없음" 기본 변형(외부 이미지)이 대신 쓰임 | 프레임워크별 기본 변형을 두거나 외부 변형에 프레임워크를 지정(마법사에서 고르게 하기 참고) |