From: @wuxuejian Reviewed-by: @c_34,@oacjiewen Signed-off-by: @c_34tags/v1.2.0-rc1
| @@ -62,7 +62,7 @@ For FP16 operators, if the input data type is FP32, the backend of MindSpore wil | |||||
| # [Environment Requirements](#contents) | # [Environment Requirements](#contents) | ||||
| - Hardware(Ascend) | |||||
| - Hardware(Ascend/CPU) | |||||
| - Prepare hardware environment with Ascend processor. If you want to try Ascend, please send the [application form](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/file/other/Ascend%20Model%20Zoo%E4%BD%93%E9%AA%8C%E8%B5%84%E6%BA%90%E7%94%B3%E8%AF%B7%E8%A1%A8.docx) to ascend@huawei.com. Once approved, you can get the resources. Squeezenet training on GPU performs badly now, and it is still in research. See [squeezenet in research](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/research/cv/squeezenet) to get up-to-date details. | - Prepare hardware environment with Ascend processor. If you want to try Ascend, please send the [application form](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/file/other/Ascend%20Model%20Zoo%E4%BD%93%E9%AA%8C%E8%B5%84%E6%BA%90%E7%94%B3%E8%AF%B7%E8%A1%A8.docx) to ascend@huawei.com. Once approved, you can get the resources. Squeezenet training on GPU performs badly now, and it is still in research. See [squeezenet in research](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/research/cv/squeezenet) to get up-to-date details. | ||||
| - Framework | - Framework | ||||
| - [MindSpore](https://www.mindspore.cn/install/en) | - [MindSpore](https://www.mindspore.cn/install/en) | ||||
| @@ -74,7 +74,7 @@ For FP16 operators, if the input data type is FP32, the backend of MindSpore wil | |||||
| After installing MindSpore via the official website, you can start training and evaluation as follows: | After installing MindSpore via the official website, you can start training and evaluation as follows: | ||||
| - runing on Ascend | |||||
| - running on Ascend | |||||
| ```bash | ```bash | ||||
| # distributed training | # distributed training | ||||
| @@ -87,6 +87,16 @@ After installing MindSpore via the official website, you can start training and | |||||
| Usage: sh scripts/run_eval.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DEVICE_ID] [DATASET_PATH] [CHECKPOINT_PATH] | Usage: sh scripts/run_eval.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DEVICE_ID] [DATASET_PATH] [CHECKPOINT_PATH] | ||||
| ``` | ``` | ||||
| - running on CPU | |||||
| ```bash | |||||
| # standalone training | |||||
| Usage: bash scripts/run_train_cpu.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DATASET_PATH] [PRETRAINED_CKPT_PATH](optional) | |||||
| # run evaluation example | |||||
| Usage: bash scripts/run_eval.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DATASET_PATH] [CHECKPOINT_PATH] | |||||
| ``` | |||||
| # [Script Description](#contents) | # [Script Description](#contents) | ||||
| ## [Script and Sample Code](#contents) | ## [Script and Sample Code](#contents) | ||||
| @@ -54,7 +54,8 @@ if __name__ == '__main__': | |||||
| target = args_opt.device_target | target = args_opt.device_target | ||||
| # init context | # init context | ||||
| device_id = int(os.getenv('DEVICE_ID')) | |||||
| device_id = os.getenv('DEVICE_ID') | |||||
| device_id = int(device_id) if device_id else 0 | |||||
| context.set_context(mode=context.GRAPH_MODE, | context.set_context(mode=context.GRAPH_MODE, | ||||
| device_target=target, | device_target=target, | ||||
| device_id=device_id) | device_id=device_id) | ||||
| @@ -0,0 +1,70 @@ | |||||
| #!/bin/bash | |||||
| # Copyright 2021 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| # ============================================================================ | |||||
| if [ $# != 4 ] | |||||
| then | |||||
| echo "Usage: bash scripts/run_eval.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DATASET_PATH] [CHECKPOINT_PATH]" | |||||
| exit 1 | |||||
| fi | |||||
| if [ $1 != "squeezenet" ] && [ $1 != "squeezenet_residual" ] | |||||
| then | |||||
| echo "error: the selected net is neither squeezenet nor squeezenet_residual" | |||||
| exit 1 | |||||
| fi | |||||
| if [ $2 != "cifar10" ] && [ $2 != "imagenet" ] | |||||
| then | |||||
| echo "error: the selected dataset is neither cifar10 nor imagenet" | |||||
| exit 1 | |||||
| fi | |||||
| get_real_path(){ | |||||
| if [ "${1:0:1}" == "/" ]; then | |||||
| echo "$1" | |||||
| else | |||||
| echo "$(realpath -m $PWD/$1)" | |||||
| fi | |||||
| } | |||||
| PATH1=$(get_real_path $3) | |||||
| PATH2=$(get_real_path $4) | |||||
| if [ ! -d $PATH1 ] | |||||
| then | |||||
| echo "error: DATASET_PATH=$PATH1 is not a directory" | |||||
| exit 1 | |||||
| fi | |||||
| if [ ! -f $PATH2 ] | |||||
| then | |||||
| echo "error: CHECKPOINT_PATH=$PATH2 is not a file" | |||||
| exit 1 | |||||
| fi | |||||
| if [ -d "eval" ]; | |||||
| then | |||||
| rm -rf ./eval | |||||
| fi | |||||
| mkdir ./eval | |||||
| cp ./eval.py ./eval | |||||
| cp -r ./src ./eval | |||||
| cd ./eval || exit | |||||
| env > env.log | |||||
| echo "start evaluation for device CPU" | |||||
| python eval.py --net=$1 --dataset=$2 --device_target=CPU --dataset_path=$PATH1 --checkpoint_path=$PATH2 &> log & | |||||
| cd .. | |||||
| @@ -0,0 +1,81 @@ | |||||
| #!/bin/bash | |||||
| # Copyright 2021 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| # ============================================================================ | |||||
| if [ $# != 3 ] && [ $# != 4 ] | |||||
| then | |||||
| echo "Usage: bash scripts/run_train_cpu.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DATASET_PATH] [PRETRAINED_CKPT_PATH](optional)" | |||||
| exit 1 | |||||
| fi | |||||
| if [ $1 != "squeezenet" ] && [ $1 != "squeezenet_residual" ] | |||||
| then | |||||
| echo "error: the selected net is neither squeezenet nor squeezenet_residual" | |||||
| exit 1 | |||||
| fi | |||||
| if [ $2 != "cifar10" ] && [ $2 != "imagenet" ] | |||||
| then | |||||
| echo "error: the selected dataset is neither cifar10 nor imagenet" | |||||
| exit 1 | |||||
| fi | |||||
| get_real_path(){ | |||||
| if [ "${1:0:1}" == "/" ]; then | |||||
| echo "$1" | |||||
| else | |||||
| echo "$(realpath -m $PWD/$1)" | |||||
| fi | |||||
| } | |||||
| PATH1=$(get_real_path $3) | |||||
| if [ $# == 4 ] | |||||
| then | |||||
| PATH2=$(get_real_path $4) | |||||
| fi | |||||
| if [ ! -d $PATH1 ] | |||||
| then | |||||
| echo "error: DATASET_PATH=$PATH1 is not a directory" | |||||
| exit 1 | |||||
| fi | |||||
| if [ $# == 4 ] && [ ! -f $PATH2 ] | |||||
| then | |||||
| echo "error: PRETRAINED_CKPT_PATH=$PATH2 is not a file" | |||||
| exit 1 | |||||
| fi | |||||
| if [ -d "train" ]; | |||||
| then | |||||
| rm -rf ./train | |||||
| fi | |||||
| mkdir ./train | |||||
| cp ./train.py ./train | |||||
| cp -r ./src ./train | |||||
| cd ./train || exit | |||||
| echo "start training for device CPU" | |||||
| env > env.log | |||||
| if [ $# == 3 ] | |||||
| then | |||||
| python train.py --net=$1 --dataset=$2 --device_target=CPU --dataset_path=$PATH1 &> log & | |||||
| fi | |||||
| if [ $# == 4 ] | |||||
| then | |||||
| python train.py --net=$1 --dataset=$2 --device_target=CPU --dataset_path=$PATH1 --pre_trained=$PATH2 &> log & | |||||
| fi | |||||
| cd .. | |||||
| @@ -42,6 +42,8 @@ def create_dataset_cifar(dataset_path, | |||||
| """ | """ | ||||
| if target == "Ascend": | if target == "Ascend": | ||||
| device_num, rank_id = _get_rank_info() | device_num, rank_id = _get_rank_info() | ||||
| elif target == "CPU": | |||||
| device_num = 1 | |||||
| else: | else: | ||||
| init() | init() | ||||
| rank_id = get_rank() | rank_id = get_rank() | ||||
| @@ -144,9 +144,10 @@ if __name__ == '__main__': | |||||
| amp_level="O2", | amp_level="O2", | ||||
| keep_batchnorm_fp32=False) | keep_batchnorm_fp32=False) | ||||
| else: | else: | ||||
| # GPU target | |||||
| print("Squeezenet training on GPU performs badly now, and it is still in research..." | |||||
| "See model_zoo/research/cv/squeezenet to get up-to-date details.") | |||||
| if target == "GPU": | |||||
| # GPU target | |||||
| print("Squeezenet training on GPU performs badly now, and it is still in research..." | |||||
| "See model_zoo/research/cv/squeezenet to get up-to-date details.") | |||||
| opt = Momentum(filter(lambda x: x.requires_grad, net.get_parameters()), | opt = Momentum(filter(lambda x: x.requires_grad, net.get_parameters()), | ||||
| lr, | lr, | ||||
| config.momentum, | config.momentum, | ||||