From 7b99da7251d23ceb9b3dfbb599e96dc00054e961 Mon Sep 17 00:00:00 2001 From: haotian <2421912570@qq.com> Date: Wed, 19 Feb 2025 18:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0--=E6=A8=A1=E5=9E=8B=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=96=B9=E6=B3=95=E6=B7=BB=E5=8A=A0=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/接口文档code.md | 20 ++++++- doc/时间计划.md | 1 + .../__pycache__/model_manager.cpython-39.pyc | Bin 5162 -> 6214 bytes function/model_manager.py | 56 ++++++++++++++++++ .../meta.yaml | 3 +- .../meta.yaml | 3 +- 6 files changed, 80 insertions(+), 3 deletions(-) diff --git a/doc/接口文档code.md b/doc/接口文档code.md index 377c60e..f2c2e0e 100644 --- a/doc/接口文档code.md +++ b/doc/接口文档code.md @@ -456,8 +456,26 @@ Response: } ``` -### 2.7 删除指定的训练好的模型. +### 2.7 删除指定的训练好的模型 +```http +DELETE /api/models/{run_id} +Response: +{ + "status": "success", + "message": "模型删除成功", + "details": { + "run_id": "7970364d490f4e0aa0375c2db26215f3", + "experiment_id": "656341556838275234", + "model_name": "XGBClassifier", + "deleted_artifacts": [ + "models/7970364d490f4e0aa0375c2db26215f3/model.pkl", + "models/7970364d490f4e0aa0375c2db26215f3/requirements.txt", + "models/7970364d490f4e0aa0375c2db26215f3/conda.yaml" + ] + } +} +``` ### 2.8 获取训练状态 ```http diff --git a/doc/时间计划.md b/doc/时间计划.md index 25b3ea8..0b4d44f 100644 --- a/doc/时间计划.md +++ b/doc/时间计划.md @@ -10,6 +10,7 @@ - 20250219~20250220 - [x] 实现模型训练和注册 完成 - [x] 实现获取已有模型 完成 +- [ ] 根据删除模型 - [ ] 根据已有模型加载模型预测 - 2天 diff --git a/function/__pycache__/model_manager.cpython-39.pyc b/function/__pycache__/model_manager.cpython-39.pyc index 94917a2e1e5ff5d93794cd8768a1de851e0c9cd4..16955e8da9b19858092667f078ad1e6306eb401b 100644 GIT binary patch delta 1998 zcmZuyU2GIp6rMXXyE{Ak(`}bhD^Ld^g@IBk55^QUCISkyRUzePBCbR4v~1bV;+p#k2%XW1! zkR2;G$P|e9iNKm>Cd8i!Y4l6-vRD&vj6-_ns=QPtt^Rk)FUyh9r9kZL3doUw9IKhs z?EKr&{?bO=*M;yHLMOmzWF$|moU>7nv$aU-28Se|J^mg_=+ zHS5Gti$Qs9*Xh<6R)A>$eR`TTpztKZ(+E!?@UOKUSI+_j(ujG29ef$(mkHVl$$oY8`U+{lwT+_`<)Q55g0RtKh3#n(a_F$g%qiQe0 z;$lADG*%L8SFH_n10ukK2b&GwXW(^y2N<35gkfQVcw~|kMNf3vDWRfAE(%n-BvH96 z?i2P1o;WNHOGU|*>z1-74~K@s6A>Ds;YqO=8WM_O?nyyUrLDrjR59X(C!$_tSe+z9 zcy&Kl$52fKSjQ(s8sUKyPl9k!FLY736h+?bQO(--&+-iBM`quZAGoL>2 zarf(QwE}(}Z9XEuntWIok$(G#oj-0D9tMlbSD)8|@x-(Z+U|l~(spd^)(UvvI<(64 z<$F_*7!c^PL#rJDt~~Zj0WVCAsrxxIUU~b9E-#FzK;z?zsR=W1H!N8a4U@U7<1Pf|?G?yJP4_U2f1Vb)fi^3_j-9xTw;k^|wbpTb z?!JgB3}Yzx4SAFS6r=NpGL#3)|L-lZ4&wEgygC6e4o*Zt6-7HvWKksQeI=|&DoIH) zNs*)!m)azeh@j!WKjpua81N*H%>B{UUi|maYue_J#X1)|*GV5#na@T1=Km13>q-Ak zQ)kZ-P_P6*AZ1~~hfw6l--n!hD4)-Kw`L< zcp))5SL2ZcPbM1<9zE#6c=ghQdhzIyt8reJ0BW25GVlN1%$xpaJ`KJtCbW254Djd7 z_HJda<7MJU`VNn1KqY!W4eCS<>8V#FJDjFb{>ErSOMnWx_*&2IyIdEMTTw^iwFhL zgXrZ@GcIU`WmuK6<7(iRU873X)PYDX-Iu&*mAYUoII6g;fyM(0j+)TSiVcSQsLFQ4 zzCwX7=tb&HJ;}9Q%`7k2E0zn#v0p3O6DcXOd1)(~=Yo=hBHouLy19=eMq*GS@u2Iv+0R^N6!9VoyB|@3RrsuF@iYw zosHIU02>Mw>bl(E0$p3C!0okMXS4w50CaFnD;a3S;5_0YVie(@))t(}Q zwBZJ(ZX%AFIg#GVlW8RczN0NX{Z}xd#MxeRX)=TJ;v8Pc;CCa8p}*f-s0j~k+k^)w x9 Dict: + """ + 删除指定的训练好的模型 + + Args: + run_id: MLflow运行ID + + Returns: + 删除操作的结果信息 + """ + try: + # 获取运行信息 + run = self.client.get_run(run_id) + if not run: + return { + 'status': 'error', + 'message': f'未找到运行ID为 {run_id} 的模型' + } + + # 获取实验ID + experiment_id = run.info.experiment_id + + # 获取模型信息 + run_data = mlflow.get_run(run_id) + model_name = run_data.data.params.get('algorithm', 'Unknown') + + # 获取工件列表 + artifacts = [] + for artifact in self.client.list_artifacts(run_id): + artifacts.append(artifact.path) + + # 删除运行记录 + self.client.delete_run(run_id) + + # 记录日志 + self.logger.info(f"已删除模型 - Run ID: {run_id}, 实验ID: {experiment_id}, 模型: {model_name}") + + return { + 'status': 'success', + 'message': '模型删除成功', + 'details': { + 'run_id': run_id, + 'experiment_id': experiment_id, + 'model_name': model_name, + 'deleted_artifacts': artifacts + } + } + + except Exception as e: + error_msg = f"删除模型时发生错误: {str(e)}" + self.logger.error(error_msg) return { 'status': 'error', 'message': error_msg diff --git a/mlruns/656341556838275234/7970364d490f4e0aa0375c2db26215f3/meta.yaml b/mlruns/656341556838275234/7970364d490f4e0aa0375c2db26215f3/meta.yaml index 10831c6..1592676 100644 --- a/mlruns/656341556838275234/7970364d490f4e0aa0375c2db26215f3/meta.yaml +++ b/mlruns/656341556838275234/7970364d490f4e0aa0375c2db26215f3/meta.yaml @@ -1,8 +1,9 @@ artifact_uri: mlflow-artifacts:/656341556838275234/7970364d490f4e0aa0375c2db26215f3/artifacts +deleted_time: 1739959968072 end_time: 1739954585256 entry_point_name: '' experiment_id: '656341556838275234' -lifecycle_stage: active +lifecycle_stage: deleted run_id: 7970364d490f4e0aa0375c2db26215f3 run_name: colorful-stoat-263 run_uuid: 7970364d490f4e0aa0375c2db26215f3 diff --git a/mlruns/656341556838275234/c88c5a1db98f49db9d8793ad19a08809/meta.yaml b/mlruns/656341556838275234/c88c5a1db98f49db9d8793ad19a08809/meta.yaml index c8fe105..a14add7 100644 --- a/mlruns/656341556838275234/c88c5a1db98f49db9d8793ad19a08809/meta.yaml +++ b/mlruns/656341556838275234/c88c5a1db98f49db9d8793ad19a08809/meta.yaml @@ -1,8 +1,9 @@ artifact_uri: mlflow-artifacts:/656341556838275234/c88c5a1db98f49db9d8793ad19a08809/artifacts +deleted_time: 1739959938908 end_time: 1739954359528 entry_point_name: '' experiment_id: '656341556838275234' -lifecycle_stage: active +lifecycle_stage: deleted run_id: c88c5a1db98f49db9d8793ad19a08809 run_name: thoughtful-hawk-675 run_uuid: c88c5a1db98f49db9d8793ad19a08809