code: def _retrieve_unswapped_grad_partitions(self, swap_info, dest_buffer):
      UNSWAPPED_READ_GRADIENTS = "unswapped_read_gradients"
      self._start_timer(UNSWAPPED_READ_GRADIENTS)
      tensor_count = len(swap_info.unswapped_gradients)
      num_elem_count = swap_info.read_unswapped_gradients(dest_buffer)
      self._stop_timer(UNSWAPPED_READ_GRADIENTS)
      self._log_timers([UNSWAPPED_READ_GRADIENTS])
  
      # It should be safe to discard unswapped gradient partitions
      swap_info.release_unswapped_gradients()
  
      if SWAPPER_DEBUG_MODE:
          logger.info(
              f"optimizer_retrieve_unswapped_gradients: param={swap_info.param_id} tensor_count={tensor_count} elem_count={num_elem_count}"
          )
  
imports: import os
  import torch
  from deepspeed import comm
  from deepspeed.utils.logging import logger
  from deepspeed.runtime.swap_tensor.constants import *
  from deepspeed.runtime.swap_tensor.utils import swap_in_tensors, swap_out_tensors, MIN_AIO_BYTES, AIO_ALIGNED_BYTES, get_sized_buffers
  from deepspeed.runtime.swap_tensor.utils import SwapBufferManager, SwapBufferPool
label_desc: Use image node_id 16 for calling the OptimizerSwapper obj's underlying member method code with example usage: obj._retrieve_unswapped_grad_partitions(swap_info, dest_buffer) without return types