class_docstr: Parallelformers end-point function
  
  Args:
      model (nn.Module): Huggingface pre-trained transformer model.
      fp16: (bool): whether use FP16 or not.
      num_gpus (int): number of GPU for parallelization.
      master_addr (str): master process address for process communication (default='127.0.0.1')
      master_port (int): master process port for process communication (default=29500)
      backend (str): distributed backend (default='nccl')
      verbose (str): logging current gpu states (one of ['detail', 'simple', None]
      init_method (str): multiprocess initialization method. (It is safe to set `init_method` to `spawn`.)
      daemon (bool): whether make process daemon or not (default=True)
  
  Notes:
      We want to use this object as a simple function rather than a class.
      So we broke the PEP8 rules and set class names that start with a lowercase letter.
  
  Examples:
      >>> # 1. Import Huggingface and Parallelformers modules
      >>> from transformers import AutoModelForCausalLM, AutoTokenizer
      >>> from parallelformers import parallelize
  
      >>> # 2. Create Huggingface model and tokenizer.
      >>> model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-neo-2.7B")
      >>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neo-2.7B")
  
      >>> # 3. Parallelize using Parallelformers.
      >>> parallelize(model, num_gpus=4, fp16=True)
  
      >>> # 4. Do inference as usual.
      >>> inputs = tokenizer("Parallelformers is", return_tensors="pt")
      >>> outputs = model.generate(**inputs, num_beams=5, no_repeat_ngram_size=4)
      >>> print(f"Output: {tokenizer.batch_decode(outputs)[0]}")
      'Output: Parallelformers is an open-source library for parallel programming ...'
docstr: Initialize environment variables
  
  Args:
      num_gpus (int): number of GPU for parallelization.
      master_addr (str): master process address for process communication
      master_port (int): master process port for process communication
docstr_tok: ["Initialize","environment","variables","Args",":","num_gpus","(","int",")",":","number","of","GPU","for","parallelization",".","master_addr","(","str",")",":","master","process","address","for","process","communication","master_port","(","int",")",":","master","process","port","for","process","communication"]
code: def init_environments(
      self,
      num_gpus: int,
      master_addr: str,
      master_port: int,
  ) -> None:
      """
      Initialize environment variables
  
      Args:
          num_gpus (int): number of GPU for parallelization.
          master_addr (str): master process address for process communication
          master_port (int): master process port for process communication
      """
      os.environ["TOKENIZERS_PARALLELISM"] = "true"
      os.environ["MKL_SERVICE_FORCE_INTEL"] = "GNU"
      os.environ["MASTER_ADDR"] = str(master_addr)
      os.environ["MASTER_PORT"] = str(master_port)
      os.environ["WORLD_SIZE"] = str(num_gpus)
      os.environ["CUDA_VISIBLE_DEVICES"] = ", ".join(
          [str(i) for i in range(num_gpus)]
      )
  
imports: import os
  import traceback
  from contextlib import suppress
  from dataclasses import _is_dataclass_instance
  from typing import Any, Dict
  import torch
  import torch.multiprocessing
  from dacite import Config, from_dict
  from torch import nn
  from transformers.file_utils import ModelOutput
  from parallelformers.parallel.process import ParallelProcess
  from parallelformers.utils import rgetattr, rsetattr
label_desc: Use image node_id 3 for calling the parallelize obj's underlying member method code with example usage: obj.init_environments(num_gpus, master_addr, master_port) without return types