From 6284403995d02a609c9bf3966b0fd005b2cfdd49 Mon Sep 17 00:00:00 2001 From: simGPT Date: Sun, 31 May 2026 17:23:32 +0900 Subject: [PATCH] =?UTF-8?q?:recycle:Refactor:=20MLflow=20=EB=AA=A8?= =?UTF-8?q?=EB=8D=B8=20=EB=B2=84=EC=A0=84=20=EA=B4=80=EB=A6=AC=20MLflow=20?= =?UTF-8?q?=EB=82=B4=EC=9E=A5=20=EB=B2=84=EC=A0=84=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- k8s/model-api/base/deployment.yaml | 2 -- services/model-api/app/models/loader.py | 12 ++++++------ services/model-api/app/services/churn_service.py | 4 +--- services/model-api/app/services/mnist_service.py | 6 ++---- services/model-api/training/churn/train.py | 2 +- 5 files changed, 10 insertions(+), 16 deletions(-) diff --git a/k8s/model-api/base/deployment.yaml b/k8s/model-api/base/deployment.yaml index ba274c5..699ee62 100644 --- a/k8s/model-api/base/deployment.yaml +++ b/k8s/model-api/base/deployment.yaml @@ -32,8 +32,6 @@ spec: key: secret-access-key - name: AWS_DEFAULT_REGION value: ap-northeast-2 - - name: CHURN_MODEL_VERSION # 모델 버전 추가 - value: "v5" resources: requests: cpu: "250m" diff --git a/services/model-api/app/models/loader.py b/services/model-api/app/models/loader.py index e0f5549..c2fbd60 100644 --- a/services/model-api/app/models/loader.py +++ b/services/model-api/app/models/loader.py @@ -6,15 +6,15 @@ _model_cache: dict = {} # mlflow에서 mnist 모델 로드하는 함수 -def load_model(model_name: str, version: str): - cache_key = f"{model_name}_{version}" +def load_model(model_name: str): + cache_key = model_name if cache_key in _model_cache: return _model_cache[cache_key] mlflow_uri = os.getenv("MLFLOW_TRACKING_URI", "http://mlflow:5000") # 환경변수에서 mlflow tracking uri 가져오기, 없으면 기본값으로 http://mlflow:5000 사용 mlflow.set_tracking_uri(mlflow_uri) - model_uri = f"models:/{model_name}-{version}/latest" + model_uri = f"models:/{model_name}/latest" model = mlflow.pytorch.load_model(model_uri) model.eval() @@ -22,15 +22,15 @@ def load_model(model_name: str, version: str): return model # mlflow에서 고객 이탈 예측 모델 로드하는 함수 -def load_churn_model(model_name: str, version: str): - cache_key = f"{model_name}_{version}_sklearn" +def load_churn_model(model_name: str): + cache_key = f"{model_name}_sklearn" if cache_key in _model_cache: return _model_cache[cache_key] mlflow_uri = os.getenv("MLFLOW_TRACKING_URI", "http://mlflow:5000") mlflow.set_tracking_uri(mlflow_uri) - model_uri = f"models:/{model_name}-{version}/latest" + model_uri = f"models:/{model_name}/latest" model = mlflow.sklearn.load_model(model_uri) _model_cache[cache_key] = model diff --git a/services/model-api/app/services/churn_service.py b/services/model-api/app/services/churn_service.py index e874c77..b3e7ef4 100644 --- a/services/model-api/app/services/churn_service.py +++ b/services/model-api/app/services/churn_service.py @@ -6,7 +6,6 @@ from prometheus_client import Counter, Histogram MODEL_NAME = "churn" -MODEL_VERSION = os.getenv("CHURN_MODEL_VERSION", "v5") FEATURES = [ 'account_age_months', @@ -36,7 +35,7 @@ def predict(data: dict) -> dict: if missing: raise ValueError(f"누락된 피처: {missing}") - model = load_churn_model(MODEL_NAME, MODEL_VERSION) + model = load_churn_model(MODEL_NAME) x = [[data[f] for f in FEATURES]] @@ -58,7 +57,6 @@ def predict(data: dict) -> dict: }, "metadata": { "model": MODEL_NAME, - "version": MODEL_VERSION, "inference_time_ms": time_ms, "timestamp": datetime.now(timezone.utc).isoformat(), }, diff --git a/services/model-api/app/services/mnist_service.py b/services/model-api/app/services/mnist_service.py index 5c112fb..507ddda 100644 --- a/services/model-api/app/services/mnist_service.py +++ b/services/model-api/app/services/mnist_service.py @@ -7,8 +7,7 @@ MODEL_NAME = "mnist" -MODEL_VERSION = "v1" - + prediction_counter = Counter( "mnist_predictions_total", "예측 횟수", @@ -26,7 +25,7 @@ def predict(data: dict) -> dict: if pixels is None or len(pixels) != 784: raise ValueError(f"pixels 필드에 784개의 값이 필요합니다. 길이 오류: {len(pixels)}") - model = load_model(MODEL_NAME, MODEL_VERSION) + model = load_model(MODEL_NAME) start = time.time() with torch.no_grad(): @@ -48,7 +47,6 @@ def predict(data: dict) -> dict: }, "metadata": { "model": MODEL_NAME, - "version": MODEL_VERSION, "inference_time_ms": time_ms, "timestamp": datetime.now(timezone.utc).isoformat(), }, diff --git a/services/model-api/training/churn/train.py b/services/model-api/training/churn/train.py index fa1190b..dfd190e 100644 --- a/services/model-api/training/churn/train.py +++ b/services/model-api/training/churn/train.py @@ -49,7 +49,7 @@ def main(args): mlflow.sklearn.log_model( model, artifact_path="model", - registered_model_name=f"churn-{args.version}", + registered_model_name="churn", ) print(f"valid_f1 : {val_metrics['f1']:.4f}")