图像分类工具包MMClassification
环境安装——北京超算中心
点击链接https://cloud.blsc.cn/,下载客户端。使用北京超级云计算中心账号登录。
点击SSH,进入到命令行界面。
用户登陆上即在家目录(home),不要在此目录下安装软件及存放文件。默认配额为1GB。
命令行输入cd run/ 进入作业运行数据存放目录run (300G的默认配额)
依赖环境——MMClassification
- Python3.6+
- CUDA 9.2+(RTX3090显卡需要CUDA11.1+)
- PyTorch 1.5+
module avail # 查看可用的模块
module load anaconda/2021.05 # 加载需要使用的模块
创建conda环境mmclassification,并激活。conda activate与旧版source activate区别不大,只是速度更快。从conda4.4开始,conda activate是激活环境的首选方法。
conda create --name mmclassification python=3.8
source activate mmclassification
pip 安装PyTorch
超算中心的RTX3090显卡,需要CUDA的最低版本是11.1。尽量用pip安装,因为conda 安装会再次安装cudatoolkit模块,会花费大量时间。PyTorch安装命令在PyTorch官网
pip install torch==1.10.0+cu111 torchvision==0.11.0+cu111 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
加载CUDA模块
module load cuda/11.1
安装MMCV包
使用pip安装mmcv
根据系统的类型、CUDA 版本、PyTorch 版本以及 MMCV 版本选择相应的安装命令。
pip install mmcv-full==1.7.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.10/index.html
安装MMClassification
- 从源码编译安装(推荐):希望基于MMClassification 框架开发自己的图像分类任务,需要添加新的功能,比如新的模型或是数据集,或者使用我们提供的各种工具。
- 作为Python包安装:只是希望调用MMClassification 的API接口,或者在自己的项目中导入MMClassification中的模块。
这里推荐从源码编译安装
git clone https://github.com/open-mmlab/mmclassification.git
cd mmclassification
tar -zxvf mmclassification.tar.gz
module load gcc/7.3 #编译安装需要gcc模块
pip install -e .
最后的 “.” 表示安装在本地目录
与mim安装相比,pip安装会安装一些依赖包,mim自身带了足够的包,但在超算环境可能有兼容问题。
激活mmclassification环境
source activate mmclassification
新建data文件夹,用超算平台的快传工具上传下载的dataset到data目录中。
(mmclassification) [username@ln01 mmclassification] $ mkdir data
(mmclassification) [username@ln01 mmclassification] $ unzip flower_dataset.zip
用快传将本地PC编辑好的split_data.py文件上传到超算的data 目录中。
模型训练
所有的输出(日志文件和模型权重文件)将会被保存到工作目录下。工作目录通过配置文件中的参数work_dir 指定。
默认情况下,MMClassification 在每个周期后会在验证集上评估模型,可以通过在训练配置中修改interval参数来更改评估间隔
evaluation = dict(interval=12) # 每进行12轮训练后评估一次模型
使用单个GPU进行训练
python tools/train.py ${CONFIG_FILE} [optional arguments]
如果用户想在命令中指定工作目录,则需要增加参数--work-dir ${YOUR_WORK_DIR}
OpenMMLab项目中的重要概念——配置文件
深度学习模型的训练涉及几个方面:
- 模型结构 模型有几层、每层多少通道数等
- 数据集 用什么数据训练模型:数据集划分、数据文件路径、数据增强策略等
- 训练策略 梯度下降算法、学习率参数、batch_size、训练总轮次、学习率变化策略等
- 运行时 GPU、分布式环境配置等
- 一些辅助功能 如打印日志、定时保存checkpoint等
以上所有的项目都涵盖在一个配置文件中,一个配置文件定义了一个完整的训练过程
- model 字段定义模型
- data 字段定义数据
- optimizer、lr_config 等字段定义训练策略
- load_from字段定义与训练模型的参数文件
MMCls配置文件
构建配置文件可以使用继承机制,从configs/__base__中继承ImageNet预训练的任何模型,ImageNet的数据data配置,学习率策略等。
以ResNet为例,在mmclassification/configs下创建resnet18目录(mkdir),将resnet18_b32_flower.py 文件放到里面。
_base_ = ['../_base_/models/resnet18.py', '../_base_/datasets/imagenet_bs32.py', '../_base_/default_runtime.py']
model = dict(
head = dict(
num_classes=5,
topk =(1,)
))
data = dict(
samples_per_gpu = 32,
workers_per_gpu = 2,
train = dict(
data_prefix ='data/flower/train',
ann_file ='data/flower/train.txt',
classes ='data/flower/classes.txt'
),
val = dict(
data_prefix ='data/flower/val',
ann_file ='data/flower/val.txt',
classes ='data/flower/classes.txt'
)
)
optimizer = dict(type='SGD', lr=0.001, momentum=0.9, weight_decay=0.0001)
optimizer_config = dict(grad_clip=None)
lr_config = dict(
policy='step',
step=[1])
runner = dict(type='EpochBasedRunner', max_epochs=100)
# 预训练模型
load_from = '/HOME/shenpg/run/openmmlab/mmclassification/checkpoints/resnet18_batch256_imagenet_20200708-34ab8f90.pt
数据集划分代码
split_data.py
提交计算
在环境、数据集、MMCls配置文件准备完成之后就可以提交计算,在N30提交计算可以通过作业脚本的方式,操作步骤如下:
- 新建一个作业脚本run.sh,脚本的解释器可以说/bin/sh、/bin/bash、/bin/csh,脚本内容如下:
1 #!/bin/bash
2 # 加载模块
3 module load anaconda/2021.05
4 module load cuda/11.1
5 module load gcc/7.3
6
7 # 激活环境
8 source activate openmmlab_mmclassification
9
10 # 刷新环境
11 export PYTHONUNBUFFERED=1
12
13 # 训练模型
14 python tools/train.py \
15 configs/resnet18/restnet18_b32_flower.py \
16 --work-dir work/resnet18_b32_flower
- 使用sbatch命令提交作业脚本
sbatch --gpus-1 run.sh
- 使用squeue或parajobs查看提交的作业
- 查看作业输出日志
- 默认标准输出核标准出错都定向到一个 slum-%j.log(%j为作业ID)文件中
通过tail命令查看日志输出
tail -f slurm-27965.out