resolve_latest_checkpoint_dir Subroutine

public subroutine resolve_latest_checkpoint_dir(base_dir, checkpoint_dir)

base directory直下の最終出力と両定期slotを比較し、batch数が新しい完全checkpointを返す。 indexは同batchのslotを選ぶtie-breakにだけ使う。欠落、破損、古いindexは complete manifestを持つload可能なslotの回収を妨げない。

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: base_dir
character(len=*), intent(out) :: checkpoint_dir

Calls

proc~~resolve_latest_checkpoint_dir~~CallsGraph proc~resolve_latest_checkpoint_dir resolve_latest_checkpoint_dir proc~inspect_checkpoint_directory inspect_checkpoint_directory proc~resolve_latest_checkpoint_dir->proc~inspect_checkpoint_directory proc~checkpoint_schema_is_loadable checkpoint_schema_is_loadable proc~inspect_checkpoint_directory->proc~checkpoint_schema_is_loadable

Called by

proc~~resolve_latest_checkpoint_dir~~CalledByGraph proc~resolve_latest_checkpoint_dir resolve_latest_checkpoint_dir proc~load_or_init_run_state load_or_init_run_state proc~load_or_init_run_state->proc~resolve_latest_checkpoint_dir program~main main program~main->proc~load_or_init_run_state

Source Code

  subroutine resolve_latest_checkpoint_dir(base_dir, checkpoint_dir)
    character(len=*), intent(in) :: base_dir
    character(len=*), intent(out) :: checkpoint_dir

    integer(i32) :: root_batch, slot_batch, recovered_slot
    logical :: root_complete, slot_found
    character(len=1024) :: slot_dir

    checkpoint_dir = trim(base_dir)
    call inspect_checkpoint_directory(trim(base_dir), root_complete, batches=root_batch)
    if (.not. root_complete) root_batch = -1_i32

    call find_latest_periodic_slot(trim(base_dir), recovered_slot, slot_batch, slot_found)
    if (.not. slot_found) return
    slot_dir = checkpoint_slot_dir(trim(base_dir), recovered_slot)
    if (slot_batch > root_batch) checkpoint_dir = trim(slot_dir)
  end subroutine resolve_latest_checkpoint_dir