class_docstr: Initialize the Lightseq Transformer Encoder Layer.
  
  Static variable:
      layer_id: The layer-index counter starting from 0 and incrementing by 1 every time a layer object is instantiated,
      e.g. if a model has 24 transformer layers, layer_id goes from 0 to 23.
  Arguments:
      config: An object of LSTransformerEncoderLayer config, see get_config
  
      initial_weights: Optional: Only used for unit test
  
      initial_biases: Optional: Only used for unit test
code: def create_cpp_layer(self):
      # create the layer in cuda kernels.
      cuda_module = transformer_cuda_module
      create_layer_func = (
          cuda_module.create_transformer_encoder_layer_fp16
          if self.config.fp16
          else cuda_module.create_transformer_encoder_layer_fp32
      )
  
      print("create gpt encoder layer")
  
      create_layer_func(
          self.config.layer_id,
          self.config.max_batch_tokens,
          self.config.max_seq_len,
          self.config.hidden_size,
          self.config.nhead,
          self.config.intermediate_size,
          self.config.attn_prob_dropout_ratio,
          self.config.activation_dropout_ratio,
          self.config.hidden_dropout_ratio,
          self.config.pre_layer_norm,
          self.config.activation_fn,
          True,  # mask_future_tokens
      )
  
file_path: lightseq/lightseq/training/ops/pytorch/gpt_layer.py
imports: import torch
  from lightseq.training.ops.pytorch import TransformerBuilder
  from lightseq.training.ops.pytorch.transformer_encoder_layer import LSTransformerEncoderLayer
  from lightseq.training.ops.pytorch.quantization import weight_quant_config, act_quant_config
label_desc: Use image node_id 2 for calling the LSGptEncoderLayer obj's underlying member method code with example usage: obj.create_cpp_layer() without return types