class_docstr: Embedding layer for featureless heterograph.
  Parameters
  ----------
  dev_id : int
      Device to run the layer.
  g : DistGraph
      training graph
  embed_size : int
      Output embed size
  sparse_emb: bool
      Whether to use sparse embedding
      Default: False
  dgl_sparse_emb: bool
      Whether to use DGL sparse embedding
      Default: False
  embed_name : str, optional
      Embed name
class_docstr_tok: ["Embedding","layer","for","featureless","heterograph",".","Parameters","--","--","--","--","--","dev_id",":","int","Device","to","run","the","layer",".","g",":","DistGraph","training","graph","embed_size",":","int","Output","embed","size","sparse_emb",":","bool","Whether","to","use","sparse","embedding","Default",":","False","dgl_sparse_emb",":","bool","Whether","to","use","DGL","sparse","embedding","Default",":","False","embed_name",":","str",",","optional","Embed","name"]
docstr: Forward computation
  Parameters
  ----------
  node_ids : dict of Tensor
      node ids to generate embedding for.
  Returns
  -------
  tensor
      embeddings as the input of the next layer
docstr_tok: ["Forward","computation","Parameters","--","--","--","--","--","node_ids",":","dict","of","Tensor","node","ids","to","generate","embedding","for",".","Returns","--","--","--","-","tensor","embeddings","as","the","input","of","the","next","layer"]
code: def forward(self, node_ids):
      """Forward computation
      Parameters
      ----------
      node_ids : dict of Tensor
          node ids to generate embedding for.
      Returns
      -------
      tensor
          embeddings as the input of the next layer
      """
      embeds = {}
      for ntype in node_ids:
          if self.feat_name in self.g.nodes[ntype].data:
              embeds[ntype] = self.node_projs[ntype](
                  self.g.nodes[ntype]
                  .data[self.feat_name][node_ids[ntype]]
                  .to(self.dev_id)
              )
          else:
              embeds[ntype] = self.node_embeds[ntype](
                  node_ids[ntype]
              ).to(self.dev_id)
      return embeds
  
imports: import argparse
  import gc, os
  import itertools
  import time
  import numpy
  from functools import partial
  import dgl
  import torch
  import torch.multiprocessing
  import torch.nn
  import torch.nn.functional
  import tqdm
  from dgl import DGLGraph, nn
  from dgl.distributed import DistDataLoader
  from ogb.nodeproppred import DglNodePropPredDataset
  from torch.multiprocessing import Queue
  from torch.nn.parallel import DistributedDataParallel
  from torch.utils.data import DataLoader
label_desc: Use image node_id 2 for calling the DistEmbedLayer obj's underlying member method code with example usage: obj.forward(node_ids) and returns: embeds