class_docstr: Reserves storage for model to be sharded for inference. The storage reservation
  is comprised of dense tensor storage, KJT storage, and an extra percentage of total
  storage. Note that when estimating for storage, dense modules are assumed to be on
  GPUs and replicated across ranks. If this is not the case, please override the
  estimates with dense_tensor_estimate.
  
  Args:
      percentage (float): extra storage percentage to reserve that acts as a margin of
          error beyond storage calculation.
      dense_tensor_estimate (Optional[int]): storage estimate for dense tensors, use
          default heuristic estimate if not provided.
class_docstr_tok: ["Reserves","storage","for","model","to","be","sharded","for","inference",".","The","storage","reservation","is","comprised","of","dense","tensor","storage",",","KJT","storage",",","and","an","extra","percentage","of","total","storage",".","Note","that","when","estimating","for","storage",",","dense","modules","are","assumed","to","be","on","GPUs","and","replicated","across","ranks",".","If","this","is","not","the","case",",","please","override","the","estimates","with","dense_tensor_estimate",".","Args",":","percentage","(","float",")",":","extra","storage","percentage","to","reserve","that","acts","as","a","margin","of","error","beyond","storage","calculation",".","dense_tensor_estimate","(","Optional","[","int","]",")",":","storage","estimate","for","dense","tensors",",","use","default","heuristic","estimate","if","not","provided","."]
code: def __init__(
      self,
      percentage: float,
      dense_tensor_estimate: Optional[int] = None,
  ) -> None:
      assert percentage >= 0 and percentage <= 1
      self._percentage: float = percentage
      self._dense_tensor_estimate = dense_tensor_estimate
  
      self._dense_storage: Optional[Storage] = None
      self._kjt_storage: Optional[Storage] = None
  
imports: import copy
  import logging
  import math
  from typing import Dict, List, Optional, Set, Tuple
  from torch import nn
  from torchrec.distributed.planner.constants import BIGINT_DTYPE, POOLING_FACTOR
  from torchrec.distributed.planner.types import ParameterConstraints, PlannerError, PlannerErrorType, Storage, StorageReservation, Topology
  from torchrec.distributed.planner.utils import sharder_name, storage_repr_in_gb
  from torchrec.distributed.types import get_tensor_size_bytes, ModuleSharder
label_desc: Use image node_id 1 to create a new InferenceStorageReservation object from inherited base classes: StorageReservation with example: obj = InferenceStorageReservation(percentage, dense_tensor_estimate)