本项目覆盖实验一四大任务:
- 基准程序运行与理解
- 训练过程可视化
- 性能分析
- 综合实验(自定义 CNN + 自定义 Dataset + 变量控制实验)
建议在 Conda 或 venv 中安装依赖。
当前机器驱动是 CUDA 12.8,推荐先安装 PyTorch cu128 版本,再安装其余依赖:
python -m pip install --index-url https://download.pytorch.org/whl/cu128 torch==2.11.0+cu128 torchvision==0.26.0+cu128
python -m pip install -r requirements.txt环境验证:
python -c "import torch; print('torch=', torch.__version__); print('cuda=', torch.cuda.is_available())"python -m src.train_baseline --epochs 5 --batch-size 64 --device auto产物(在 outputs/reports 下):
- baseline_metrics_时间戳.csv:每个 epoch 的 train_loss、test_loss、test_acc、epoch_time_sec
- baseline_summary_时间戳.json:最终准确率、总训练时间、平均每轮时间
- baseline_model_时间戳.pt:模型参数
训练并写日志:
python -m src.train_with_tensorboard --epochs 5 --batch-size 64 --device auto启动 TensorBoard:
tensorboard --logdir outputs/logs可查看:
- loss/train
- loss/test
- acc/test
- time/epoch_sec
- 模型计算图(Graphs)
python -m src.profile_baseline --steps 50 --batch-size 64 --device auto产物(在 outputs/profiler 下):
- profiler_table_时间戳.txt:算子统计表
- top_ops_时间戳.csv:Top10 耗时操作
- profiler_summary_时间戳.json:路径索引
- trace_时间戳:可在 TensorBoard profile 插件打开
先把 MNIST 导出为目录结构数据集(训练时不再使用 torchvision 封装数据集类):
python -m src.prepare_custom_dataset --train-limit-per-class 1000 --test-limit-per-class 200导出目录结构:
- data/custom/train/0..9/*.png
- data/custom/test/0..9/*.png
python -m src.train_custom --epochs 10 --batch-size 64 --device auto说明:
- 模型为手写残差结构 SmallResNet(非调用现成 ResNet)
- 数据集类为自定义 CustomImageFolderDataset
- 训练过程包含 TensorBoard 曲线和模型图记录
python -m src.experiments.batch_size_study --batch-sizes 1 16 64 --epochs 3 --device auto产物:
- batch_size_study_时间戳.csv / json
字段包括:
- batch_size
- total_time_sec
- throughput_samples_per_sec
- final_test_acc
- final_test_loss
python -m src.experiments.cpu_gpu_compare --batch-size 64 --epochs 3若无 GPU,会自动只产出 CPU 结果;有 GPU 时会自动输出 CPU 与 CUDA 对比。
- 基线代码:src/train_baseline.py + src/models/baseline_cnn.py
- 每轮 loss 与最终 accuracy:baseline_metrics_*.csv
- 训练时间:baseline_summary_*.json
- TensorBoard 曲线与模型图:outputs/logs
- 性能分析 Top10:outputs/profiler/top_ops_*.csv
- 自定义 CNN:src/models/custom_cnn.py
- 自定义 Dataset:src/data/custom_image_dataset.py
- batch size 对比:batch_size_study_*.csv
- CPU/GPU 对比:cpu_gpu_compare_*.csv
- DataLoader 从磁盘或内存中按 batch 提供样本。
- 前向传播计算类别对数概率。
- 使用 NLLLoss 计算损失。
- 反向传播计算梯度。
- 优化器根据梯度更新参数。
- 每个 epoch 后在测试集评估,记录 loss、accuracy、耗时。
- 调度器更新学习率,提升后期收敛稳定性。