MNIST开发案例

本案例使用的MNIST模型的训练代码来自pytorch的MNIST案例的mnist.py。(https://github.com/pytorch/examples/tree/master/mnist
改写后的文件存放在~/uai-sdk/examples/pytorch/train/mnist目录下。该目录包含:

  • code/ 训练代码,包含mnist.py文件
  • data/ 测试数据集

准备工作

请根据 本地安装部署开发环境本地环境完成所有安装步骤,即完成了基本环境的部署

编写MNIST案例

本案例使用的MNIST模型的训练代码来自MXNet的MNIST案例的mnist.py, 并做如下修改

1.导入uargs.py模块

首先导入uaitrain.arch.pytorch包的uargs模块,该模块定义了代码中需要使用的命令行参数,然后将参数添加到argparse中。 添加代码引入uargs.py:(L11)

#import UAI argument defines
from uaitrain.arch.pytorch import uargs''

arg parser 增加uai相关参数:(L32)

# Add uai specific arguments
uargs.add_uai_args(parser)

这样mnist.py运行时就能够使用uargs.py里面定义的参数。

2.使用 data_dir 作为输入路径

通过使用 args.data_dir 指定数据的输入路径,由于本例的数据已经提供,故可将参数download设值为False,使其从本地加载。修改如下:
(L45)

train_loader = torch.utils.data.DataLoader(
    datasets.MNIST(args.data_dir, train=True, download=False,
                   transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   ])),

(L52)

test_loader = torch.utils.data.DataLoader(
    datasets.MNIST(args.data_dir, train=False, transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   ])),

3.使用 output_dir 作为输出路径

通过使用 args.output_dir 指定输出路径 用于保存训练过程中的模型文件。 对于在训练平台上运行的任务,该目录下的文件会上传至ufile中保存。
所以输出路径需要以 args.output_dir为前缀。 模型输出的修改如下:
(L122)

torch.save(model.state_dict(), args.output_dir + '/mnist-param.pkl')

只要在代码中需要使用目录的地方,均按此方式修改,即可能够将其移植至uai-train平台。
最终在平台上运行时,data_dir目录对应的是创建任务时填入的ufile输入路径,output_dir对应的则是填入的ufile输出路径。

使用Docker镜像进行测试

因为UAI Train 平台使用Docker运行训练,因此可以使用Docker对训练代码进行测试。
UAI Train平台提供开源的Docker 打包工具,打包方法见打包镜像
打包完成后打包工具会自动生成GPU的镜像和CPU的镜像,命名如下:

  • CPU镜像 uhub.auto-ai.com.cn//-cpu:
  • GPU镜像 uhub.auto-ai.com.cn//:

使用CPU Docker 测试

打包工具会自动生成CPU Docker的运行代码,可以在标准输出uaitrain_cmd.txt中找到命令(CMD for CPU local test:
直接执行命令即可

使用GPU Docker 测试

打包工具会自动生成GPU Docker的运行代码,可以在标准输出uaitrain_cmd.txt中找到命令(CMD for GPU local test:
直接执行命令即可