|
| 1 | +# 场景2: 基于 ModelEngine 下游任务训练 |
| 2 | + |
| 3 | +[[toc]] |
| 4 | + |
| 5 | +## 准备工作 |
| 6 | + |
| 7 | +### 准备医院数据 |
| 8 | + |
| 9 | +首先,需要获得医院病理系统 PIS 系统(病理科病例管理系统)和 MIS 系统(病理科影像管理系统)的连接和查询方式。DataMate 支持关系型数据库的表/视图查询,亦可以选择使用JSON数据格式的 RESTful API 接口进行查询。两种方法所需的连接和查询信息如下: |
| 10 | + |
| 11 | +1. 数据库查询: |
| 12 | + 1. 数据库连接URL、用户名(User)、密码(Password) |
| 13 | + 2. SQL查询语句(Query) |
| 14 | +2. API查询: |
| 15 | + 1. 接口地址(URL)、请求方式(GET/POST/) |
| 16 | + 2. 请求体参数(Body)、请求头参数(Header) |
| 17 | + 3. 数据解析(Schema) |
| 18 | + |
| 19 | +我们需要从 PIS 系统和 MIS 系统中获取的数据如下: |
| 20 | +1. 从PIS系统获取的数据:以病例为维度,病理号、病理报告、取材部位 |
| 21 | +2. 从MIS系统获取的数据:以数字病理切片为维度,病理号、病理切片号、数字切片路径、缩略图路径(当数字切片为SDPC格式时需要) |
| 22 | + |
| 23 | +### 准备 DataMate 工作环境 |
| 24 | + |
| 25 | +病理系统数据预处理算子准备:从 [DataMate-Ops](https://github.com/JasonW404-HW/DataMate-Ops) 下载 main 分支代码为 zip 文件,解压后将 patho_sys_preprocess/ 文件夹下所有内容,打包为 .zip 或 .tar 压缩包文件,确保压缩包名称为 patho_sys_preprocess.zip 。进入 DataMate - 算子市场 页面,将该算子上传到 DataMate 算子市场 中,并发布。 |
| 26 | + |
| 27 | +DataMate 运行环境变更:因为数字病理切片的文件体积较大,且数量较多,本最佳实践中采用的数据准备方式为文件软连接形式。即,数字病理切片及其缩略图并不会传输到 DataMate 的服务器或关联的存储中,而是通过将 医院病理系统图像存储 挂载到 DataMate 运行环境中,通过创建文件软链接进行关联管理的方法。因此,需要做如下环境变更操作: |
| 28 | + |
| 29 | +1. 在主机上完成对 医院病理系统图像存储 的挂载,建议挂载在 `/mnt` 目录下。注意,如果是多主机集群,请确保所有主机上都完成了挂载。 |
| 30 | +2. 修改 DataMate 安装部署配置,将 医院病理系统图像存储 在主机上的路径,挂载到 POD 中,并记录该存储在 POD 中的路径。需要挂载的 POD 包括:`datamate-backend`, `datamate-runtime`, `datamate-backend-python`, `label-studio`。 |
| 31 | + |
| 32 | +具体的操作步骤如下: |
| 33 | + |
| 34 | +医院病理图像存储在主机 `/mnt` 下的某个挂载点(例如 `/mnt/pathology`),需要以 `hostPath` 方式挂载到4个 POD 中。按照当前 Helm 配置架构,所有修改集中在如下文件中: |
| 35 | + |
| 36 | +- `deployment/helm/datamate/values.yaml`:控制backend、runtime、backend-python |
| 37 | +- `deployment/helm/label-studio/values.yaml`:控制 label-studio |
| 38 | +- `deployment/helm/label-studio/templates/deployment.yaml`:label-studio 的 deployment 模板(需要添加 hostPath volume 支持) |
| 39 | + |
| 40 | +1. 确认主机挂载点路径:在每个 Kubernetes 节点上确认病理图像的实际路径。假设实际路径为 `/mnt/pathology`,POD 内挂载路径统一使用 `/data/pathology`。 |
| 41 | + |
| 42 | + ```bash |
| 43 | + ls /mnt/pathology # 或 /mnt/wsi-images 等实际挂载点名称 |
| 44 | + ``` |
| 45 | +2. 修改 datamate 主 values.yaml: |
| 46 | +在 values.yaml 中,在顶部 YAML anchor 区域新增一个 hostPath volume anchor,然后分别追加到 backend、backend-python、runtime 的 volumes 和 volumeMounts 中: |
| 47 | + |
| 48 | + ```YAML |
| 49 | + # 在现有 operatorVolume anchor 后新增: |
| 50 | + pathologyVolume: &pathologyVolume |
| 51 | + name: pathology-volume |
| 52 | + hostPath: |
| 53 | + path: /mnt/pathology # ← 替换为实际主机路径 |
| 54 | + type: Directory |
| 55 | +
|
| 56 | + # 在 backend.volumes 中追加: |
| 57 | + backend: |
| 58 | + volumes: |
| 59 | + - *datasetVolume |
| 60 | + - *flowVolume |
| 61 | + - *logVolume |
| 62 | + - *operatorVolume |
| 63 | + - *pathologyVolume # ← 新增 |
| 64 | + volumeMounts: |
| 65 | + - name: dataset-volume |
| 66 | + mountPath: /dataset |
| 67 | + - name: flow-volume |
| 68 | + mountPath: /flow |
| 69 | + - name: log-volume |
| 70 | + mountPath: /var/log/datamate |
| 71 | + - name: operator-volume |
| 72 | + mountPath: /operators |
| 73 | + - name: pathology-volume # ← 新增 |
| 74 | + mountPath: /data/pathology |
| 75 | + readOnly: true # 建议只读,避免误操作 |
| 76 | +
|
| 77 | + # backend-python 和 runtime 同理追加相同两项 |
| 78 | + 第三步:修改 label-studio 的 values.yaml 和 deployment 模板 |
| 79 | + values.yaml 新增: |
| 80 | + YAML |
| 81 | + pathologyVolume: |
| 82 | + enabled: true |
| 83 | + hostPath: /mnt/pathology # ← 替换为实际主机路径 |
| 84 | + mountPath: /label-studio/local/pathology |
| 85 | + deployment.yaml 中追加: |
| 86 | + YAML |
| 87 | + # volumeMounts 区域追加: |
| 88 | + - name: pathology |
| 89 | + mountPath: /label-studio/local/pathology |
| 90 | + readOnly: true # 建议只读 |
| 91 | +
|
| 92 | + # volumes 区域追加: |
| 93 | + {{- if .Values.pathologyVolume.enabled }} |
| 94 | + - name: pathology |
| 95 | + hostPath: |
| 96 | + path: {{ .Values.pathologyVolume.hostPath }} |
| 97 | + type: Directory |
| 98 | + {{- end }} |
| 99 | + ``` |
| 100 | + |
| 101 | + 注意:label-studio 的 `LOCAL_FILES_DOCUMENT_ROOT` 已设为 `/label-studio/local`,病理图像放在其子目录 `/label-studio/local/pathology` 下,label-studio 可以直接通过 Local Storage 访问。 |
| 102 | + |
| 103 | +3. 确认各 POD 中的存储路径 |
| 104 | + |
| 105 | + |POD | 主机路径 | POD 内路径 | 权限 | |
| 106 | + |------------------------|----------------|-------------------------------|------| |
| 107 | + |datamate-backend | /mnt/pathology | /data/pathology | 只读 | |
| 108 | + |datamate-runtime | /mnt/pathology | /data/pathology | 只读 | |
| 109 | + |datamate-backend-python | /mnt/pathology | /data/pathology | 只读 | |
| 110 | + |label-studio | /mnt/pathology | /label-studio/local/pathology | 只读 | |
| 111 | + |
| 112 | +## 训练数据准备 |
| 113 | + |
| 114 | +### 数据归集 |
| 115 | + |
| 116 | +这一部分的操作目的,是为了将医院病理科业务系统中的数据,以结构化数据的形式,导入到 DataMate 中,便于后续处理和使用。 |
| 117 | + |
| 118 | +1. 进入 DataMate - 数据归集 页面,点击 创建任务 。 |
| 119 | +2. 填入任务名称(不影响任务执行),根据数据查询的方式,选择正确的归集模板: |
| 120 | + 1. 通过API查询:选择 API 归集模板 |
| 121 | + 2. 通过关系型数据库查询:选择 MySQL 归集模板 或 通用关系型数据库归集模板 。 |
| 122 | +3. 等待归集结束。进入 DataMate - 数据管理 页面,点击 创建数据集。 |
| 123 | +4. 填写数据集名称,选择合适的数据集类型(文本),关联 步骤 1-3 中创建并运行完成的数据归集任务。点击 确定,创建数据集。 |
| 124 | + |
| 125 | +> ‼️ **注意**:为了后续归集数据的清洗能正确执行,请对PIS系统和MIS系统分别设置归集任务,并将归集结果写入同一数据集中。 |
| 126 | + |
| 127 | +**预期结果**: 在对应数据集中,能看到两个 CSV 文件。 |
| 128 | + |
| 129 | +### 数据清洗 |
| 130 | + |
| 131 | +1. 进入 DataMate - 数据处理 页面,点击 创建模板 ,创建 “病理数据归集清洗流程” 模板。注意,该模板中仅需勾选一个“病理系统数据预处理”算子。保存并创建模板。 |
| 132 | +2. 进入 DataMate - 数据处理 页面,点击 创建任务 ,创建 “病理图片归集“任务。 |
| 133 | +3. 选择之前创建的“病理数据归集清洗”模板,创建清洗任务,等待清洗完成。 |
| 134 | + |
| 135 | +**预期结果**:在目标数据集“WSI归集”中,可以看到有若干 数字病理切片 和 数字病理切片的预览图 (如果有SDPC文件)。 |
| 136 | + |
| 137 | +> 至此,病理场景数据准备已经完成,您可以进入下一步 *模型训练* 。 |
| 138 | + |
| 139 | +## 模型训练 |
0 commit comments