docstr: returns additional HBM budget available for GPU caches.
docstr_tok: ["returns","additional","HBM","budget","available","for","GPU","caches","."]
code: def get_budget(
      proposal: List[ShardingOption], storage_constraint: Topology
  ) -> int:
      """returns additional HBM budget available for GPU caches."""
      available_hbm = sum(
          device.storage.hbm for device in storage_constraint.devices
      )
      used_hbm = sum(
          sharding_option.total_storage.hbm
          for sharding_option in proposal
      )
      return available_hbm - used_hbm
  
imports: import copy
  import itertools
  import logging
  from decimal import Decimal
  from typing import cast, Dict, List, Optional, Set, Tuple, Union
  import torch
  from torchrec.distributed.embedding_types import EmbeddingComputeKernel
  from torchrec.distributed.planner.types import Enumerator, Perf, Proposer, ShardingOption, Topology
  from torchrec.distributed.planner.utils import BinarySearchPredicate, bytes_to_gb, prod
label_desc: Use image node_id 5 for calling the EmbeddingOffloadScaleupProposer obj's underlying member method code with example usage: obj.get_budget(proposal, storage_constraint) and returns: unknown