训练与测试¶
训练¶
单机单卡训练¶
你可以使用 tools/train.py
在电脑上用 CPU 或是 GPU 进行模型的训练。
以下是训练脚本的完整用法:
python tools/train.py ${CONFIG_FILE} [ARGS]
备注
默认情况下,MMClassification 会自动调用你的 GPU 进行训练。如果你有 GPU 但仍想使用 CPU 进行训练,请设置环境变量 CUDA_VISIBLE_DEVICES
为空或者 -1 来对禁用 GPU。
CUDA_VISIBLE_DEVICES=-1 python tools/train.py ${CONFIG_FILE} [ARGS]
参数 |
描述 |
---|---|
|
配置文件的路径。 |
|
用来保存训练日志和权重文件的文件夹,默认是 |
|
恢复训练。如果指定了权重文件路径,则从指定的权重文件恢复;如果没有指定,则尝试从最新的权重文件进行恢复。 |
|
启用混合精度训练。 |
|
不建议 在训练过程中不进行验证集上的精度验证。 |
|
自动根据实际的批次大小(batch size)和预设的批次大小对学习率进行缩放。 |
|
重载配置文件中的一些设置。使用类似 |
|
启动器,默认为 “none”。 |
单机多卡训练¶
我们提供了一个 shell 脚本,可以使用 torch.distributed.launch
启动多 GPU 任务。
bash ./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [PY_ARGS]
参数 |
描述 |
---|---|
|
配置文件的路径。 |
|
使用的 GPU 数量。 |
|
|
你还可以使用环境变量来指定启动器的额外参数,比如用如下命令将启动器的通讯端口变更为 29666:
PORT=29666 bash ./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [PY_ARGS]
如果你希望使用不同的 GPU 进行多项训练任务,可以在启动时指定不同的通讯端口和不同的可用设备。
CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 bash ./tools/dist_train.sh ${CONFIG_FILE1} 4 [PY_ARGS]
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 bash ./tools/dist_train.sh ${CONFIG_FILE2} 4 [PY_ARGS]
多机训练¶
同一网络下的多机¶
如果你希望使用同一局域网下连接的多台电脑进行一个训练任务,可以使用如下命令:
在第一台机器上:
NNODES=2 NODE_RANK=0 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR bash tools/dist_train.sh $CONFIG $GPUS
在第二台机器上:
NNODES=2 NODE_RANK=1 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR bash tools/dist_train.sh $CONFIG $GPUS
和单机多卡相比,你需要指定一些额外的环境变量:
环境变量 |
描述 |
---|---|
|
机器总数。 |
|
本机的序号 |
|
通讯端口,它在所有机器上都应当是一致的。 |
|
主机的 IP 地址,它在所有机器上都应当是一致的。 |
通常来说,如果这几台机器之间不是高速网络连接,训练速度会非常慢。
Slurm 管理下的多机集群¶
如果你在 slurm 集群上,可以使用 tools/slurm_train.sh
脚本启动任务。
[ENV_VARS] ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR} [PY_ARGS]
这里是该脚本的一些参数:
参数 |
描述 |
---|---|
|
使用的集群分区。 |
|
任务的名称,你可以随意起一个名字。 |
|
配置文件路径。 |
|
用以保存日志和权重文件的文件夹。 |
|
|
这里是一些你可以用来配置 slurm 任务的环境变量:
环境变量 |
描述 |
---|---|
|
使用的 GPU 总数,默认为 8。 |
|
每个节点分配的 GPU 数,你可以根据节点情况指定。默认为 8。 |
|
每个任务分配的 CPU 数(通常一个 GPU 对应一个任务)。默认为 5。 |
|
|
测试¶
单机单卡测试¶
你可以使用 tools/test.py
在电脑上用 CPU 或是 GPU 进行模型的测试。
以下是测试脚本的完整用法:
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [ARGS]
备注
默认情况下,MMClassification 会自动调用你的 GPU 进行测试。如果你有 GPU 但仍想使用 CPU 进行测试,请设置环境变量 CUDA_VISIBLE_DEVICES
为空或者 -1 来对禁用 GPU。
CUDA_VISIBLE_DEVICES=-1 python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [ARGS]
参数 |
描述 |
---|---|
|
配置文件的路径。 |
|
权重文件路径(支持 http 链接,你可以在这里寻找需要的权重文件)。 |
|
用来保存测试指标结果的文件夹。 |
|
用来保存测试指标结果的文件。 |
|
用来保存所有模型输出的文件,这些数据可以用于离线测评。 |
|
重载配置文件中的一些设置。使用类似 |
|
用于保存可视化预测结果图像的文件夹。 |
|
在窗口中显示预测结果图像。 |
|
每隔多少样本进行一次预测结果可视化。 |
|
每个窗口的显示时间(单位为秒)。 |
|
启动器,默认为 “none”。 |
单机多卡测试¶
我们提供了一个 shell 脚本,可以使用 torch.distributed.launch
启动多 GPU 任务。
bash ./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM} [PY_ARGS]
参数 |
描述 |
---|---|
|
配置文件的路径。 |
|
权重文件路径(支持 http 链接,你可以在这里寻找需要的权重文件)。 |
|
使用的 GPU 数量。 |
|
|
你还可以使用环境变量来指定启动器的额外参数,比如用如下命令将启动器的通讯端口变更为 29666:
PORT=29666 bash ./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM} [PY_ARGS]
如果你希望使用不同的 GPU 进行多项测试任务,可以在启动时指定不同的通讯端口和不同的可用设备。
CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 bash ./tools/dist_test.sh ${CONFIG_FILE1} ${CHECKPOINT_FILE} 4 [PY_ARGS]
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 bash ./tools/dist_test.sh ${CONFIG_FILE2} ${CHECKPOINT_FILE} 4 [PY_ARGS]
多机测试¶
同一网络下的多机¶
如果你希望使用同一局域网下连接的多台电脑进行一个测试任务,可以使用如下命令:
在第一台机器上:
NNODES=2 NODE_RANK=0 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR bash tools/dist_test.sh $CONFIG $CHECKPOINT_FILE $GPUS
在第二台机器上:
NNODES=2 NODE_RANK=1 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR bash tools/dist_test.sh $CONFIG $CHECKPOINT_FILE $GPUS
和单机多卡相比,你需要指定一些额外的环境变量:
环境变量 |
描述 |
---|---|
|
机器总数。 |
|
本机的序号 |
|
通讯端口,它在所有机器上都应当是一致的。 |
|
主机的 IP 地址,它在所有机器上都应当是一致的。 |
Slurm 管理下的多机集群¶
如果你在 slurm 集群上,可以使用 tools/slurm_test.sh
脚本启动任务。
[ENV_VARS] ./tools/slurm_test.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${CHECKPOINT_FILE} [PY_ARGS]
这里是该脚本的一些参数:
参数 |
描述 |
---|---|
|
使用的集群分区。 |
|
任务的名称,你可以随意起一个名字。 |
|
配置文件路径。 |
|
权重文件路径(支持 http 链接,你可以在这里寻找需要的权重文件)。 |
|
|
这里是一些你可以用来配置 slurm 任务的环境变量:
环境变量 |
描述 |
---|---|
|
使用的 GPU 总数,默认为 8。 |
|
每个节点分配的 GPU 数,你可以根据节点情况指定。默认为 8。 |
|
每个任务分配的 CPU 数(通常一个 GPU 对应一个任务)。默认为 5。 |
|
|