code: def get_ict_batch(data_iterator):
      # Items and their type.
      keys = [
          "query_tokens",
          "query_pad_mask",
          "block_tokens",
          "block_pad_mask",
          "block_data",
      ]
      datatype = torch.int64
  
      # Broadcast data.
      if data_iterator is None:
          data = None
      else:
          data = next(data_iterator)
      data_b = tensor_parallel.broadcast_data(keys, data, datatype)
  
      # Unpack.
      query_tokens = data_b["query_tokens"].long()
      query_pad_mask = data_b["query_pad_mask"].long()
      block_tokens = data_b["block_tokens"].long()
      block_pad_mask = data_b["block_pad_mask"].long()
      block_indices = data_b["block_data"].long()
  
      return (
          query_tokens,
          query_pad_mask,
          block_tokens,
          block_pad_mask,
          block_indices,
      )
  
imports: import os
  import time
  import numpy
  import torch
  from megatron import print_rank_0
  from megatron.core import mpu, tensor_parallel
  from megatron.data.dataset_utils import create_masked_lm_predictions, pad_and_convert_to_numpy
  from megatron import get_args, get_tokenizer, print_rank_0
label_desc: Use image node_id 2 for calling a global function with example usage: get_ict_batch(data_iterator) and returns: query_tokens,  query_pad_mask,  block_tokens,  block_pad_mask,  block_indices