Skip to content

【训练营】小模型训练支持 - #229

Open
AAekko wants to merge 1 commit into
InfiniTensor:masterfrom
AAekko:training-camp/mnist-cnn-support
Open

AAekko wants to merge 1 commit into
InfiniTensor:masterfrom
AAekko:training-camp/mnist-cnn-support

Conversation

@AAekko

@AAekko AAekko commented Sep 20, 2026

Copy link
Copy Markdown

InfiniTrain 原有 MNIST MLP 示例无法覆盖卷积训练。本 PR 增加 FP32 Conv2d、ReLU、Flatten 的 CPU/CUDA Forward/Backward,并将 Demo 升级为两层 CNN,完整接入数据加载、CrossEntropyLoss、Autograd、SGD、评估与 checkpoint。

MNIST 入口进一步复用框架 NCCL/DistributedDataParallel,支持单机一进程一卡、初始参数广播、确定性分片、bucket/逐参数梯度平均、全局加权指标和 rank 0 保存。保留相同大小的各卡训练尾批,评估集完整覆盖;训练结束校验所有卡参数完全一致。CPU/单卡默认行为保留。修复首次 GPU 数量查询的初始化,以及 NCCL_ROOT 未实际控制链接库的问题。

所有新增或修改源码均补齐直接标准库头文件依赖,并已使用仓库 .clang-format 与 CI 指定的 clang-format 16.0.6 格式化。最终 29 个变更 C/C++/CUDA 文件通过 --dry-run --Werror --style=filegit diff --cached --check 通过。

验证:

  • CNN/MNIST 单元测试 29 项通过、2 项共用前置校验按设计在 CUDA 下跳过;另有 2 项双进程 NCCL 集成测试通过。独立纯 CPU 构建的 8 项 MNIST 测试通过。
  • 2×RTX 5090,FP32、SGD lr=0.05、global batch=64、seed=42、3 epochs:CPU 97.88%,单卡 97.89%,双卡 97.87%。
  • InfiniTrain 单卡/DDP 与 PyTorch 单卡/DDP 连续三步对齐:1,680/1,680 项通过,最大绝对误差 5.0664e-7;378 项副本快照完全一致。
  • 两次 DDP 完整训练的非耗时指标与 checkpoint 完全一致,单卡/双卡 checkpoint 复验通过。
  • 不整除的小数据集、评估完整覆盖、world_size=1 与 launcher 失败传播实测通过。
  • 最终代码在 2×RTX 4090 D 上重新执行 CPU/CUDA 干净构建、上述单元测试与 DDP 测试、1,680 项数值对齐和完整训练;双卡最终 test loss=0.069685、accuracy=97.88%,单卡/双卡 checkpoint 复验通过。

复现命令见 docs/mnist_ddp.md。双 GPU CTest 由 BUILD_MNIST_DDP_TESTS=ON 显式启用;默认关闭以避免影响单 GPU 常规测试。本 Demo 的 DDP 范围为单机 FP32、普通 SGD。

PR 只包含功能代码、CMake、代表性测试、Demo 与文档。PyTorch 对齐代码、训练数据、大体积日志和 checkpoint 均在 PR 外随报告单独准备。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant