code: def _test_alltoallv(
      cls,
      rank: int,
      world_size: int,
      backend: str,
  ) -> None:
      dist.init_process_group(
          rank=rank, world_size=world_size, backend=backend
      )
      device = torch.device(f"cuda:{rank}")
  
      torch.cuda.set_device(device)
  
      B_global = 10
      D0 = 8
      D1 = 9
  
      input_embedding0 = torch.rand(
          (B_global, D0),
          device=device,
          requires_grad=True,
      )
      input_embedding1 = torch.rand(
          (B_global, D1),
          device=device,
          requires_grad=True,
      )
  
      input_embeddings = [input_embedding0, input_embedding1]
      out_split = [17, 17]
  
      a2a_req = comm_ops.alltoallv(input_embeddings, out_split)
      v_embs_out = a2a_req.wait()
      res = torch.cat(v_embs_out, dim=1).cpu()
      assert tuple(res.size()) == (5, 34)
      dist.destroy_process_group()
  
imports: import itertools
  import multiprocessing
  import os
  import unittest
  from typing import Callable
  import torch
  import torch.distributed
  import torchrec.distributed.comm_ops
  from torchrec.distributed.utils import none_throws
  from torchrec.test_utils import get_free_port, seed_and_log
label_desc: Use image node_id 4 for calling the TestAllToAll obj's underlying member method code with example usage: obj._test_alltoallv(cls, rank, world_size, backend) without return types