diff --git a/mmengine/data/base_data_element.py b/mmengine/data/base_data_element.py
index ac5870bcf5760d8de245452b4eec00ed7b50612e..609ce53850d37ca842338669c5af24690896f835 100644
--- a/mmengine/data/base_data_element.py
+++ b/mmengine/data/base_data_element.py
@@ -406,7 +406,7 @@ class BaseDataElement:
 
     # Tensor-like methods
     def numpy(self) -> 'BaseDataElement':
-        """Convert all tensor to np.narray in metainfo and data."""
+        """Convert all tensor to np.narray in metainfo and data."""
         new_data = self.new()
         for k, v in self.data_items():
             if isinstance(v, torch.Tensor):
diff --git a/mmengine/data/base_data_sample.py b/mmengine/data/base_data_sample.py
index dd6fafd1dbfe1710c965e7db0eb99acd09de823e..659a4a8b9d2b652d4edb86e6362989659b936584 100644
--- a/mmengine/data/base_data_sample.py
+++ b/mmengine/data/base_data_sample.py
@@ -500,7 +500,7 @@ class BaseDataSample:
 
     # Tensor-like methods
     def numpy(self) -> 'BaseDataSample':
-        """Convert all tensor to np.narray in metainfo and data."""
+        """Convert all tensor to np.narray in metainfo and data."""
         new_data = self.new()
         for k, v in self.data_items():
             if isinstance(v, (torch.Tensor, BaseDataElement)):
diff --git a/mmengine/evaluator/base.py b/mmengine/evaluator/base.py
index 287c2fe272822e668730a929df48a153c0bbd270..51fbd17ef0ef8996675180efa130348ebe02b5d1 100644
--- a/mmengine/evaluator/base.py
+++ b/mmengine/evaluator/base.py
@@ -10,6 +10,7 @@ from typing import Any, List, Optional, Union
 import torch
 import torch.distributed as dist
 
+from mmengine.data import BaseDataSample
 from mmengine.utils import mkdir_or_exist
 
 
@@ -45,13 +46,13 @@ class BaseEvaluator(metaclass=ABCMeta):
         self._dataset_meta = dataset_meta
 
     @abstractmethod
-    def process(self, data_samples: dict, predictions: dict) -> None:
+    def process(self, data_samples: BaseDataSample, predictions: dict) -> None:
         """Process one batch of data samples and predictions. The processed
         results should be stored in ``self.results``, which will be used to
         compute the metrics when all batches have been processed.
 
         Args:
-            data_samples (dict): The data samples from the dataset.
+            data_samples (BaseDataSample): The data samples from the dataset.
             predictions (dict): The output of the model.
         """
 
@@ -61,6 +62,7 @@ class BaseEvaluator(metaclass=ABCMeta):
 
         Args:
             results (list): The processed results of each batch.
+
         Returns:
             dict: The computed metrics. The keys are the names of the metrics,
             and the values are corresponding results.
@@ -78,9 +80,8 @@ class BaseEvaluator(metaclass=ABCMeta):
                 this size.
 
         Returns:
-            metrics (dict): Evaluation metrics dict on the val dataset. The
-            keys are the names of the metrics, and the values are
-            corresponding results.
+            dict: Evaluation metrics dict on the val dataset. The keys are the
+            names of the metrics, and the values are corresponding results.
         """
         if len(self.results) == 0:
             warnings.warn(
diff --git a/mmengine/evaluator/builder.py b/mmengine/evaluator/builder.py
index 710c6554b96e63b94c5237a1c31168b40e3bfb23..2a8fb3d811771677a9d3c38a38d0a44c30fedee4 100644
--- a/mmengine/evaluator/builder.py
+++ b/mmengine/evaluator/builder.py
@@ -1,9 +1,13 @@
 # Copyright (c) OpenMMLab. All rights reserved.
+from typing import Union
+
 from ..registry import EVALUATORS
+from .base import BaseEvaluator
 from .composed_evaluator import ComposedEvaluator
 
 
-def build_evaluator(cfg: dict) -> object:
+def build_evaluator(
+        cfg: Union[dict, list]) -> Union[BaseEvaluator, ComposedEvaluator]:
     """Build function of evaluator.
 
     When the evaluator config is a list, it will automatically build composed
diff --git a/mmengine/evaluator/composed_evaluator.py b/mmengine/evaluator/composed_evaluator.py
index 225284e70a43208949df0391487b2f53d45e74d9..c0ba27f981ecde4546d8b3972e850cc999e16444 100644
--- a/mmengine/evaluator/composed_evaluator.py
+++ b/mmengine/evaluator/composed_evaluator.py
@@ -1,6 +1,7 @@
 # Copyright (c) OpenMMLab. All rights reserved.
 from typing import Optional, Sequence, Union
 
+from mmengine.data import BaseDataSample
 from .base import BaseEvaluator
 
 
@@ -31,11 +32,11 @@ class ComposedEvaluator:
         for evaluator in self.evaluators:
             evaluator.dataset_meta = dataset_meta
 
-    def process(self, data_samples: dict, predictions: dict):
+    def process(self, data_samples: BaseDataSample, predictions: dict):
         """Invoke process method of each wrapped evaluator.
 
         Args:
-            data_samples (dict): The data samples from the dataset.
+            data_samples (BaseDataSample): The data samples from the dataset.
             predictions (dict): The output of the model.
         """
 
@@ -54,9 +55,8 @@ class ComposedEvaluator:
                 this size.
 
         Returns:
-            metrics (dict): Evaluation metrics of all wrapped evaluators. The
-            keys are the names of the metrics, and the values are
-            corresponding results.
+            dict: Evaluation metrics of all wrapped evaluators. The keys are
+            the names of the metrics, and the values are corresponding results.
         """
         metrics = {}
         for evaluator in self.evaluators:
diff --git a/mmengine/hooks/checkpoint_hook.py b/mmengine/hooks/checkpoint_hook.py
index 7baa99edce23e429a7d65b006c0dfbc72ef93db2..14a7ab7b0ec4205189e4bdbe30f846142a2cd579 100644
--- a/mmengine/hooks/checkpoint_hook.py
+++ b/mmengine/hooks/checkpoint_hook.py
@@ -43,6 +43,8 @@ class CheckpointHook(Hook):
             Default: None.
     """
 
+    priority = 'VERY_LOW'
+
     def __init__(self,
                  interval: int = -1,
                  by_epoch: bool = True,
diff --git a/mmengine/hooks/empty_cache_hook.py b/mmengine/hooks/empty_cache_hook.py
index b457f2c0409007b653def67a64f76ebc506aa5c6..44bf53ec415b30613775151890cbb5f27d5594ed 100644
--- a/mmengine/hooks/empty_cache_hook.py
+++ b/mmengine/hooks/empty_cache_hook.py
@@ -22,6 +22,8 @@ class EmptyCacheHook(Hook):
             Defaults to False.
     """
 
+    priority = 'NORMAL'
+
     def __init__(self,
                  before_epoch: bool = False,
                  after_epoch: bool = True,
diff --git a/mmengine/hooks/hook.py b/mmengine/hooks/hook.py
index 8321af8300449d6f086b9612e85930f3b44f94f7..f0ccb1f7994f574c615f02f477714e0ef615a3ca 100644
--- a/mmengine/hooks/hook.py
+++ b/mmengine/hooks/hook.py
@@ -10,6 +10,8 @@ class Hook:
     All hooks should inherit from this class.
     """
 
+    priority = 'NORMAL'
+
     def before_run(self, runner: object) -> None:
         """All subclasses should override this method, if they need any
         operations before the training process.
diff --git a/mmengine/hooks/iter_timer_hook.py b/mmengine/hooks/iter_timer_hook.py
index ecc84465441b2eeba7d48b94a7e6ae635c0a8302..3c637056920e5bc2323c2b75792da5a5d08baa15 100644
--- a/mmengine/hooks/iter_timer_hook.py
+++ b/mmengine/hooks/iter_timer_hook.py
@@ -14,6 +14,8 @@ class IterTimerHook(Hook):
     Eg. ``data_time`` for loading data and ``time`` for a model train step.
     """
 
+    priority = 'NORMAL'
+
     def before_epoch(self, runner: object) -> None:
         """Record time flag before start a epoch.
 
diff --git a/mmengine/hooks/optimizer_hook.py b/mmengine/hooks/optimizer_hook.py
index 8689b9fa3f43bb708538f33484bdf9ba5253b66a..99f010ab3190a1435885d4323a66cccb183ae9b1 100644
--- a/mmengine/hooks/optimizer_hook.py
+++ b/mmengine/hooks/optimizer_hook.py
@@ -30,6 +30,8 @@ class OptimizerHook(Hook):
             Defaults to False.
     """
 
+    priority = 'HIGH'
+
     def __init__(self,
                  grad_clip: Optional[dict] = None,
                  detect_anomalous_params: bool = False) -> None:
diff --git a/mmengine/hooks/param_scheduler_hook.py b/mmengine/hooks/param_scheduler_hook.py
index 1bbf610ff0405e3df8b07b0773cc468ed0fb1e3f..425ab1237bb0d9954e009813d6519d084a657de5 100644
--- a/mmengine/hooks/param_scheduler_hook.py
+++ b/mmengine/hooks/param_scheduler_hook.py
@@ -11,6 +11,8 @@ class ParamSchedulerHook(Hook):
     """A hook to update some hyper-parameters in optimizer, e.g learning rate
     and momentum."""
 
+    priority = 'LOW'
+
     def after_iter(self,
                    runner: object,
                    data_batch: Optional[Sequence[BaseDataSample]] = None,
diff --git a/mmengine/hooks/sampler_seed_hook.py b/mmengine/hooks/sampler_seed_hook.py
index d2c991a932a7c830ecd79d2b2f1cd24a49b0577c..6d665172690c93d1e1527f31f13c28970ee8a2ae 100644
--- a/mmengine/hooks/sampler_seed_hook.py
+++ b/mmengine/hooks/sampler_seed_hook.py
@@ -12,6 +12,8 @@ class DistSamplerSeedHook(Hook):
     purpose with :obj:`IterLoader`.
     """
 
+    priority = 'NORMAL'
+
     def before_epoch(self, runner: object) -> None:
         """Set the seed for sampler and batch_sampler.
 
diff --git a/mmengine/hooks/sync_buffer_hook.py b/mmengine/hooks/sync_buffer_hook.py
index 89edb55d98441b3fe53213d44935a754bbc70d12..f62910e8438a5fe1d382204ca96ab645ec604ea5 100644
--- a/mmengine/hooks/sync_buffer_hook.py
+++ b/mmengine/hooks/sync_buffer_hook.py
@@ -84,6 +84,8 @@ class SyncBuffersHook(Hook):
     """Synchronize model buffers such as running_mean and running_var in BN at
     the end of each epoch."""
 
+    priority = 'NORMAL'
+
     def __init__(self) -> None:
         self.distributed = dist.IS_DIST
 
diff --git a/mmengine/model/wrappers/utils.py b/mmengine/model/wrappers/utils.py
index f888f49c92b20c0390873042403f264cc6b53b6b..f952e9b16c6f2a155087014e020cdfc80ddd3ffa 100644
--- a/mmengine/model/wrappers/utils.py
+++ b/mmengine/model/wrappers/utils.py
@@ -8,7 +8,7 @@ def is_model_wrapper(model):
     The following 4 model in MMEngine (and their subclasses) are regarded as
     model wrappers: DataParallel, DistributedDataParallel,
     MMDataParallel, MMDistributedDataParallel. You may add you own
-    model wrapper by registering it to mmengine.registry.MODEL_WRAPPERS.
+    model wrapper by registering it to ``mmengine.registry.MODEL_WRAPPERS``.
 
     Args:
         model (nn.Module): The model to be checked.