class_docstr: Megatron NMT training
class_docstr_tok: ["Megatron","NMT","training"]
code: def _build_eval_dataset(self, data_cfg):
      # Set up prepend IDs for validation datasets even if not multingual.
      if self._cfg.train_ds.get("objective", "nmt") == "nmt-xlm" or (
          self.multilingual
          and self.multilingual_type
          != MultilingualModelType.many_to_one
      ):
          multilingual_ids = [
              self.multilingual_lang_to_id[lang]
              for lang in self.cfg.tgt_language
          ]
          dataset = MTEncDecModel._setup_eval_dataset_from_config(
              cfg=data_cfg,
              multilingual=True,
              multilingual_ids=multilingual_ids,
              encoder_tokenizer=self.encoder_tokenizer,
              decoder_tokenizer=self.decoder_tokenizer,
              add_bos_eos_to_encoder=self._cfg.train_ds.get(
                  "objective", "nmt"
              )
              != "nmt-xlm",  # nmt-xlm does not add bos/eos to encoder while training so make sure this happens for validation as well.
          )
      else:
          num_eval_datasets = (
              len(data_cfg.src_file_name)
              if isinstance(data_cfg.src_file_name, ListConfig)
              else 1
          )
          multilingual_ids = [None] * num_eval_datasets
          dataset = MTEncDecModel._setup_eval_dataset_from_config(
              cfg=data_cfg,
              multilingual=self.multilingual,
              multilingual_ids=multilingual_ids,
              encoder_tokenizer=self.encoder_tokenizer,
              decoder_tokenizer=self.decoder_tokenizer,
          )
      return dataset
  
imports: import enum
  import itertools
  import random
  from typing import List, Optional
  import numpy
  import torch
  from omegaconf.dictconfig import DictConfig
  from omegaconf.listconfig import ListConfig
  from pytorch_lightning.trainer.trainer import Trainer
  from sacrebleu import corpus_bleu
  from nemo.collections.nlp.data.common.sequence_to_sequence_dataset import BinarizedMemmapSequenceToSequenceDataset, TextMemmapSequenceToSequenceDataset
  from nemo.collections.nlp.data.language_modeling.megatron.base_dataset_utils import get_datasets_weights_and_num_samples
  from nemo.collections.nlp.data.language_modeling.megatron.blendable_dataset import BlendableDataset
  from nemo.collections.nlp.data.language_modeling.megatron.megatron_batch_samplers import MegatronPretrainingBatchSampler
  from nemo.collections.nlp.data.language_modeling.megatron.xlm_dataset import BinarizedMemmapCrossLingualMLMAndTranslationDataset, TextMemmapCrossLingualMLMAndTranslationDataset
  from nemo.collections.nlp.models.language_modeling.megatron_lm_encoder_decoder_model import MegatronLMEncoderDecoderModel
  from nemo.collections.nlp.models.language_modeling.megatron_t5_model import MegatronT5Model
  from nemo.collections.nlp.models.machine_translation.mt_enc_dec_model import MTEncDecModel
  from nemo.collections.nlp.modules.common.megatron.megatron_export import DecEmb, EncEmb, TokensHeadEmb
  from nemo.collections.nlp.modules.common.megatron.utils import get_iterator_k_split
  from nemo.collections.nlp.parts.nlp_overrides import GlobalBatchDataFetcher
  from nemo.collections.nlp.parts.utils_funcs import get_last_rank
  from nemo.core.classes import Exportable
  from nemo.utils import AppState, logging, timers
label_desc: Use image node_id 21 for calling the MegatronNMTModel obj's underlying member method code with example usage: obj._build_eval_dataset(data_cfg) and returns: dataset