AlienChen's picture
download
raw
2.61 kB
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the CC-by-NC license found in the
# LICENSE file in the root directory of this source tree.
import logging
from pathlib import Path
import torch
from data import DataState
from torch import nn
from torch.optim import Optimizer
class TrainState:
def __init__(
self,
model: nn.Module,
optimizer: Optimizer,
step: int,
# data_state: DataState,
):
self._model = model
self._optimizer = optimizer
self._step = step
# self._data_state = data_state
@property
def step(self) -> int:
return self._step
@step.setter
def step(self, value: int) -> None:
self._step = value
@property
def optimizer(self) -> Optimizer:
return self._optimizer
@property
def model(self) -> nn.Module:
return self._model
# @property
# def data_state(self) -> DataState:
# return self._data_state
def compile_model(self) -> None:
self._model = torch.compile(self._model)
def restore_checkpoint(
self, ckpt_dir: Path, device: torch.device, rank: int
) -> None:
if ckpt_dir.exists():
loaded_state = torch.load(ckpt_dir, map_location=device, weights_only=True)
self.optimizer.load_state_dict(loaded_state["optimizer"])
self.model.module.load_state_dict(loaded_state["model"])
self.step = loaded_state["step"]
# self._data_state.test.load_state_dict(loaded_state["test_sampler"])
# self._data_state.train.sampler.load_state_dict(
# loaded_state["train_sampler"]
# )
else:
ckpt_dir.parent.mkdir(exist_ok=True, parents=True)
if rank == 0:
logging.warning(
f"No checkpoint found at {ckpt_dir}. Returned the same state as input"
)
def save_checkpoint(self, ckpt_dir: str, rank: int) -> None:
saved_state = {
"optimizer": self.optimizer.state_dict(),
"model": self.model.module.state_dict(),
"step": self.step,
# "train_sampler": self._data_state.train.sampler.state_dict(),
# "test_sampler": self._data_state.test.sampler.state_dict(),
}
if rank == 0:
torch.save(saved_state, ckpt_dir)
def eval(self) -> None:
self.train(training=False)
def train(self, training: bool = True) -> None:
self._model.train(mode=training)

Xet Storage Details

Size:
2.61 kB
·
Xet hash:
99af703cebca4c8f37d8cf52f9adf30c6f0351c137f2e187dff049b0776bdbe7

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.