class_docstr: 该函数用于 DDP 训练时处理用户自己定制的 train_step 等函数；
  之所以要使用这一额外的包裹模型，是因为在使用 DDP 时，必须使用 DistributedDataParallel 的 forward 函数才能实现正常的运行；
  另一方面，我们要求用户在使用我们的框架时，需要针对不用的模式实现不同的处理函数，例如 'train_step', 'evaluate_step' 等；
  然而，当使用 DistributedDataParallel 包裹 model 后，模型看不见其除了 forward 之外的方法；并且当我们尝试在训练过程中主动提取
  `model = model.module`，这同样会导致错误，会使得每一个gpu上的模型参数不同；
  
  因此出于以上考虑，我们实现了这一函数；
  对于更详细的解释，可以参考 'pytorch_lightning' 的 ddp 的设计；
code: def __init__(self, model: Module):
      super(_DDPWrappingModel, self).__init__()
      self.model = model
  
imports: import os
  from typing import Any, Dict, Optional, Union
  from enum import IntEnum
  import contextlib
  import random
  import numpy
  import inspect
  from fastNLP.envs.imports import _NEED_IMPORT_TORCH
  from fastNLP.envs.utils import get_global_seed
  from fastNLP.envs import get_global_rank, FASTNLP_BACKEND_LAUNCH, FASTNLP_GLOBAL_SEED
  from fastNLP.core.samplers import re_instantiate_sampler, ReproducibleBatchSampler, ReproducibleSampler
  from fastNLP.core.utils import auto_param_call, apply_to_collection
  from fastNLP.core.log import logger
label_desc: Use image node_id 1 to create a new _DDPWrappingModel object from inherited base classes: Module with example: obj = _DDPWrappingModel(model)