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) | |||
| - 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. | |||
| - Framework | |||
| - [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: | |||
| - runing on Ascend | |||
| - running on Ascend | |||
| ```bash | |||
| # 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] | |||
| ``` | |||
| - 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 and Sample Code](#contents) | |||
| @@ -54,7 +54,8 @@ if __name__ == '__main__': | |||
| target = args_opt.device_target | |||
| # 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, | |||
| device_target=target, | |||
| 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": | |||
| device_num, rank_id = _get_rank_info() | |||
| elif target == "CPU": | |||
| device_num = 1 | |||
| else: | |||
| init() | |||
| rank_id = get_rank() | |||
| @@ -144,9 +144,10 @@ if __name__ == '__main__': | |||
| amp_level="O2", | |||
| keep_batchnorm_fp32=False) | |||
| 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()), | |||
| lr, | |||
| config.momentum, | |||