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 94917a2..16955e8 100644 Binary files a/function/__pycache__/model_manager.cpython-39.pyc and b/function/__pycache__/model_manager.cpython-39.pyc differ diff --git a/function/model_manager.py b/function/model_manager.py index d9e1afd..7abc74c 100644 --- a/function/model_manager.py +++ b/function/model_manager.py @@ -210,6 +210,62 @@ class ModelManager: except Exception as e: error_msg = f"Error getting experiments: {str(e)}" self.logger.error(error_msg) + return { + 'status': 'error', + 'message': error_msg + } + + def delete_model(self, run_id: str) -> 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