docstr: Computes the log softmax denominator of the input activation tensor
  and stores the result in denom.
  
  Args:
      acts: Activation tensor of shape [B, T, U, V+1]. The input must be represented as a flat tensor
          of shape [B * T * U * (V+1)] to allow pointer indexing.
      denom: A zero tensor of same shape as acts.
  
  Updates:
      This kernel inplace updates the `denom` tensor
docstr_tok: ["Computes","the","log","softmax","denominator","of","the","input","activation","tensor","and","stores","the","result","in","denom",".","Args",":","acts",":","Activation","tensor","of","shape","[","B",",","T",",","U",",","V+1","]",".","The","input","must","be","represented","as","a","flat","tensor","of","shape","[","B","*","T","*","U","*","(","V+1",")","]","to","allow","pointer","indexing",".","denom",":","A","zero","tensor","of","same","shape","as","acts",".","Updates",":","This","kernel","inplace","updates","the","`","denom","`","tensor"]
code: def log_softmax(self, acts: torch.Tensor, denom: torch.Tensor):
      """
      Computes the log softmax denominator of the input activation tensor
      and stores the result in denom.
  
      Args:
          acts: Activation tensor of shape [B, T, U, V+1]. The input must be represented as a flat tensor
              of shape [B * T * U * (V+1)] to allow pointer indexing.
          denom: A zero tensor of same shape as acts.
  
      Updates:
          This kernel inplace updates the `denom` tensor
      """
      # // trans_acts + pred_acts -> log_softmax denominator
      reduce.reduce_max(
          acts,
          denom,
          rows=self.alphabet_size_,
          cols=self.minibatch_ * self.maxT_ * self.maxU_,
          minus=False,
          stream=self.stream_,
      )
  
      reduce.reduce_exp(
          acts,
          denom,
          rows=self.alphabet_size_,
          cols=self.minibatch_ * self.maxT_ * self.maxU_,
          minus=True,
          stream=self.stream_,
      )
  
imports: import multiprocessing
  import random
  from typing import Optional, Tuple
  import numba
  import torch
  from numba import cuda
  from nemo.collections.asr.parts.numba.rnnt_loss.utils import global_constants, rnnt_helper
  from nemo.collections.asr.parts.numba.rnnt_loss.utils.cuda_utils import gpu_rnnt_kernel, reduce
label_desc: Use image node_id 2 for calling the GPURNNT obj's underlying member method code with example usage: obj.log_softmax(acts, denom) without return types