diff --git a/fastNLP/core/callbacks/load_best_model_callback.py b/fastNLP/core/callbacks/load_best_model_callback.py index 0caf22d1..91bdb084 100644 --- a/fastNLP/core/callbacks/load_best_model_callback.py +++ b/fastNLP/core/callbacks/load_best_model_callback.py @@ -95,6 +95,8 @@ class LoadBestModelCallback(HasMonitorCallback): self.buffer.seek(0) trainer.load_model(folder=self.buffer, only_state_dict=self.only_state_dict) + trainer.driver.barrier() + if self.delete_after_after: if self.real_save_folder and int(os.environ.get(FASTNLP_GLOBAL_RANK, 0)) == 0: # 只需要 rank 0 执行删除。 diff --git a/fastNLP/core/controllers/evaluator.py b/fastNLP/core/controllers/evaluator.py index ada31edb..c6bd0f82 100644 --- a/fastNLP/core/controllers/evaluator.py +++ b/fastNLP/core/controllers/evaluator.py @@ -20,13 +20,6 @@ from fastNLP.core.log import logger class Evaluator: - """ - 1. 我们目前不直接提供每一个 metric 对应一个或者特殊的多个 dataloader 的功能,默认就是所有 metric 处理所有 dataloader,如果用户有这种 - 需求,请使用多个 Tester 进行操作; - 2. Trainer 的 validate dataloader 只允许传进去一个,而 Tester 则可以多个;因为 Trainer 涉及到保存 topk 模型的逻辑,而 Tester - 则只需要给出评测的结果即可; - - """ driver: Driver _evaluate_batch_loop: Loop @@ -37,11 +30,12 @@ class Evaluator: output_mapping: Optional[Union[Callable, Dict]] = None, model_wo_auto_param_call: bool = False, fp16: bool = False, verbose: int = 1, **kwargs): """ + 用于对数据进行评测。 :param model: 待测试的模型,如果传入的 driver 为 Driver 实例,该参数将被忽略。 - :param dataloaders: 待评测的数据集。 + :param dataloaders: 待评测的数据集。如果为多个,请使用 dict 传入。 :param metrics: 使用的 metric 。必须为 dict 类型,其中 key 为 metric 的名称,value 为一个 Metric 对象。支持 fastNLP 的 - metric ,torchmetrics,allennlpmetrics等。 + metric ,torchmetrics,allennlpmetrics 等。 :param driver: 使用 driver 。 :param device: 使用的设备。 :param evaluate_batch_step_fn: 定制每次 evaluate batch 执行的函数。该函数应接受的两个参数为 `evaluator` 和 `batch`, @@ -59,7 +53,8 @@ class Evaluator: :param verbose: 是否打印 evaluate 的结果。 :param kwargs: bool model_use_eval_mode: 是否在 evaluate 的时候将 model 的状态设置成 eval 状态。在 eval 状态下,model 的dropout - 与 batch normalization 将会关闭。默认为True。 + 与 batch normalization 将会关闭。默认为True。如果为 False,fastNLP 不会对 model 的 evaluate 状态做任何设置。无论 + 该值是什么,fastNLP 都会在 evaluate 接受后将 model 的状态设置为 train 。 TODO 还没完成。 Union[bool] auto_tensor_conversion_for_metric: 是否自动将输出中的 tensor 适配到 metrics 支持的。例如 model 输出是 paddlepaddle 的 tensor ,但是想利用 torchmetrics 的metric对象,