From 11f94819247ace837c5474b67865a03cf730dd4c Mon Sep 17 00:00:00 2001 From: lvyufeng Date: Wed, 7 Dec 2022 18:05:30 +0800 Subject: [PATCH] set 'data_sink_mode' to False in Model.train/fit/eval --- .../api_python/train/mindspore.train.Model.rst | 14 +++++++------- mindspore/python/mindspore/train/model.py | 16 ++++++++-------- tests/st/dataset/test_gpu_autotune.py | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/api/api_python/train/mindspore.train.Model.rst b/docs/api/api_python/train/mindspore.train.Model.rst index d94a452675e..cda1ef9201f 100644 --- a/docs/api/api_python/train/mindspore.train.Model.rst +++ b/docs/api/api_python/train/mindspore.train.Model.rst @@ -52,7 +52,7 @@ - **sink_size** (int) - 控制每次数据下沉的数据量。默认值:-1。 - **epoch** (int) - 控制训练轮次。默认值:1。 - .. py:method:: eval(valid_dataset, callbacks=None, dataset_sink_mode=True) + .. py:method:: eval(valid_dataset, callbacks=None, dataset_sink_mode=False) 模型评估接口。 @@ -65,7 +65,7 @@ 参数: - **valid_dataset** (Dataset) - 评估模型的数据集。 - **callbacks** (Optional[list(Callback), Callback]) - 评估过程中需要执行的回调对象或回调对象列表。默认值:None。 - - **dataset_sink_mode** (bool) - 数据是否直接下沉至处理器进行处理。默认值:True。 + - **dataset_sink_mode** (bool) - 数据是否直接下沉至处理器进行处理。默认值:False。 返回: Dict,key是用户定义的评价指标名称,value是以推理模式运行的评估结果。 @@ -78,7 +78,7 @@ 返回: 评估网络实例。 - .. py:method:: fit(epoch, train_dataset, valid_dataset=None, valid_frequency=1, callbacks=None, dataset_sink_mode=True, valid_dataset_sink_mode=True, sink_size=-1, initial_epoch=0) + .. py:method:: fit(epoch, train_dataset, valid_dataset=None, valid_frequency=1, callbacks=None, dataset_sink_mode=False, valid_dataset_sink_mode=False, sink_size=-1, initial_epoch=0) 模型边训练边推理接口。 @@ -92,8 +92,8 @@ - **valid_dataset** (Dataset) - 评估模型的数据集迭代器。默认值:None。 - **valid_frequency** (int, list) - 此参数只有在valid_dataset不为None时生效。如果为int类型,表示执行推理的频率,例如 `valid_frequency=2`,则每2个训练epoch执行一次推理;如果为list类型,指明在哪几个epoch时执行推理,例如 `valid_frequency=[1, 5]`,则在第1个和第5个epoch执行推理。默认值:1。 - **callbacks** (Optional[list[Callback], Callback]) - 训练过程中需要执行的回调对象或者回调对象列表。默认值:None。 - - **dataset_sink_mode** (bool) - 训练数据是否直接下沉至处理器进行处理。使用PYNATIVE_MODE模式或CPU处理器时,模型训练流程将以非下沉模式执行。默认值:True。 - - **valid_dataset_sink_mode** (bool) - 推理数据是否直接下沉至处理器进行处理。默认值:True。 + - **dataset_sink_mode** (bool) - 训练数据是否直接下沉至处理器进行处理。使用PYNATIVE_MODE模式或CPU处理器时,模型训练流程将以非下沉模式执行。默认值:False。 + - **valid_dataset_sink_mode** (bool) - 推理数据是否直接下沉至处理器进行处理。默认值:False。 - **sink_size** (int) - 控制每次数据下沉的数据量。`dataset_sink_mode` 为False时 `sink_size` 无效。如果sink_size=-1,则每一次epoch下沉完整数据集。如果sink_size>0,则每一次epoch下沉数据量为sink_size的数据集。默认值:-1。 - **initial_epoch** (int) - 从哪个epoch开始训练,一般用于中断恢复训练场景。 @@ -146,7 +146,7 @@ 返回: 预测网络实例。 - .. py:method:: train(epoch, train_dataset, callbacks=None, dataset_sink_mode=True, sink_size=-1, initial_epoch=0) + .. py:method:: train(epoch, train_dataset, callbacks=None, dataset_sink_mode=False, sink_size=-1, initial_epoch=0) 模型训练接口。 @@ -163,7 +163,7 @@ - **epoch** (int) - 训练执行轮次。通常每个epoch都会使用全量数据集进行训练。当 `dataset_sink_mode` 设置为True且 `sink_size` 大于零时,则每个epoch训练次数为 `sink_size` 而不是数据集的总步数。如果 `epoch` 与 `initial_epoch` 一起使用,它表示训练的最后一个 `epoch` 是多少。 - **train_dataset** (Dataset) - 一个训练数据集迭代器。如果定义了 `loss_fn` ,则数据和标签会被分别传给 `network` 和 `loss_fn` ,此时数据集需要返回一个元组(data, label)。如果数据集中有多个数据或者标签,可以设置 `loss_fn` 为None,并在 `network` 中实现损失函数计算,此时数据集返回的所有数据组成的元组(data1, data2, data3, ...)会传给 `network` 。 - **callbacks** (Optional[list[Callback], Callback]) - 训练过程中需要执行的回调对象或者回调对象列表。默认值:None。 - - **dataset_sink_mode** (bool) - 数据是否直接下沉至处理器进行处理。使用PYNATIVE_MODE模式或CPU处理器时,模型训练流程将以非下沉模式执行。默认值:True。 + - **dataset_sink_mode** (bool) - 数据是否直接下沉至处理器进行处理。使用PYNATIVE_MODE模式或CPU处理器时,模型训练流程将以非下沉模式执行。默认值:False。 - **sink_size** (int) - 控制每次数据下沉的数据量。`dataset_sink_mode` 为False时 `sink_size` 无效。如果sink_size=-1,则每一次epoch下沉完整数据集。如果sink_size>0,则每一次epoch下沉数据量为sink_size的数据集。默认值:-1。 - **initial_epoch** (int) - 从哪个epoch开始训练,一般用于中断恢复训练场景。 diff --git a/mindspore/python/mindspore/train/model.py b/mindspore/python/mindspore/train/model.py index 4dada894294..3daea59f0e9 100644 --- a/mindspore/python/mindspore/train/model.py +++ b/mindspore/python/mindspore/train/model.py @@ -904,7 +904,7 @@ class Model: outputs = self._train_network(*next_element) cb_params.net_outputs = outputs if self._loss_scale_manager and self._loss_scale_manager.get_drop_overflow_update(): - _, overflow, _ = outputs + overflow = outputs[1] overflow = np.all(overflow.asnumpy()) self._loss_scale_manager.update_loss_scale(overflow) @@ -943,7 +943,7 @@ class Model: list_callback.on_train_end(run_context) - def train(self, epoch, train_dataset, callbacks=None, dataset_sink_mode=True, sink_size=-1, initial_epoch=0): + def train(self, epoch, train_dataset, callbacks=None, dataset_sink_mode=False, sink_size=-1, initial_epoch=0): """ Training API. @@ -981,7 +981,7 @@ class Model: Default: None. dataset_sink_mode (bool): Determines whether to pass the data through dataset channel. Configure pynative mode or CPU, the training process will be performed with - dataset not sink. Default: True. + dataset not sink. Default: False. sink_size (int): Control the amount of data in each sink. `sink_size` is invalid if `dataset_sink_mode` is False. If sink_size = -1, sink the complete dataset for each epoch. @@ -1085,7 +1085,7 @@ class Model: "using customized callbacks." % (cb_name, invalid_methods_names)) def fit(self, epoch, train_dataset, valid_dataset=None, valid_frequency=1, callbacks=None, - dataset_sink_mode=True, valid_dataset_sink_mode=True, sink_size=-1, initial_epoch=0): + dataset_sink_mode=False, valid_dataset_sink_mode=False, sink_size=-1, initial_epoch=0): """ Fit API. @@ -1117,9 +1117,9 @@ class Model: Default: None. dataset_sink_mode (bool): Determines whether to pass the train data through dataset channel. Configure pynative mode or CPU, the training process will be performed with - dataset not sink. Default: True. + dataset not sink. Default: False. valid_dataset_sink_mode (bool): Determines whether to pass the validation data through dataset channel. - Default: True. + Default: False. sink_size (int): Control the amount of data in each sink. `sink_size` is invalid if `dataset_sink_mode` is False. If sink_size = -1, sink the complete dataset for each epoch. @@ -1362,7 +1362,7 @@ class Model: list_callback.on_eval_end(run_context) return metrics - def eval(self, valid_dataset, callbacks=None, dataset_sink_mode=True): + def eval(self, valid_dataset, callbacks=None, dataset_sink_mode=False): """ Evaluation API. @@ -1382,7 +1382,7 @@ class Model: which should be executed while evaluation. Default: None. dataset_sink_mode (bool): Determines whether to pass the data through dataset channel. - Default: True. + Default: False. Returns: Dict, the key is the metric name defined by users and the value is the metrics value for diff --git a/tests/st/dataset/test_gpu_autotune.py b/tests/st/dataset/test_gpu_autotune.py index a06b73d2400..68b09f49777 100644 --- a/tests/st/dataset/test_gpu_autotune.py +++ b/tests/st/dataset/test_gpu_autotune.py @@ -105,7 +105,7 @@ def test_autotune_train_simple_model(tmp_path): print("Start training.") epoch_size = 10 start_time = time.time() - model.train(epoch_size, ds_train) + model.train(epoch_size, ds_train, dataset_sink_mode=True) print("Training finished. Took {}s".format(time.time() - start_time)) ds.config.set_enable_autotune(False) @@ -195,7 +195,7 @@ def test_autotune_pymultiproc_train_simple_model(): print("Start Model Training.") model_start = time.time() epoch_size = 2 - model.train(epoch_size, ds_train) + model.train(epoch_size, ds_train, dataset_sink_mode=True) print("Model training is finished. Took {}s".format(time.time() - model_start)) # Restore settings