# 对话记录

日期: 2025-02-14

用户要求我先阅读 `/home/anay/Dev/diffusion/mask-ddpm` 中的 MD 文档，并按照该文档说明来推进工作。同时，在该项目中新增一个 MD 文件用于记录我们的对话，方便后续 AI 了解上下文。

已阅读文档:
- `/home/anay/Dev/diffusion/mask-ddpm/TODO-FOR-AI.md`

当前状态:
- 完成了文档阅读。
- 已创建本对话记录文件。

后续记录:
- 已开始检查数据集。发现 HAI 的 CSV 文件是 Git LFS 指针文件，需要拉取真实内容；Modbus 数据集当前可见的 CSV 主要是攻击日志（字段如 Timestamp/TargetIP/Attack/TransactionID），其主体数据为 PCAP，需要额外特征提取。
- 已阅读 `/home/anay/Dev/diffusion/dataset/hai/README.md`。关键信息：HAI CSV 是时间序列特征数据，第一列为时间戳，后续为 SCADA 点位；末尾为攻击标签列；HAI 22.04 起使用 Git LFS 下载实际 CSV 内容。
- 用户尝试 `git lfs pull` 时遇到 LFS 配额超限（上游仓库配额不足），导致无法拉取 HAI 的真实 CSV 内容。
- 用户选择从 Kaggle 下载 HAI 数据集并手动放入本地目录。
- 在本地发现可读取的 HAI CSV 为 gzip 格式：`/home/anay/Dev/diffusion/dataset/hai/hai-20.07/*.csv.gz` 与 `/home/anay/Dev/diffusion/dataset/hai/hai-21.03/*.csv.gz`，列名包含大量 SCADA 点位与攻击标签列。
- 基于 `hai-21.03/train1.csv.gz` 前 5000 行的启发式统计，初步划分了离散/连续特征（离散多为开关、状态与攻击标签；连续为传感器/过程变量）。
- 在 `/home/anay/Dev/diffusion/mask-ddpm/example` 中创建了示例文件夹，包含 `analyze_hai21_03.py` 和结果输出（`results/feature_split.txt`、`results/summary.txt`）。
- 已补充示例代码与文档：`feature_split.json`、`hybrid_diffusion.py`、`train_stub.py`、`model_design.md`，并更新了 `/home/anay/Dev/diffusion/mask-ddpm/example/README.md`。
- 新增可运行脚本与数据准备：`data_utils.py`、`prepare_data.py`、`train.py`、`sample.py`，并修正 `train_stub.py` 以匹配新的离散掩码接口。
- 已运行 `prepare_data.py` 生成 `results/cont_stats.json` 与 `results/disc_vocab.json`（采样 50k 行）。
- 用户计划使用 conda 创建新环境并安装 GPU 版 PyTorch；建议环境名 `mask-ddpm`，Python 3.10，使用 cu121 安装源。
- 已运行 `example/train.py`（CPU 回退，CUDA 初始化警告），生成 `example/results/model.pt`；已运行 `example/sample.py` 得到采样张量形状 `(2, 64, 53)` 和 `(2, 64, 30)`，并将加载方式改为 `weights_only=True`。
- 已将 `train.py` 和 `sample.py` 改为自动选择 GPU（可用则使用，否则回退 CPU），并记录当前环境下 `/dev/nvidia*` 不存在导致 CUDA 不可用。
