From 9ba5971b0e6dc556cf1b216e8ea45200942591af Mon Sep 17 00:00:00 2001 From: ankitageorge Date: Mon, 3 Mar 2025 12:52:55 -0800 Subject: [PATCH 01/22] enable async checkpointing by default --- torchtune/training/checkpointing/_checkpoint_client.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/torchtune/training/checkpointing/_checkpoint_client.py b/torchtune/training/checkpointing/_checkpoint_client.py index 59518faf7a..22e7a62d07 100644 --- a/torchtune/training/checkpointing/_checkpoint_client.py +++ b/torchtune/training/checkpointing/_checkpoint_client.py @@ -69,7 +69,7 @@ def __init__( self._resume_from_checkpoint = self._cfg.get("resume_from_checkpoint", False) self._enable_async_checkpointing = self._cfg.get( - "enable_async_checkpointing", False + "enable_async_checkpointing", True ) self._optimizer_in_bwd = self._cfg.get("optimizer_in_bwd", False) self._device = utils.get_device(device=self._cfg.device) @@ -217,10 +217,10 @@ def _save_checkpoint_sync( ) else: for param, opt in optimizer.optim_map.items(): - optim_state_dict[ - param - ] = training.get_full_optimizer_state_dict( - model, opt, self._is_rank_zero, device=self._device + optim_state_dict[param] = ( + training.get_full_optimizer_state_dict( + model, opt, self._is_rank_zero, device=self._device + ) ) else: optim_state_dict = optimizer.state_dict() From af9e1de6efa9e5d386f3586903dc053baee80232 Mon Sep 17 00:00:00 2001 From: ankitageorge Date: Tue, 4 Mar 2025 12:25:17 -0800 Subject: [PATCH 02/22] async --- recipes/full_finetune_distributed.py | 2 +- torchtune/training/checkpointing/_checkpoint_client.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/recipes/full_finetune_distributed.py b/recipes/full_finetune_distributed.py index c9571d051b..97d902fc18 100644 --- a/recipes/full_finetune_distributed.py +++ b/recipes/full_finetune_distributed.py @@ -134,7 +134,7 @@ def __init__(self, cfg: DictConfig) -> None: ) # Set up the backend for distributed training (NCCL, GLOO, etc.) - self._enable_async_checkpointing = cfg.get("enable_async_checkpointing", False) + self._enable_async_checkpointing = cfg.get("enable_async_checkpointing", True) self.fsdp_cpu_offload = cfg.get("fsdp_cpu_offload", False) self.distributed_backend = training.get_distributed_backend( device_type, diff --git a/torchtune/training/checkpointing/_checkpoint_client.py b/torchtune/training/checkpointing/_checkpoint_client.py index 22e7a62d07..59518faf7a 100644 --- a/torchtune/training/checkpointing/_checkpoint_client.py +++ b/torchtune/training/checkpointing/_checkpoint_client.py @@ -69,7 +69,7 @@ def __init__( self._resume_from_checkpoint = self._cfg.get("resume_from_checkpoint", False) self._enable_async_checkpointing = self._cfg.get( - "enable_async_checkpointing", True + "enable_async_checkpointing", False ) self._optimizer_in_bwd = self._cfg.get("optimizer_in_bwd", False) self._device = utils.get_device(device=self._cfg.device) @@ -217,10 +217,10 @@ def _save_checkpoint_sync( ) else: for param, opt in optimizer.optim_map.items(): - optim_state_dict[param] = ( - training.get_full_optimizer_state_dict( - model, opt, self._is_rank_zero, device=self._device - ) + optim_state_dict[ + param + ] = training.get_full_optimizer_state_dict( + model, opt, self._is_rank_zero, device=self._device ) else: optim_state_dict = optimizer.state_dict() From 8a59c162166d800f9d395e9cafcb8547d3c348fa Mon Sep 17 00:00:00 2001 From: ankitageorge Date: Tue, 11 Mar 2025 07:00:20 -0700 Subject: [PATCH 03/22] dcp hf --- .../training/checkpointing/_checkpointer.py | 248 +++++++++++------- 1 file changed, 147 insertions(+), 101 deletions(-) diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index e1f9f322c1..0beda5ca26 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -16,6 +16,7 @@ import torch import torch.distributed as dist from safetensors.torch import save_file + from torch.distributed.checkpoint import ( async_save, FileSystemReader, @@ -24,6 +25,13 @@ save, ) +# Replace this with something that actually works +if version("torch") > (2, 7): + from torch.distributed.checkpoint import ( + _HuggingFaceStorageReader, + _HuggingFaceStorageWriter, + ) + from torchtune import training from torchtune.models import convert_weights from torchtune.training.checkpointing._utils import ( @@ -109,11 +117,9 @@ class _CheckpointerInterface(Protocol): """ - def load_checkpoint(self, **kwargs) -> Dict[str, Any]: - ... + def load_checkpoint(self, **kwargs) -> Dict[str, Any]: ... - def save_checkpoint(self, state_dict: Dict[str, Any], **kwargs) -> None: - ... + def save_checkpoint(self, state_dict: Dict[str, Any], **kwargs) -> None: ... class FullModelTorchTuneCheckpointer(_CheckpointerInterface): @@ -430,6 +436,13 @@ def __init__( ) self._output_dir.mkdir(parents=True, exist_ok=True) + # Use DCP specs if looking at the fsspec for HF + if checkpoint_dir.startswith("hf://"): + self._straight_hf = True + assert checkpoint_files is None + else: + self._dcp_hf = False + # weight_map contains the state_dict key -> checkpoint file mapping so we can correctly # parition the state dict into output checkpoint files. This is updated during checkpoint # load @@ -484,6 +497,25 @@ def __init__( f"\n\tadapter_checkpoint: {self._adapter_checkpoint}" ) + def _manually_merge_sharded_state_dicts(self): + # merged state_dict contains keys and weights from all the checkpoint files + merged_state_dict: Dict[str, torch.Tensor] = {} + # _checkpoint_paths are already sorted so simply enumerate to generate the right id + for cpt_idx, cpt_path in enumerate(self._checkpoint_paths): + state_dict = safe_torch_load(cpt_path) + for key, value in state_dict.items(): + # Ensure that the state dict is a flat dict of keys and tensors. Breaking this assumption + # will break recipe code + if not isinstance(value, torch.Tensor): + raise ValueError( + f"Expected all values in the state dict to be torch.Tensor. " + f"Found {type(value)} instead." + ) + # idx is written in the 4 digit format (eg: 0001, 0002, etc.) + self._weight_map[key] = f"{cpt_idx + 1:04}" + merged_state_dict.update(state_dict) + return merged_state_dict + def load_checkpoint(self) -> Dict[str, Any]: """ Load HF checkpoint from file. @@ -504,32 +536,25 @@ def load_checkpoint(self) -> Dict[str, Any]: self._weight_map = {} - # merged state_dict contains keys and weights from all the checkpoint files - merged_state_dict: Dict[str, torch.Tensor] = {} - # converted_state_dict is the final state_dict passed to the recipe after the # keys are converted into the torchtune format. This optionally also contains # the recipe state and adapter weights converted_state_dict: Dict[str, Dict[str, torch.Tensor]] = {} - # _checkpoint_paths are already sorted so simply enumerate to generate the right id - for cpt_idx, cpt_path in enumerate(self._checkpoint_paths): - state_dict = safe_torch_load(cpt_path) - for key, value in state_dict.items(): - # Ensure that the state dict is a flat dict of keys and tensors. Breaking this assumption - # will break recipe code - if not isinstance(value, torch.Tensor): - raise ValueError( - f"Expected all values in the state dict to be torch.Tensor. " - f"Found {type(value)} instead." - ) - # idx is written in the 4 digit format (eg: 0001, 0002, etc.) - self._weight_map[key] = f"{cpt_idx + 1:04}" - merged_state_dict.update(state_dict) + if self._dcp_hf: + # DCP load using the storage reader + hf_storage_reader = _HuggingFaceStorageReader(path=self._checkpoint_dir) + metadata = hf_storage_reader.read_metadata() + planner = _EmptyStateDictLoadPlanner() + planner.set_up_planner(state_dict={}, metadata=metadata) + merged_state_dict = load( + state_dict={}, + storage_reader=_HuggingFaceStorageReader(path=self._checkpoint_dir), + load_planner=planner, + ) + else: + merged_state_dict = self._manually_merge_sharded_state_dicts() - # delete the state_dict to free up memory; TODO check if this del is needed - del state_dict - gc.collect() if self._model_type == ModelType.PHI3_MINI: log_rank_zero( logger=logger, @@ -634,6 +659,25 @@ def load_checkpoint(self) -> Dict[str, Any]: return converted_state_dict + def _generate_splits_for_sharded_state_dict(state_dict: Dict[str, torch.Tensor]): + # split the state_dict into separate dicts, one for each output checkpoint file + # e.g. split_state_dicts= { + # "0001": {"key1": tensor1, "key2": tensor2}, + # "0002": {"key3": tensor3} + # } + split_state_dicts: Dict[str, Dict[str, torch.Tensor]] = {} + total_size = 0 + for key, weight in state_dict[training.MODEL_KEY].items(): + cpt_idx = self._weight_map[key] + + # initialize dict + if cpt_idx not in split_state_dicts: + split_state_dicts[cpt_idx] = {} + + split_state_dicts[cpt_idx].update({key: weight}) + total_size += weight.numel() * weight.element_size() + return split_state_dicts, total_size + def save_checkpoint( self, state_dict: Dict[str, Any], @@ -729,76 +773,78 @@ def save_checkpoint( head_dim=self._config.get("head_dim", None), ) - # split the state_dict into separate dicts, one for each output checkpoint file - # e.g. split_state_dicts= { - # "0001": {"key1": tensor1, "key2": tensor2}, - # "0002": {"key3": tensor3} - # } - split_state_dicts: Dict[str, Dict[str, torch.Tensor]] = {} - total_size = 0 - for key, weight in state_dict[training.MODEL_KEY].items(): - cpt_idx = self._weight_map[key] - - # initialize dict - if cpt_idx not in split_state_dicts: - split_state_dicts[cpt_idx] = {} - - split_state_dicts[cpt_idx].update({key: weight}) - total_size += weight.numel() * weight.element_size() - - # write the partitioned state dicts to the right checkpoint file - # e.g. model-00001-of-00004.safetensors, model-00002-of-00004.safetensors, etc - num_shards = len(split_state_dicts) - map_original_name_to_new_name = {} - for cpt_idx, model_state_dict in split_state_dicts.items(): - # TODO: We should probably use the original shard name and just add a prefix - # however, having the SHARD_FNAME standardizes our checkpoints - shard_name = SHARD_FNAME.format( - cpt_idx=f"{cpt_idx}".zfill(5), num_shards=f"{num_shards}".zfill(5) + if self._dcp_hf is not None: + # DCP save using the storage writer + storage_writer = _HuggingFaceStorageWriter( + _fqn_to_index_mapping=self._weight_map ) - map_original_name_to_new_name[cpt_idx] = shard_name - output_path = Path.joinpath( - self._output_dir, f"epoch_{epoch}", shard_name + save( + checkpoint_id=self._checkpoint_dir, + state_dict=state_dict, + storage_writer=storage_writer, ) - output_path.parent.mkdir(parents=True, exist_ok=True) - if not self._safe_serialization: - output_path = output_path.with_suffix(".bin") - torch.save(model_state_dict, output_path) - else: - output_path = output_path.with_suffix(".safetensors") - save_file(model_state_dict, output_path, metadata={"format": "pt"}) + else: + ( + split_state_dicts, + total_size, + ) = self._generate_splits_for_sharded_state_dict(state_dict) + + # write the partitioned state dicts to the right checkpoint file + # e.g. model-00001-of-00004.safetensors, model-00002-of-00004.safetensors, etc + num_shards = len(split_state_dicts) + map_original_name_to_new_name = {} + for cpt_idx, model_state_dict in split_state_dicts.items(): + # TODO: We should probably use the original shard name and just add a prefix + # however, having the SHARD_FNAME standardizes our checkpoints + shard_name = SHARD_FNAME.format( + cpt_idx=f"{cpt_idx}".zfill(5), + num_shards=f"{num_shards}".zfill(5), + ) + map_original_name_to_new_name[cpt_idx] = shard_name + output_path = Path.joinpath( + self._output_dir, f"epoch_{epoch}", shard_name + ) + output_path.parent.mkdir(parents=True, exist_ok=True) + if not self._safe_serialization: + output_path = output_path.with_suffix(".bin") + torch.save(model_state_dict, output_path) + else: + output_path = output_path.with_suffix(".safetensors") + save_file( + model_state_dict, output_path, metadata={"format": "pt"} + ) - logger.info( - "Model checkpoint of size " - f"{os.path.getsize(output_path) / 1024**3:.2f} GiB " - f"saved to {output_path}" + logger.info( + "Model checkpoint of size " + f"{os.path.getsize(output_path) / 1024**3:.2f} GiB " + f"saved to {output_path}" + ) + + # Save the appropriate index file based on serialization format + # e.g. {metadata: {total_size: 1234}, weight_map: {"key1": "model_0001.safetensors", "key2": "model_0002.safetensors"}} + if self._safe_serialization: + weight_map = { + k: map_original_name_to_new_name[cpt_idx] + ".safetensors" + for k, cpt_idx in self._weight_map.items() + } + index_file_name = SAFETENSOR_INDEX_FNAME + else: + weight_map = { + k: map_original_name_to_new_name[cpt_idx] + ".bin" + for k, cpt_idx in self._weight_map.items() + } + index_file_name = TORCH_INDEX_FNAME + + index_path = Path.joinpath( + self._output_dir, f"epoch_{epoch}", index_file_name ) - # Save the appropriate index file based on serialization format - # e.g. {metadata: {total_size: 1234}, weight_map: {"key1": "model_0001.safetensors", "key2": "model_0002.safetensors"}} - if self._safe_serialization: - weight_map = { - k: map_original_name_to_new_name[cpt_idx] + ".safetensors" - for k, cpt_idx in self._weight_map.items() + index_data = { + "metadata": {"total_size": total_size}, + "weight_map": weight_map, } - index_file_name = SAFETENSOR_INDEX_FNAME - else: - weight_map = { - k: map_original_name_to_new_name[cpt_idx] + ".bin" - for k, cpt_idx in self._weight_map.items() - } - index_file_name = TORCH_INDEX_FNAME - - index_path = Path.joinpath( - self._output_dir, f"epoch_{epoch}", index_file_name - ) - - index_data = { - "metadata": {"total_size": total_size}, - "weight_map": weight_map, - } - with open(index_path, "w") as f: - json.dump(index_data, f, indent=2) + with open(index_path, "w") as f: + json.dump(index_data, f, indent=2) if training.ADAPTER_KEY in state_dict: @@ -826,14 +872,14 @@ def save_checkpoint( "Saving Llama3.2 Vision adapter weights to PEFT format is not supported, saving to torchtune format instead" ) else: - state_dict[ - training.ADAPTER_KEY - ] = convert_weights.tune_to_peft_adapter_weights( - state_dict[training.ADAPTER_KEY], - num_heads=self._config["num_attention_heads"], - num_kv_heads=self._config["num_key_value_heads"], - dim=self._config["hidden_size"], - head_dim=self._config.get("head_dim", None), + state_dict[training.ADAPTER_KEY] = ( + convert_weights.tune_to_peft_adapter_weights( + state_dict[training.ADAPTER_KEY], + num_heads=self._config["num_attention_heads"], + num_kv_heads=self._config["num_key_value_heads"], + dim=self._config["hidden_size"], + head_dim=self._config.get("head_dim", None), + ) ) output_path = Path.joinpath( self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME @@ -869,11 +915,11 @@ def save_checkpoint( "PEFT integration for Llama3.2 Vision is not supported, skipping adapter config save" ) else: - state_dict[ - training.ADAPTER_CONFIG - ] = convert_weights.tune_to_peft_adapter_config( - adapter_config=state_dict[training.ADAPTER_CONFIG], - base_model_name_or_path=self.repo_id, + state_dict[training.ADAPTER_CONFIG] = ( + convert_weights.tune_to_peft_adapter_config( + adapter_config=state_dict[training.ADAPTER_CONFIG], + base_model_name_or_path=self.repo_id, + ) ) output_path = Path.joinpath( From cfd291efbc261f6b0670ede43fb018795a8b26ac Mon Sep 17 00:00:00 2001 From: ankitageorge Date: Tue, 11 Mar 2025 07:37:02 -0700 Subject: [PATCH 04/22] amend --- recipes/configs/llama3_1/8B_full.yaml | 9 +-- .../training/checkpointing/_checkpointer.py | 63 +++++++++++-------- torchtune/training/checkpointing/_utils.py | 16 ++--- 3 files changed, 48 insertions(+), 40 deletions(-) diff --git a/recipes/configs/llama3_1/8B_full.yaml b/recipes/configs/llama3_1/8B_full.yaml index 0e59a0f76f..7b6b2de05a 100644 --- a/recipes/configs/llama3_1/8B_full.yaml +++ b/recipes/configs/llama3_1/8B_full.yaml @@ -39,13 +39,8 @@ model: checkpointer: _component_: torchtune.training.FullModelHFCheckpointer - checkpoint_dir: /tmp/Meta-Llama-3.1-8B-Instruct/ - checkpoint_files: [ - model-00001-of-00004.safetensors, - model-00002-of-00004.safetensors, - model-00003-of-00004.safetensors, - model-00004-of-00004.safetensors - ] + checkpoint_dir: hf://meta-llama/Llama-3.1-8B-Instruct/ + checkpoint_files: null recipe_checkpoint: null output_dir: ${output_dir} model_type: LLAMA3 diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 0beda5ca26..41f2cc5bab 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -4,7 +4,6 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. -import gc import json import os import re @@ -13,11 +12,15 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Protocol, Union +import fsspec + import torch import torch.distributed as dist from safetensors.torch import save_file from torch.distributed.checkpoint import ( + _HuggingFaceStorageReader, + _HuggingFaceStorageWriter, async_save, FileSystemReader, FileSystemWriter, @@ -25,13 +28,6 @@ save, ) -# Replace this with something that actually works -if version("torch") > (2, 7): - from torch.distributed.checkpoint import ( - _HuggingFaceStorageReader, - _HuggingFaceStorageWriter, - ) - from torchtune import training from torchtune.models import convert_weights from torchtune.training.checkpointing._utils import ( @@ -428,20 +424,25 @@ def __init__( ) self._safe_serialization = safe_serialization - self._checkpoint_dir = Path(checkpoint_dir) + self._checkpoint_dir = checkpoint_dir self._model_type = ModelType[model_type] - self._output_dir = Path(output_dir) + self._output_dir = output_dir check_outdir_not_in_ckptdir( ckpt_dir=self._checkpoint_dir, out_dir=self._output_dir ) - self._output_dir.mkdir(parents=True, exist_ok=True) # Use DCP specs if looking at the fsspec for HF if checkpoint_dir.startswith("hf://"): - self._straight_hf = True - assert checkpoint_files is None + self._dcp_hf = True + self._fs = fsspec.filesystem( + "hf", + ) + checkpoint_files = [] else: self._dcp_hf = False + self._fs = fsspec.filesystem("file") + + self._fs.mkdir(output_dir, parents=True, exist_ok=True) # weight_map contains the state_dict key -> checkpoint file mapping so we can correctly # parition the state dict into output checkpoint files. This is updated during checkpoint @@ -449,19 +450,21 @@ def __init__( self._weight_map: Dict[str, str] = None # the config.json file contains model params needed for state dict conversion - self._config = json.loads( - Path.joinpath(self._checkpoint_dir, "config.json").read_text() - ) + self._config = None + print(self._fs.ls(self._checkpoint_dir)) + with self._fs.open( + os.path.join(self._checkpoint_dir, "config.json"), "r" + ) as json_file: + self._config = json.loads(json_file.read()) # repo_id is necessary for when saving an adapter config, so its compatible with HF. # This json file is produced and saved in the download step. # contents are {"repo_id": "some_model/some_model_version"} - repo_id_path = Path.joinpath(self._checkpoint_dir, REPO_ID_FNAME).with_suffix( - ".json" - ) + repo_id_path = os.path.join(self._checkpoint_dir, REPO_ID_FNAME) + ".json" + self.repo_id = None - if repo_id_path.exists(): - with open(repo_id_path, "r") as json_file: + if self._fs.exists(repo_id_path): + with self._fs.open(repo_id_path, "r") as json_file: data = json.load(json_file) self.repo_id = data.get("repo_id") @@ -545,13 +548,21 @@ def load_checkpoint(self) -> Dict[str, Any]: # DCP load using the storage reader hf_storage_reader = _HuggingFaceStorageReader(path=self._checkpoint_dir) metadata = hf_storage_reader.read_metadata() - planner = _EmptyStateDictLoadPlanner() - planner.set_up_planner(state_dict={}, metadata=metadata) - merged_state_dict = load( - state_dict={}, + state_dict = {} + for key in metadata.state_dict_metadata.keys(): + # arbitrary value to ensure that the state_dict is not empty + state_dict[key] = torch.zeros(1) + + load( + state_dict=state_dict, storage_reader=_HuggingFaceStorageReader(path=self._checkpoint_dir), - load_planner=planner, ) + + merged_state_dict = state_dict + print("num keys in merged state dict: ", len(merged_state_dict.keys())) + for merged_key, merged_value in merged_state_dict.items(): + print("size of ", merged_key, merged_value.size()) + break else: merged_state_dict = self._manually_merge_sharded_state_dicts() diff --git a/torchtune/training/checkpointing/_utils.py b/torchtune/training/checkpointing/_utils.py index c6c26a14d6..537514afd2 100644 --- a/torchtune/training/checkpointing/_utils.py +++ b/torchtune/training/checkpointing/_utils.py @@ -403,10 +403,10 @@ def copy_files( def get_recipe_checkpoint_path( - output_dir: Path, + output_dir: str, recipe_checkpoint: Optional[str] = None, should_load_recipe_state: bool = False, -) -> Optional[Path]: +) -> Optional[str]: """ If recipe_checkpoint is None, look for recipe_state.pt in {output_dir}/{RECIPE_STATE_DIRNAME}/recipe_state.pt. This is to make it easier to resume from a previous run, without having to specify the recipe_checkpoint. @@ -437,15 +437,15 @@ def get_recipe_checkpoint_path( "If should_load_recipe_state is True, recipe_checkpoint file must be provided." ) - return Path(recipe_checkpoint_path) + return recipe_checkpoint_path def get_adapter_checkpoint_path( - output_dir: Path, + output_dir: str, adapter_checkpoint: Optional[str] = None, should_load_recipe_state: bool = False, pattern: str = r"^epoch_(\d+)", -) -> Optional[Path]: +) -> Optional[str]: r""" If adapter_checkpoint is None, look for it in {output_dir}/epoch_{latest_epoch}/adapter_model.pt. This is to make it easier to resume from a previous run, without having to specify the adapter_checkpoint. @@ -479,7 +479,7 @@ def get_adapter_checkpoint_path( if os.path.exists(tentative_adapter_checkpoint_path): adapter_checkpoint_path = tentative_adapter_checkpoint_path - return Path(adapter_checkpoint_path) if adapter_checkpoint_path else None + return adapter_checkpoint_path if adapter_checkpoint_path else None def get_model_checkpoint_path( @@ -581,11 +581,13 @@ def validate_checkpoint_files( return checkpoint_paths -def check_outdir_not_in_ckptdir(ckpt_dir: Path, out_dir: Path) -> bool: +def check_outdir_not_in_ckptdir(ckpt_dir: str, out_dir: str) -> bool: """ Checks that the output directory is not equal to or a subdirectory of the checkpoint directory. This is necessary to avoid making copies of copies when geting config files from ckpt_dir. """ + if ckpt_dir.startswith("hf://"): + return True # Resolve the absolute paths to avoid issues with relative paths _ckpt_dir = ckpt_dir.resolve() From f7d9af2464465e46cd81da358a979959b10a5a09 Mon Sep 17 00:00:00 2001 From: ankitageorge Date: Wed, 12 Mar 2025 08:45:03 -0700 Subject: [PATCH 05/22] writer --- recipes/configs/llama3_1/8B_full.yaml | 4 ++-- recipes/full_finetune_distributed.py | 3 +++ torchtune/training/checkpointing/_checkpointer.py | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/recipes/configs/llama3_1/8B_full.yaml b/recipes/configs/llama3_1/8B_full.yaml index 7b6b2de05a..8ca2d7e56d 100644 --- a/recipes/configs/llama3_1/8B_full.yaml +++ b/recipes/configs/llama3_1/8B_full.yaml @@ -23,7 +23,7 @@ output_dir: /tmp/torchtune/llama3_1_8B/full # /tmp may be deleted by your system # Tokenizer tokenizer: _component_: torchtune.models.llama3.llama3_tokenizer - path: /tmp/Meta-Llama-3.1-8B-Instruct/original/tokenizer.model + path: /home/ankitageorge/.cache/huggingface/hub/models--meta-llama--Llama-3.1-8B-Instruct/blobs/82e9d31979e92ab929cd544440f129d9ecd797b69e327f80f17e1c50d5551b55 max_seq_len: null # Dataset @@ -42,7 +42,7 @@ checkpointer: checkpoint_dir: hf://meta-llama/Llama-3.1-8B-Instruct/ checkpoint_files: null recipe_checkpoint: null - output_dir: ${output_dir} + output_dir: hf://ankitageorge/Llama-testing/ model_type: LLAMA3 resume_from_checkpoint: False diff --git a/recipes/full_finetune_distributed.py b/recipes/full_finetune_distributed.py index 97d902fc18..f65f141fa2 100644 --- a/recipes/full_finetune_distributed.py +++ b/recipes/full_finetune_distributed.py @@ -760,7 +760,10 @@ def train(self) -> None: for curr_epoch in range(self.epochs_run, self.total_epochs): pbar = tqdm(total=self._steps_per_epoch, disable=not self._is_rank_zero) self._dataloader.sampler.set_epoch(curr_epoch) + for idx, batch in enumerate(self._dataloader): + if idx > 100: + break # Start tracking CUDA memory for active steps for just the first epoch if ( self._is_rank_zero diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 41f2cc5bab..4906a9a5f7 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -22,6 +22,7 @@ _HuggingFaceStorageReader, _HuggingFaceStorageWriter, async_save, + DefaultLoadPlanner, FileSystemReader, FileSystemWriter, load, @@ -551,7 +552,7 @@ def load_checkpoint(self) -> Dict[str, Any]: state_dict = {} for key in metadata.state_dict_metadata.keys(): # arbitrary value to ensure that the state_dict is not empty - state_dict[key] = torch.zeros(1) + state_dict[key] = torch.empty(1) load( state_dict=state_dict, @@ -787,10 +788,9 @@ def save_checkpoint( if self._dcp_hf is not None: # DCP save using the storage writer storage_writer = _HuggingFaceStorageWriter( - _fqn_to_index_mapping=self._weight_map + path=self._checkpoint_dir, fqn_to_index_mapping=self._weight_map ) save( - checkpoint_id=self._checkpoint_dir, state_dict=state_dict, storage_writer=storage_writer, ) From 6a50abca076cc615da81018d750a94d8f9ae6a54 Mon Sep 17 00:00:00 2001 From: ankitageorge Date: Wed, 12 Mar 2025 11:01:27 -0700 Subject: [PATCH 06/22] saves working --- recipes/full_finetune_distributed.py | 1 + .../training/checkpointing/_checkpointer.py | 82 ++++++++++--------- torchtune/training/checkpointing/_utils.py | 21 +++-- 3 files changed, 57 insertions(+), 47 deletions(-) diff --git a/recipes/full_finetune_distributed.py b/recipes/full_finetune_distributed.py index f65f141fa2..186726f9be 100644 --- a/recipes/full_finetune_distributed.py +++ b/recipes/full_finetune_distributed.py @@ -135,6 +135,7 @@ def __init__(self, cfg: DictConfig) -> None: # Set up the backend for distributed training (NCCL, GLOO, etc.) self._enable_async_checkpointing = cfg.get("enable_async_checkpointing", True) + self._enable_dcp = cfg.get("enable_dcp", False) self.fsdp_cpu_offload = cfg.get("fsdp_cpu_offload", False) self.distributed_backend = training.get_distributed_backend( device_type, diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 4906a9a5f7..d80cff7a2b 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -16,6 +16,7 @@ import torch import torch.distributed as dist +from fsspec.core import url_to_fs from safetensors.torch import save_file from torch.distributed.checkpoint import ( @@ -432,16 +433,8 @@ def __init__( ckpt_dir=self._checkpoint_dir, out_dir=self._output_dir ) - # Use DCP specs if looking at the fsspec for HF - if checkpoint_dir.startswith("hf://"): - self._dcp_hf = True - self._fs = fsspec.filesystem( - "hf", - ) - checkpoint_files = [] - else: - self._dcp_hf = False - self._fs = fsspec.filesystem("file") + self._fs, _ = url_to_fs(self._checkpoint_dir) + self._enable_dcp = True self._fs.mkdir(output_dir, parents=True, exist_ok=True) @@ -452,7 +445,6 @@ def __init__( # the config.json file contains model params needed for state dict conversion self._config = None - print(self._fs.ls(self._checkpoint_dir)) with self._fs.open( os.path.join(self._checkpoint_dir, "config.json"), "r" ) as json_file: @@ -545,7 +537,7 @@ def load_checkpoint(self) -> Dict[str, Any]: # the recipe state and adapter weights converted_state_dict: Dict[str, Dict[str, torch.Tensor]] = {} - if self._dcp_hf: + if self._enable_dcp: # DCP load using the storage reader hf_storage_reader = _HuggingFaceStorageReader(path=self._checkpoint_dir) metadata = hf_storage_reader.read_metadata() @@ -554,16 +546,14 @@ def load_checkpoint(self) -> Dict[str, Any]: # arbitrary value to ensure that the state_dict is not empty state_dict[key] = torch.empty(1) + self._weight_map = metadata.storage_data + load( state_dict=state_dict, storage_reader=_HuggingFaceStorageReader(path=self._checkpoint_dir), ) merged_state_dict = state_dict - print("num keys in merged state dict: ", len(merged_state_dict.keys())) - for merged_key, merged_value in merged_state_dict.items(): - print("size of ", merged_key, merged_value.size()) - break else: merged_state_dict = self._manually_merge_sharded_state_dicts() @@ -785,13 +775,18 @@ def save_checkpoint( head_dim=self._config.get("head_dim", None), ) - if self._dcp_hf is not None: + if self._enable_dcp is not None: # DCP save using the storage writer + fqn_to_file_index_mapping = {} + for fqn, filename in self._weight_map.items(): + index = int(filename.split("-")[1]) + fqn_to_file_index_mapping[fqn] = index storage_writer = _HuggingFaceStorageWriter( - path=self._checkpoint_dir, fqn_to_index_mapping=self._weight_map + path=self._output_dir, + fqn_to_index_mapping=fqn_to_file_index_mapping, ) save( - state_dict=state_dict, + state_dict=state_dict[training.MODEL_KEY], storage_writer=storage_writer, ) else: @@ -812,15 +807,17 @@ def save_checkpoint( num_shards=f"{num_shards}".zfill(5), ) map_original_name_to_new_name[cpt_idx] = shard_name - output_path = Path.joinpath( + output_path = os.path.join( self._output_dir, f"epoch_{epoch}", shard_name ) - output_path.parent.mkdir(parents=True, exist_ok=True) + self._fs.mkdir( + os.path.dirname(output_path), parents=True, exist_ok=True + ) if not self._safe_serialization: - output_path = output_path.with_suffix(".bin") + output_path = output_path + ".bin" torch.save(model_state_dict, output_path) else: - output_path = output_path.with_suffix(".safetensors") + output_path = output_path + ".safetensors" save_file( model_state_dict, output_path, metadata={"format": "pt"} ) @@ -846,7 +843,7 @@ def save_checkpoint( } index_file_name = TORCH_INDEX_FNAME - index_path = Path.joinpath( + index_path = os.path.join( self._output_dir, f"epoch_{epoch}", index_file_name ) @@ -863,10 +860,11 @@ def save_checkpoint( # convert_weights.tune_to_peft_adapter_weights, we do NOT have a fn # convert_weights.peft_to_tune. The .pt format is not needed, but # it is an easy way to distinguish the adapters. Ideally we should save only one. - output_path = Path.joinpath( - self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME - ).with_suffix(".pt") - output_path.parent.mkdir(parents=True, exist_ok=True) + output_path = ( + os.path.join(self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME) + + ".pt" + ) + self._fs.mkdir(os.path.dirname(output_path), parents=True, exist_ok=True) torch.save(state_dict[training.ADAPTER_KEY], output_path) logger.info( "Adapter checkpoint of size " @@ -892,15 +890,17 @@ def save_checkpoint( head_dim=self._config.get("head_dim", None), ) ) - output_path = Path.joinpath( + output_path = os.path.join( self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME ) - output_path.parent.mkdir(parents=True, exist_ok=True) + self._fs.mkdir( + os.path.dirname(output_path), parents=True, exist_ok=True + ) if not self._safe_serialization: - output_path = output_path.with_suffix(".bin") + output_path = output_path + ".bin" torch.save(state_dict[training.ADAPTER_KEY], output_path) else: - output_path = output_path.with_suffix(".safetensors") + output_path = output_path + ".safetensors" save_file( state_dict[training.ADAPTER_KEY], output_path, @@ -933,10 +933,13 @@ def save_checkpoint( ) ) - output_path = Path.joinpath( - self._output_dir, f"epoch_{epoch}", ADAPTER_CONFIG_FNAME - ).with_suffix(".json") - with open(output_path, "w") as f: + output_path = ( + os.path.join( + self._output_dir, f"epoch_{epoch}", ADAPTER_CONFIG_FNAME + ) + + ".json" + ) + with self._fs.open(output_path, "w") as f: json.dump(state_dict[training.ADAPTER_CONFIG], f) logger.info( "Adapter checkpoint of size " @@ -948,7 +951,7 @@ def save_checkpoint( # So its easy to run inference with the model using this epoch's checkpoint copy_files( self._checkpoint_dir, - Path.joinpath(self._output_dir, f"epoch_{epoch}"), + os.path.join(self._output_dir, f"epoch_{epoch}"), ignore_suffixes=SUFFIXES_TO_NOT_COPY, ) @@ -958,10 +961,11 @@ def save_checkpoint( _ = state_dict.pop(training.MODEL_KEY, None) _ = state_dict.pop(training.ADAPTER_KEY, None) _ = state_dict.pop(training.ADAPTER_CONFIG, None) - output_path = Path.joinpath( + output_path = os.path.join( self._output_dir, RECIPE_STATE_DIRNAME, "recipe_state.pt" ) - output_path.parent.mkdir(parents=True, exist_ok=True) + parent_path = os.path.dirname(output_path) + self._fs.mkdir(parent_path, parents=True, exist_ok=True) torch.save(state_dict, output_path) logger.info( "Recipe checkpoint of size " diff --git a/torchtune/training/checkpointing/_utils.py b/torchtune/training/checkpointing/_utils.py index 537514afd2..583700892c 100644 --- a/torchtune/training/checkpointing/_utils.py +++ b/torchtune/training/checkpointing/_utils.py @@ -14,6 +14,7 @@ from warnings import warn import torch +from fsspec import FileSystem, LocalFileSystem from safetensors import safe_open from torchtune.utils._logging import get_logger @@ -403,7 +404,7 @@ def copy_files( def get_recipe_checkpoint_path( - output_dir: str, + output_dir: Union[str, Path], recipe_checkpoint: Optional[str] = None, should_load_recipe_state: bool = False, ) -> Optional[str]: @@ -441,7 +442,7 @@ def get_recipe_checkpoint_path( def get_adapter_checkpoint_path( - output_dir: str, + output_dir: Union[Path, str], adapter_checkpoint: Optional[str] = None, should_load_recipe_state: bool = False, pattern: str = r"^epoch_(\d+)", @@ -581,17 +582,21 @@ def validate_checkpoint_files( return checkpoint_paths -def check_outdir_not_in_ckptdir(ckpt_dir: str, out_dir: str) -> bool: +def check_outdir_not_in_ckptdir( + ckpt_dir: Union[Path, str], out_dir: Union[Path, str] +) -> bool: """ Checks that the output directory is not equal to or a subdirectory of the checkpoint directory. This is necessary to avoid making copies of copies when geting config files from ckpt_dir. """ - if ckpt_dir.startswith("hf://"): - return True - # Resolve the absolute paths to avoid issues with relative paths - _ckpt_dir = ckpt_dir.resolve() - _out_dir = out_dir.resolve() + if isinstance(ckpt_dir, Path): + _ckpt_dir = ckpt_dir.resolve() + if isinstance(out_dir, Path): + _out_dir = out_dir.resolve() + + _ckpt_dir = Path(ckpt_dir) + _out_dir = Path(out_dir) # Check if out_dir is the same as ckpt_dir or a subdirectory of it if _out_dir == _ckpt_dir or _ckpt_dir in _out_dir.parents: From f71d7b74158fef2ef1d198a4981923f2227bc172 Mon Sep 17 00:00:00 2001 From: ankitageorge Date: Wed, 12 Mar 2025 12:59:50 -0700 Subject: [PATCH 07/22] add arg --- recipes/configs/llama3_1/8B_full.yaml | 3 ++- recipes/full_finetune_distributed.py | 3 +-- .../checkpointing/_checkpoint_client.py | 8 +++---- .../training/checkpointing/_checkpointer.py | 23 +++++++++++-------- torchtune/training/checkpointing/_utils.py | 1 - 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/recipes/configs/llama3_1/8B_full.yaml b/recipes/configs/llama3_1/8B_full.yaml index 8ca2d7e56d..de297b2188 100644 --- a/recipes/configs/llama3_1/8B_full.yaml +++ b/recipes/configs/llama3_1/8B_full.yaml @@ -40,10 +40,11 @@ model: checkpointer: _component_: torchtune.training.FullModelHFCheckpointer checkpoint_dir: hf://meta-llama/Llama-3.1-8B-Instruct/ - checkpoint_files: null + checkpoint_files: [] recipe_checkpoint: null output_dir: hf://ankitageorge/Llama-testing/ model_type: LLAMA3 + enable_dcp: True resume_from_checkpoint: False # Fine-tuning arguments diff --git a/recipes/full_finetune_distributed.py b/recipes/full_finetune_distributed.py index 186726f9be..8d29ed0a18 100644 --- a/recipes/full_finetune_distributed.py +++ b/recipes/full_finetune_distributed.py @@ -134,8 +134,7 @@ def __init__(self, cfg: DictConfig) -> None: ) # Set up the backend for distributed training (NCCL, GLOO, etc.) - self._enable_async_checkpointing = cfg.get("enable_async_checkpointing", True) - self._enable_dcp = cfg.get("enable_dcp", False) + self._enable_async_checkpointing = cfg.get("enable_async_checkpointing", False) self.fsdp_cpu_offload = cfg.get("fsdp_cpu_offload", False) self.distributed_backend = training.get_distributed_backend( device_type, diff --git a/torchtune/training/checkpointing/_checkpoint_client.py b/torchtune/training/checkpointing/_checkpoint_client.py index 59518faf7a..e8e1d6d258 100644 --- a/torchtune/training/checkpointing/_checkpoint_client.py +++ b/torchtune/training/checkpointing/_checkpoint_client.py @@ -217,10 +217,10 @@ def _save_checkpoint_sync( ) else: for param, opt in optimizer.optim_map.items(): - optim_state_dict[ - param - ] = training.get_full_optimizer_state_dict( - model, opt, self._is_rank_zero, device=self._device + optim_state_dict[param] = ( + training.get_full_optimizer_state_dict( + model, opt, self._is_rank_zero, device=self._device + ) ) else: optim_state_dict = optimizer.state_dict() diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index d80cff7a2b..1f6362b497 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -416,8 +416,8 @@ def __init__( resume_from_checkpoint: bool = False, safe_serialization: bool = True, should_load_recipe_state: bool = False, + enable_dcp: bool = False, ) -> None: - self._should_load_recipe_state = should_load_recipe_state if resume_from_checkpoint: self._should_load_recipe_state = resume_from_checkpoint @@ -432,11 +432,17 @@ def __init__( check_outdir_not_in_ckptdir( ckpt_dir=self._checkpoint_dir, out_dir=self._output_dir ) + self._enable_dcp = enable_dcp self._fs, _ = url_to_fs(self._checkpoint_dir) - self._enable_dcp = True + output_fs, _ = url_to_fs(self._output_dir) + if self._fs != output_fs: + raise ValueError( + f"Checkpoint and output directories must be on the same filesystem. " + f"Got {self._fs} and {output_fs} instead." + ) - self._fs.mkdir(output_dir, parents=True, exist_ok=True) + self._fs.mkdir(output_dir, exist_ok=True) # weight_map contains the state_dict key -> checkpoint file mapping so we can correctly # parition the state dict into output checkpoint files. This is updated during checkpoint @@ -775,7 +781,7 @@ def save_checkpoint( head_dim=self._config.get("head_dim", None), ) - if self._enable_dcp is not None: + if self._enable_dcp: # DCP save using the storage writer fqn_to_file_index_mapping = {} for fqn, filename in self._weight_map.items(): @@ -864,7 +870,7 @@ def save_checkpoint( os.path.join(self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME) + ".pt" ) - self._fs.mkdir(os.path.dirname(output_path), parents=True, exist_ok=True) + self._fs.mkdir(os.path.dirname(output_path), exist_ok=True) torch.save(state_dict[training.ADAPTER_KEY], output_path) logger.info( "Adapter checkpoint of size " @@ -893,9 +899,7 @@ def save_checkpoint( output_path = os.path.join( self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME ) - self._fs.mkdir( - os.path.dirname(output_path), parents=True, exist_ok=True - ) + self._fs.mkdir(os.path.dirname(output_path), exist_ok=True) if not self._safe_serialization: output_path = output_path + ".bin" torch.save(state_dict[training.ADAPTER_KEY], output_path) @@ -953,6 +957,7 @@ def save_checkpoint( self._checkpoint_dir, os.path.join(self._output_dir, f"epoch_{epoch}"), ignore_suffixes=SUFFIXES_TO_NOT_COPY, + fs=self._fs, ) # If the recipe state needs to be output, first remove the model state dict @@ -965,7 +970,7 @@ def save_checkpoint( self._output_dir, RECIPE_STATE_DIRNAME, "recipe_state.pt" ) parent_path = os.path.dirname(output_path) - self._fs.mkdir(parent_path, parents=True, exist_ok=True) + self._fs.mkdir(parent_path, exist_ok=True) torch.save(state_dict, output_path) logger.info( "Recipe checkpoint of size " diff --git a/torchtune/training/checkpointing/_utils.py b/torchtune/training/checkpointing/_utils.py index 583700892c..8aa3846105 100644 --- a/torchtune/training/checkpointing/_utils.py +++ b/torchtune/training/checkpointing/_utils.py @@ -14,7 +14,6 @@ from warnings import warn import torch -from fsspec import FileSystem, LocalFileSystem from safetensors import safe_open from torchtune.utils._logging import get_logger From db5539d1a463f9fbca38d60ce4f230ca1a404735 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 13 Mar 2025 07:07:03 -0700 Subject: [PATCH 08/22] dcp hf --- recipes/configs/llama3_1/8B_full.yaml | 2 +- .../training/checkpointing/_checkpointer.py | 3 +-- torchtune/training/checkpointing/_utils.py | 21 ++++++++++++------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/recipes/configs/llama3_1/8B_full.yaml b/recipes/configs/llama3_1/8B_full.yaml index de297b2188..612bcc48ee 100644 --- a/recipes/configs/llama3_1/8B_full.yaml +++ b/recipes/configs/llama3_1/8B_full.yaml @@ -36,7 +36,7 @@ shuffle: True # Model Arguments model: _component_: torchtune.models.llama3_1.llama3_1_8b - +# temp changes for testing locally checkpointer: _component_: torchtune.training.FullModelHFCheckpointer checkpoint_dir: hf://meta-llama/Llama-3.1-8B-Instruct/ diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 1f6362b497..7c3664e659 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -788,7 +788,7 @@ def save_checkpoint( index = int(filename.split("-")[1]) fqn_to_file_index_mapping[fqn] = index storage_writer = _HuggingFaceStorageWriter( - path=self._output_dir, + path=os.path.join(self._output_dir, f"epoch_{epoch}"), fqn_to_index_mapping=fqn_to_file_index_mapping, ) save( @@ -957,7 +957,6 @@ def save_checkpoint( self._checkpoint_dir, os.path.join(self._output_dir, f"epoch_{epoch}"), ignore_suffixes=SUFFIXES_TO_NOT_COPY, - fs=self._fs, ) # If the recipe state needs to be output, first remove the model state dict diff --git a/torchtune/training/checkpointing/_utils.py b/torchtune/training/checkpointing/_utils.py index 8aa3846105..656374538e 100644 --- a/torchtune/training/checkpointing/_utils.py +++ b/torchtune/training/checkpointing/_utils.py @@ -14,6 +14,7 @@ from warnings import warn import torch +from fsspec.core import url_to_fs from safetensors import safe_open from torchtune.utils._logging import get_logger @@ -360,19 +361,23 @@ def copy_files( This will copy all files from 'path/to/input_dir' to 'path/to/output_dir', except those that already exist in the destination or have the specified suffixes. """ - + fs, _ = url_to_fs(input_dir) max_file_size = max_file_size_mb * 1024 * 1024 - for root, dirs, files in os.walk(input_dir): + for root, dirs, files in fs.walk(input_dir): # Filter out directories that start with '.'. E.g. ".cache/" dirs[:] = [d for d in dirs if not d.startswith(".")] # Construct the corresponding directory in the output - relative_path = os.path.relpath(root, input_dir) - dest_dir = os.path.join(output_dir, relative_path) + protocol = fs.protocol if isinstance(fs.protocol, tuple) else (fs.protocol) + if "local" in protocol: + relative_path = os.path.relpath(root, input_dir) + dest_dir = os.path.join(output_dir, relative_path) + else: + dest_dir = output_dir # Create the directory in the output if it doesn't exist - os.makedirs(dest_dir, exist_ok=True) + fs.makedirs(dest_dir, exist_ok=True) for file in files: # Skip files that start with '.'. E.g. ".git" @@ -389,15 +394,15 @@ def copy_files( dest_file = os.path.join(dest_dir, file) # Check the file size - if os.path.getsize(src_file) > max_file_size: + if fs.size(src_file) > max_file_size: print( f"Skipping copying {src_file} to {output_dir} as it exceeds the size limit of {max_file_size_mb} MiB." ) continue # Copy the file if it doesn't already exist in the destination - if not os.path.exists(dest_file): - shutil.copy2(src_file, dest_file) + if not fs.exists(dest_file): + fs.cp_file(src_file, dest_file) return From 37f03e5d0a6ed0c766143a5e196fc64a59bfeff9 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 13 Mar 2025 07:16:24 -0700 Subject: [PATCH 09/22] clean up --- recipes/full_finetune_distributed.py | 1 + .../checkpointing/_checkpoint_client.py | 12 +++-- .../training/checkpointing/_checkpointer.py | 44 +++++++++---------- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/recipes/full_finetune_distributed.py b/recipes/full_finetune_distributed.py index 8d29ed0a18..1e5ce2bcd1 100644 --- a/recipes/full_finetune_distributed.py +++ b/recipes/full_finetune_distributed.py @@ -762,6 +762,7 @@ def train(self) -> None: self._dataloader.sampler.set_epoch(curr_epoch) for idx, batch in enumerate(self._dataloader): + # temp for testing if idx > 100: break # Start tracking CUDA memory for active steps for just the first epoch diff --git a/torchtune/training/checkpointing/_checkpoint_client.py b/torchtune/training/checkpointing/_checkpoint_client.py index e8e1d6d258..4b9e11d1c3 100644 --- a/torchtune/training/checkpointing/_checkpoint_client.py +++ b/torchtune/training/checkpointing/_checkpoint_client.py @@ -6,7 +6,7 @@ import time from dataclasses import dataclass -from typing import Any, Dict, Optional, Union +from typing import Any, Dict, Union import torch from omegaconf import DictConfig @@ -33,7 +33,6 @@ class TrainingProgress: epochs_run: int total_epochs: int max_steps_per_epoch: int - dataloader_state_dict: Optional[Dict[str, Any]] = None def state_dict(self) -> Dict[str, object]: return { @@ -41,7 +40,6 @@ def state_dict(self) -> Dict[str, object]: training.EPOCHS_KEY: self.epochs_run, training.TOTAL_EPOCHS_KEY: self.total_epochs, training.MAX_STEPS_KEY: self.max_steps_per_epoch, - training.DATALOADER_KEY: self.dataloader_state_dict, } @@ -217,10 +215,10 @@ def _save_checkpoint_sync( ) else: for param, opt in optimizer.optim_map.items(): - optim_state_dict[param] = ( - training.get_full_optimizer_state_dict( - model, opt, self._is_rank_zero, device=self._device - ) + optim_state_dict[ + param + ] = training.get_full_optimizer_state_dict( + model, opt, self._is_rank_zero, device=self._device ) else: optim_state_dict = optimizer.state_dict() diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 7c3664e659..8821694a2f 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -4,6 +4,7 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. +import gc import json import os import re @@ -12,8 +13,6 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Protocol, Union -import fsspec - import torch import torch.distributed as dist from fsspec.core import url_to_fs @@ -499,25 +498,6 @@ def __init__( f"\n\tadapter_checkpoint: {self._adapter_checkpoint}" ) - def _manually_merge_sharded_state_dicts(self): - # merged state_dict contains keys and weights from all the checkpoint files - merged_state_dict: Dict[str, torch.Tensor] = {} - # _checkpoint_paths are already sorted so simply enumerate to generate the right id - for cpt_idx, cpt_path in enumerate(self._checkpoint_paths): - state_dict = safe_torch_load(cpt_path) - for key, value in state_dict.items(): - # Ensure that the state dict is a flat dict of keys and tensors. Breaking this assumption - # will break recipe code - if not isinstance(value, torch.Tensor): - raise ValueError( - f"Expected all values in the state dict to be torch.Tensor. " - f"Found {type(value)} instead." - ) - # idx is written in the 4 digit format (eg: 0001, 0002, etc.) - self._weight_map[key] = f"{cpt_idx + 1:04}" - merged_state_dict.update(state_dict) - return merged_state_dict - def load_checkpoint(self) -> Dict[str, Any]: """ Load HF checkpoint from file. @@ -538,11 +518,13 @@ def load_checkpoint(self) -> Dict[str, Any]: self._weight_map = {} + # merged state_dict contains keys and weights from all the checkpoint files + merged_state_dict: Dict[str, torch.Tensor] = {} + # converted_state_dict is the final state_dict passed to the recipe after the # keys are converted into the torchtune format. This optionally also contains # the recipe state and adapter weights converted_state_dict: Dict[str, Dict[str, torch.Tensor]] = {} - if self._enable_dcp: # DCP load using the storage reader hf_storage_reader = _HuggingFaceStorageReader(path=self._checkpoint_dir) @@ -561,7 +543,23 @@ def load_checkpoint(self) -> Dict[str, Any]: merged_state_dict = state_dict else: - merged_state_dict = self._manually_merge_sharded_state_dicts() + for cpt_idx, cpt_path in enumerate(self._checkpoint_paths): + state_dict = safe_torch_load(cpt_path) + for key, value in state_dict.items(): + # Ensure that the state dict is a flat dict of keys and tensors. Breaking this assumption + # will break recipe code + if not isinstance(value, torch.Tensor): + raise ValueError( + f"Expected all values in the state dict to be torch.Tensor. " + f"Found {type(value)} instead." + ) + # idx is written in the 4 digit format (eg: 0001, 0002, etc.) + self._weight_map[key] = f"{cpt_idx + 1:04}" + merged_state_dict.update(state_dict) + + # delete the state_dict to free up memory; TODO check if this del is needed + del state_dict + gc.collect() if self._model_type == ModelType.PHI3_MINI: log_rank_zero( From 87a839daa2608b10f937ee91bfc0c8c616ec7ad3 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 13 Mar 2025 07:28:54 -0700 Subject: [PATCH 10/22] fix save --- .../checkpointing/_checkpoint_client.py | 12 ++----- .../training/checkpointing/_checkpointer.py | 35 +++++++++++-------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/torchtune/training/checkpointing/_checkpoint_client.py b/torchtune/training/checkpointing/_checkpoint_client.py index 4b9e11d1c3..5a43812c2f 100644 --- a/torchtune/training/checkpointing/_checkpoint_client.py +++ b/torchtune/training/checkpointing/_checkpoint_client.py @@ -1,16 +1,9 @@ -# Copyright (c) Meta Platforms, Inc. and affiliates. -# All rights reserved. -# -# This source code is licensed under the BSD-style license found in the -# LICENSE file in the root directory of this source tree. - import time from dataclasses import dataclass -from typing import Any, Dict, Union +from typing import Any, Dict, Optional, Union import torch from omegaconf import DictConfig - from torch.distributed.checkpoint.state_dict import ( _init_optim_state, set_model_state_dict, @@ -28,11 +21,11 @@ class TrainingProgress: """ This is training progress metadata. """ - seed: int epochs_run: int total_epochs: int max_steps_per_epoch: int + dataloader_state_dict: Optional[Dict[str, Any]] = None def state_dict(self) -> Dict[str, object]: return { @@ -40,6 +33,7 @@ def state_dict(self) -> Dict[str, object]: training.EPOCHS_KEY: self.epochs_run, training.TOTAL_EPOCHS_KEY: self.total_epochs, training.MAX_STEPS_KEY: self.max_steps_per_epoch, + training.DATALOADER_KEY: self.dataloader_state_dict, } diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 8821694a2f..a6d6cb6bc2 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -794,10 +794,22 @@ def save_checkpoint( storage_writer=storage_writer, ) else: - ( - split_state_dicts, - total_size, - ) = self._generate_splits_for_sharded_state_dict(state_dict) + # split the state_dict into separate dicts, one for each output checkpoint file + # e.g. split_state_dicts= { + # "0001": {"key1": tensor1, "key2": tensor2}, + # "0002": {"key3": tensor3} + # } + split_state_dicts: Dict[str, Dict[str, torch.Tensor]] = {} + total_size = 0 + for key, weight in state_dict[training.MODEL_KEY].items(): + cpt_idx = self._weight_map[key] + + # initialize dict + if cpt_idx not in split_state_dicts: + split_state_dicts[cpt_idx] = {} + + split_state_dicts[cpt_idx].update({key: weight}) + total_size += weight.numel() * weight.element_size() # write the partitioned state dicts to the right checkpoint file # e.g. model-00001-of-00004.safetensors, model-00002-of-00004.safetensors, etc @@ -807,24 +819,19 @@ def save_checkpoint( # TODO: We should probably use the original shard name and just add a prefix # however, having the SHARD_FNAME standardizes our checkpoints shard_name = SHARD_FNAME.format( - cpt_idx=f"{cpt_idx}".zfill(5), - num_shards=f"{num_shards}".zfill(5), + cpt_idx=f"{cpt_idx}".zfill(5), num_shards=f"{num_shards}".zfill(5) ) map_original_name_to_new_name[cpt_idx] = shard_name output_path = os.path.join( self._output_dir, f"epoch_{epoch}", shard_name ) - self._fs.mkdir( - os.path.dirname(output_path), parents=True, exist_ok=True - ) + self._fs.mkdir(os.path.dirname(output_path), exist_ok=True) if not self._safe_serialization: - output_path = output_path + ".bin" + output_path = output_path = ".bin" torch.save(model_state_dict, output_path) else: output_path = output_path + ".safetensors" - save_file( - model_state_dict, output_path, metadata={"format": "pt"} - ) + save_file(model_state_dict, output_path, metadata={"format": "pt"}) logger.info( "Model checkpoint of size " @@ -855,7 +862,7 @@ def save_checkpoint( "metadata": {"total_size": total_size}, "weight_map": weight_map, } - with open(index_path, "w") as f: + with self._fs.open(index_path, "w") as f: json.dump(index_data, f, indent=2) if training.ADAPTER_KEY in state_dict: From e5816bc2b80c3e776ac1a160a9d7f965efeaab67 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 13 Mar 2025 07:47:34 -0700 Subject: [PATCH 11/22] remove fn --- .../checkpointing/_checkpoint_client.py | 8 ++++++++ .../training/checkpointing/_checkpointer.py | 19 ------------------- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/torchtune/training/checkpointing/_checkpoint_client.py b/torchtune/training/checkpointing/_checkpoint_client.py index 5a43812c2f..827a0f50da 100644 --- a/torchtune/training/checkpointing/_checkpoint_client.py +++ b/torchtune/training/checkpointing/_checkpoint_client.py @@ -1,9 +1,16 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + import time from dataclasses import dataclass from typing import Any, Dict, Optional, Union import torch from omegaconf import DictConfig + from torch.distributed.checkpoint.state_dict import ( _init_optim_state, set_model_state_dict, @@ -21,6 +28,7 @@ class TrainingProgress: """ This is training progress metadata. """ + seed: int epochs_run: int total_epochs: int diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index a6d6cb6bc2..06a6628c18 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -665,25 +665,6 @@ def load_checkpoint(self) -> Dict[str, Any]: return converted_state_dict - def _generate_splits_for_sharded_state_dict(state_dict: Dict[str, torch.Tensor]): - # split the state_dict into separate dicts, one for each output checkpoint file - # e.g. split_state_dicts= { - # "0001": {"key1": tensor1, "key2": tensor2}, - # "0002": {"key3": tensor3} - # } - split_state_dicts: Dict[str, Dict[str, torch.Tensor]] = {} - total_size = 0 - for key, weight in state_dict[training.MODEL_KEY].items(): - cpt_idx = self._weight_map[key] - - # initialize dict - if cpt_idx not in split_state_dicts: - split_state_dicts[cpt_idx] = {} - - split_state_dicts[cpt_idx].update({key: weight}) - total_size += weight.numel() * weight.element_size() - return split_state_dicts, total_size - def save_checkpoint( self, state_dict: Dict[str, Any], From 98586c9c01a905c37211a03c9ceb1cbb3ece8db0 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 13 Mar 2025 07:47:34 -0700 Subject: [PATCH 12/22] New commit message --- .../checkpointing/_checkpoint_client.py | 8 +++++ .../training/checkpointing/_checkpointer.py | 30 ++++--------------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/torchtune/training/checkpointing/_checkpoint_client.py b/torchtune/training/checkpointing/_checkpoint_client.py index 5a43812c2f..59518faf7a 100644 --- a/torchtune/training/checkpointing/_checkpoint_client.py +++ b/torchtune/training/checkpointing/_checkpoint_client.py @@ -1,9 +1,16 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + import time from dataclasses import dataclass from typing import Any, Dict, Optional, Union import torch from omegaconf import DictConfig + from torch.distributed.checkpoint.state_dict import ( _init_optim_state, set_model_state_dict, @@ -21,6 +28,7 @@ class TrainingProgress: """ This is training progress metadata. """ + seed: int epochs_run: int total_epochs: int diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index a6d6cb6bc2..160d8d1338 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -114,9 +114,11 @@ class _CheckpointerInterface(Protocol): """ - def load_checkpoint(self, **kwargs) -> Dict[str, Any]: ... + def load_checkpoint(self, **kwargs) -> Dict[str, Any]: + ... - def save_checkpoint(self, state_dict: Dict[str, Any], **kwargs) -> None: ... + def save_checkpoint(self, state_dict: Dict[str, Any], **kwargs) -> None: + ... class FullModelTorchTuneCheckpointer(_CheckpointerInterface): @@ -536,10 +538,7 @@ def load_checkpoint(self) -> Dict[str, Any]: self._weight_map = metadata.storage_data - load( - state_dict=state_dict, - storage_reader=_HuggingFaceStorageReader(path=self._checkpoint_dir), - ) + load(state_dict=state_dict, storage_reader=hf_storage_reader) merged_state_dict = state_dict else: @@ -665,25 +664,6 @@ def load_checkpoint(self) -> Dict[str, Any]: return converted_state_dict - def _generate_splits_for_sharded_state_dict(state_dict: Dict[str, torch.Tensor]): - # split the state_dict into separate dicts, one for each output checkpoint file - # e.g. split_state_dicts= { - # "0001": {"key1": tensor1, "key2": tensor2}, - # "0002": {"key3": tensor3} - # } - split_state_dicts: Dict[str, Dict[str, torch.Tensor]] = {} - total_size = 0 - for key, weight in state_dict[training.MODEL_KEY].items(): - cpt_idx = self._weight_map[key] - - # initialize dict - if cpt_idx not in split_state_dicts: - split_state_dicts[cpt_idx] = {} - - split_state_dicts[cpt_idx].update({key: weight}) - total_size += weight.numel() * weight.element_size() - return split_state_dicts, total_size - def save_checkpoint( self, state_dict: Dict[str, Any], From 06c8107208c434567207d1c417c5609fee917359 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 07:09:52 -0700 Subject: [PATCH 13/22] add test --- .../checkpointing/test_checkpointer.py | 250 ++++++++++++++++++ 1 file changed, 250 insertions(+) diff --git a/tests/torchtune/training/checkpointing/test_checkpointer.py b/tests/torchtune/training/checkpointing/test_checkpointer.py index 5bf885512e..209796911b 100644 --- a/tests/torchtune/training/checkpointing/test_checkpointer.py +++ b/tests/torchtune/training/checkpointing/test_checkpointer.py @@ -328,6 +328,136 @@ def test_save_load_checkpoint_multiple_file( assert len(output_state_dict_1.keys()) + 1 == len(orig_state_dict_1.keys()) assert len(output_state_dict_2.keys()) + 1 == len(orig_state_dict_2.keys()) + def test_load_save_checkpoint_single_file_with_dcp( + self, + single_file_checkpointer: FullModelHFCheckpointer, + llama2_hf_checkpoints: Tuple[Path, Path], + ): + """ + Test ``load_checkpoint`` and ``save_checkpoint`` method within the + FullModelHFCheckpointer for a single checkpoint file. + + We test: + * ``load_checkpoint`` loads the right sets of keys + * Internal state of the checkpointer is correctly updated + * Converted checkpoint can be loaded into the llama2 torchtune implementation + * Saved checkpoint keys match the original checkpoint + """ + single_file_checkpointer._enable_dcp = True + # Read the state dict directly from file using torch.load. This will be the state + # dict we test against + checkpoint_file, _ = llama2_hf_checkpoints + orig_state_dict = safe_torch_load(checkpoint_file) + + # Converted state dict from the checkpointer + state_dict = single_file_checkpointer.load_checkpoint() + + # Check that we've loaded all the keys; We ignore inv_freq as is standard practice + assert len(state_dict["model"].keys()) + 1 == len(orig_state_dict.keys()) + + # the keys in original state dict should match up with the keys in the weight_map + for key in orig_state_dict.keys(): + if "inv_freq" in key: + continue + assert key in single_file_checkpointer._weight_map + + # loading the state dict into the model implementation should work correctly + model = llama2.llama2( + vocab_size=_VOCAB_SIZE, + num_layers=1, + num_heads=_NUM_HEADS, + num_kv_heads=_NUM_KV_HEADS, + embed_dim=_DIM, + max_seq_len=128, + ) + model.load_state_dict(state_dict["model"]) + + single_file_checkpointer.save_checkpoint(state_dict, epoch=1) + + # Reload the output checkpoint file and compare to the original checkpoint. This + # assumes we know what the name of the file is. This is fine, breaking this logic + # should be something we capture through this test + output_file = Path.joinpath( + checkpoint_file.parent.parent / "output_dir", + "epoch_1", + SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="1".zfill(5)), + ).with_suffix(".safetensors") + output_state_dict = safe_torch_load(output_file) + + # We ignore inv_freq as is standard practice and so output dict will have one less key + assert len(output_state_dict.keys()) + 1 == len(orig_state_dict.keys()) + + def test_save_load_checkpoint_multiple_file_with_dcp( + self, + multi_file_checkpointer: FullModelHFCheckpointer, + llama2_hf_checkpoints: Tuple[Path, Path], + ): + """ + Test ``load_checkpoint`` method within the FullModelCheckpointer for multiple + checkpoint file. + + We test: + * ``load_checkpoint`` loads the right sets of keys + * Internal state of the checkpointer is correctly updated + * Converted checkpoint can be loaded into the llama2 torchtune implementation + """ + multi_file_checkpointer._enable_dcp = True + # Read the state dict directly from files + checkpoint_file_1, checkpoint_file_2 = llama2_hf_checkpoints + orig_state_dict_1 = safe_torch_load(checkpoint_file_1) + orig_state_dict_2 = safe_torch_load(checkpoint_file_2) + + # merged state dict from checkpointer + state_dict = multi_file_checkpointer.load_checkpoint() + + # We ignore inv_freq as is standard practice + assert len(state_dict["model"].keys()) + 2 == len( + orig_state_dict_1.keys() + ) + len(orig_state_dict_2.keys()) + + # the keys in the weight_map should match up with the keys in the weight_map + for key in orig_state_dict_1.keys(): + if "inv_freq" in key: + continue + assert key in multi_file_checkpointer._weight_map + + for key in orig_state_dict_2.keys(): + if "inv_freq" in key: + continue + assert key in multi_file_checkpointer._weight_map + + # finally loading into the model should work + model = llama2.llama2( + vocab_size=_VOCAB_SIZE, + num_layers=2, + num_heads=_NUM_HEADS, + num_kv_heads=_NUM_KV_HEADS, + embed_dim=_DIM, + max_seq_len=128, + ) + model.load_state_dict(state_dict["model"]) + + multi_file_checkpointer.save_checkpoint(state_dict, epoch=1) + + # Reload the output checkpoint file and compare to the original checkpoint. This + # assumes we know what the name of the file is. This is fine, breaking this logic + # should be something we capture through this test + output_file_1 = Path.joinpath( + checkpoint_file_1.parent.parent / "output_dir", + "epoch_1", + SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="2".zfill(5)), + ).with_suffix(".safetensors") + output_file_2 = Path.joinpath( + checkpoint_file_2.parent.parent / "output_dir", + "epoch_1", + SHARD_FNAME.format(cpt_idx="2".zfill(5), num_shards="2".zfill(5)), + ).with_suffix(".safetensors") + output_state_dict_1 = safe_torch_load(output_file_1) + output_state_dict_2 = safe_torch_load(output_file_2) + + assert len(output_state_dict_1.keys()) + 1 == len(orig_state_dict_1.keys()) + assert len(output_state_dict_2.keys()) + 1 == len(orig_state_dict_2.keys()) + def test_load_save_adapter_only( self, tmp_path, single_file_checkpointer, llama2_hf_checkpoints ): @@ -662,6 +792,66 @@ def test_load_save_checkpoint_single_file( assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - 1 + def test_load_save_checkpoint_single_file_with_dcp( + self, + single_file_checkpointer: FullModelHFCheckpointer, + mistral_reward_model_hf_checkpoint: Path, + ): + """ + Test ``load_checkpoint`` and ``save_checkpoint`` method within the + FullModelHFCheckpointer for a single checkpoint file for a mistral reward model + with DCP. + + We test: + * ``load_checkpoint`` loads the right sets of keys + * Internal state of the checkpointer is correctly updated + * Converted checkpoint can be loaded into the `mistral_classifier` torchtune implementation + * Saved checkpoint keys match the original checkpoint + """ + single_file_checkpointer._enable_dcp = True + # Read the state dict directly from file using torch.load. This will be the state + # dict we test against + checkpoint_file = mistral_reward_model_hf_checkpoint + orig_state_dict = safe_torch_load(checkpoint_file) + + # Converted state dict from the checkpointer + state_dict = single_file_checkpointer.load_checkpoint() + # Check that we've loaded all the keys minus the output bias + assert len(state_dict["model"].keys()) == len(orig_state_dict.keys()) - 1 + + # the keys in original state dict should match up with the keys in the weight_map + for key in orig_state_dict.keys(): + if "inv_freq" in key or "output.bias" in key: + continue + assert key in single_file_checkpointer._weight_map + + # loading the state dict into the model implementation should work correctly + model = mistral.mistral_classifier( + num_classes=1, + vocab_size=_VOCAB_SIZE, + num_layers=1, + num_heads=_NUM_HEADS, + num_kv_heads=_NUM_KV_HEADS, + embed_dim=_DIM, + intermediate_dim=_HIDDEN_DIM, + max_seq_len=128, + ) + model.load_state_dict(state_dict["model"]) + + single_file_checkpointer.save_checkpoint(state_dict, epoch=1) + + # Reload the output checkpoint file and compare to the original checkpoint. This + # assumes we know what the name of the file is. This is fine, breaking this logic + # should be something we capture through this test + output_file = Path.joinpath( + checkpoint_file.parent.parent / "output_dir", + "epoch_1", + SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="1".zfill(5)), + ).with_suffix(".safetensors") + output_state_dict = safe_torch_load(output_file) + + assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - 1 + class TestHFGemmaFullModelCheckpointer: @pytest.fixture @@ -818,3 +1008,63 @@ def test_load_save_checkpoint_single_file( output_state_dict = safe_torch_load(output_file) assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) + + def test_load_save_checkpoint_single_file_dcp( + self, + single_file_checkpointer: FullModelHFCheckpointer, + gemma_hf_checkpoint: Path, + ): + """ + Test ``load_checkpoint`` and ``save_checkpoint`` method within the + FullModelHFCheckpointer for a single checkpoint file for Gemma with DCP enabled. + + We test: + * ``load_checkpoint`` loads the right sets of keys + * Internal state of the checkpointer is correctly updated + * Converted checkpoint can be loaded into the `gemma` TorchTune implementation + * lm_head weights are tied to the embed_tokens weights during saving + * lmhead weights are popped during loading + """ + single_file_checkpointer._enable_dcp = True + # Read the state dict directly from file using torch.load. This will be the state + # dict we test against + checkpoint_file = gemma_hf_checkpoint + orig_state_dict = safe_torch_load(checkpoint_file) + + # Converted state dict from the checkpointer + + state_dict = single_file_checkpointer.load_checkpoint() + assert len(state_dict["model"].keys()) == len(orig_state_dict.keys()) + + # the keys in original state dict should match up with the keys in the weight_map + for key in orig_state_dict.keys(): + if "inv_freq" in key: + continue + assert key in single_file_checkpointer._weight_map + + # loading the state dict into the model implementation should work correctly + model = gemma.gemma( + vocab_size=_VOCAB_SIZE, + num_layers=1, + num_heads=_NUM_HEADS, + head_dim=_HEAD_DIM, + num_kv_heads=1, + embed_dim=_DIM, + intermediate_dim=_HIDDEN_DIM, + max_seq_len=128, + ) + model.load_state_dict(state_dict["model"]) + + single_file_checkpointer.save_checkpoint(state_dict, epoch=1) + + # Reload the output checkpoint file and compare to the original checkpoint. This + # assumes we know what the name of the file is. This is fine, breaking this logic + # should be something we capture through this test + output_file = Path.joinpath( + checkpoint_file.parent.parent / "output_dir", + "epoch_1", + SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="1".zfill(5)), + ).with_suffix(".safetensors") + output_state_dict = safe_torch_load(output_file) + + assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) From 7f29c661b7e9943b2fef826cbf077cb15bd584d8 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 10:21:25 -0700 Subject: [PATCH 14/22] tests --- gemma_hf_checkpoint.safetensors | Bin 0 -> 133072 bytes .../checkpointing/test_checkpointer.py | 243 ++++++++---------- .../training/checkpointing/_checkpointer.py | 34 ++- torchtune/training/checkpointing/_utils.py | 11 +- 4 files changed, 139 insertions(+), 149 deletions(-) create mode 100644 gemma_hf_checkpoint.safetensors diff --git a/gemma_hf_checkpoint.safetensors b/gemma_hf_checkpoint.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..717cf840e7b38a8b561ccb57086ed0b316adf57d GIT binary patch literal 133072 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

wPjDV@Z_;5+(f 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 literal 0 HcmV?d00001 diff --git a/tests/torchtune/training/checkpointing/test_checkpointer.py b/tests/torchtune/training/checkpointing/test_checkpointer.py index 209796911b..d922fc0739 100644 --- a/tests/torchtune/training/checkpointing/test_checkpointer.py +++ b/tests/torchtune/training/checkpointing/test_checkpointer.py @@ -11,6 +11,7 @@ import pytest +import safetensors import torch from torch import randn @@ -160,6 +161,12 @@ def llama2_hf_checkpoints(self, tmp_path, state_dict_1, state_dict_2): torch.save(state_dict_1, checkpoint_file_1) torch.save(state_dict_2, checkpoint_file_2) + safetensors.torch.save_file( + state_dict_1, checkpoint_dir / "model-00001-of-00002.safetensors" + ) + safetensors.torch.save_file( + state_dict_2, checkpoint_dir / "model-00002-of-00002.safetensors" + ) config = { "hidden_size": 64, @@ -169,6 +176,14 @@ def llama2_hf_checkpoints(self, tmp_path, state_dict_1, state_dict_2): config_file = Path.joinpath(checkpoint_dir, "config.json") with config_file.open("w") as f: json.dump(config, f) + metadata_file = Path.joinpath(checkpoint_dir, "model.safetensors.index.json") + metadata = {"weight_map": {}} + for key in state_dict_1.keys(): + metadata["weight_map"][key] = "model-00001-of-00002.safetensors" + for key in state_dict_2.keys(): + metadata["weight_map"][key] = "model-00002-of-00002.safetensors" + with metadata_file.open("w") as f: + json.dump(metadata, f) return (checkpoint_file_1, checkpoint_file_2) @@ -328,136 +343,6 @@ def test_save_load_checkpoint_multiple_file( assert len(output_state_dict_1.keys()) + 1 == len(orig_state_dict_1.keys()) assert len(output_state_dict_2.keys()) + 1 == len(orig_state_dict_2.keys()) - def test_load_save_checkpoint_single_file_with_dcp( - self, - single_file_checkpointer: FullModelHFCheckpointer, - llama2_hf_checkpoints: Tuple[Path, Path], - ): - """ - Test ``load_checkpoint`` and ``save_checkpoint`` method within the - FullModelHFCheckpointer for a single checkpoint file. - - We test: - * ``load_checkpoint`` loads the right sets of keys - * Internal state of the checkpointer is correctly updated - * Converted checkpoint can be loaded into the llama2 torchtune implementation - * Saved checkpoint keys match the original checkpoint - """ - single_file_checkpointer._enable_dcp = True - # Read the state dict directly from file using torch.load. This will be the state - # dict we test against - checkpoint_file, _ = llama2_hf_checkpoints - orig_state_dict = safe_torch_load(checkpoint_file) - - # Converted state dict from the checkpointer - state_dict = single_file_checkpointer.load_checkpoint() - - # Check that we've loaded all the keys; We ignore inv_freq as is standard practice - assert len(state_dict["model"].keys()) + 1 == len(orig_state_dict.keys()) - - # the keys in original state dict should match up with the keys in the weight_map - for key in orig_state_dict.keys(): - if "inv_freq" in key: - continue - assert key in single_file_checkpointer._weight_map - - # loading the state dict into the model implementation should work correctly - model = llama2.llama2( - vocab_size=_VOCAB_SIZE, - num_layers=1, - num_heads=_NUM_HEADS, - num_kv_heads=_NUM_KV_HEADS, - embed_dim=_DIM, - max_seq_len=128, - ) - model.load_state_dict(state_dict["model"]) - - single_file_checkpointer.save_checkpoint(state_dict, epoch=1) - - # Reload the output checkpoint file and compare to the original checkpoint. This - # assumes we know what the name of the file is. This is fine, breaking this logic - # should be something we capture through this test - output_file = Path.joinpath( - checkpoint_file.parent.parent / "output_dir", - "epoch_1", - SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="1".zfill(5)), - ).with_suffix(".safetensors") - output_state_dict = safe_torch_load(output_file) - - # We ignore inv_freq as is standard practice and so output dict will have one less key - assert len(output_state_dict.keys()) + 1 == len(orig_state_dict.keys()) - - def test_save_load_checkpoint_multiple_file_with_dcp( - self, - multi_file_checkpointer: FullModelHFCheckpointer, - llama2_hf_checkpoints: Tuple[Path, Path], - ): - """ - Test ``load_checkpoint`` method within the FullModelCheckpointer for multiple - checkpoint file. - - We test: - * ``load_checkpoint`` loads the right sets of keys - * Internal state of the checkpointer is correctly updated - * Converted checkpoint can be loaded into the llama2 torchtune implementation - """ - multi_file_checkpointer._enable_dcp = True - # Read the state dict directly from files - checkpoint_file_1, checkpoint_file_2 = llama2_hf_checkpoints - orig_state_dict_1 = safe_torch_load(checkpoint_file_1) - orig_state_dict_2 = safe_torch_load(checkpoint_file_2) - - # merged state dict from checkpointer - state_dict = multi_file_checkpointer.load_checkpoint() - - # We ignore inv_freq as is standard practice - assert len(state_dict["model"].keys()) + 2 == len( - orig_state_dict_1.keys() - ) + len(orig_state_dict_2.keys()) - - # the keys in the weight_map should match up with the keys in the weight_map - for key in orig_state_dict_1.keys(): - if "inv_freq" in key: - continue - assert key in multi_file_checkpointer._weight_map - - for key in orig_state_dict_2.keys(): - if "inv_freq" in key: - continue - assert key in multi_file_checkpointer._weight_map - - # finally loading into the model should work - model = llama2.llama2( - vocab_size=_VOCAB_SIZE, - num_layers=2, - num_heads=_NUM_HEADS, - num_kv_heads=_NUM_KV_HEADS, - embed_dim=_DIM, - max_seq_len=128, - ) - model.load_state_dict(state_dict["model"]) - - multi_file_checkpointer.save_checkpoint(state_dict, epoch=1) - - # Reload the output checkpoint file and compare to the original checkpoint. This - # assumes we know what the name of the file is. This is fine, breaking this logic - # should be something we capture through this test - output_file_1 = Path.joinpath( - checkpoint_file_1.parent.parent / "output_dir", - "epoch_1", - SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="2".zfill(5)), - ).with_suffix(".safetensors") - output_file_2 = Path.joinpath( - checkpoint_file_2.parent.parent / "output_dir", - "epoch_1", - SHARD_FNAME.format(cpt_idx="2".zfill(5), num_shards="2".zfill(5)), - ).with_suffix(".safetensors") - output_state_dict_1 = safe_torch_load(output_file_1) - output_state_dict_2 = safe_torch_load(output_file_2) - - assert len(output_state_dict_1.keys()) + 1 == len(orig_state_dict_1.keys()) - assert len(output_state_dict_2.keys()) + 1 == len(orig_state_dict_2.keys()) - def test_load_save_adapter_only( self, tmp_path, single_file_checkpointer, llama2_hf_checkpoints ): @@ -634,6 +519,77 @@ def test_save_checkpoint_in_peft_format( actual_adapter_state_dict[k], expected_adapter_state_dict[new_k] ) + def test_save_load_checkpoint_multiple_file_with_dcp( + self, + multi_file_checkpointer: FullModelHFCheckpointer, + llama2_hf_checkpoints: Tuple[Path, Path], + ): + """ + Test ``load_checkpoint`` method within the FullModelCheckpointer for multiple + checkpoint file. + + We test: + * ``load_checkpoint`` loads the right sets of keys + * Internal state of the checkpointer is correctly updated + * Converted checkpoint can be loaded into the llama2 torchtune implementation + """ + multi_file_checkpointer._enable_dcp = True + # Read the state dict directly from files + checkpoint_file_1, checkpoint_file_2 = llama2_hf_checkpoints + orig_state_dict_1 = safe_torch_load(checkpoint_file_1) + orig_state_dict_2 = safe_torch_load(checkpoint_file_2) + + # merged state dict from checkpointer + state_dict = multi_file_checkpointer.load_checkpoint() + + # We ignore inv_freq as is standard practice + assert len(state_dict["model"].keys()) + 2 == len( + orig_state_dict_1.keys() + ) + len(orig_state_dict_2.keys()) + + # the keys in the weight_map should match up with the keys in the weight_map + for key in orig_state_dict_1.keys(): + if "inv_freq" in key: + continue + assert key in multi_file_checkpointer._weight_map + + for key in orig_state_dict_2.keys(): + if "inv_freq" in key: + continue + assert key in multi_file_checkpointer._weight_map + + # finally loading into the model should work + model = llama2.llama2( + vocab_size=_VOCAB_SIZE, + num_layers=2, + num_heads=_NUM_HEADS, + num_kv_heads=_NUM_KV_HEADS, + embed_dim=_DIM, + max_seq_len=128, + ) + model.load_state_dict(state_dict["model"]) + + multi_file_checkpointer.save_checkpoint(state_dict, epoch=3) + + # Reload the output checkpoint file and compare to the original checkpoint. This + # assumes we know what the name of the file is. This is fine, breaking this logic + # should be something we capture through this test + output_file_1 = Path.joinpath( + checkpoint_file_1.parent.parent / "output_dir", + "epoch_3", + SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="2".zfill(5)), + ).with_suffix(".safetensors") + output_file_2 = Path.joinpath( + checkpoint_file_2.parent.parent / "output_dir", + "epoch_3", + SHARD_FNAME.format(cpt_idx="2".zfill(5), num_shards="2".zfill(5)), + ).with_suffix(".safetensors") + output_state_dict_1 = safe_torch_load(output_file_1) + output_state_dict_2 = safe_torch_load(output_file_2) + + assert len(output_state_dict_1.keys()) + 1 == len(orig_state_dict_1.keys()) + assert len(output_state_dict_2.keys()) + 1 == len(orig_state_dict_2.keys()) + class TestHFMistralRewardModelFullModelCheckpointer: @pytest.fixture @@ -717,6 +673,12 @@ def mistral_reward_model_hf_checkpoint(self, tmp_path, state_dict): config_file = Path.joinpath(checkpoint_dir, "config.json") with config_file.open("w") as f: json.dump(config, f) + metadata_file = Path.joinpath(checkpoint_dir, "model.safetensors.index.json") + metadata = {"weight_map": {}} + for key in state_dict.keys(): + metadata["weight_map"][key] = key + with metadata_file.open("w") as f: + json.dump(metadata, f) return checkpoint_file @@ -792,6 +754,7 @@ def test_load_save_checkpoint_single_file( assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - 1 + ''' def test_load_save_checkpoint_single_file_with_dcp( self, single_file_checkpointer: FullModelHFCheckpointer, @@ -851,6 +814,7 @@ def test_load_save_checkpoint_single_file_with_dcp( output_state_dict = safe_torch_load(output_file) assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - 1 + ''' class TestHFGemmaFullModelCheckpointer: @@ -922,6 +886,9 @@ def gemma_hf_checkpoint(self, tmp_path, state_dict): checkpoint_file = checkpoint_dir / "gemma_hf_checkpoint.pt" torch.save(state_dict, checkpoint_file) + safetensors.torch.save_file( + state_dict, checkpoint_dir / "model-00001-of-00001.safetensors" + ) config = { "hidden_size": _DIM, @@ -934,6 +901,14 @@ def gemma_hf_checkpoint(self, tmp_path, state_dict): with config_file.open("w") as f: json.dump(config, f) + # metadata file for dcp + metadata_file = Path.joinpath(checkpoint_dir, "model.safetensors.index.json") + metadata = {"weight_map": {}} + for key in state_dict.keys(): + metadata["weight_map"][key] = "model-00001-of-00001.safetensors" + with metadata_file.open("w") as f: + json.dump(metadata, f) + return checkpoint_file @pytest.fixture @@ -941,8 +916,8 @@ def single_file_checkpointer( self, gemma_hf_checkpoint, tmp_path ) -> FullModelHFCheckpointer: checkpoint_file = gemma_hf_checkpoint - checkpoint_dir = str(Path.joinpath(tmp_path, "checkpoint_dir")) - output_dir = str(Path.joinpath(tmp_path, "output_dir")) + checkpoint_dir = Path.joinpath(tmp_path, "checkpoint_dir") + output_dir = Path.joinpath(tmp_path, "output_dir") return FullModelHFCheckpointer( checkpoint_dir=checkpoint_dir, checkpoint_files=[checkpoint_file], @@ -1009,7 +984,8 @@ def test_load_save_checkpoint_single_file( assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - def test_load_save_checkpoint_single_file_dcp( + ''' + def test_load_save_checkpoint_single_file_with_dcp( self, single_file_checkpointer: FullModelHFCheckpointer, gemma_hf_checkpoint: Path, @@ -1068,3 +1044,4 @@ def test_load_save_checkpoint_single_file_dcp( output_state_dict = safe_torch_load(output_file) assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) + ''' diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 160d8d1338..785c9ed85f 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -19,10 +19,11 @@ from safetensors.torch import save_file from torch.distributed.checkpoint import ( + _HuggingFaceLoadPlanner, + _HuggingFaceSavePlanner, _HuggingFaceStorageReader, _HuggingFaceStorageWriter, async_save, - DefaultLoadPlanner, FileSystemReader, FileSystemWriter, load, @@ -114,11 +115,9 @@ class _CheckpointerInterface(Protocol): """ - def load_checkpoint(self, **kwargs) -> Dict[str, Any]: - ... + def load_checkpoint(self, **kwargs) -> Dict[str, Any]: ... - def save_checkpoint(self, state_dict: Dict[str, Any], **kwargs) -> None: - ... + def save_checkpoint(self, state_dict: Dict[str, Any], **kwargs) -> None: ... class FullModelTorchTuneCheckpointer(_CheckpointerInterface): @@ -408,10 +407,10 @@ class FullModelHFCheckpointer(_CheckpointerInterface): def __init__( self, - checkpoint_dir: str, + checkpoint_dir: Union[Path, str], checkpoint_files: Union[List[str], Dict[str, str]], model_type: str, - output_dir: str, + output_dir: Union[Path, str], adapter_checkpoint: Optional[str] = None, recipe_checkpoint: Optional[str] = None, resume_from_checkpoint: bool = False, @@ -538,7 +537,13 @@ def load_checkpoint(self) -> Dict[str, Any]: self._weight_map = metadata.storage_data - load(state_dict=state_dict, storage_reader=hf_storage_reader) + load( + state_dict=state_dict, + storage_reader=hf_storage_reader, + planner=_HuggingFaceLoadPlanner(), + ) + for key in state_dict.keys(): + print("shape", state_dict[key].shape) merged_state_dict = state_dict else: @@ -549,8 +554,8 @@ def load_checkpoint(self) -> Dict[str, Any]: # will break recipe code if not isinstance(value, torch.Tensor): raise ValueError( - f"Expected all values in the state dict to be torch.Tensor. " - f"Found {type(value)} instead." + f"Expected all values in the state dict to be torch.Tensor. " + f"Found {type(value)} instead." ) # idx is written in the 4 digit format (eg: 0001, 0002, etc.) self._weight_map[key] = f"{cpt_idx + 1:04}" @@ -772,6 +777,8 @@ def save_checkpoint( save( state_dict=state_dict[training.MODEL_KEY], storage_writer=storage_writer, + planner=_HuggingFaceSavePlanner(), + no_dist=True, ) else: # split the state_dict into separate dicts, one for each output checkpoint file @@ -799,7 +806,8 @@ def save_checkpoint( # TODO: We should probably use the original shard name and just add a prefix # however, having the SHARD_FNAME standardizes our checkpoints shard_name = SHARD_FNAME.format( - cpt_idx=f"{cpt_idx}".zfill(5), num_shards=f"{num_shards}".zfill(5) + cpt_idx=f"{cpt_idx}".zfill(5), + num_shards=f"{num_shards}".zfill(5), ) map_original_name_to_new_name[cpt_idx] = shard_name output_path = os.path.join( @@ -811,7 +819,9 @@ def save_checkpoint( torch.save(model_state_dict, output_path) else: output_path = output_path + ".safetensors" - save_file(model_state_dict, output_path, metadata={"format": "pt"}) + save_file( + model_state_dict, output_path, metadata={"format": "pt"} + ) logger.info( "Model checkpoint of size " diff --git a/torchtune/training/checkpointing/_utils.py b/torchtune/training/checkpointing/_utils.py index 656374538e..6add64399e 100644 --- a/torchtune/training/checkpointing/_utils.py +++ b/torchtune/training/checkpointing/_utils.py @@ -189,7 +189,9 @@ def build_checkpoint_filenames(self): ] -def get_path(input_dir: Path, filename: str, missing_ok: bool = False) -> Path: +def get_path( + input_dir: Union[Path, str], filename: str, missing_ok: bool = False +) -> str: """ Utility to recover and validate the path for a given file within a given directory. @@ -204,13 +206,14 @@ def get_path(input_dir: Path, filename: str, missing_ok: bool = False) -> Path: Raises: ValueError: If the file is missing and missing_ok is False. """ - if not input_dir.is_dir(): + fs, _ = url_to_fs(input_dir) + if not fs.isdir(input_dir): raise ValueError(f"{input_dir} is not a valid directory.") - file_path = Path.joinpath(input_dir, filename) + file_path = os.path.join(input_dir, filename) # If missing_ok is False, raise an error if the path is invalid - if not missing_ok and not file_path.is_file(): + if not missing_ok and not fs.isfile(file_path): raise ValueError(f"No file with name: {filename} found in {input_dir}.") return file_path From e52154064e3bf00589630cdbf4dc0506183b5865 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 10:41:22 -0700 Subject: [PATCH 15/22] tests --- gemma_hf_checkpoint.safetensors | Bin 133072 -> 0 bytes .../checkpointing/test_checkpointer.py | 124 ------------------ .../training/checkpointing/_checkpointer.py | 8 +- 3 files changed, 4 insertions(+), 128 deletions(-) delete mode 100644 gemma_hf_checkpoint.safetensors diff --git a/gemma_hf_checkpoint.safetensors b/gemma_hf_checkpoint.safetensors deleted file mode 100644 index 717cf840e7b38a8b561ccb57086ed0b316adf57d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133072 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

wPjDV@Z_;5+(f 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 diff --git a/tests/torchtune/training/checkpointing/test_checkpointer.py b/tests/torchtune/training/checkpointing/test_checkpointer.py index d922fc0739..a886c31f98 100644 --- a/tests/torchtune/training/checkpointing/test_checkpointer.py +++ b/tests/torchtune/training/checkpointing/test_checkpointer.py @@ -754,68 +754,6 @@ def test_load_save_checkpoint_single_file( assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - 1 - ''' - def test_load_save_checkpoint_single_file_with_dcp( - self, - single_file_checkpointer: FullModelHFCheckpointer, - mistral_reward_model_hf_checkpoint: Path, - ): - """ - Test ``load_checkpoint`` and ``save_checkpoint`` method within the - FullModelHFCheckpointer for a single checkpoint file for a mistral reward model - with DCP. - - We test: - * ``load_checkpoint`` loads the right sets of keys - * Internal state of the checkpointer is correctly updated - * Converted checkpoint can be loaded into the `mistral_classifier` torchtune implementation - * Saved checkpoint keys match the original checkpoint - """ - single_file_checkpointer._enable_dcp = True - # Read the state dict directly from file using torch.load. This will be the state - # dict we test against - checkpoint_file = mistral_reward_model_hf_checkpoint - orig_state_dict = safe_torch_load(checkpoint_file) - - # Converted state dict from the checkpointer - state_dict = single_file_checkpointer.load_checkpoint() - # Check that we've loaded all the keys minus the output bias - assert len(state_dict["model"].keys()) == len(orig_state_dict.keys()) - 1 - - # the keys in original state dict should match up with the keys in the weight_map - for key in orig_state_dict.keys(): - if "inv_freq" in key or "output.bias" in key: - continue - assert key in single_file_checkpointer._weight_map - - # loading the state dict into the model implementation should work correctly - model = mistral.mistral_classifier( - num_classes=1, - vocab_size=_VOCAB_SIZE, - num_layers=1, - num_heads=_NUM_HEADS, - num_kv_heads=_NUM_KV_HEADS, - embed_dim=_DIM, - intermediate_dim=_HIDDEN_DIM, - max_seq_len=128, - ) - model.load_state_dict(state_dict["model"]) - - single_file_checkpointer.save_checkpoint(state_dict, epoch=1) - - # Reload the output checkpoint file and compare to the original checkpoint. This - # assumes we know what the name of the file is. This is fine, breaking this logic - # should be something we capture through this test - output_file = Path.joinpath( - checkpoint_file.parent.parent / "output_dir", - "epoch_1", - SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="1".zfill(5)), - ).with_suffix(".safetensors") - output_state_dict = safe_torch_load(output_file) - - assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - 1 - ''' - class TestHFGemmaFullModelCheckpointer: @pytest.fixture @@ -983,65 +921,3 @@ def test_load_save_checkpoint_single_file( output_state_dict = safe_torch_load(output_file) assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - - ''' - def test_load_save_checkpoint_single_file_with_dcp( - self, - single_file_checkpointer: FullModelHFCheckpointer, - gemma_hf_checkpoint: Path, - ): - """ - Test ``load_checkpoint`` and ``save_checkpoint`` method within the - FullModelHFCheckpointer for a single checkpoint file for Gemma with DCP enabled. - - We test: - * ``load_checkpoint`` loads the right sets of keys - * Internal state of the checkpointer is correctly updated - * Converted checkpoint can be loaded into the `gemma` TorchTune implementation - * lm_head weights are tied to the embed_tokens weights during saving - * lmhead weights are popped during loading - """ - single_file_checkpointer._enable_dcp = True - # Read the state dict directly from file using torch.load. This will be the state - # dict we test against - checkpoint_file = gemma_hf_checkpoint - orig_state_dict = safe_torch_load(checkpoint_file) - - # Converted state dict from the checkpointer - - state_dict = single_file_checkpointer.load_checkpoint() - assert len(state_dict["model"].keys()) == len(orig_state_dict.keys()) - - # the keys in original state dict should match up with the keys in the weight_map - for key in orig_state_dict.keys(): - if "inv_freq" in key: - continue - assert key in single_file_checkpointer._weight_map - - # loading the state dict into the model implementation should work correctly - model = gemma.gemma( - vocab_size=_VOCAB_SIZE, - num_layers=1, - num_heads=_NUM_HEADS, - head_dim=_HEAD_DIM, - num_kv_heads=1, - embed_dim=_DIM, - intermediate_dim=_HIDDEN_DIM, - max_seq_len=128, - ) - model.load_state_dict(state_dict["model"]) - - single_file_checkpointer.save_checkpoint(state_dict, epoch=1) - - # Reload the output checkpoint file and compare to the original checkpoint. This - # assumes we know what the name of the file is. This is fine, breaking this logic - # should be something we capture through this test - output_file = Path.joinpath( - checkpoint_file.parent.parent / "output_dir", - "epoch_1", - SHARD_FNAME.format(cpt_idx="1".zfill(5), num_shards="1".zfill(5)), - ).with_suffix(".safetensors") - output_state_dict = safe_torch_load(output_file) - - assert len(output_state_dict.keys()) == len(orig_state_dict.keys()) - ''' diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 785c9ed85f..1c844bedca 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -442,7 +442,7 @@ def __init__( f"Got {self._fs} and {output_fs} instead." ) - self._fs.mkdir(output_dir, exist_ok=True) + self._fs.mkdirs(output_dir, exist_ok=True) # weight_map contains the state_dict key -> checkpoint file mapping so we can correctly # parition the state dict into output checkpoint files. This is updated during checkpoint @@ -813,7 +813,7 @@ def save_checkpoint( output_path = os.path.join( self._output_dir, f"epoch_{epoch}", shard_name ) - self._fs.mkdir(os.path.dirname(output_path), exist_ok=True) + self._fs.mkdirs(os.path.dirname(output_path), exist_ok=True) if not self._safe_serialization: output_path = output_path = ".bin" torch.save(model_state_dict, output_path) @@ -865,7 +865,7 @@ def save_checkpoint( os.path.join(self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME) + ".pt" ) - self._fs.mkdir(os.path.dirname(output_path), exist_ok=True) + self._fs.mkdirs(os.path.dirname(output_path), exist_ok=True) torch.save(state_dict[training.ADAPTER_KEY], output_path) logger.info( "Adapter checkpoint of size " @@ -894,7 +894,7 @@ def save_checkpoint( output_path = os.path.join( self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME ) - self._fs.mkdir(os.path.dirname(output_path), exist_ok=True) + self._fs.mkdirs(os.path.dirname(output_path), exist_ok=True) if not self._safe_serialization: output_path = output_path + ".bin" torch.save(state_dict[training.ADAPTER_KEY], output_path) From 4189872a35b1bee0b547530812d38ddf5a9b1751 Mon Sep 17 00:00:00 2001 From: ankitageorge Date: Thu, 20 Mar 2025 12:20:31 -0700 Subject: [PATCH 16/22] rm file --- gemma_hf_checkpoint.safetensors | Bin 0 -> 133072 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 gemma_hf_checkpoint.safetensors diff --git a/gemma_hf_checkpoint.safetensors b/gemma_hf_checkpoint.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..717cf840e7b38a8b561ccb57086ed0b316adf57d GIT binary patch literal 133072 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

wPjDV@Z_;5+(f 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 literal 0 HcmV?d00001 From c9950b395c6e4287a307f36cd7f16ee1a45b0119 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 12:43:23 -0700 Subject: [PATCH 17/22] some fixes --- .../checkpointing/test_checkpointer.py | 21 +-------- .../training/checkpointing/_checkpointer.py | 43 +++++++++++-------- 2 files changed, 27 insertions(+), 37 deletions(-) diff --git a/tests/torchtune/training/checkpointing/test_checkpointer.py b/tests/torchtune/training/checkpointing/test_checkpointer.py index a886c31f98..f6c4996912 100644 --- a/tests/torchtune/training/checkpointing/test_checkpointer.py +++ b/tests/torchtune/training/checkpointing/test_checkpointer.py @@ -673,12 +673,6 @@ def mistral_reward_model_hf_checkpoint(self, tmp_path, state_dict): config_file = Path.joinpath(checkpoint_dir, "config.json") with config_file.open("w") as f: json.dump(config, f) - metadata_file = Path.joinpath(checkpoint_dir, "model.safetensors.index.json") - metadata = {"weight_map": {}} - for key in state_dict.keys(): - metadata["weight_map"][key] = key - with metadata_file.open("w") as f: - json.dump(metadata, f) return checkpoint_file @@ -824,9 +818,6 @@ def gemma_hf_checkpoint(self, tmp_path, state_dict): checkpoint_file = checkpoint_dir / "gemma_hf_checkpoint.pt" torch.save(state_dict, checkpoint_file) - safetensors.torch.save_file( - state_dict, checkpoint_dir / "model-00001-of-00001.safetensors" - ) config = { "hidden_size": _DIM, @@ -839,14 +830,6 @@ def gemma_hf_checkpoint(self, tmp_path, state_dict): with config_file.open("w") as f: json.dump(config, f) - # metadata file for dcp - metadata_file = Path.joinpath(checkpoint_dir, "model.safetensors.index.json") - metadata = {"weight_map": {}} - for key in state_dict.keys(): - metadata["weight_map"][key] = "model-00001-of-00001.safetensors" - with metadata_file.open("w") as f: - json.dump(metadata, f) - return checkpoint_file @pytest.fixture @@ -854,8 +837,8 @@ def single_file_checkpointer( self, gemma_hf_checkpoint, tmp_path ) -> FullModelHFCheckpointer: checkpoint_file = gemma_hf_checkpoint - checkpoint_dir = Path.joinpath(tmp_path, "checkpoint_dir") - output_dir = Path.joinpath(tmp_path, "output_dir") + checkpoint_dir = str(Path.joinpath(tmp_path, "checkpoint_dir")) + output_dir = str(Path.joinpath(tmp_path, "output_dir")) return FullModelHFCheckpointer( checkpoint_dir=checkpoint_dir, checkpoint_files=[checkpoint_file], diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 1c844bedca..654c1dd527 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -115,9 +115,11 @@ class _CheckpointerInterface(Protocol): """ - def load_checkpoint(self, **kwargs) -> Dict[str, Any]: ... + def load_checkpoint(self, **kwargs) -> Dict[str, Any]: + ... - def save_checkpoint(self, state_dict: Dict[str, Any], **kwargs) -> None: ... + def save_checkpoint(self, state_dict: Dict[str, Any], **kwargs) -> None: + ... class FullModelTorchTuneCheckpointer(_CheckpointerInterface): @@ -403,14 +405,18 @@ class FullModelHFCheckpointer(_CheckpointerInterface): Default is True. should_load_recipe_state (bool): If True, the checkpointer will load the additional checkpoint files corresponding to the receipe state from a previous run. Default is False + enable_dcp (bool): If True, the checkpointer will load the checkpoint file using dcp checkpointing apis. + + Raises: + ValueError: If ther checkpoint_dir and output_dir are not on the same filesystem """ def __init__( self, - checkpoint_dir: Union[Path, str], + checkpoint_dir: str, checkpoint_files: Union[List[str], Dict[str, str]], model_type: str, - output_dir: Union[Path, str], + output_dir: str, adapter_checkpoint: Optional[str] = None, recipe_checkpoint: Optional[str] = None, resume_from_checkpoint: bool = False, @@ -830,7 +836,8 @@ def save_checkpoint( ) # Save the appropriate index file based on serialization format - # e.g. {metadata: {total_size: 1234}, weight_map: {"key1": "model_0001.safetensors", "key2": "model_0002.safetensors"}} + # e.g. {metadata: {total_size: 1234}, + # weight_map: {"key1": "model_0001.safetensors", "key2": "model_0002.safetensors"}} if self._safe_serialization: weight_map = { k: map_original_name_to_new_name[cpt_idx] + ".safetensors" @@ -882,14 +889,14 @@ def save_checkpoint( "Saving Llama3.2 Vision adapter weights to PEFT format is not supported, saving to torchtune format instead" ) else: - state_dict[training.ADAPTER_KEY] = ( - convert_weights.tune_to_peft_adapter_weights( - state_dict[training.ADAPTER_KEY], - num_heads=self._config["num_attention_heads"], - num_kv_heads=self._config["num_key_value_heads"], - dim=self._config["hidden_size"], - head_dim=self._config.get("head_dim", None), - ) + state_dict[ + training.ADAPTER_KEY + ] = convert_weights.tune_to_peft_adapter_weights( + state_dict[training.ADAPTER_KEY], + num_heads=self._config["num_attention_heads"], + num_kv_heads=self._config["num_key_value_heads"], + dim=self._config["hidden_size"], + head_dim=self._config.get("head_dim", None), ) output_path = os.path.join( self._output_dir, f"epoch_{epoch}", ADAPTER_MODEL_FNAME @@ -925,11 +932,11 @@ def save_checkpoint( "PEFT integration for Llama3.2 Vision is not supported, skipping adapter config save" ) else: - state_dict[training.ADAPTER_CONFIG] = ( - convert_weights.tune_to_peft_adapter_config( - adapter_config=state_dict[training.ADAPTER_CONFIG], - base_model_name_or_path=self.repo_id, - ) + state_dict[ + training.ADAPTER_CONFIG + ] = convert_weights.tune_to_peft_adapter_config( + adapter_config=state_dict[training.ADAPTER_CONFIG], + base_model_name_or_path=self.repo_id, ) output_path = ( From e61e25a7f80d8cb6e85c362cba72f0bbdbb140cc Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 12:56:09 -0700 Subject: [PATCH 18/22] make imports conditional --- torchtune/training/checkpointing/_checkpointer.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 654c1dd527..69d887cbb5 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -19,10 +19,6 @@ from safetensors.torch import save_file from torch.distributed.checkpoint import ( - _HuggingFaceLoadPlanner, - _HuggingFaceSavePlanner, - _HuggingFaceStorageReader, - _HuggingFaceStorageWriter, async_save, FileSystemReader, FileSystemWriter, @@ -533,6 +529,11 @@ def load_checkpoint(self) -> Dict[str, Any]: # the recipe state and adapter weights converted_state_dict: Dict[str, Dict[str, torch.Tensor]] = {} if self._enable_dcp: + from torch.distributed.checkpoint import ( + _HuggingFaceLoadPlanner, + _HuggingFaceStorageReader, + ) + # DCP load using the storage reader hf_storage_reader = _HuggingFaceStorageReader(path=self._checkpoint_dir) metadata = hf_storage_reader.read_metadata() @@ -771,6 +772,11 @@ def save_checkpoint( ) if self._enable_dcp: + from torch.distributed.checkpoint import ( + _HuggingFaceSavePlanner, + _HuggingFaceStorageWriter, + ) + # DCP save using the storage writer fqn_to_file_index_mapping = {} for fqn, filename in self._weight_map.items(): From b3a79969bcd00564ec4c3c8f31f9364a929be198 Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 13:18:57 -0700 Subject: [PATCH 19/22] get rid of testing changes --- recipes/configs/llama3_1/8B_full.yaml | 16 ++++++++++------ recipes/full_finetune_distributed.py | 4 ---- .../training/checkpointing/test_checkpointer.py | 2 +- .../training/checkpointing/_checkpointer.py | 1 - 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/recipes/configs/llama3_1/8B_full.yaml b/recipes/configs/llama3_1/8B_full.yaml index 612bcc48ee..0e59a0f76f 100644 --- a/recipes/configs/llama3_1/8B_full.yaml +++ b/recipes/configs/llama3_1/8B_full.yaml @@ -23,7 +23,7 @@ output_dir: /tmp/torchtune/llama3_1_8B/full # /tmp may be deleted by your system # Tokenizer tokenizer: _component_: torchtune.models.llama3.llama3_tokenizer - path: /home/ankitageorge/.cache/huggingface/hub/models--meta-llama--Llama-3.1-8B-Instruct/blobs/82e9d31979e92ab929cd544440f129d9ecd797b69e327f80f17e1c50d5551b55 + path: /tmp/Meta-Llama-3.1-8B-Instruct/original/tokenizer.model max_seq_len: null # Dataset @@ -36,15 +36,19 @@ shuffle: True # Model Arguments model: _component_: torchtune.models.llama3_1.llama3_1_8b -# temp changes for testing locally + checkpointer: _component_: torchtune.training.FullModelHFCheckpointer - checkpoint_dir: hf://meta-llama/Llama-3.1-8B-Instruct/ - checkpoint_files: [] + checkpoint_dir: /tmp/Meta-Llama-3.1-8B-Instruct/ + checkpoint_files: [ + model-00001-of-00004.safetensors, + model-00002-of-00004.safetensors, + model-00003-of-00004.safetensors, + model-00004-of-00004.safetensors + ] recipe_checkpoint: null - output_dir: hf://ankitageorge/Llama-testing/ + output_dir: ${output_dir} model_type: LLAMA3 - enable_dcp: True resume_from_checkpoint: False # Fine-tuning arguments diff --git a/recipes/full_finetune_distributed.py b/recipes/full_finetune_distributed.py index 1e5ce2bcd1..c9571d051b 100644 --- a/recipes/full_finetune_distributed.py +++ b/recipes/full_finetune_distributed.py @@ -760,11 +760,7 @@ def train(self) -> None: for curr_epoch in range(self.epochs_run, self.total_epochs): pbar = tqdm(total=self._steps_per_epoch, disable=not self._is_rank_zero) self._dataloader.sampler.set_epoch(curr_epoch) - for idx, batch in enumerate(self._dataloader): - # temp for testing - if idx > 100: - break # Start tracking CUDA memory for active steps for just the first epoch if ( self._is_rank_zero diff --git a/tests/torchtune/training/checkpointing/test_checkpointer.py b/tests/torchtune/training/checkpointing/test_checkpointer.py index f6c4996912..2fd23b06b8 100644 --- a/tests/torchtune/training/checkpointing/test_checkpointer.py +++ b/tests/torchtune/training/checkpointing/test_checkpointer.py @@ -526,7 +526,7 @@ def test_save_load_checkpoint_multiple_file_with_dcp( ): """ Test ``load_checkpoint`` method within the FullModelCheckpointer for multiple - checkpoint file. + checkpoint files with DCP enabled. We test: * ``load_checkpoint`` loads the right sets of keys diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 69d887cbb5..5cf8774852 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -17,7 +17,6 @@ import torch.distributed as dist from fsspec.core import url_to_fs from safetensors.torch import save_file - from torch.distributed.checkpoint import ( async_save, FileSystemReader, From 454969735b2fc804cd6d24a7bb7e3ceba66c64fb Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 13:29:29 -0700 Subject: [PATCH 20/22] remove extra file --- gemma_hf_checkpoint.safetensors | Bin 133072 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 gemma_hf_checkpoint.safetensors diff --git a/gemma_hf_checkpoint.safetensors b/gemma_hf_checkpoint.safetensors deleted file mode 100644 index 717cf840e7b38a8b561ccb57086ed0b316adf57d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133072 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

wPjDV@Z_;5+(f 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 From a4c9a58a13103d0c60fd094b3d82316e5eca69bc Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 15:01:58 -0700 Subject: [PATCH 21/22] adapter uses fsspec --- .../training/checkpointing/_checkpointer.py | 17 ++++++---- torchtune/training/checkpointing/_utils.py | 33 ++++++++++--------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/torchtune/training/checkpointing/_checkpointer.py b/torchtune/training/checkpointing/_checkpointer.py index 5cf8774852..a3348f2a47 100644 --- a/torchtune/training/checkpointing/_checkpointer.py +++ b/torchtune/training/checkpointing/_checkpointer.py @@ -878,7 +878,8 @@ def save_checkpoint( + ".pt" ) self._fs.mkdirs(os.path.dirname(output_path), exist_ok=True) - torch.save(state_dict[training.ADAPTER_KEY], output_path) + with self._fs.open(output_path, "wb") as f: + torch.save(state_dict[training.ADAPTER_KEY], f) logger.info( "Adapter checkpoint of size " f"{os.path.getsize(output_path) / 1024**3:.2f} GiB " @@ -909,14 +910,16 @@ def save_checkpoint( self._fs.mkdirs(os.path.dirname(output_path), exist_ok=True) if not self._safe_serialization: output_path = output_path + ".bin" - torch.save(state_dict[training.ADAPTER_KEY], output_path) + with self._fs.open(output_path, "wb") as f: + torch.save(state_dict[training.ADAPTER_KEY], f) else: output_path = output_path + ".safetensors" - save_file( - state_dict[training.ADAPTER_KEY], - output_path, - metadata={"format": "pt"}, - ) + with self._fs.open(output_path, "wb") as f: + save_file( + state_dict[training.ADAPTER_KEY], + f, + metadata={"format": "pt"}, + ) logger.info( "Adapter checkpoint of size " f"{os.path.getsize(output_path) / 1024**3:.2f} GiB " diff --git a/torchtune/training/checkpointing/_utils.py b/torchtune/training/checkpointing/_utils.py index 6add64399e..b2aeaff0a7 100644 --- a/torchtune/training/checkpointing/_utils.py +++ b/torchtune/training/checkpointing/_utils.py @@ -196,12 +196,12 @@ def get_path( Utility to recover and validate the path for a given file within a given directory. Args: - input_dir (Path): Directory containing the file + input_dir (Union[Path, str]): Directory containing the file filename (str): Name of the file missing_ok (bool): Whether to raise an error if the file is missing. Returns: - Path: Path to the file + str: Path to the file Raises: ValueError: If the file is missing and missing_ok is False. @@ -240,22 +240,25 @@ def safe_torch_load( try: # convert the path into a string since pathlib Path and mmap don't work # well together + fs, _ = url_to_fs(str(checkpoint_path)) is_safetensors_file = ( True if str(checkpoint_path).endswith(".safetensors") else False ) if is_safetensors_file: result = {} - with safe_open(checkpoint_path, framework="pt", device="cpu") as f: - for k in f.keys(): - result[k] = f.get_tensor(k) + with fs.open(checkpoint_path, "rb") as checkpoint_file: + with safe_open(checkpoint_file, framework="pt", device="cpu") as f: + for k in f.keys(): + result[k] = f.get_tensor(k) state_dict = result else: - state_dict = torch.load( - str(checkpoint_path), - map_location="cpu", - mmap=mmap, - weights_only=weights_only, - ) + with fs.open(checkpoint_path, "rb") as checkpoint_file: + state_dict = torch.load( + str(checkpoint_file), + map_location="cpu", + mmap=mmap, + weights_only=weights_only, + ) except Exception as e: raise ValueError(f"Unable to load checkpoint from {checkpoint_path}. ") from e return state_dict @@ -420,11 +423,11 @@ def get_recipe_checkpoint_path( This is to make it easier to resume from a previous run, without having to specify the recipe_checkpoint. Args: - output_dir (Path): Directory containing the recipe checkpoint. + output_dir (Union[str, Path]): Directory containing the recipe checkpoint. recipe_checkpoint (Optional[str]): Name of the recipe checkpoint file. Defaults to None. should_load_recipe_state (bool): Whether to load the recipe state from the checkpoint. Returns: - Optional[Path]: Path to the recipe checkpoint file if should_load_recipe_state is True, otherwise None. + Optional[str]: Path to the recipe checkpoint file if should_load_recipe_state is True, otherwise None. Raises: ValueError: If should_load_recipe_state is True and the recipe checkpoint file is missing. """ @@ -459,13 +462,13 @@ def get_adapter_checkpoint_path( This is to make it easier to resume from a previous run, without having to specify the adapter_checkpoint. Args: - output_dir (Path): Directory containing the adapter checkpoint. + output_dir (Union[Path, str]): Directory containing the adapter checkpoint. adapter_checkpoint (Optional[str]): Name of the adapter checkpoint file. Defaults to None. should_load_recipe_state (bool): Whether to load the recipe state from checkpoint. pattern (str): Regex pattern to match the epoch folder. Defaults to "epoch_(\d+)". Returns: - Optional[Path]: Path to the adapter checkpoint file, or None if not applicable. + Optional[str]: Path to the adapter checkpoint file, or None if not applicable. """ if not should_load_recipe_state: return None From b2d986b62c8e285ffc221daa421a7cc169b0444d Mon Sep 17 00:00:00 2001 From: Ankita George Date: Thu, 20 Mar 2025 16:35:20 -0700 Subject: [PATCH 22/22] use fsspec get_largest_iter_folder --- torchtune/training/checkpointing/_utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/torchtune/training/checkpointing/_utils.py b/torchtune/training/checkpointing/_utils.py index b2aeaff0a7..47ac9010b8 100644 --- a/torchtune/training/checkpointing/_utils.py +++ b/torchtune/training/checkpointing/_utils.py @@ -254,7 +254,7 @@ def safe_torch_load( else: with fs.open(checkpoint_path, "rb") as checkpoint_file: state_dict = torch.load( - str(checkpoint_file), + checkpoint_file, map_location="cpu", mmap=mmap, weights_only=weights_only, @@ -324,8 +324,9 @@ def get_largest_iter_folder( iter_folders = [] regex = re.compile(pattern) + fs, _ = url_to_fs(dir) # Iterate over the directory contents - for fname in os.listdir(dir): + for fname in fs.listdir(dir): match = regex.match(fname) if match: # Extract the number from the match