# dec03-final **Repository Path**: smartllm/dec03-final ## Basic Information - **Project Name**: dec03-final - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-15 - **Last Updated**: 2025-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 算力网络项目边侧节点 下载代码 ```bash git clone git@gitee.com:smartllm/dec03-final.git ``` ## 云侧节点服务部署 1. 下载代码 ```bash cd dec03-final-cloud ``` 2. 修改配置文件 修改 `config.yaml` 中的相关配置 3. docker部署 ```bash # 首先在国内源下载镜像 docker pull docker.1ms.run/library/python:3.11-slim # 进入docker目录 cd docker # 1. 构建镜像 ./docker-build.sh # 2. 运行容器 ./docker-run.sh # 3. 查看运行状态 ./docker-logs.sh # 4. 停止容器 ./docker-stop.sh ``` ## 边侧节点Docker部署 ### 1. 快速部署边侧服务 ```bash # 进入边侧节点目录 cd dec03-final-edge # 修改边侧config文件 vi config.yaml # 首先在国内源下载镜像 docker pull docker.1ms.run/library/python:3.11-slim # 进入docker目录 cd docker # 1. 构建镜像 ./docker-build.sh # 2. 运行容器 ./docker-run.sh # 3. 查看运行状态 ./docker-logs.sh # 4. 停止容器 ./docker-stop.sh ``` ### 2. 统一管理工具 ```bash # 使用交互式管理界面 cd dec03-final-edge/docker ./docker-manage.sh ``` ## 云边协同测试 1. 确保两个文件夹内的 IP 和 Port,可以互相通信 2. 将 `yolov8n.pt` 文件存放于`dec03-final-cloud/models/pretrained`目录下 3. 将 `2025-06-19` 文件夹存放于`dec03-final-edge/temp`目录下 4. 运行云侧模型容器,等待`10s`之后再运行边侧模型容器 5. 等待边侧容器运行后等待`10s`,观察边侧模型日志,查看是否注册成功、下载模型成功、推理完成 6. 完成后,运行集成测试 `python test_cloud_edge_integration.py` ``` sequenceDiagram participant F as 前端 Frontend participant C as 云侧 Cloud participant E as 边侧 Edge participant DB as 数据库 participant FS as 文件系统 %% 步骤0-3: 查询边侧节点和样本状况 F->>C: 1. 查询所有节点状态 C->>DB: 1.1 批量更新边侧节点状态 C->>E: 1.2 健康检查 (并行) E-->>C: 1.3 返回健康状态 C->>DB: 1.4 更新节点status字段 C->>E: 1.5 查询边侧样本信息 (并行) E-->>C: 1.6 返回样本统计信息 C-->>F: 1.7 返回所有节点概览 %% 步骤4-6: 样本归集和数据集创建 F->>C: 2. 发起样本归集请求 C->>DB: 2.1 验证节点和scenario C->>DB: 2.2 查询基础数据集 C->>E: 2.3 调用边侧样本聚合接口 E->>E: 2.4 筛选和打包样本 E->>C: 2.5 上传样本文件 C->>FS: 2.6 处理上传的样本文件 C->>DB: 2.7 创建新数据集记录 C->>FS: 2.8 创建数据集目录结构 C->>FS: 2.9 生成profile.yaml等配置文件 C-->>F: 2.10 返回归集结果和数据集信息 ``` ## 新增:云侧模型评测接口 ### 功能 - 指定数据集名称与使用样本数量等参数,对指定模型进行一次性评测(不修改原数据集与模型,仅输出评测指标和临时目录)。 ### 路由 - `POST /api/v1/models/{model_id}/evaluate` - `POST /api/v1/models/{model_id}/evaluate/preds-dir`(仅返回可视化目录绝对路径,如 preds2) - `GET /api/v1/evaluations/{eval_id}/{filename}`(下载/渲染可视化图片) - `GET /api/v1/evaluation-records`(分页查询评测记录) - `GET /api/v1/evaluation-records/{eval_id}`(按ID查询评测记录) ### 请求体 ```json { "dataset_name": "mini-test-001_c6c3c6dd", "max_samples": 200, "conf": 0.25, "iou": 0.7, "img_size": 640, "device": "cpu", "shuffle": true, "seed": 42 } ``` 字段说明: - dataset_name: 参与评测的数据集名称(或 dataset_id);要求该数据集已加载到数据库且 `datasets/` 下具备 `images/`、`labels/` 结构。 - max_samples: 评测使用样本的上限,默认 200。 - conf: 置信度阈值,默认 0.25。 - iou: IoU 阈值,默认 0.7。 - img_size: 输入尺寸,默认 640。 - device: 设备选择(cpu、cuda、cuda:0 等),默认 cpu。 - shuffle: 是否随机抽样,默认 true。 - seed: 随机种子(设定后抽样可复现)。 ### 响应体(/models/{id}/evaluate) ```json { "success": true, "message": "模型评测完成", "timestamp": "2025-09-15T10:00:00Z", "data": { "model_id": "<模型ID>", "model_name": "<模型名称>", "dataset_id": "<数据集ID>", "dataset_name": "<数据集名称>", "used_samples": 180, "metrics": { "map_50": 0.612, "map_95": 0.421, "precision": 0.78, "recall": 0.71, "f1_score": 0.744 }, "eval_dir": "/absolute/path/to/dec03-final-cloud/temp/eval_<...>", "preds_dir": "/absolute/path/to/dec03-final-cloud/temp/eval_<...>/preds2", "preds_subdir": "preds2", "predicted_images": [ { "filename": "val_batch0_pred.jpg", "image_url": "/api/v1/evaluations//val_batch0_pred.jpg" } ], "params": { /* 同请求参数回显 */ } } } ``` ### 使用示例(curl) ```bash curl -X POST "http://127.0.0.1:8000/api/v1/models/72e2f616-69eb-438c-b37e-6db2b5f8a391/evaluate" -H "Content-Type: application/json" -d '{ "dataset_name": "10_cls_600", "max_samples": 120, "device": "cpu" }' # 仅返回可视化目录(preds/preds2) curl -X POST "http://127.0.0.1:8000/api/v1/models/72e2f616-69eb-438c-b37e-6db2b5f8a391/evaluate/preds-dir" \ -H "Content-Type: application/json" \ -d '{ "dataset_name": "10_cls_600", "max_samples": 120 }' # 下载/渲染单张图片 # /api/v1/evaluations/{eval_id}/{filename} # 例:/api/v1/evaluations/eval_72e2..._10_cls_600_cb1e9/val_batch0_pred.jpg ``` ### 评测记录查询 - 列表查询: ```bash curl "http://127.0.0.1:8000/api/v1/evaluation-records?page=1&page_size=20" ``` - 按ID查询: ```bash curl "http://127.0.0.1:8000/api/v1/evaluation-records/" ``` ### 注意事项 - 评测会在 `dec03-final-cloud/temp` 下生成临时评测目录,不会修改源数据集。 - 若数据集 `profile.yaml`/`dataset.yaml` 未包含 `names`,将回退使用 `utils.DatasetUtils.get_class_names_from_dataset` 的默认类别。 - 若模型或数据集路径缺失,会返回 404/400 错误信息。 ### 边侧处理逻辑 1. 边侧自动检查 temp文件夹下是否存在 img 2. 边侧自动推理,然后放在 edge/datasets 中 3. 云侧请求边侧寻找未归集样本 4. 边侧从datasets文件夹中,把整个文件进行打包,返回压缩包路径 5. 云侧下载压缩包,解压,放入datasets中,构建为新的数据集,更新数据库 ## 前端构建 1. 切换分支至template 2. 修改nginx.conf中的 ```bash # 准备镜像 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/node:18-alpine docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.26.1-alpine # 编译并运行 docker build -t dec03-frontend:latest . docker run -d --name dec03-frontend -p 8081:80 dec03-frontend:latest docker save ... ```