class_docstr: ClusterInfo exposes various properties that are set for tasks while running on the cluster.
  
  Examples:
  
  .. code:: python
  
      info = det.get_cluster_info()
      assert info is not None, "this code only runs on-cluster!"
  
      print("master_url", info.master_url)
      print("task_id", info.task_id)
      print("allocation_id", info.allocation_id)
      print("session_token", info.session_token)
  
      print("container_addrs", info.container_addrs)
      print("container_rank", info.container_rank)
  
      if info.task_type == "TRIAL":
          print("trial.id", info.trial.trial_id)
          print("trial.hparams", info.trial.hparams)
  
  .. warning::
  
     Be careful with this object!  If you depend on a ClusterInfo object during training for
     anything more than e.g.  informational logging, you run the risk of making your training code
     unable to run outside of Determined.  ClusterInfo is meant to be most useful to custom launch
     layers, which likely are not able to run outside of Determined anyway.
class_docstr_tok: ["ClusterInfo","exposes","various","properties","that","are","set","for","tasks","while","running","on","the","cluster",".","Examples",":","..","code",":",":","python","info","=","det.get_cluster_info","(",")","assert","info","is","not","None",",","``","this","code","only","runs","on-cluster","!","''","print","(","``","master_url","''",",","info.master_url",")","print","(","``","task_id","''",",","info.task_id",")","print","(","``","allocation_id","''",",","info.allocation_id",")","print","(","``","session_token","''",",","info.session_token",")","print","(","``","container_addrs","''",",","info.container_addrs",")","print","(","``","container_rank","''",",","info.container_rank",")","if","info.task_type","==","``","TRIAL","''",":","print","(","``","trial.id","''",",","info.trial.trial_id",")","print","(","``","trial.hparams","''",",","info.trial.hparams",")","..","warning",":",":","Be","careful","with","this","object","!","If","you","depend","on","a","ClusterInfo","object","during","training","for","anything","more","than","e.g",".","informational","logging",",","you","run","the","risk","of","making","your","training","code","unable","to","run","outside","of","Determined",".","ClusterInfo","is","meant","to","be","most","useful","to","custom","launch","layers",",","which","likely","are","not","able","to","run","outside","of","Determined","anyway","."]
docstr: The checkpoint ID of the most recent checkpoint that should be loaded.
  
  Since non-trial-type tasks cannot currently save checkpoints, ``.latest_checkpoint`` is
  currently always None for non-trial-type tasks.
docstr_tok: ["The","checkpoint","ID","of","the","most","recent","checkpoint","that","should","be","loaded",".","Since","non-trial-type","tasks","can","not","currently","save","checkpoints",",","``",".latest_checkpoint","``","is","currently","always","None","for","non-trial-type","tasks","."]
code: def latest_checkpoint(self) -> Optional[str]:
      """
      The checkpoint ID of the most recent checkpoint that should be loaded.
  
      Since non-trial-type tasks cannot currently save checkpoints, ``.latest_checkpoint`` is
      currently always None for non-trial-type tasks.
      """
      if self.task_type != "TRIAL":
          return None
      return self._latest_checkpoint
  
imports: import json
  import os
  from typing import Any, Dict, Iterable, List, Optional, Union
  from determined import gpu
label_desc: Use image node_id 5 for calling the ClusterInfo obj's underlying member method code with example usage: obj.latest_checkpoint() and returns: self, None