| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 인공지능
- 자료구조
- 쿠버네티스
- Java
- MLOps
- db
- Linux
- Ai
- programmers
- Kubernetes
- Lv 2
- 코딩테스트
- 프로그래머스
- 리눅스
- mysql
- 파이썬
- LV 0
- Python
- docker
- 데이터베이스
- github
- 머신러닝
- 코테
- git
- 자바
- 우분투
- ubuntu
- DevOps
- 정처기
- 알고리즘
Archives
- Today
- Total
Myo-Kyeong Tech Blog
[MLOps] MLOps에서 모델 재현성 보장 : 모델 환경 통제하기 (RandomSeed, Library Version 고정) 본문
MLOps
[MLOps] MLOps에서 모델 재현성 보장 : 모델 환경 통제하기 (RandomSeed, Library Version 고정)
myo-kyeong 2025. 7. 14. 23:55728x90
반응형

같은 데이터를 넣었는데도 매번 다른 모델이 나온다?
MLOps에서 가장 골치 아픈 문제 중 하나는 바로 모델 재현성이다.
모델 재현성이 왜 중요한가?
- 모델 재현성이란?
- 같은 데이터를 사용하고, 같은 코드를 실행했을 때 언제나 같은 모델 결과가 만들어지는 것을 의미
- 하지만 같은 데이터를 쓰더라도 실행 환경(Environment) 이 조금이라도 달라지면 모델 결과가 달라진다.
[모델을 만드는 소프트웨어 4가지 요소]
- 데이터 (Data)
- 패키지 (Library / Package)
- 코드 (Code)
- 파라미터 (Parameter)
이 네 가지가 모두 동일해야 같은 모델을 재현할 수 있다.
그중에서도 특히 환경(Environment) 을 철저히 통제하지 않으면
=> 같은 데이터를 넣어도 서로 다른 모델이 만들어질 수 있다.
모델 환경 통제 ① - 랜덤 시드 고정
- 모델 학습 과정에서 랜덤시드 자주 사용
- 데이터 train/test 로 나눌 때
- 모델 초기 가중치를 설정할 떄
- 샘플링 과정 등
랜덤 시드를 고정하지 않으면
=> 같은 코드, 같은 데이터여도 실행할 때마다 모델 결과가 달라진다.
[예시① - 랜덤 시드를 고정하지 않은 경우]
예를 들어 Scikit-learn 에서 데이터를 분할 할 때:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
- 실행 할 때마다 무작위로 데이터를 섞어 나누므로
-> 매번 다른 train/test 데이터셋이 만들어진다.
-> 모델 학습 결과도 매번 달라진다.
[예시② -랜덤 시드를 고정한 경우]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=2025
)
- random_state 또는 random_seed를 설정
-> 언제 실행해도 같은 무작위 순서가 유지
-> 이제 실행할 때마다 같은 train/test 데이터셋이 생성
=> MLOps에서 재현성을 지키기 위해서는 난수(Randomness)가 반드시 통제되어야 한다!!
반응형
모델 환경 통제 ② - 라이브러리 버전 고정
- 모델 개발할 때, 사용하는 라이브러리(Library/Package) 들은 계속 업데이트가 된다.
-> 버전이 달라지면:- 함수 이름이나 사용법이 달라질 수 있고
- 내부 알고리즘이 바뀔 수 있고
- 심지어 같은 코드가 동작하지 않거나 다른 결과를 낼 수 있다.
[예시 ① - 라이브러리 버전을 고정하지 않은 경우]
예를 들어 과거에 작성한 코드가 이렇게 있었다고 해보자
import xgboost as xgb
model = xgb.XGBClassifier(use_label_encoder=False)
- 과거 버전(xgboost==0.90) 에서는 문제가 없지만
- 최신 버전(xgboost>=1.3) 부터는 use_label_encoder 옵션이 추가되었고, 경고가 발생한다.
=> 버전이 달라지면, 같은 코드가 오류를 내거나 다른 방식으로 동작할 수 있다.
=> 그래서 Docker로 버전을 명시해 환경을 통제하자
728x90
반응형
'MLOps' 카테고리의 다른 글
| [MLOps] MLOps 실험관리 : MLflow 설치 및 실행 (0) | 2025.08.16 |
|---|---|
| [MLOps] MLOps란? MLOps가 필요한 이유 (0) | 2025.07.09 |
| [Machine Learning] 머신러닝 디자인 패턴 : 특징 저장소 (Feature Store) (0) | 2024.04.22 |
| [Machine Learning] 머신러닝 디자인 패턴 : 특징 해시(Hashing Trick) (1) | 2024.03.31 |