# 如何在启智平台上进行模型训练 - GCU版本 - 启智集群单数据集的训练,启智集群多数据集的训练,智算集群的单数据集训练,这3个的训练使用方式不同,请注意区分。数据加载方式、模型定义逻辑大致同[手写数字识别GPU版本_PytorchExample](https://openi.pcl.ac.cn/OpenIOSSG/MNIST_PytorchExample_GPU)项目: - 智算集群单数据集的训练示例请参考示例中[train_for_c2net.py](https://openi.pcl.ac.cn/OpenIOSSG/MNIST_PytorchExample_GCU/src/branch/master/train_for_c2net.py)的代码注释 - 智算集群中单/多数据集使用方式: 如本示例中数据集MNISTDataset_torch.zip的使用方式是:数据集位于/tmp/dataset/下 ## 1 概述 - 本项目以#LeNet5-MNIST-PyTorch为例,简要介绍如何在启智AI协同平台上使用GCU集群+Pytorch完成训练任务,旨在为AI开发者提供启智训练示例。 - 用户可以直接使用提供的[MNIST数据集](https://git.openi.org.cn/OpenIOSSG/MNIST_PytorchExample_GPU/datasets?type=0), 和代码文件创建自己的训练任务。 ## 2 准备工作 - 启智平台使用准备,本项目需要用户创建启智平台账户,克隆代码到自己的账户,上传数据集,具体操作方法可以通过访问[OpenI_Learning](https://openi.pcl.ac.cn/zeizei/OpenI_Learning)项目学习小白训练营系列课程进行学习。 ### 2.1 数据准备 #### 数据集获取 - 如果你需要试运行本示例,则无需再次上传数据集,因为示例中的数据集MnistDataset_torch.zip已经设置为公开数据集,可以直接引用。 - 数据文件说明 - MNISTData数据集是由10类28∗28的灰度图片组成,训练数据集包含60000张图片,测试数据集包含10000张图片。 #### 数据集上传 使用GCU进行训练,使用的框架为Pytorch,上传和使用数据集的格式和GPU保存一致,可传到数据集-GPU界面。(此步骤在本示例中不需要,可直接选择公开数据集MNISTDataset_torch.zip) ### 2.2 执行脚本准备 #### 示例代码 - 示例代码可从本仓库中下载,[代码下载](https://openi.pcl.ac.cn/OpenIOSSG/MNIST_PytorchExample_GCU) - 代码文件说明 - [train_for_c2net.py](https://openi.pcl.ac.cn/OpenIOSSG/MNIST_PytorchExample_GCU/src/branch/master/train_for_c2net.py),用于智算网络训练的脚本文件。 - [model.py](https://openi.pcl.ac.cn/OpenIOSSG/MNIST_PytorchExample_GCU/src/branch/master/model.py),使用的训练网络,在单/多数据集训练,智算网络训练中使用到。 #### 【重点】GCU-Pytorch代码适配 - GCU初始化 ``` def is_torch_dtu_available(): if importlib.util.find_spec("torch_dtu") is None: return False if importlib.util.find_spec("torch_dtu.core") is None: return False return importlib.util.find_spec("torch_dtu.core.dtu_model") is not None if is_torch_dtu_available(): import torch_dtu import torch_dtu.distributed as dist import torch_dtu.core.dtu_model as dm from torch_dtu.nn.parallel import DistributedDataParallel as torchDDP ``` - device计算设备指定 ``` if is_torch_dtu_available(): device = dm.dtu_device() else: device = torch.device("cpu") ``` - 优化器更新接口 ``` sgd = SGD(model.parameters(), lr=1e-1) for _epoch in range(epoch): loss.backward() if is_torch_dtu_available(): dm.optimizer_step(sgd, barrier=True) else: sgd.step() ``` ## 3 创建训练任务 准备好数据和执行脚本以后,需要创建训练任务将GCU-Pytorch脚本运行。首次使用的用户可参考本示例代码。 启动脚本选择train_for_c2net.py ## 4 查看运行结果 ### 4.1 在训练作业界面可以查看运行日志 目前训练任务的日志在代码中print输出,参考示例train_for_c2net.py代码相关print ### 4.2 训练结束后可以下载模型文件 ## 对于示例代码有任何问题,欢迎在本项目中提issue。