From 0c51188db72fb9388ea1d951fdf084ff715e058d Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Tue, 21 Oct 2025 19:58:26 +0200 Subject: [PATCH 01/60] Add logging steps in fine-tuning example (#334) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- notebooks/chronos-2-quickstart.ipynb | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/notebooks/chronos-2-quickstart.ipynb b/notebooks/chronos-2-quickstart.ipynb index 783103e..e17a995 100644 --- a/notebooks/chronos-2-quickstart.ipynb +++ b/notebooks/chronos-2-quickstart.ipynb @@ -1450,7 +1450,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_2205321/1561245919.py:2: FutureWarning: Fine-tuning support is experimental and may be changed in future versions.\n", + "/tmp/ipykernel_2466579/3520825307.py:2: FutureWarning: Fine-tuning support is experimental and may be changed in future versions.\n", " finetuned_pipeline = pipeline.fit(\n", "/fsx/ansarnd/repos/chronos-forecasting/.venv/lib/python3.11/site-packages/torch/backends/cuda/__init__.py:131: UserWarning: Please use the new API settings to control TF32 behavior, such as torch.backends.cudnn.conv.fp32_precision = 'tf32' or torch.backends.cuda.matmul.fp32_precision = 'ieee'. Old settings, e.g, torch.backends.cuda.matmul.allow_tf32 = True, torch.backends.cudnn.allow_tf32 = True, allowTF32CuDNN() and allowTF32CuBLAS() will be deprecated after Pytorch 2.9. Please see https://pytorch.org/docs/main/notes/cuda.html#tensorfloat-32-tf32-on-ampere-and-later-devices (Triggered internally at /pytorch/aten/src/ATen/Context.cpp:80.)\n", " return torch._C._get_cublas_allow_tf32()\n", @@ -1474,6 +1474,26 @@ " \n", " \n", " \n", + " \n", + " 10\n", + " 0.387400\n", + " \n", + " \n", + " 20\n", + " 0.345000\n", + " \n", + " \n", + " 30\n", + " 0.362900\n", + " \n", + " \n", + " 40\n", + " 0.346400\n", + " \n", + " \n", + " 50\n", + " 0.343400\n", + " \n", " \n", "

" ], @@ -1493,6 +1513,7 @@ " num_steps=50, # few fine-tuning steps for a quick demo\n", " learning_rate=1e-5,\n", " batch_size=32,\n", + " logging_steps=10,\n", ")" ] }, From ca9c3275a2c294000c764478fc951c91a1feea76 Mon Sep 17 00:00:00 2001 From: Kashif Rasul Date: Wed, 22 Oct 2025 14:02:09 +0200 Subject: [PATCH 02/60] [chronos-2] add support for SDPA (#331) This pull request introduces configurable attention backends to the Chronos-2 model, allowing users to select between eager, SDPA, and FlashAttention-2 implementations. --------- Co-authored-by: Oleksandr Shchur Co-authored-by: Abdul Fatir --- scripts/training/train.py | 1 - src/chronos/chronos2/config.py | 13 ++- src/chronos/chronos2/layers.py | 74 +++++++++++++++-- src/chronos/chronos2/model.py | 1 + src/chronos/chronos2/pipeline.py | 1 - test/test_chronos2.py | 137 +++++++++++++++++++++++++++++-- 6 files changed, 212 insertions(+), 15 deletions(-) diff --git a/scripts/training/train.py b/scripts/training/train.py index c16092e..09d5d8e 100644 --- a/scripts/training/train.py +++ b/scripts/training/train.py @@ -663,7 +663,6 @@ def main( lr_scheduler_type=lr_scheduler_type, warmup_ratio=warmup_ratio, optim=optim, - logging_dir=str(output_dir / "logs"), logging_strategy="steps", logging_steps=log_steps, save_strategy="steps", diff --git a/src/chronos/chronos2/config.py b/src/chronos/chronos2/config.py index f73fda5..c6e011c 100644 --- a/src/chronos/chronos2/config.py +++ b/src/chronos/chronos2/config.py @@ -4,7 +4,7 @@ # Authors: Abdul Fatir Ansari from dataclasses import dataclass -from typing import List +from typing import List, Literal from transformers.configuration_utils import PretrainedConfig @@ -39,6 +39,8 @@ class Chronos2CoreConfig(PretrainedConfig): Token ID for padding/missing value token, by default 0 rope_theta The base theta for rotary position embedding (RoPE), by default 10000.0 + attn_implementation + The attention implementation to use. Options: "eager" or "sdpa", by default None (uses "sdpa") """ model_type = "t5" @@ -63,6 +65,7 @@ class Chronos2CoreConfig(PretrainedConfig): vocab_size: int = 2, pad_token_id: int = 0, rope_theta: float = 10000.0, + attn_implementation: Literal["eager", "sdpa"] | None = None, **kwargs, ): self.vocab_size = vocab_size @@ -83,11 +86,17 @@ class Chronos2CoreConfig(PretrainedConfig): assert not self.is_gated_act, "gated activation is not supported" + # Attention implementation - default to "sdpa" if not specified + attn_implementation = attn_implementation or "sdpa" + assert attn_implementation in ["eager", "sdpa"], f"attn_implementation {attn_implementation} not supported" + # unused kwargs.pop("is_encoder_decoder", None) kwargs.pop("eos_token_id", None) - super().__init__(pad_token_id=pad_token_id, is_encoder_decoder=False, **kwargs) + super().__init__( + pad_token_id=pad_token_id, is_encoder_decoder=False, attn_implementation=attn_implementation, **kwargs + ) @dataclass diff --git a/src/chronos/chronos2/layers.py b/src/chronos/chronos2/layers.py index 2c4e6b3..b00e8a8 100644 --- a/src/chronos/chronos2/layers.py +++ b/src/chronos/chronos2/layers.py @@ -155,6 +155,7 @@ class MHA(nn.Module): self.n_heads: int = config.num_heads self.dropout: float = config.dropout_rate self.inner_dim: int = self.n_heads * self.kv_proj_dim + self.config = config self.q = nn.Linear(self.d_model, self.inner_dim, bias=False) self.k = nn.Linear(self.d_model, self.inner_dim, bias=False) @@ -165,6 +166,64 @@ class MHA(nn.Module): if use_rope: self.rope_embed = RoPE(dim=self.kv_proj_dim, base=config.rope_theta) + def _eager_attention( + self, + query_states: torch.Tensor, + key_states: torch.Tensor, + value_states: torch.Tensor, + mask: torch.Tensor, + ) -> tuple[torch.Tensor, torch.Tensor]: + """Eager attention implementation using manual matmul. + + Args: + query_states: [batch, n_heads, seq_len, kv_proj_dim] + key_states: [batch, n_heads, seq_len, kv_proj_dim] + value_states: [batch, n_heads, seq_len, kv_proj_dim] + mask: [batch, n_heads, q_len, kv_len] + + Returns: + attn_output: [batch, n_heads, seq_len, kv_proj_dim] + attn_weights: [batch, n_heads, q_len, kv_len] + """ + # Compute attention weights (no scaling - this is the original Chronos-2 implementation) + scores = torch.matmul(query_states, key_states.transpose(3, 2)) # "bnqd,bnkd->bnqk" + scores += mask + attn_weights = nn.functional.softmax(scores.float(), dim=-1).type_as(scores) + attn_weights = nn.functional.dropout(attn_weights, p=self.dropout, training=self.training) + attn_output = torch.matmul(attn_weights, value_states) + + return attn_output, attn_weights + + def _sdpa_attention( + self, + query_states: torch.Tensor, + key_states: torch.Tensor, + value_states: torch.Tensor, + mask: torch.Tensor, + ) -> tuple[torch.Tensor, None]: + """SDPA attention implementation using torch.nn.functional.scaled_dot_product_attention. + + Args: + query_states: [batch, n_heads, seq_len, kv_proj_dim] + key_states: [batch, n_heads, seq_len, kv_proj_dim] + value_states: [batch, n_heads, seq_len, kv_proj_dim] + mask: [batch, n_heads, q_len, kv_len] - additive mask (0 for valid, -inf for invalid) + + Returns: + attn_output: [batch, n_heads, seq_len, kv_proj_dim] + attn_weights: None (SDPA doesn't return weights) + """ + attn_output = nn.functional.scaled_dot_product_attention( + query_states, + key_states, + value_states, + attn_mask=mask, + dropout_p=self.dropout if self.training else 0.0, + scale=1.0, # Match eager implementation (no scaling) + ) + + return attn_output, None + def forward( self, hidden_states: torch.Tensor, @@ -190,6 +249,11 @@ class MHA(nn.Module): if self.use_rope: assert position_ids is not None, "position_ids must be provided when self.use_rope=True" + # Force eager attention if output_attentions is True (only eager returns weights) + attn_implementation = self.config._attn_implementation + if output_attentions: + attn_implementation = "eager" + seq_length = hidden_states.shape[1] def shape(states: torch.Tensor) -> torch.Tensor: @@ -215,12 +279,10 @@ class MHA(nn.Module): cos, sin = self.rope_embed(value_states, position_ids) query_states, key_states = RoPE.apply_rotary_pos_emb(query_states, key_states, cos, sin) - # Compute attention weights - scores = torch.matmul(query_states, key_states.transpose(3, 2)) # "bnqd,bnkd->bnqk" - scores += mask - attn_weights = nn.functional.softmax(scores.float(), dim=-1).type_as(scores) - attn_weights = nn.functional.dropout(attn_weights, p=self.dropout, training=self.training) - attn_output = torch.matmul(attn_weights, value_states) + if attn_implementation == "sdpa": + attn_output, attn_weights = self._sdpa_attention(query_states, key_states, value_states, mask) + else: # eager + attn_output, attn_weights = self._eager_attention(query_states, key_states, value_states, mask) # Project attention output attn_output = unshape(attn_output) diff --git a/src/chronos/chronos2/model.py b/src/chronos/chronos2/model.py index 06eb708..9b72f61 100644 --- a/src/chronos/chronos2/model.py +++ b/src/chronos/chronos2/model.py @@ -199,6 +199,7 @@ class Chronos2Model(PreTrainedModel): config_class = Chronos2CoreConfig # type: ignore[assignment] _supports_long_horizon: bool = True _supports_future_covariates: bool = True + _supports_sdpa: bool = True def __init__(self, config: Chronos2CoreConfig): assert hasattr(config, "chronos_config"), "Not a valid Chronos config" diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index e00d336..2250fb2 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -211,7 +211,6 @@ class Chronos2Pipeline(BaseChronosPipeline): lr_scheduler_type="linear", warmup_ratio=0.0, optim="adamw_torch_fused", - logging_dir=str(output_dir / "logs"), logging_strategy="steps", logging_steps=100, disable_tqdm=False, diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 753a944..3c4281c 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -14,6 +14,9 @@ import torch from chronos import BaseChronosPipeline, Chronos2Pipeline from chronos.chronos2.dataset import convert_df_input_to_list_of_dicts_input +from chronos.chronos2.config import Chronos2CoreConfig +from chronos.chronos2.layers import MHA + from test.util import validate_tensor DUMMY_MODEL_PATH = Path(__file__).parent / "dummy-chronos2-model" @@ -317,13 +320,11 @@ def test_when_input_is_invalid_then_predict_raises_value_error(pipeline, inputs, _ = pipeline.predict(inputs, prediction_length=10) -@pytest.mark.parametrize("torch_dtype", [torch.float32, torch.bfloat16]) +@pytest.mark.parametrize("dtype", [torch.float32, torch.bfloat16]) @pytest.mark.parametrize("input_dtype", [torch.float32, torch.bfloat16, torch.int64]) -def test_pipeline_predict_can_handle_different_model_and_input_dtypes( - torch_dtype: torch.dtype, input_dtype: torch.dtype -): +def test_pipeline_predict_can_handle_different_model_and_input_dtypes(dtype: torch.dtype, input_dtype: torch.dtype): pipeline = BaseChronosPipeline.from_pretrained( - Path(__file__).parent / "dummy-chronos2-model", device_map="cpu", torch_dtype=torch_dtype + Path(__file__).parent / "dummy-chronos2-model", device_map="cpu", dtype=dtype ) context = 10 * torch.rand(size=(4, 3, 16)) + 10 context = context.to(dtype=input_dtype) @@ -936,3 +937,129 @@ def test_two_step_finetuning_with_df_input_works(pipeline, context_setup, future # Check predictions from the fine-tuned model are different from the original predictions assert not np.allclose(orig_result_before["predictions"].to_numpy(), result["predictions"].to_numpy()) + + +@pytest.mark.parametrize("attn_implementation", ["eager", "sdpa"]) +def test_pipeline_works_with_different_attention_implementations(attn_implementation): + """Test that the pipeline works with different attention implementations.""" + # Load the dummy model + model_path = Path(__file__).parent / "dummy-chronos2-model" + + # Load with specified attention implementation + pipeline = BaseChronosPipeline.from_pretrained( + model_path, device_map="cpu", attn_implementation=attn_implementation + ) + + # Verify the config has the correct attention implementation + assert pipeline.model.config._attn_implementation == attn_implementation + + # Test prediction with simple input + inputs = torch.rand(2, 1, 16) + prediction_length = 7 + + outputs = pipeline.predict(inputs, prediction_length=prediction_length) + + # Check outputs are valid + assert isinstance(outputs, list) and len(outputs) == 2 + for out in outputs: + validate_tensor(out, (1, DEFAULT_MODEL_NUM_QUANTILES, 7), dtype=torch.float32) + + +@pytest.mark.parametrize("attn_implementation", ["eager", "sdpa"]) +@pytest.mark.parametrize("output_attentions", [False, True]) +def test_attention_implementations_with_output_attentions(attn_implementation, output_attentions): + """Test that attention implementations handle output_attentions correctly.""" + # Create config with specified attention implementation + config = Chronos2CoreConfig( + d_model=128, + d_kv=32, + num_heads=4, + dropout_rate=0.1, + attn_implementation=attn_implementation, + ) + + # Create MHA layer + mha = MHA(config, use_rope=True) + mha.eval() + + # Create dummy inputs + batch_size = 2 + seq_len = 10 + hidden_states = torch.randn(batch_size, seq_len, config.d_model) + position_ids = torch.arange(seq_len).unsqueeze(0).expand(batch_size, -1) + mask = torch.zeros(batch_size, config.num_heads, seq_len, seq_len) + + # Test forward pass + output = mha( + hidden_states=hidden_states, + mask=mask, + position_ids=position_ids, + output_attentions=output_attentions, + ) + + # Check output shape + assert output.hidden_states.shape == (batch_size, seq_len, config.d_model) + + # Check attention weights - should only be returned when output_attentions=True + if output_attentions: + assert output.attn_weights is not None + assert output.attn_weights.shape == (batch_size, config.num_heads, seq_len, seq_len) + else: + # SDPA doesn't return weights + if attn_implementation == "sdpa": + assert output.attn_weights is None + + +def test_eager_and_sdpa_produce_identical_outputs(pipeline): + """Test that eager and SDPA implementations produce identical outputs on full pipeline.""" + # Reload pipeline with SDPA + model_path = Path(__file__).parent / "dummy-chronos2-model" + pipeline_sdpa = BaseChronosPipeline.from_pretrained( + model_path, device_map="cpu", attn_implementation="sdpa", dtype=torch.float32 + ) + + # Note: the original pipeline fixture uses default attn_implementation which should be sdpa + # Force eager for comparison + pipeline_eager = BaseChronosPipeline.from_pretrained( + model_path, device_map="cpu", attn_implementation="eager", dtype=torch.float32 + ) + + # Test 1: Simple univariate input + inputs_simple = torch.rand(2, 1, 16) + prediction_length = 7 + + with torch.no_grad(): + outputs_eager = pipeline_eager.predict(inputs_simple, prediction_length=prediction_length) + outputs_sdpa = pipeline_sdpa.predict(inputs_simple, prediction_length=prediction_length) + + # Verify outputs match exactly + assert len(outputs_eager) == len(outputs_sdpa) + for out_eager, out_sdpa in zip(outputs_eager, outputs_sdpa): + # Should match exactly or very close (numerical precision) + assert torch.allclose(out_eager, out_sdpa, atol=1e-5, rtol=1e-4) + + # Test 2: Multivariate inputs with covariates to test group attention + inputs_grouped = [ + { + "target": np.random.randn(2, 36), + "past_covariates": { + "temperature": np.random.randn(36), + "weather_type": np.random.choice(["sunny", "cloudy", "rainy"], size=36), + }, + "future_covariates": { + "temperature": np.random.randn(prediction_length), + "weather_type": np.random.choice(["sunny", "cloudy", "rainy"], size=prediction_length), + }, + } + for _ in range(5) + ] + + with torch.no_grad(): + outputs_eager_grouped = pipeline_eager.predict(inputs_grouped, prediction_length=prediction_length) + outputs_sdpa_grouped = pipeline_sdpa.predict(inputs_grouped, prediction_length=prediction_length) + + # Verify outputs match for grouped inputs + assert len(outputs_eager_grouped) == len(outputs_sdpa_grouped) + for out_eager, out_sdpa in zip(outputs_eager_grouped, outputs_sdpa_grouped): + # Should match exactly or very close (numerical precision) + assert torch.allclose(out_eager, out_sdpa, atol=1e-5, rtol=1e-4) From 93b90b7abeb408de1845954fe6e985b31b6500a6 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 22 Oct 2025 15:06:23 +0200 Subject: [PATCH 03/60] Treat notebooks as documentation in linguist (#338) *Issue #, if available:* *Description of changes:* This PR updates `.gitattributes` to treat notebooks as documentation rather than code when computing language statistics. See: https://github.com/github-linguist/linguist/issues/3282 By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..2f3392a --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +.ipynb linguist-documentation \ No newline at end of file From fbe2ae491d075f90dbc95d87f47cc2fe0dc9f9af Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 29 Oct 2025 09:12:28 +0100 Subject: [PATCH 04/60] Count notebooks as python in language stats (#347) *Issue #, if available:* *Description of changes:* The repo is classified as a Jupyter Notebook repo. This PR attempts to fix this by counting notebooks as python files instead of a separate thing. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- .gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 2f3392a..327ba52 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -.ipynb linguist-documentation \ No newline at end of file +*.ipynb linguist-language=Python \ No newline at end of file From c09c33fcbebf01640d159590a6991daeb8347961 Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Wed, 29 Oct 2025 13:50:40 +0100 Subject: [PATCH 05/60] Move SageMaker notebook to a new path (#348) *Issue #, if available:* *Description of changes:* - Move the SageMaker deployment notebook to a new path to check that the GitHub redirect feature works. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- ...n-sagemaker.ipynb => deploy-chronos-to-amazon-sagemaker.ipynb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename notebooks/{deploy-chronos-bolt-to-amazon-sagemaker.ipynb => deploy-chronos-to-amazon-sagemaker.ipynb} (100%) diff --git a/notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb b/notebooks/deploy-chronos-to-amazon-sagemaker.ipynb similarity index 100% rename from notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb rename to notebooks/deploy-chronos-to-amazon-sagemaker.ipynb From 6d46e628ae2d4efef0b37d8d3122a5595c6b22bd Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Wed, 29 Oct 2025 13:58:23 +0100 Subject: [PATCH 06/60] Revert "Move SageMaker notebook to a new path" (#349) Reverts amazon-science/chronos-forecasting#348 --- ...emaker.ipynb => deploy-chronos-bolt-to-amazon-sagemaker.ipynb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename notebooks/{deploy-chronos-to-amazon-sagemaker.ipynb => deploy-chronos-bolt-to-amazon-sagemaker.ipynb} (100%) diff --git a/notebooks/deploy-chronos-to-amazon-sagemaker.ipynb b/notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb similarity index 100% rename from notebooks/deploy-chronos-to-amazon-sagemaker.ipynb rename to notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb From 6c6915501cba77f8ae8645a9d0397c3fc98cbc46 Mon Sep 17 00:00:00 2001 From: "Xiaoxuan(Alex) Zhang" <574817827@qq.com> Date: Wed, 29 Oct 2025 14:00:56 +0100 Subject: [PATCH 07/60] fix validate_and_prepare_single_dict_task by separating "past only" and "future known" cov keys (#344) Closes #345 Hi @abdulfatir Here is the bugfix about the function "validate_and_prepare_single_dict_task", which had 2 issue points: 1. Originally, one of this func return, the "task_n_future_covariates", will return the ["past only" + "future known"]covariates number, by `task_n_future_covariates = len(task_future_covariates_list)` as `task_future_covariates_list ` is filled by for` key in task_covariates_keys` 2. The code seems not to guarantee the last "future known" rows are atcually what we expected, even there is a sorted option. So, this PR fixed them by separating "past only" and "future known" covs from the "past_covariates" input, and explicitly put the "past only" covs rows above "future known" cov rows, supported by a temp list "ordered_covariate_keys". --- src/chronos/chronos2/dataset.py | 42 ++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/chronos/chronos2/dataset.py b/src/chronos/chronos2/dataset.py index 61a8a0f..86bf8b9 100644 --- a/src/chronos/chronos2/dataset.py +++ b/src/chronos/chronos2/dataset.py @@ -105,9 +105,29 @@ def validate_and_prepare_single_dict_task( f"Found invalid type for `past_covariates` in element at index {idx}. " f'Expected dict with {{"feat_1": tensor_1, "feat_2": tensor_2, ...}}, but found {type(task_past_covariates)}' ) + + # gather keys and ensure known-future keys come last to match downstream assumptions task_covariates_keys = sorted(task_past_covariates.keys()) + + task_future_covariates = task.get("future_covariates", {}) + if not isinstance(task_future_covariates, dict): + raise ValueError( + f"Found invalid type for `future_covariates` in element at index {idx}. " + f'Expected dict with {{"feat_1": tensor_1, "feat_2": tensor_2, ...}}, but found {type(task_future_covariates)}' + ) + task_future_covariates_keys = sorted(task_future_covariates.keys()) + if not set(task_future_covariates_keys).issubset(task_covariates_keys): + raise ValueError( + f"Expected keys in `future_covariates` to be a subset of `past_covariates` {task_covariates_keys}, " + f"but found {task_future_covariates_keys} in element at index {idx}" + ) + + # create ordered keys: past-only first, then known-future (so known-future are the last rows) + task_past_only_keys = [k for k in task_covariates_keys if k not in task_future_covariates_keys] # past_only_keys + task_ordered_covariate_keys = task_past_only_keys + task_future_covariates_keys + task_past_covariates_list: list[torch.Tensor] = [] - for key in task_covariates_keys: + for key in task_ordered_covariate_keys: tensor = task_past_covariates[key] if isinstance(tensor, np.ndarray): # apply encoding to categorical variates @@ -140,21 +160,10 @@ def validate_and_prepare_single_dict_task( if task_past_covariates_list else torch.zeros((0, history_length), device=task_target.device) ) - # validate future_covariates - task_future_covariates = task.get("future_covariates", {}) - if not isinstance(task_future_covariates, dict): - raise ValueError( - f"Found invalid type for `future_covariates` in element at index {idx}. " - f'Expected dict with {{"feat_1": tensor_1, "feat_2": tensor_2, ...}}, but found {type(task_future_covariates)}' - ) - task_future_covariates_keys = sorted(task_future_covariates.keys()) - if not set(task_future_covariates_keys).issubset(task_covariates_keys): - raise ValueError( - f"Expected keys in `future_covariates` to be a subset of `past_covariates` {task_covariates_keys}, " - f"but found {task_future_covariates_keys} in element at index {idx}" - ) + + # validate future_covariates (build rows in the same task_ordered_covariate_keys order) task_future_covariates_list: list[torch.Tensor] = [] - for key in task_covariates_keys: + for key in task_ordered_covariate_keys: # future values of past-only covariates are filled with NaNs tensor = task_future_covariates.get(key, torch.full((prediction_length,), fill_value=torch.nan)) if isinstance(tensor, np.ndarray): @@ -186,7 +195,8 @@ def validate_and_prepare_single_dict_task( ).to(dtype=torch.float32) task_n_targets = task_target.shape[0] task_n_covariates = task_past_covariates_tensor.shape[0] - task_n_future_covariates = len(task_future_covariates_list) + # number of known-future covariates + task_n_future_covariates = len(task_future_covariates_keys) return ( task_context_tensor, From c60bd2ce4e9cfb81b7c6f5d3f26c8756dc2a38de Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Thu, 30 Oct 2025 10:11:07 +0100 Subject: [PATCH 08/60] Add Chronos-2 SageMaker notebook (#350) *Issue #, if available:* *Description of changes:* - Add notebook showcasing how Chronos-2 can be deployed using Amazon SageMaker By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- ... deploy-chronos-to-amazon-sagemaker.ipynb} | 462 ++++++++++++------ 1 file changed, 316 insertions(+), 146 deletions(-) rename notebooks/{deploy-chronos-bolt-to-amazon-sagemaker.ipynb => deploy-chronos-to-amazon-sagemaker.ipynb} (65%) diff --git a/notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb b/notebooks/deploy-chronos-to-amazon-sagemaker.ipynb similarity index 65% rename from notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb rename to notebooks/deploy-chronos-to-amazon-sagemaker.ipynb index 486f0ae..c7e3f3c 100644 --- a/notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb +++ b/notebooks/deploy-chronos-to-amazon-sagemaker.ipynb @@ -2,16 +2,18 @@ "cells": [ { "cell_type": "markdown", + "id": "2da16609", "metadata": {}, "source": [ - "# SageMaker JumpStart - Deploy Chronos endpoints to AWS for production use" + "# SageMaker JumpStart - Deploy Chronos-2 endpoints to AWS for production use" ] }, { "cell_type": "markdown", + "id": "9f776b6f", "metadata": {}, "source": [ - "In this demo notebook, we will walk through the process of using the **SageMaker Python SDK** to deploy a **Chronos** model to a cloud endpoint on AWS. To simplify deployment, we will leverage **SageMaker JumpStart**.\n", + "In this demo notebook, we will walk through the process of using the **SageMaker Python SDK** to deploy a **Chronos-2** model to a cloud endpoint on AWS. To simplify deployment, we will leverage **SageMaker JumpStart**.\n", "\n", "### Why Deploy to an Endpoint?\n", "So far, we’ve seen how to run models locally, which is useful for experimentation. However, in a production setting, a forecasting model is typically just one component of a larger system. Running models locally doesn’t scale well and lacks the reliability needed for real-world applications.\n", @@ -21,6 +23,40 @@ }, { "cell_type": "markdown", + "id": "3c77da85", + "metadata": {}, + "source": [ + "

\n", + "⚠️ Looking for Chronos-Bolt or original Chronos?
\n", + "This notebook covers Chronos-2, our latest and recommended model. For documentation on older models (Chronos-Bolt and original Chronos), see the legacy deployment walkthrough.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "59912f1f", + "metadata": {}, + "source": [ + "### Chronos-2 vs. Previous Models\n", + "\n", + "**Chronos-2** is a foundation model for time series forecasting that builds on [Chronos](https://arxiv.org/abs/2403.07815) and [Chronos-Bolt](https://aws.amazon.com/blogs/machine-learning/fast-and-accurate-zero-shot-forecasting-with-chronos-bolt-and-autogluon/). It offers significant improvements in capabilities, better accuracy, and can handle diverse forecasting scenarios not supported by earlier models.\n", + "\n", + "| Capability | Chronos-2 | Chronos-Bolt | Chronos |\n", + "|------------|-----------|--------------|----------|\n", + "| Univariate Forecasting | ✅ | ✅ | ✅ |\n", + "| Cross-learning across items | ✅ | ❌ | ❌ |\n", + "| Multivariate Forecasting | ✅ | ❌ | ❌ |\n", + "| Past-only (real/categorical) covariates | ✅ | ❌ | ❌ |\n", + "| Known future (real/categorical) covariates | ✅ | 🧩 | ❌ |\n", + "| Max. Context Length | 8192 | 2048 | 512 |\n", + "| Max. Prediction Length | 1024 | 64 | 64 |\n", + "\n", + "🧩 Chronos-Bolt does not natively support future covariates, but they can be combined with external covariate regressors (see [AutoGluon tutorial](https://auto.gluon.ai/stable/tutorials/timeseries/forecasting-chronos.html#incorporating-the-covariates)). This only models per-timestep effects, not effects across time. In contrast, Chronos-2 supports all covariate types natively." + ] + }, + { + "cell_type": "markdown", + "id": "a0583a66", "metadata": {}, "source": [ "## Deploy the model" @@ -28,6 +64,7 @@ }, { "cell_type": "markdown", + "id": "690d9093", "metadata": {}, "source": [ "First, update the SageMaker SDK to access the latest models:" @@ -35,7 +72,8 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "id": "a4ed0fb5", "metadata": {}, "outputs": [], "source": [ @@ -44,36 +82,38 @@ }, { "cell_type": "markdown", + "id": "a07054a7", "metadata": {}, "source": [ "We create a `JumpStartModel` with the necessary configuration based on the model ID. The key parameters are:\n", - "- `model_id`: Specifies the model to use. Here, we choose the [Chronos-Bolt (Base)](https://huggingface.co/amazon/chronos-bolt-base) model. Currently, the following model IDs are supported:\n", - " - `autogluon-forecasting-chronos-bolt-base` - [Chronos-Bolt (Base)](https://huggingface.co/amazon/chronos-bolt-base).\n", - " - `autogluon-forecasting-chronos-bolt-small` - [Chronos-Bolt (Small)](https://huggingface.co/amazon/chronos-bolt-small).\n", - " - [Original Chronos models](https://huggingface.co/amazon/chronos-t5-small) in sizes `small`, `base` and `large` can be accessed, e.g., as `autogluon-forecasting-chronos-t5-small`. Note that these models require a GPU to run, are much slower and don't support covariates. Therefore, for most practical purposes we recommend using Chronos-Bolt models instead.\n", - "- `instance_type`: Defines the AWS instance for serving the endpoint. We use `ml.c5.2xlarge` to run the model on CPU. To use a GPU, select an instance like `ml.g5.2xlarge`, or choose other CPU options such as `ml.m5.xlarge` or `ml.m5.4xlarge`. You can check the pricing for different SageMaker instance types for real-time inference [here](https://aws.amazon.com/sagemaker-ai/pricing/).\n", + "- `model_id`: Specifies the model to use. We use `pytorch-forecasting-chronos-2` for the [Chronos-2](https://github.com/amazon-science/chronos-forecasting) model.\n", + "- `instance_type`: Defines the AWS instance for serving the endpoint. Chronos-2 currently requires a **GPU instance** from the `ml.g5`, `ml.g6`, `ml.g6e`, or `ml.g4dn` families with a single GPU. The model does not benefit from multi-GPU instances. **CPU support is coming soon**.\n", + "\n", + " You can check the pricing for different SageMaker instance types for real-time inference [here](https://aws.amazon.com/sagemaker-ai/pricing/).\n", "\n", "The `JumpStartModel` will automatically set the necessary attributes such as `image_uri` based on the chosen `model_id` and `instance_type`." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, + "id": "ffbae4f0", "metadata": {}, "outputs": [], "source": [ "from sagemaker.jumpstart.model import JumpStartModel\n", "\n", - "model_id = \"autogluon-forecasting-chronos-bolt-base\"\n", - "\n", "model = JumpStartModel(\n", - " model_id=model_id,\n", - " instance_type=\"ml.c5.2xlarge\",\n", + " model_id=\"pytorch-forecasting-chronos-2\",\n", + " instance_type=\"ml.g5.2xlarge\",\n", + " # You might need to provide the SageMaker execution role to ensure necessary AWS resources are accessible\n", + " # role=\"arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXXXXXXXXXX\",\n", ")" ] }, { "cell_type": "markdown", + "id": "eb864ee1", "metadata": {}, "source": [ "Next, we deploy the model and create an endpoint. Deployment typically takes a few minutes, as SageMaker provisions the instance, loads the model, and sets up the endpoint for inference.\n" @@ -82,6 +122,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7fd0068b", "metadata": {}, "outputs": [], "source": [ @@ -90,44 +131,41 @@ }, { "cell_type": "markdown", + "id": "f4dd66e7", "metadata": {}, "source": [ - "> **Note:** Once the endpoint is deployed, it remains active and incurs charges on your AWS account until it is deleted. The cost depends on factors such as the instance type, the region where the endpoint is hosted, and the duration it remains running. To avoid unnecessary charges, make sure to delete the endpoint when it is no longer needed. For detailed pricing information, refer to the [SageMaker AI pricing page](https://aws.amazon.com/sagemaker-ai/pricing/).\n", - "\n", - "\n", - "If the previous step results in an error, you may need to update the model configuration. For example, specifying a `role` when creating the `JumpStartModel` ensures the necessary AWS resources are accessible." + "> **Note:** Once the endpoint is deployed, it remains active and incurs charges on your AWS account until it is deleted. The cost depends on factors such as the instance type, the region where the endpoint is hosted, and the duration it remains running. To avoid unnecessary charges, make sure to delete the endpoint when it is no longer needed. For detailed pricing information, refer to the [SageMaker AI pricing page](https://aws.amazon.com/sagemaker-ai/pricing/)." + ] + }, + { + "cell_type": "markdown", + "id": "48ce52ef", + "metadata": {}, + "source": [ + "Alternatively, you can connect to an existing endpoint." ] }, { "cell_type": "code", "execution_count": null, + "id": "a09367fc", "metadata": {}, "outputs": [], "source": [ - "# model = JumpStartModel(role=\"your-sagemaker-execution-role\", model_id=model_id, instance_type=\"ml.c5.2xlarge\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, you can create a predictor for an existing endpoint." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# from sagemaker.predictor import retrieve_default\n", + "# from sagemaker.predictor import Predictor\n", + "# from sagemaker.serializers import JSONSerializer\n", + "# from sagemaker.deserializers import JSONDeserializer\n", "\n", - "# endpoint_name = \"NAME-OF-EXISTING-ENDPOINT\"\n", - "# predictor = retrieve_default(endpoint_name)" + "# predictor = Predictor(\n", + "# \"NAME_OF_EXISTING_ENDPOINT\",\n", + "# serializer=JSONSerializer(),\n", + "# deserializer=JSONDeserializer(),\n", + "# )" ] }, { "cell_type": "markdown", + "id": "f3def973", "metadata": {}, "source": [ "## Querying the endpoint" @@ -135,6 +173,7 @@ }, { "cell_type": "markdown", + "id": "6fbe39f9", "metadata": {}, "source": [ "We can now invoke the endpoint to make a forecast. We send a **payload** to the endpoint, which includes historical time series values and configuration parameters, such as the prediction length. The endpoint processes this input and returns a **response** containing the forecasted values based on the provided data." @@ -143,7 +182,10 @@ { "cell_type": "code", "execution_count": 2, - "metadata": {}, + "id": "1ae7b33e", + "metadata": { + "lines_to_next_cell": 1 + }, "outputs": [], "source": [ "# Define a utility function to print the response in a pretty format\n", @@ -166,20 +208,28 @@ " return pformat(nested_round(data), width=150, sort_dicts=False)" ] }, + { + "cell_type": "markdown", + "id": "cb1629c7", + "metadata": {}, + "source": [ + "### Univariate forecasting" + ] + }, { "cell_type": "code", "execution_count": 3, - "id": "07605824", + "id": "320a9c49", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'predictions': [{'mean': [-1.58, 0.52, 1.88, 1.39, -1.03, -3.34, -2.67, -0.64, 0.96, 1.59],\n", - " '0.1': [-4.17, -2.71, -1.7, -2.35, -4.79, -6.98, -6.59, -4.87, -3.45, -2.89],\n", - " '0.5': [-1.58, 0.52, 1.88, 1.39, -1.03, -3.34, -2.67, -0.64, 0.96, 1.59],\n", - " '0.9': [1.47, 4.47, 6.27, 5.98, 3.5, 1.11, 2.06, 4.47, 6.41, 7.17]}]}\n" + "{'predictions': [{'mean': [-0.36, 4.03, 5.31, 2.44, -2.47, -5.09, -4.31, 0.07, 4.41, 5.16],\n", + " '0.1': [-1.69, 2.84, 4.0, 0.97, -3.77, -6.19, -5.34, -1.77, 2.55, 3.61],\n", + " '0.5': [-0.36, 4.03, 5.31, 2.44, -2.47, -5.09, -4.31, 0.07, 4.41, 5.16],\n", + " '0.9': [1.03, 5.0, 6.31, 3.81, -0.85, -3.89, -2.89, 1.84, 5.59, 6.44]}]}\n" ] } ], @@ -198,6 +248,7 @@ }, { "cell_type": "markdown", + "id": "0f37d392", "metadata": {}, "source": [ "A payload may also contain **multiple time series**, potentially including `start` and `item_id` fields." @@ -206,23 +257,23 @@ { "cell_type": "code", "execution_count": 4, - "id": "d476c397", + "id": "14c62c74", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'predictions': [{'mean': [1.41, 1.5, 1.49, 1.45, 1.51],\n", - " '0.1': [0.12, -0.08, -0.25, -0.41, -0.45],\n", - " '0.5': [1.41, 1.5, 1.49, 1.45, 1.51],\n", - " '0.9': [3.29, 3.82, 4.09, 4.3, 4.56],\n", + "{'predictions': [{'mean': [1.7, 1.95, 1.66, 1.55, 1.84],\n", + " '0.1': [0.28, 0.32, -0.08, -0.35, -0.18],\n", + " '0.5': [1.7, 1.95, 1.66, 1.55, 1.84],\n", + " '0.9': [3.09, 3.77, 3.62, 3.58, 4.22],\n", " 'item_id': 'product_A',\n", " 'start': '2024-01-01T10:00:00'},\n", - " {'mean': [-1.22, -1.3, -1.3, -1.14, -1.13],\n", - " '0.1': [-4.51, -5.48, -6.12, -6.5, -7.1],\n", - " '0.5': [-1.22, -1.3, -1.3, -1.14, -1.13],\n", - " '0.9': [2.84, 4.02, 4.92, 5.99, 6.79],\n", + " {'mean': [-1.21, -1.4, -1.27, -1.34, -1.27],\n", + " '0.1': [-4.19, -5.84, -6.38, -7.53, -8.0],\n", + " '0.5': [-1.21, -1.4, -1.27, -1.34, -1.27],\n", + " '0.9': [2.02, 2.92, 3.55, 4.62, 5.66],\n", " 'item_id': 'product_B',\n", " 'start': '2024-02-02T10:00:00'}]}\n" ] @@ -255,22 +306,31 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6ae41cdc", + "metadata": { + "lines_to_next_cell": 0 + }, "source": [ - "Chronos-Bolt models also support forecasting with covariates (a.k.a. exogenous features or related time series). These can be provided using the `past_covariates` and `future_covariates` keys." + "### Forecasting with covariates\n", + "\n", + "Chronos-2 models also support forecasting with **covariates** (a.k.a. exogenous features or related time series). These can be provided using the `past_covariates` and `future_covariates` keys.\n", + "\n", + "**Note:** If you only provide `past_covariates` without matching keys in `future_covariates`, the model will treat them as past-only covariates (features that are only available historically but not in the future).\n", + "If future values of covariates are available, it is recommended to provide them in `future_covariates` as this typically results in more accurate forecasts." ] }, { "cell_type": "code", "execution_count": 5, + "id": "e57f1541", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'predictions': [{'mean': [1.41, 1.5, 1.49], '0.1': [0.12, -0.08, -0.25], '0.5': [1.41, 1.5, 1.49], '0.9': [3.29, 3.82, 4.09]},\n", - " {'mean': [-1.22, -1.3, -1.3], '0.1': [-4.51, -5.48, -6.12], '0.5': [-1.22, -1.3, -1.3], '0.9': [2.84, 4.02, 4.92]}]}\n" + "{'predictions': [{'mean': [1.73, 2.09, 1.73], '0.1': [0.36, 0.6, 0.17], '0.5': [1.73, 2.09, 1.73], '0.9': [3.11, 3.8, 3.52]},\n", + " {'mean': [-0.61, -0.41, -1.43], '0.1': [-4.16, -5.59, -7.53], '0.5': [-0.61, -0.41, -1.43], '0.9': [3.12, 4.56, 3.91]}]}\n" ] } ], @@ -282,7 +342,10 @@ " # past_covariates must have the same length as \"target\"\n", " \"past_covariates\": {\n", " \"feat_1\": [3.0, 6.0, 9.0, 6.0, 1.5, 6.0, 9.0, 6.0, 3.0],\n", + " # Categorical covariates should be provided as strings\n", " \"feat_2\": [\"A\", \"B\", \"B\", \"B\", \"A\", \"A\", \"A\", \"A\", \"B\"],\n", + " # feat_3 is a past-only covariate (not present in future_covariates)\n", + " \"feat_3\": [10.0, 20.0, 30.0, 20.0, 5.0, 20.0, 30.0, 20.0, 10.0],\n", " },\n", " # future_covariates must have length equal to \"prediction_length\"\n", " \"future_covariates\": {\n", @@ -295,6 +358,7 @@ " \"past_covariates\": {\n", " \"feat_1\": [0.6, 1.2, 1.8, 1.2, 0.3, 1.2, 1.8],\n", " \"feat_2\": [\"A\", \"B\", \"B\", \"B\", \"A\", \"A\", \"A\"],\n", + " \"feat_3\": [5.4, 3.0, 3.0, 2.0, 1.5, 2.0, -1.0],\n", " },\n", " \"future_covariates\": {\n", " \"feat_1\": [1.2, 0.3, 4.4],\n", @@ -313,37 +377,88 @@ }, { "cell_type": "markdown", + "id": "76c88a22", + "metadata": {}, + "source": [ + "### Multivariate forecasting\n", + "\n", + "Chronos-2 also supports **multivariate forecasting**, where multiple related time series are forecasted jointly. For multivariate forecasting, provide the target as a list of lists, where each inner list represents one dimension of the multivariate series." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b73609be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'predictions': [{'mean': [[3.66, 3.55, 3.5, 3.42], [2.0, 2.05, 2.19, 2.23], [3.33, 3.27, 3.25, 3.22]],\n", + " '0.1': [[1.98, 1.52, 1.17, 0.88], [0.84, 0.18, 0.0, -0.25], [2.5, 2.27, 2.08, 1.94]],\n", + " '0.5': [[3.66, 3.55, 3.5, 3.42], [2.0, 2.05, 2.19, 2.23], [3.33, 3.27, 3.25, 3.22]],\n", + " '0.9': [[5.75, 6.25, 6.59, 7.0], [3.8, 4.47, 4.88, 5.31], [4.38, 4.62, 4.78, 5.0]]}]}\n" + ] + } + ], + "source": [ + "payload = {\n", + " \"inputs\": [\n", + " {\n", + " # For multivariate forecasting, target is a list of lists\n", + " # Each inner list represents one dimension with the same length\n", + " # np.array(target) would have shape [num_dimensions, length]\n", + " \"target\": [\n", + " [1.0, 2.0, 3.0, 2.0, 1.0, 2.0, 3.0, 4.0], # Dimension 1\n", + " [5.0, 4.0, 3.0, 4.0, 5.0, 4.0, 3.0, 2.0], # Dimension 2\n", + " [2.0, 2.5, 3.0, 2.5, 2.0, 2.5, 3.0, 3.5], # Dimension 3\n", + " ],\n", + " },\n", + " ],\n", + " \"parameters\": {\n", + " \"prediction_length\": 4,\n", + " \"quantile_levels\": [0.1, 0.5, 0.9],\n", + " },\n", + "}\n", + "response = predictor.predict(payload)\n", + "print(pretty_format(response))" + ] + }, + { + "cell_type": "markdown", + "id": "9479e7a3", "metadata": {}, "source": [ "## Endpoint API\n", "So far, we have explored several examples of querying the endpoint with different payload structures. Below is a comprehensive API specification detailing all supported parameters, their meanings, and how they affect the model’s predictions.\n", "\n", "* **inputs** (required): List with at most 1000 time series that need to be forecasted. Each time series is represented by a dictionary with the following keys:\n", - " * **target** (required): List of observed numeric time series values. \n", + " * **target** (required): Observed time series values.\n", + " - For univariate forecasting: List of numeric values.\n", + " - For multivariate forecasting: List of lists, where each inner list represents one dimension. All dimensions must have the same length. If converted to a numpy array via `np.array(target)`, the shape would be `[num_dimensions, length]`.\n", " - It is recommended that each time series contains at least 30 observations.\n", " - If any time series contains fewer than 5 observations, an error will be raised.\n", - " * **item_id**: String that uniquely identifies each time series. \n", + " * **item_id**: String that uniquely identifies each time series.\n", " - If provided, the ID must be unique for each time series.\n", " - If provided, then the endpoint response will also include the **item_id** field for each forecast.\n", - " * **start**: Timestamp of the first time series observation in ISO format (`YYYY-MM-DD` or `YYYY-MM-DDThh:mm:ss`). \n", + " * **start**: Timestamp of the first time series observation in ISO format (`YYYY-MM-DD` or `YYYY-MM-DDThh:mm:ss`).\n", " - If **start** field is provided, then **freq** must also be provided as part of **parameters**.\n", " - If provided, then the endpoint response will also include the **start** field indicating the first timestamp of each forecast.\n", " * **past_covariates**: Dictionary containing the past values of the covariates for this time series.\n", - " - If **past_covariates** field is provided, then **future_covariates** must be provided as well with the same keys.\n", " - Each key in **past_covariates** correspond to the name of the covariate. Each value must be an array consisting of all-numeric or all-string values, with the length equal to the length of the **target**.\n", + " - Covariates that appear only in **past_covariates** (and not in **future_covariates**) are treated as past-only covariates.\n", " * **future_covariates**: Dictionary containing the future values of the covariates for this time series (values during the forecast horizon).\n", - " - If **future_covariates** field is provided, then **past_covariates** must be provided as well with the same keys.\n", " - Each key in **future_covariates** correspond to the name of the covariate. Each value must be an array consisting of all-numeric or all-string values, with the length equal to **prediction_length**.\n", - " - If both **past_covariates** and **future_covariates** are provided, a regression model specified by **covariate_model** will be used to incorporate the covariate information into the forecast.\n", + " - Covariates that appear in both **past_covariates** and **future_covariates** are treated as known future covariates.\n", "* **parameters**: Optional parameters to configure the model.\n", - " * **prediction_length**: Integer corresponding to the number of future time series values that need to be predicted. Defaults to `1`.\n", - " - Recommended to keep prediction_length <= 64 since larger values will result in inaccurate quantile forecasts. Values above 1000 will raise an error.\n", - " * **quantile_levels**: List of floats in range (0, 1) specifying which quantiles should should be included in the probabilistic forecast. Defaults to `[0.1, 0.5, 0.9]`. \n", - " - Note that Chronos-Bolt cannot produce quantiles outside the [0.1, 0.9] range (predictions outside the range will be clipped).\n", - " * **freq**: Frequency of the time series observations in [pandas-compatible format](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases). For example, `1h` for hourly data or `2W` for bi-weekly data. \n", + " * **prediction_length**: Integer corresponding to the number of future time series values that need to be predicted. Defaults to `1`. Values up to `1024` are supported.\n", + " * **quantile_levels**: List of floats in range (0, 1) specifying which quantiles should should be included in the probabilistic forecast. Defaults to `[0.1, 0.5, 0.9]`.\n", + " - Chronos-2 natively supports quantile levels in range `[0.01, 0.99]`. Predictions outside the range will be clipped.\n", + " * **freq**: Frequency of the time series observations in [pandas-compatible format](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases). For example, `1h` for hourly data or `2W` for bi-weekly data.\n", " - If **freq** is provided, then **start** must also be provided for each time series in **inputs**.\n", " * **batch_size**: Number of time series processed in parallel by the model. Larger values speed up inference but may lead to out of memory errors. Defaults to `256`.\n", - " * **covariate_model**: Name of the tabular regression model applied to the covariates. Possible options: `GBM` (LightGBM), `LR` (linear regression), `RF` (random forest), `CAT` (CatBoost), `XGB` (XGBoost). Defaults to `GBM`.\n", + " * **predict_batches_jointly**: If `True`, the model will apply group attention to all items in the batch, instead of processing each item separately (described as \"full cross-learning mode\" in the [technical report](https://www.arxiv.org/abs/2510.15821)). This may produce more accurate forecasts at the cost of lower inference speed. Defaults to `False`.\n", "\n", "All keys not marked with (required) are optional.\n", "\n", @@ -352,6 +467,7 @@ }, { "cell_type": "markdown", + "id": "5ee1e161", "metadata": {}, "source": [ "## Working with long-format data frames" @@ -359,6 +475,7 @@ }, { "cell_type": "markdown", + "id": "a744884c", "metadata": {}, "source": [ "The endpoint communicates using JSON format for both input and output. However, in practice, time series data is often stored in a **long-format data frame** (where each row represents a timestamp for a specific item).\n", @@ -374,7 +491,8 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, + "id": "6ecba0ca", "metadata": {}, "outputs": [ { @@ -472,7 +590,7 @@ "4 661.0 " ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -489,6 +607,7 @@ }, { "cell_type": "markdown", + "id": "4288470c", "metadata": {}, "source": [ "We split the data into two parts:\n", @@ -498,7 +617,8 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, + "id": "d95eb6d7", "metadata": {}, "outputs": [], "source": [ @@ -512,7 +632,8 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, + "id": "c2482ffd", "metadata": {}, "outputs": [ { @@ -610,7 +731,7 @@ "4 661.0 " ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -621,8 +742,11 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, + "execution_count": 10, + "id": "c47905f8", + "metadata": { + "lines_to_next_cell": 1 + }, "outputs": [ { "data": { @@ -706,7 +830,7 @@ "27 1062_101 2018-07-09 1.000000 0.0 0.0" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -717,6 +841,7 @@ }, { "cell_type": "markdown", + "id": "e9f54de7", "metadata": {}, "source": [ "We can now convert this data into a JSON payload." @@ -724,8 +849,11 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, + "execution_count": 11, + "id": "55bbad68", + "metadata": { + "lines_to_next_cell": 1 + }, "outputs": [], "source": [ "def convert_df_to_payload(\n", @@ -733,59 +861,67 @@ " future_df=None,\n", " prediction_length=1,\n", " freq=\"D\",\n", - " target_col=\"target\",\n", - " id_col=\"item_id\",\n", - " timestamp_col=\"timestamp\",\n", + " target=\"target\",\n", + " id_column=\"item_id\",\n", + " timestamp_column=\"timestamp\",\n", "):\n", " \"\"\"\n", " Converts past and future DataFrames into JSON payload format for the Chronos endpoint.\n", "\n", " Args:\n", - " past_df (pd.DataFrame): Historical data with `target_col`, `timestamp_col`, and `id_col`.\n", - " future_df (pd.DataFrame, optional): Future covariates with `timestamp_col` and `id_col`.\n", + " past_df (pd.DataFrame): Historical data with `target`, `timestamp_column`, and `id_column`.\n", + " future_df (pd.DataFrame, optional): Future covariates with `timestamp_column` and `id_column`.\n", + " Covariates in past_df but not in future_df are treated as past-only covariates.\n", " prediction_length (int): Number of future time steps to predict.\n", " freq (str): Pandas-compatible frequency of the time series.\n", - " target_col (str): Column name for target values.\n", - " id_col (str): Column name for item IDs.\n", - " timestamp_col (str): Column name for timestamps.\n", + " target (str or list[str]): Column name(s) for target values.\n", + " Use a string for univariate forecasting or a list of strings for multivariate forecasting.\n", + " id_column (str): Column name for item IDs.\n", + " timestamp_column (str): Column name for timestamps.\n", "\n", " Returns:\n", " dict: JSON payload formatted for the Chronos endpoint.\n", " \"\"\"\n", - " past_df = past_df.sort_values([id_col, timestamp_col])\n", + " past_df = past_df.sort_values([id_column, timestamp_column])\n", " if future_df is not None:\n", - " future_df = future_df.sort_values([id_col, timestamp_col])\n", + " future_df = future_df.sort_values([id_column, timestamp_column])\n", "\n", - " covariate_cols = list(past_df.columns.drop([target_col, id_col, timestamp_col]))\n", - " if covariate_cols and (future_df is None or not set(covariate_cols).issubset(future_df.columns)):\n", - " raise ValueError(f\"If past_df contains covariates {covariate_cols}, they should also be present in future_df\")\n", + " target_cols = [target] if isinstance(target, str) else target\n", + " past_covariate_cols = list(past_df.columns.drop([*target_cols, id_column, timestamp_column]))\n", + " future_covariate_cols = [] if future_df is None else [col for col in past_covariate_cols if col in future_df.columns]\n", "\n", " inputs = []\n", - " for item_id, past_group in past_df.groupby(id_col):\n", - " target_values = past_group[target_col].tolist()\n", + " for item_id, past_group in past_df.groupby(id_column):\n", + " if len(target_cols) > 1:\n", + " target_values = [past_group[col].tolist() for col in target_cols]\n", + " series_length = len(target_values[0])\n", + " else:\n", + " target_values = past_group[target_cols[0]].tolist()\n", + " series_length = len(target_values)\n", "\n", - " if len(target_values) < 5:\n", + " if series_length < 5:\n", " raise ValueError(f\"Time series '{item_id}' has fewer than 5 observations.\")\n", "\n", " series_dict = {\n", " \"target\": target_values,\n", " \"item_id\": str(item_id),\n", - " \"start\": past_group[timestamp_col].iloc[0].isoformat(),\n", + " \"start\": past_group[timestamp_column].iloc[0].isoformat(),\n", " }\n", "\n", - " if covariate_cols:\n", - " series_dict[\"past_covariates\"] = past_group[covariate_cols].to_dict(orient=\"list\")\n", - " future_group = future_df[future_df[id_col] == item_id]\n", + " if past_covariate_cols:\n", + " series_dict[\"past_covariates\"] = past_group[past_covariate_cols].to_dict(orient=\"list\")\n", + "\n", + " if future_covariate_cols:\n", + " future_group = future_df[future_df[id_column] == item_id]\n", " if len(future_group) != prediction_length:\n", " raise ValueError(\n", " f\"future_df must contain exactly {prediction_length=} values for each item_id from past_df \"\n", " f\"(got {len(future_group)=}) for {item_id=}\"\n", " )\n", - " series_dict[\"future_covariates\"] = future_group[covariate_cols].to_dict(orient=\"list\")\n", + " series_dict[\"future_covariates\"] = future_group[future_covariate_cols].to_dict(orient=\"list\")\n", "\n", " inputs.append(series_dict)\n", "\n", - "\n", " return {\n", " \"inputs\": inputs,\n", " \"parameters\": {\"prediction_length\": prediction_length, \"freq\": freq},\n", @@ -794,7 +930,8 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, + "id": "d5226957", "metadata": {}, "outputs": [], "source": [ @@ -803,12 +940,13 @@ " future_df,\n", " prediction_length=prediction_length,\n", " freq=freq,\n", - " target_col=\"unit_sales\",\n", + " target=\"unit_sales\",\n", ")" ] }, { "cell_type": "markdown", + "id": "4611c3e6", "metadata": {}, "source": [ "We can now send the payload to the endpoint." @@ -816,8 +954,11 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, + "execution_count": 13, + "id": "504a731e", + "metadata": { + "lines_to_next_cell": 1 + }, "outputs": [], "source": [ "response = predictor.predict(payload)" @@ -825,17 +966,21 @@ }, { "cell_type": "markdown", + "id": "742be985", "metadata": {}, "source": [ - "Note how Chronos-Bolt generated predictions for >300 time series in the dataset (with covariates!) in less than 2 seconds, even when running on a small CPU instance.\n", + "Note how Chronos-2 generated predictions for >300 time series in the dataset (with covariates!) in less than 2 seconds.\n", "\n", "Finally, we can convert the response back to a long-format data frame." ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": {}, + "execution_count": 14, + "id": "a48807f6", + "metadata": { + "lines_to_next_cell": 1 + }, "outputs": [], "source": [ "def convert_response_to_df(response, freq=\"D\"):\n", @@ -848,18 +993,35 @@ "\n", " Returns:\n", " pd.DataFrame: Long-format DataFrame with timestamps, item_id, and forecasted values.\n", + " For multivariate forecasts, creates separate rows for each target dimension (target_1, target_2, etc.).\n", " \"\"\"\n", " dfs = []\n", " for forecast in response[\"predictions\"]:\n", - " forecast_df = pd.DataFrame(forecast).drop(columns=[\"start\"])\n", - " forecast_df[\"timestamp\"] = pd.date_range(forecast[\"start\"], freq=freq, periods=len(forecast_df))\n", - " dfs.append(forecast_df)\n", - " return pd.concat(dfs)" + " if isinstance(forecast[\"mean\"], list) and isinstance(forecast[\"mean\"][0], list):\n", + " # Multivariate forecast\n", + " timestamps = pd.date_range(forecast[\"start\"], freq=freq, periods=len(forecast[\"mean\"][0]))\n", + " for dim_idx in range(len(forecast[\"mean\"])):\n", + " dim_data = {\"item_id\": forecast.get(\"item_id\"), \"timestamp\": timestamps, \"target\": f\"target_{dim_idx + 1}\"}\n", + " for key, value in forecast.items():\n", + " if key not in [\"item_id\", \"start\"]:\n", + " dim_data[key] = value[dim_idx]\n", + " dfs.append(pd.DataFrame(dim_data))\n", + " else:\n", + " # Univariate forecast\n", + " forecast_df = pd.DataFrame(forecast).drop(columns=[\"start\"])\n", + " forecast_df[\"timestamp\"] = pd.date_range(forecast[\"start\"], freq=freq, periods=len(forecast_df))\n", + " # Reorder columns to have item_id and timestamp first\n", + " cols = [\"item_id\", \"timestamp\"] + [c for c in forecast_df.columns if c not in [\"item_id\", \"timestamp\"]]\n", + " forecast_df = forecast_df[cols]\n", + " dfs.append(forecast_df)\n", + "\n", + " return pd.concat(dfs, ignore_index=True)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, + "id": "ce0cf954", "metadata": {}, "outputs": [ { @@ -883,74 +1045,74 @@ " \n", " \n", " \n", + " item_id\n", + " timestamp\n", " mean\n", " 0.1\n", " 0.5\n", " 0.9\n", - " item_id\n", - " timestamp\n", " \n", " \n", " \n", " \n", " 0\n", - " 315.504037\n", - " 210.074945\n", - " 315.504037\n", - " 487.484408\n", " 1062_101\n", " 2018-06-11\n", + " 320.0\n", + " 186.0\n", + " 320.0\n", + " 488.0\n", " \n", " \n", " 1\n", - " 315.364478\n", - " 200.272695\n", - " 315.364478\n", - " 508.145850\n", " 1062_101\n", " 2018-06-18\n", + " 318.0\n", + " 175.0\n", + " 318.0\n", + " 496.0\n", " \n", " \n", " 2\n", - " 310.507265\n", - " 193.902630\n", - " 310.507265\n", - " 511.559740\n", " 1062_101\n", " 2018-06-25\n", + " 316.0\n", + " 169.0\n", + " 316.0\n", + " 508.0\n", " \n", " \n", " 3\n", - " 317.322873\n", - " 200.051215\n", - " 317.322873\n", - " 525.013830\n", " 1062_101\n", " 2018-07-02\n", + " 316.0\n", + " 171.0\n", + " 316.0\n", + " 506.0\n", " \n", " \n", " 4\n", - " 319.089405\n", - " 199.634549\n", - " 319.089405\n", - " 534.102518\n", " 1062_101\n", " 2018-07-09\n", + " 310.0\n", + " 165.0\n", + " 310.0\n", + " 506.0\n", " \n", " \n", "\n", "" ], "text/plain": [ - " mean 0.1 0.5 0.9 item_id timestamp\n", - "0 315.504037 210.074945 315.504037 487.484408 1062_101 2018-06-11\n", - "1 315.364478 200.272695 315.364478 508.145850 1062_101 2018-06-18\n", - "2 310.507265 193.902630 310.507265 511.559740 1062_101 2018-06-25\n", - "3 317.322873 200.051215 317.322873 525.013830 1062_101 2018-07-02\n", - "4 319.089405 199.634549 319.089405 534.102518 1062_101 2018-07-09" + " item_id timestamp mean 0.1 0.5 0.9\n", + "0 1062_101 2018-06-11 320.0 186.0 320.0 488.0\n", + "1 1062_101 2018-06-18 318.0 175.0 318.0 496.0\n", + "2 1062_101 2018-06-25 316.0 169.0 316.0 508.0\n", + "3 1062_101 2018-07-02 316.0 171.0 316.0 506.0\n", + "4 1062_101 2018-07-09 310.0 165.0 310.0 506.0" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -962,6 +1124,7 @@ }, { "cell_type": "markdown", + "id": "e89cbc36", "metadata": {}, "source": [ "## Clean up the endpoint\n", @@ -970,8 +1133,11 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 16, + "id": "9602a0a5", + "metadata": { + "lines_to_next_cell": 3 + }, "outputs": [], "source": [ "predictor.delete_predictor()" @@ -979,9 +1145,13 @@ } ], "metadata": { - "instance_type": "ml.t3.medium", + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all" + }, "kernelspec": { - "display_name": "base", + "display_name": "sm", "language": "python", "name": "python3" }, @@ -995,9 +1165,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.10" + "version": "3.11.11" } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } From 9f8fef2116c04064e4eaef005cd858dffe7d17f6 Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Thu, 30 Oct 2025 18:08:57 +0100 Subject: [PATCH 09/60] Update model link to Hugging Face (#353) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- .github/workflows/eval-model.yml | 4 ++-- README.md | 8 ++++---- notebooks/chronos-2-quickstart.ipynb | 4 ++-- test/test_chronos2.py | 7 +++++-- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/eval-model.yml b/.github/workflows/eval-model.yml index 51f611c..28b4b2b 100644 --- a/.github/workflows/eval-model.yml +++ b/.github/workflows/eval-model.yml @@ -36,13 +36,13 @@ jobs: run: pip install ".[dev]" -f https://download.pytorch.org/whl/cpu/torch_stable.html - name: Run Eval Script for Chronos-2 - run: python scripts/evaluation/evaluate.py chronos-2 ci/evaluate/backtest_config.yaml $CHRONOS_2_RESULTS_CSV --model-id=s3://autogluon/chronos-2 --device=cpu --torch-dtype=float32 + run: python scripts/evaluation/evaluate.py chronos-2 ci/evaluate/backtest_config.yaml $CHRONOS_2_RESULTS_CSV --model-id=amazon/chronos-2 --device=cpu --torch-dtype=float32 - name: Print Chronos-2 CSV run: cat $CHRONOS_2_RESULTS_CSV - name: Run Eval Script for Chronos-Bolt run: python scripts/evaluation/evaluate.py chronos-bolt ci/evaluate/backtest_config.yaml $CHRONOS_BOLT_RESULTS_CSV --model-id=amazon/chronos-bolt-small --device=cpu --torch-dtype=float32 - + - name: Print Chronos-Bolt CSV run: cat $CHRONOS_BOLT_RESULTS_CSV diff --git a/README.md b/README.md index 61a1615..c5138f0 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ ## 🚀 News -- **20 Oct 2025**: 🚀 [Chronos-2](https://arxiv.org/abs/2510.15821) released. It offers _zero-shot_ support for univariate, multivariate, and covariate-informed forecasting tasks. Chronos-2 achieves the best performance on fev-bench, GIFT-Eval and Chronos Benchmark II amongst pretrained models. Check out [this notebook](notebooks/chronos-2-quickstart.ipynb) to get started with Chronos-2. +- **20 Oct 2025**: 🚀 [Chronos-2](https://huggingface.co/amazon/chronos-2) released. It offers _zero-shot_ support for univariate, multivariate, and covariate-informed forecasting tasks. Chronos-2 achieves the best performance on fev-bench, GIFT-Eval and Chronos Benchmark II amongst pretrained models. Check out [this notebook](notebooks/chronos-2-quickstart.ipynb) to get started with Chronos-2. - **14 Feb 2025**: 🚀 Chronos-Bolt is now available on Amazon SageMaker JumpStart! Check out the [tutorial notebook](notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb) to learn how to deploy Chronos endpoints for production use in 3 lines of code. - **12 Dec 2024**: 📊 We released [`fev`](https://github.com/autogluon/fev), a lightweight package for benchmarking time series forecasting models based on the [Hugging Face `datasets`](https://huggingface.co/docs/datasets/en/index) library. - **26 Nov 2024**: ⚡️ Chronos-Bolt models released [on HuggingFace](https://huggingface.co/collections/amazon/chronos-models-65f1791d630a8d57cb718444). Chronos-Bolt models are more accurate (5% lower error), up to 250x faster and 20x more memory efficient than the original Chronos models of the same size! @@ -39,7 +39,7 @@ This package provides an interface to the Chronos family of **pretrained time se | Model ID | Parameters | | ---------------------------------------------------------------------- | ---------- | -| [`s3://autogluon/chronos-2`](https://arxiv.org/abs/2510.15821) | 120M | +| [`amazon/chronos-2`](https://huggingface.co/amazon/chronos-2) | 120M | | [`amazon/chronos-bolt-tiny`](https://huggingface.co/amazon/chronos-bolt-tiny) | 9M | | [`amazon/chronos-bolt-mini`](https://huggingface.co/amazon/chronos-bolt-mini) | 21M | | [`amazon/chronos-bolt-small`](https://huggingface.co/amazon/chronos-bolt-small) | 48M | @@ -48,7 +48,7 @@ This package provides an interface to the Chronos family of **pretrained time se | [`amazon/chronos-t5-mini`](https://huggingface.co/amazon/chronos-t5-mini) | 20M | | [`amazon/chronos-t5-small`](https://huggingface.co/amazon/chronos-t5-small) | 46M | | [`amazon/chronos-t5-base`](https://huggingface.co/amazon/chronos-t5-base) | 200M | -| [`amazon/chronos-t5-large`](https://huggingface.co/amazon/chronos-t5-large) | 710M | +| [`amazon/chronos-t5-large`](https://huggingface.co/amazon/chronos-t5-large) | 710M | @@ -68,7 +68,7 @@ A minimal example showing how to perform forecasting using Chronos-2: import pandas as pd # requires: pip install 'pandas[pyarrow]' from chronos import Chronos2Pipeline -pipeline = Chronos2Pipeline.from_pretrained("s3://autogluon/chronos-2", device_map="cuda") +pipeline = Chronos2Pipeline.from_pretrained("amazon/chronos-2", device_map="cuda") # Load historical target values and past values of covariates context_df = pd.read_parquet("https://autogluon.s3.amazonaws.com/datasets/timeseries/electricity_price/train.parquet") diff --git a/notebooks/chronos-2-quickstart.ipynb b/notebooks/chronos-2-quickstart.ipynb index e17a995..32a6111 100644 --- a/notebooks/chronos-2-quickstart.ipynb +++ b/notebooks/chronos-2-quickstart.ipynb @@ -36,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "fcc7e496", "metadata": {}, "outputs": [], @@ -53,7 +53,7 @@ "\n", "# Load the Chronos-2 pipeline\n", "# GPU recommended for faster inference, but CPU is also supported\n", - "pipeline: Chronos2Pipeline = BaseChronosPipeline.from_pretrained(\"s3://autogluon/chronos-2/\", device_map=\"cuda\")" + "pipeline: Chronos2Pipeline = BaseChronosPipeline.from_pretrained(\"amazon/chronos-2\", device_map=\"cuda\")" ] }, { diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 3c4281c..0efde91 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -13,10 +13,9 @@ import pytest import torch from chronos import BaseChronosPipeline, Chronos2Pipeline -from chronos.chronos2.dataset import convert_df_input_to_list_of_dicts_input from chronos.chronos2.config import Chronos2CoreConfig +from chronos.chronos2.dataset import convert_df_input_to_list_of_dicts_input from chronos.chronos2.layers import MHA - from test.util import validate_tensor DUMMY_MODEL_PATH = Path(__file__).parent / "dummy-chronos2-model" @@ -35,6 +34,10 @@ def test_base_chronos2_pipeline_loads_from_s3(): BaseChronosPipeline.from_pretrained("s3://autogluon/chronos-2", device_map="cpu") +def test_base_chronos2_pipeline_loads_from_hf(): + BaseChronosPipeline.from_pretrained("amazon/chronos-2", device_map="cpu") + + @pytest.mark.parametrize( "inputs, prediction_length, expected_output_shapes", [ From dc5c438ab2dcd308d46f9bfb848a00c678c6ce57 Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Fri, 31 Oct 2025 08:13:20 +0100 Subject: [PATCH 10/60] Remove logo from README (#355) Removed logo image from the README. *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- README.md | 4 - figures/chronos-logo.png | Bin 120558 -> 0 bytes figures/main-figure.png | Bin 232294 -> 0 bytes figures/zero_shot-agg_scaled_score.svg | 4875 ------------------------ 4 files changed, 4879 deletions(-) delete mode 100644 figures/chronos-logo.png delete mode 100644 figures/main-figure.png delete mode 100644 figures/zero_shot-agg_scaled_score.svg diff --git a/README.md b/README.md index c5138f0..09685f4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,3 @@ -
- -
-
# Chronos: Pretrained Models for Time Series Forecasting diff --git a/figures/chronos-logo.png b/figures/chronos-logo.png deleted file mode 100644 index fff5a42e83756a968fde3130b9221ef5766eb39b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120558 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
    ZWb<(HR>)6@6rT$jJ$z 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 z�XojBm*KTER0)fw6)%FKCfVNWtAK>)l0Y8Ge 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%0D{i1pNKU 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%0Dwm&ScD%K-mSJe1?wbR^_DBSo1gV$-qs7%*R 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≶afi$@QhY50jyXA^CHdZnF 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 - - - - - - - 2024-11-26T17:40:11.488708 - image/svg+xml - - - Matplotlib v3.9.2, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From c5aa5f429280bc9ccfa59c67e116a26f1bdbd28b Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 31 Oct 2025 10:09:04 +0100 Subject: [PATCH 11/60] Update Notebooks and README (#356) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --------- Co-authored-by: Oleksandr Shchur --- README.md | 15 +++++++++++++-- notebooks/chronos-2-quickstart.ipynb | 12 +++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 09685f4..94fa533 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,10 @@ To perform inference with Chronos, the easiest way is to install this package th pip install chronos-forecasting ``` +> [!TIP] +> For reliable production use, we recommend using Chronos-2 models through [Amazon SageMaker JumpStart](https://aws.amazon.com/sagemaker/ai/jumpstart/). Check out [this tutorial](notebooks/deploy-chronos-to-amazon-sagemaker.ipynb) to learn how to deploy Chronos-2 inference endpoints to AWS with just a few lines of code. + + ### Forecasting A minimal example showing how to perform forecasting using Chronos-2: @@ -111,8 +115,15 @@ plt.legend() ## Example Notebooks - [Chronos-2 Quick Start](notebooks/chronos-2-quickstart.ipynb) -- [Deploy Chronos-Bolt on Amazon SageMaker](notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb) -- Deploy Chronos-2 on Amazon SageMaker (coming soon!) +   + + Open In SageMaker Studio Lab + +   + + Open In Colab + +- [Deploy Chronos-2 on Amazon SageMaker](notebooks/deploy-chronos-to-amazon-sagemaker.ipynb) ## 📝 Citation diff --git a/notebooks/chronos-2-quickstart.ipynb b/notebooks/chronos-2-quickstart.ipynb index 32a6111..65ae9aa 100644 --- a/notebooks/chronos-2-quickstart.ipynb +++ b/notebooks/chronos-2-quickstart.ipynb @@ -7,6 +7,12 @@ "source": [ "# Getting Started with Chronos-2\n", "\n", + "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/amazon-science/chronos-forecasting/blob/main/notebooks/chronos-2-quickstart.ipynb)\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](\n", + "https://colab.research.google.com/github/amazon-science/chronos-forecasting/blob/main/notebooks/chronos-2-quickstart.ipynb)\n", + "\n", + "\n", + "\n", "**Chronos-2** is a foundation model for time series forecasting that builds on [Chronos](https://arxiv.org/abs/2403.07815) and [Chronos-Bolt](https://aws.amazon.com/blogs/machine-learning/fast-and-accurate-zero-shot-forecasting-with-chronos-bolt-and-autogluon/). It offers significant improvements in capabilities and can handle diverse forecasting scenarios not supported by earlier models.\n", "\n", "| Capability | Chronos | Chronos-Bolt | Chronos-2 |\n", @@ -31,7 +37,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install -U 'chronos-forecasting>=2.0' 'pandas[pyarrow]' 'matplotlib'" + "%pip install 'chronos-forecasting>=2.0' 'pandas[pyarrow]' 'matplotlib'" ] }, { @@ -41,9 +47,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Use only 1 GPU if available\n", "import os\n", "\n", + "# Use only 1 GPU if available\n", "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n", "\n", "import pandas as pd\n", @@ -1586,7 +1592,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.11" + "version": "3.11.13" } }, "nbformat": 4, From c23d34cd887b889c302ca7b6df3fa0bca96d78a9 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 31 Oct 2025 11:05:09 +0100 Subject: [PATCH 12/60] Add FutureWarning for CloudFront (#357) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/boto_utils.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/chronos/boto_utils.py b/src/chronos/boto_utils.py index 7d0d16d..3e20e97 100644 --- a/src/chronos/boto_utils.py +++ b/src/chronos/boto_utils.py @@ -6,6 +6,7 @@ import logging import os import re +import warnings from pathlib import Path import boto3 @@ -110,6 +111,12 @@ def cache_model_from_s3( # Use CloudFront CDN for faster, cached downloads if available if cloudfront_url: + warnings.warn( + f"Loading {s3_uri} from CloudFront is deprecated and will be removed in a future version. " + f'Please specify a HuggingFace model_id instead. For example: Chronos2Pipeline.from_pretrained("amazon/chronos-2")', + category=FutureWarning, + stacklevel=3, + ) try: download_model_files_from_cloudfront( cloudfront_url=cloudfront_url, From 93419cfe9fd678b06503b3ce22113f4482c44b6f Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 5 Nov 2025 14:27:46 +0100 Subject: [PATCH 13/60] Relax `transformers` lower bound to >=4.41 (#364) --- pyproject.toml | 2 +- test/test_chronos2.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b42c37f..ae6cad6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ license = { file = "LICENSE" } requires-python = ">=3.10" dependencies = [ "torch>=2.0,<3", - "transformers>=4.49,<5", + "transformers>=4.41,<5", "accelerate>=0.34,<2", "numpy>=1.21,<3", "einops>=0.7.0,<1", diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 0efde91..92eb5a1 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -327,7 +327,7 @@ def test_when_input_is_invalid_then_predict_raises_value_error(pipeline, inputs, @pytest.mark.parametrize("input_dtype", [torch.float32, torch.bfloat16, torch.int64]) def test_pipeline_predict_can_handle_different_model_and_input_dtypes(dtype: torch.dtype, input_dtype: torch.dtype): pipeline = BaseChronosPipeline.from_pretrained( - Path(__file__).parent / "dummy-chronos2-model", device_map="cpu", dtype=dtype + Path(__file__).parent / "dummy-chronos2-model", device_map="cpu", torch_dtype=dtype ) context = 10 * torch.rand(size=(4, 3, 16)) + 10 context = context.to(dtype=input_dtype) @@ -1018,13 +1018,13 @@ def test_eager_and_sdpa_produce_identical_outputs(pipeline): # Reload pipeline with SDPA model_path = Path(__file__).parent / "dummy-chronos2-model" pipeline_sdpa = BaseChronosPipeline.from_pretrained( - model_path, device_map="cpu", attn_implementation="sdpa", dtype=torch.float32 + model_path, device_map="cpu", attn_implementation="sdpa", torch_dtype=torch.float32 ) # Note: the original pipeline fixture uses default attn_implementation which should be sdpa # Force eager for comparison pipeline_eager = BaseChronosPipeline.from_pretrained( - model_path, device_map="cpu", attn_implementation="eager", dtype=torch.float32 + model_path, device_map="cpu", attn_implementation="eager", torch_dtype=torch.float32 ) # Test 1: Simple univariate input From 78bd1c90ca1bb7aee08e0307758d18c5b06c9c3f Mon Sep 17 00:00:00 2001 From: Ilias Aarab <69244507+IliasAarab@users.noreply.github.com> Date: Wed, 5 Nov 2025 23:33:07 +0100 Subject: [PATCH 14/60] Set `num_workers=0` in Chronos-2 test data loader (#365) By default, the `transformers` library sets the `num_workers` argument of the PyTorch DataLoader to `0`, ensuring out-of-the-box compatibility across different platforms. *Issue #, if available:* *Description of changes:* Set the DataLoader `num_workers` argument to `0` to improve cross-platform compatibility, particularly on Windows systems where multiprocessing requires guarded execution. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --------- Co-authored-by: Abdul Fatir --- src/chronos/chronos2/pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 2250fb2..9906119 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -542,7 +542,7 @@ class Chronos2Pipeline(BaseChronosPipeline): mode=DatasetMode.TEST, ) test_loader = DataLoader( - test_dataset, batch_size=None, num_workers=1, pin_memory=True, shuffle=False, drop_last=False + test_dataset, batch_size=None, pin_memory=True, shuffle=False, drop_last=False ) all_predictions: list[torch.Tensor] = [] From 46b20c2d54e749c33d6b4431d39227d00f978e7c Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Thu, 6 Nov 2025 11:25:48 +0100 Subject: [PATCH 15/60] Update long horizon heuristic for Chronos-Bolt (#366) *Issue #, if available:* *Description of changes:* In light of the planned AG dependency on this package, this PR updates the long horizon heuristic of Chronos-Bolt to what it was in AG (introduced in https://github.com/autogluon/autogluon/pull/5177). Code has been copy-pasted [from AG](https://github.com/autogluon/autogluon/blob/5fcebaa4938c74bf87baab815d5bff361c934b32/timeseries/src/autogluon/timeseries/models/chronos/pipeline/chronos_bolt.py#L441). By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos_bolt.py | 62 +++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/src/chronos/chronos_bolt.py b/src/chronos/chronos_bolt.py index 1b60a8f..f0b910d 100644 --- a/src/chronos/chronos_bolt.py +++ b/src/chronos/chronos_bolt.py @@ -407,6 +407,8 @@ class ChronosBoltPipeline(BaseChronosPipeline): def __init__(self, model: ChronosBoltModelForForecasting): super().__init__(inner_model=model) # type: ignore self.model = model + self.model_context_length: int = self.model.config.chronos_config["context_length"] + self.model_prediction_length: int = self.model.config.chronos_config["prediction_length"] @property def quantiles(self) -> List[float]: @@ -487,14 +489,12 @@ class ChronosBoltPipeline(BaseChronosPipeline): """ context_tensor = self._prepare_and_validate_context(context=inputs) - model_context_length: int = self.model.config.chronos_config["context_length"] - model_prediction_length: int = self.model.config.chronos_config["prediction_length"] if prediction_length is None: - prediction_length = model_prediction_length + prediction_length = self.model_prediction_length - if prediction_length > model_prediction_length: + if prediction_length > self.model_prediction_length: msg = ( - f"We recommend keeping prediction length <= {model_prediction_length}. " + f"We recommend keeping prediction length <= {self.model_prediction_length}. " "The quality of longer predictions may degrade since the model is not optimized for it. " ) if limit_prediction_length: @@ -507,32 +507,46 @@ class ChronosBoltPipeline(BaseChronosPipeline): # We truncate the context here because otherwise batches with very long # context could take up large amounts of GPU memory unnecessarily. - if context_tensor.shape[-1] > model_context_length: - context_tensor = context_tensor[..., -model_context_length:] + if context_tensor.shape[-1] > self.model_context_length: + context_tensor = context_tensor[..., -self.model_context_length :] - # TODO: We unroll the forecast of Chronos Bolt greedily with the full forecast - # horizon that the model was trained with (i.e., 64). This results in variance collapsing - # every 64 steps. - context_tensor = context_tensor.to( - device=self.model.device, - dtype=torch.float32, - ) - while remaining > 0: - with torch.no_grad(): - prediction = self.model( - context=context_tensor, - ).quantile_preds.to(context_tensor) + context_tensor = context_tensor.to(device=self.model.device, dtype=torch.float32) + # First block prediction + with torch.no_grad(): + prediction: torch.Tensor = self.model(context=context_tensor).quantile_preds.to(context_tensor) predictions.append(prediction) remaining -= prediction.shape[-1] - if remaining <= 0: - break + # NOTE: The following heuristic for better prediction intervals with long-horizon forecasts + # uses all quantiles generated by the model for the first `model_prediction_length` steps, + # concatenating each quantile with the context and generating the next `model_prediction_length` steps. + # The `num_quantiles * num_quantiles` "samples" thus generated are then reduced to `num_quantiles` + # by computing empirical quantiles. Note that this option scales the batch size by `num_quantiles` + # when the `prediction_length` is greater than `model_prediction_length`. - central_idx = torch.abs(torch.tensor(self.quantiles) - 0.5).argmin() - central_prediction = prediction[:, central_idx] + if remaining > 0: + # Expand the context along quantile axis + context_tensor = context_tensor.unsqueeze(1).repeat(1, len(self.quantiles), 1) - context_tensor = torch.cat([context_tensor, central_prediction], dim=-1) + quantile_tensor = torch.tensor(self.quantiles, device=context_tensor.device) + while remaining > 0: + # Append the prediction to context + context_tensor = torch.cat([context_tensor, prediction], dim=-1)[..., -self.model_context_length :] + (batch_size, n_quantiles, context_length) = context_tensor.shape + + with torch.no_grad(): + # Reshape (batch, n_quantiles, context_length) -> (batch * n_quantiles, context_length) + prediction = self.model( + context=context_tensor.reshape(batch_size * n_quantiles, context_length) + ).quantile_preds.to(context_tensor) + # Reshape predictions from (batch * n_quantiles, n_quantiles, model_prediction_length) to (batch, n_quantiles * n_quantiles, model_prediction_length) + prediction = prediction.reshape(batch_size, n_quantiles * n_quantiles, -1) + # Reduce `n_quantiles * n_quantiles` to n_quantiles and transpose back to (batch_size, n_quantiles, model_prediction_length) + prediction = torch.quantile(prediction, q=quantile_tensor, dim=1).transpose(0, 1) + + predictions.append(prediction) + remaining -= prediction.shape[-1] return torch.cat(predictions, dim=-1)[..., :prediction_length].to(dtype=torch.float32, device="cpu") From 22c036bf0770a3ca5edf0e1f437609d076d668f4 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 7 Nov 2025 16:04:35 +0100 Subject: [PATCH 16/60] Fix SageMaker deployment link in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94fa533..cefefb5 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![huggingface](https://img.shields.io/badge/%F0%9F%A4%97%20HF-Datasets-FFD21E)](https://huggingface.co/datasets/autogluon/chronos_datasets) [![huggingface](https://img.shields.io/badge/%F0%9F%A4%97%20HF-Models-FFD21E)](https://huggingface.co/collections/amazon/chronos-models-65f1791d630a8d57cb718444) [![fev](https://img.shields.io/static/v1?label=fev&message=Benchmark&color=B31B1B&logo=github)](https://github.com/autogluon/fev) -[![aws](https://img.shields.io/static/v1?label=SageMaker&message=Deploy&color=FF9900&logo=amazon-web-services)](notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb) +[![aws](https://img.shields.io/static/v1?label=SageMaker&message=Deploy&color=FF9900&logo=amazon-web-services)](notebooks/deploy-chronos-to-amazon-sagemaker.ipynb) [![faq](https://img.shields.io/badge/FAQ-Questions%3F-blue)](https://github.com/amazon-science/chronos-forecasting/issues?q=is%3Aissue+label%3AFAQ) [![License: MIT](https://img.shields.io/badge/License-Apache--2.0-green.svg)](https://opensource.org/licenses/Apache-2.0) From e48f48071f999825b4ed114230229dd771fac129 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Tue, 11 Nov 2025 18:37:19 +0100 Subject: [PATCH 17/60] Add predict_df support for Chronos and Chronos-Bolt (#371) *Issue #, if available:* *Description of changes:* This PR adds `predict_df` to the base pipeline which enables pandas support for the univariate Chronos and Chronos-Bolt models. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/base.py | 110 +++++++++++ src/chronos/chronos.py | 8 + src/chronos/chronos2/dataset.py | 303 ----------------------------- src/chronos/chronos2/pipeline.py | 12 +- src/chronos/chronos_bolt.py | 10 +- src/chronos/df_utils.py | 314 +++++++++++++++++++++++++++++++ test/test_chronos.py | 111 +++++++++-- test/test_chronos2.py | 37 +--- test/test_chronos_bolt.py | 111 +++++++++-- test/util.py | 36 ++++ 10 files changed, 671 insertions(+), 381 deletions(-) create mode 100644 src/chronos/df_utils.py diff --git a/src/chronos/base.py b/src/chronos/base.py index 34fa91b..8f452b1 100644 --- a/src/chronos/base.py +++ b/src/chronos/base.py @@ -17,8 +17,10 @@ import torch if TYPE_CHECKING: import datasets import fev + import pandas as pd from transformers import PreTrainedModel + from .utils import left_pad_and_stack_1D @@ -53,6 +55,14 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): # for easy access to the inner HF-style model self.inner_model = inner_model + @property + def model_context_length(self) -> int: + raise NotImplementedError() + + @property + def model_prediction_length(self) -> int: + raise NotImplementedError() + def _prepare_and_validate_context(self, context: Union[torch.Tensor, List[torch.Tensor]]): if isinstance(context, list): context = left_pad_and_stack_1D(context) @@ -122,6 +132,106 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): """ raise NotImplementedError() + def predict_df( + self, + df: "pd.DataFrame", + *, + id_column: str = "item_id", + timestamp_column: str = "timestamp", + target: str = "target", + prediction_length: int | None = None, + quantile_levels: list[float] = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], + **predict_kwargs, + ) -> "pd.DataFrame": + """ + Perform forecasting on time series data in a long-format pandas DataFrame. + + Parameters + ---------- + df + Time series data in long format with an id column, a timestamp, and one target column. + Any other columns, if present, will be ignored + id_column + The name of the column which contains the unique time series identifiers, by default "item_id" + timestamp_column + The name of the column which contains timestamps, by default "timestamp" + All time series in the dataframe must have regular timestamps with the same frequency (no gaps) + target + The name of the column which contains the target variables to be forecasted, by default "target" + prediction_length + Number of steps to predict for each time series + quantile_levels + Quantile levels to compute + **predict_kwargs + Additional arguments passed to predict_quantiles + + Returns + ------- + The forecasts dataframe generated by the model with the following columns + - `id_column`: The time series ID + - `timestamp_column`: Future timestamps + - "target_name": The name of the target column + - "predictions": The point predictions generated by the model + - One column for predictions at each quantile level in `quantile_levels` + """ + try: + import pandas as pd + + from .df_utils import convert_df_input_to_list_of_dicts_input + except ImportError: + raise ImportError("pandas is required for predict_df. Please install it with `pip install pandas`.") + + if not isinstance(target, str): + raise ValueError( + f"Expected `target` to be str, but found {type(target)}. {self.__class__.__name__} only supports univariate forecasting." + ) + + if prediction_length is None: + prediction_length = self.model_prediction_length + + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=None, + id_column=id_column, + timestamp_column=timestamp_column, + target_columns=[target], + prediction_length=prediction_length, + ) + + # NOTE: any covariates, if present, are ignored here + context = [torch.tensor(item["target"]).squeeze(0) for item in inputs] # squeeze the extra variate dim + + # Generate forecasts + quantiles, mean = self.predict_quantiles( + inputs=context, + prediction_length=prediction_length, + quantile_levels=quantile_levels, + limit_prediction_length=False, + **predict_kwargs, + ) + + quantiles_np = quantiles.numpy() # [n_series, horizon, num_quantiles] + mean_np = mean.numpy() # [n_series, horizon] + + results_dfs = [] + for i, (series_id, future_ts) in enumerate(prediction_timestamps.items()): + q_pred = quantiles_np[i] # (horizon, num_quantiles) + point_pred = mean_np[i] # (horizon) + + series_forecast_data = {id_column: series_id, timestamp_column: future_ts, "target_name": target} + series_forecast_data["predictions"] = point_pred + for q_idx, q_level in enumerate(quantile_levels): + series_forecast_data[str(q_level)] = q_pred[:, q_idx] + + results_dfs.append(pd.DataFrame(series_forecast_data)) + + predictions_df = pd.concat(results_dfs, ignore_index=True) + predictions_df.set_index(id_column, inplace=True) + predictions_df = predictions_df.loc[original_order] + predictions_df.reset_index(inplace=True) + + return predictions_df + def predict_fev( self, task: "fev.Task", batch_size: int = 32, **kwargs ) -> tuple[list["datasets.DatasetDict"], float]: diff --git a/src/chronos/chronos.py b/src/chronos/chronos.py index 94211a0..5540df3 100644 --- a/src/chronos/chronos.py +++ b/src/chronos/chronos.py @@ -377,6 +377,14 @@ class ChronosPipeline(BaseChronosPipeline): self.tokenizer = tokenizer self.model = model + @property + def model_context_length(self) -> int: + return self.model.config.context_length + + @property + def model_prediction_length(self) -> int: + return self.model.config.prediction_length + def _prepare_and_validate_context(self, context: Union[torch.Tensor, List[torch.Tensor]]): if isinstance(context, list): context = left_pad_and_stack_1D(context) diff --git a/src/chronos/chronos2/dataset.py b/src/chronos/chronos2/dataset.py index 86bf8b9..8d6fd3f 100644 --- a/src/chronos/chronos2/dataset.py +++ b/src/chronos/chronos2/dataset.py @@ -15,7 +15,6 @@ from torch.utils.data import IterableDataset if TYPE_CHECKING: import datasets import fev - import pandas as pd TensorOrArray: TypeAlias = torch.Tensor | np.ndarray @@ -275,308 +274,6 @@ def convert_tensor_input_to_list_of_dicts_input(tensor: TensorOrArray) -> list[d return output -def _validate_df_types_and_cast( - df: "pd.DataFrame", - future_df: "pd.DataFrame | None", - target_columns: list[str], - id_column: str = "item_id", - timestamp_column: str = "timestamp", -) -> tuple["pd.DataFrame", "pd.DataFrame | None"]: - import pandas as pd - - astype_dict = {} - future_astype_dict = {} - for col in df.columns.drop([id_column, timestamp_column]): - col_dtype = df[col].dtype - if col in target_columns and not pd.api.types.is_numeric_dtype(df[col]): - raise ValueError(f"All target columns must be numeric but got {col=} with dtype={col_dtype}") - - if ( - pd.api.types.is_object_dtype(df[col]) - or pd.api.types.is_string_dtype(df[col]) - or isinstance(col_dtype, pd.CategoricalDtype) - ): - astype_dict[col] = "category" - elif pd.api.types.is_numeric_dtype(df[col]) or pd.api.types.is_bool_dtype(df[col]): - astype_dict[col] = "float32" - else: - raise ValueError( - f"All columns must contain numeric, object, category, string, or bool dtype but got {col=} with dtype={col_dtype}" - ) - - if future_df is not None and col in future_df.columns: - if future_df[col].dtype != col_dtype: - raise ValueError( - f"Column {col} in future_df has dtype {future_df[col].dtype} but column in df has dtype {col_dtype}" - ) - future_astype_dict[col] = astype_dict[col] - - df = df.astype(astype_dict, copy=True) - if future_df is not None: - future_df = future_df.astype(future_astype_dict, copy=True) - - return df, future_df - - -def validate_df_inputs( - df: "pd.DataFrame", - future_df: "pd.DataFrame | None", - target_columns: list[str], - prediction_length: int, - id_column: str = "item_id", - timestamp_column: str = "timestamp", -) -> tuple["pd.DataFrame", "pd.DataFrame | None", "pd.Timedelta", list[int], list[int] | None, np.ndarray]: - """ - Validates and prepares dataframe inputs passed to `Chronos2Pipeline.predict_df`. - - Parameters - ---------- - df - Input dataframe containing time series data with columns: - - id_column: Identifier for each time series - - timestamp_column: Timestamps for each observation - - target_columns: One or more target variables to forecast - - Additional columns are treated as covariates - future_df - Optional dataframe containing future covariate values with columns: - - id_column: Identifier for each time series - - timestamp_column: Future timestamps - - Subset of covariate columns from df - target_columns - Names of target columns to forecast - prediction_length - Number of future time steps to predict - id_column - Name of column containing time series identifiers - timestamp_column - Name of column containing timestamps - - Returns - ------- - A tuple containing: - - Validated and sorted input dataframe - - Validated and sorted future dataframe (if provided) - - Inferred frequency of the time series - - List of series lengths from input dataframe - - List of series lengths from future dataframe (if provided) - - Original order of time series IDs - - Raises - ------ - ValueError - If validation fails for: - - Missing required columns - - Invalid data types - - Inconsistent frequencies - - Insufficient data points - - Mismatched series between df and future_df - - Invalid future_df lengths - """ - - import pandas as pd - - required_cols = [id_column, timestamp_column] + target_columns - missing_cols = [col for col in required_cols if col not in df.columns] - if missing_cols: - raise ValueError(f"df does not contain all expected columns. Missing columns: {missing_cols}") - - if future_df is not None: - future_required_cols = [id_column, timestamp_column] - missing_future_cols = [col for col in future_required_cols if col not in future_df.columns] - targets_in_future = [col for col in future_df.columns if col in target_columns] - extra_future_cols = [col for col in future_df.columns if col not in df.columns] - if missing_future_cols: - raise ValueError( - f"future_df does not contain all expected columns. Missing columns: {missing_future_cols}" - ) - if targets_in_future: - raise ValueError( - f"future_df cannot contain target columns. Target columns found in future_df: {targets_in_future}" - ) - if extra_future_cols: - raise ValueError(f"future_df cannot contain columns not present in df. Extra columns: {extra_future_cols}") - - df, future_df = _validate_df_types_and_cast( - df, future_df, id_column=id_column, timestamp_column=timestamp_column, target_columns=target_columns - ) - - # Get the original order of time series IDs - original_order = df[id_column].unique() - - # Sort and prepare df - df[timestamp_column] = pd.to_datetime(df[timestamp_column]) - df = df.sort_values([id_column, timestamp_column]) - - # Get series lengths - series_lengths = df[id_column].value_counts(sort=False).to_list() - - def validate_freq(timestamps: pd.Series, series_id: str): - freq = pd.infer_freq(timestamps) - if not freq: - raise ValueError(f"Could not infer frequency for series {series_id}") - return freq - - # Validate each series - all_freqs = [] - start_idx = 0 - for length in series_lengths: - if length < 3: - series_id = df.iloc[start_idx][id_column] - raise ValueError( - f"Every time series must have at least 3 data points, found {length=} for series {series_id}" - ) - - series_data = df.iloc[start_idx : start_idx + length] - timestamps = series_data[timestamp_column] - series_id = series_data.iloc[0][id_column] - all_freqs.append(validate_freq(timestamps, series_id)) - start_idx += length - - if len(set(all_freqs)) > 1: - raise ValueError("All time series must have the same frequency") - - inferred_freq = all_freqs[0] - - # Sort future_df if provided and validate its series lengths - future_series_lengths = None - if future_df is not None: - future_df[timestamp_column] = pd.to_datetime(future_df[timestamp_column]) - future_df = future_df.sort_values([id_column, timestamp_column]) - - # Validate that future_df contains all series from df - context_ids = set(df[id_column].unique()) - future_ids = set(future_df[id_column].unique()) - if context_ids != future_ids: - raise ValueError("future_df must contain the same time series IDs as df") - - future_series_lengths = future_df[id_column].value_counts(sort=False).to_list() - - # Validate future series lengths match prediction_length - future_start_idx = 0 - for future_length in future_series_lengths: - future_series_data = future_df.iloc[future_start_idx : future_start_idx + future_length] - future_timestamps = future_series_data[timestamp_column] - future_series_id = future_series_data.iloc[0][id_column] - if future_length != prediction_length: - raise ValueError( - f"Future covariates all time series must have length {prediction_length}, got {future_length} for series {future_series_id}" - ) - if future_length < 3 or inferred_freq != validate_freq(future_timestamps, future_series_id): - raise ValueError( - f"Future covariates must have the same frequency as context, found series {future_series_id} with a different frequency" - ) - future_start_idx += future_length - - assert len(series_lengths) == len(future_series_lengths) - - return df, future_df, inferred_freq, series_lengths, future_series_lengths, original_order - - -def convert_df_input_to_list_of_dicts_input( - df: "pd.DataFrame", - future_df: "pd.DataFrame | None", - target_columns: list[str], - prediction_length: int, - id_column: str = "item_id", - timestamp_column: str = "timestamp", -) -> tuple[list[dict[str, np.ndarray | dict[str, np.ndarray]]], np.ndarray, dict[str, "pd.DatetimeIndex"]]: - """ - Convert from dataframe input format to a list of dictionaries input format. - - Parameters - ---------- - df - Input dataframe containing time series data with columns: - - id_column: Identifier for each time series - - timestamp_column: Timestamps for each observation - - target_columns: One or more target variables to forecast - - Additional columns are treated as covariates - future_df - Optional dataframe containing future covariate values with columns: - - id_column: Identifier for each time series - - timestamp_column: Future timestamps - - Subset of covariate columns from df - target_columns - Names of target columns to forecast - prediction_length - Number of future time steps to predict - id_column - Name of column containing time series identifiers - timestamp_column - Name of column containing timestamps - - Returns - ------- - A tuple containing: - - List of dictionaries in the format expected by `Chronos2Pipeline.predict` - - Original order of time series IDs - - Dictionary mapping series IDs to future time index - """ - - import pandas as pd - - df, future_df, freq, series_lengths, future_series_lengths, original_order = validate_df_inputs( - df, - future_df=future_df, - id_column=id_column, - timestamp_column=timestamp_column, - target_columns=target_columns, - prediction_length=prediction_length, - ) - - # Convert to list of dicts format - inputs: list[dict[str, np.ndarray | dict[str, np.ndarray]]] = [] - prediction_timestamps: dict[str, pd.DatetimeIndex] = {} - start_idx: int = 0 - future_start_idx: int = 0 - - for i, length in enumerate(series_lengths): - series_data = df.iloc[start_idx : start_idx + length] - # Extract target(s) - target_data = series_data[target_columns].to_numpy().T # Shape: (n_targets, history_length) - task: dict[str, np.ndarray | dict[str, np.ndarray]] = {"target": target_data} - - # Generate future timestamps - series_id = series_data.iloc[0][id_column] - last_timestamp = series_data[timestamp_column].iloc[-1] - future_ts = pd.date_range(start=last_timestamp, periods=prediction_length + 1, freq=freq)[1:] - prediction_timestamps[series_id] = future_ts - - # Handle covariates if present - covariate_cols = [ - col for col in series_data.columns if col not in [id_column, timestamp_column] + target_columns - ] - - if covariate_cols: - past_covariates = {col: series_data[col].to_numpy() for col in covariate_cols} - task["past_covariates"] = past_covariates - - # Handle future covariates - if future_df is not None: - assert future_series_lengths is not None - future_length = future_series_lengths[i] - future_data = future_df.iloc[future_start_idx : future_start_idx + future_length] - assert future_data[timestamp_column].iloc[0] == future_ts[0], ( - f"the first timestamp in future_df must be the first forecast timestamp, found mismatch " - f"({future_data[timestamp_column].iloc[0]} != {future_ts[0]}) in series {series_id}" - ) - - if len(future_data) > 0: - future_covariates = { - col: future_data[col].to_numpy() for col in covariate_cols if col in future_data.columns - } - if future_covariates: - task["future_covariates"] = future_covariates - future_start_idx += future_length - - inputs.append(task) - start_idx += length - - assert len(inputs) == len(series_lengths) - - return inputs, original_order, prediction_timestamps - - def _cast_fev_features( past_data: "datasets.Dataset", future_data: "datasets.Dataset", diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 9906119..ce398b0 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -20,12 +20,8 @@ from transformers import AutoConfig import chronos.chronos2 from chronos.base import BaseChronosPipeline, ForecastType from chronos.chronos2 import Chronos2Model -from chronos.chronos2.dataset import ( - Chronos2Dataset, - DatasetMode, - TensorOrArray, - convert_df_input_to_list_of_dicts_input, -) +from chronos.chronos2.dataset import Chronos2Dataset, DatasetMode, TensorOrArray +from chronos.df_utils import convert_df_input_to_list_of_dicts_input from chronos.utils import interpolate_quantiles, weighted_quantile if TYPE_CHECKING: @@ -541,9 +537,7 @@ class Chronos2Pipeline(BaseChronosPipeline): output_patch_size=self.model_output_patch_size, mode=DatasetMode.TEST, ) - test_loader = DataLoader( - test_dataset, batch_size=None, pin_memory=True, shuffle=False, drop_last=False - ) + test_loader = DataLoader(test_dataset, batch_size=None, pin_memory=True, shuffle=False, drop_last=False) all_predictions: list[torch.Tensor] = [] for batch in test_loader: diff --git a/src/chronos/chronos_bolt.py b/src/chronos/chronos_bolt.py index f0b910d..743ec06 100644 --- a/src/chronos/chronos_bolt.py +++ b/src/chronos/chronos_bolt.py @@ -407,8 +407,14 @@ class ChronosBoltPipeline(BaseChronosPipeline): def __init__(self, model: ChronosBoltModelForForecasting): super().__init__(inner_model=model) # type: ignore self.model = model - self.model_context_length: int = self.model.config.chronos_config["context_length"] - self.model_prediction_length: int = self.model.config.chronos_config["prediction_length"] + + @property + def model_context_length(self) -> int: + return self.model.chronos_config.context_length + + @property + def model_prediction_length(self) -> int: + return self.model.chronos_config.prediction_length @property def quantiles(self) -> List[float]: diff --git a/src/chronos/df_utils.py b/src/chronos/df_utils.py new file mode 100644 index 0000000..e17584f --- /dev/null +++ b/src/chronos/df_utils.py @@ -0,0 +1,314 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +# Authors: Abdul Fatir Ansari + + +from typing import TYPE_CHECKING + +import numpy as np + +if TYPE_CHECKING: + import pandas as pd + + +def _validate_df_types_and_cast( + df: "pd.DataFrame", + future_df: "pd.DataFrame | None", + target_columns: list[str], + id_column: str = "item_id", + timestamp_column: str = "timestamp", +) -> tuple["pd.DataFrame", "pd.DataFrame | None"]: + import pandas as pd + + astype_dict = {} + future_astype_dict = {} + for col in df.columns.drop([id_column, timestamp_column]): + col_dtype = df[col].dtype + if col in target_columns and not pd.api.types.is_numeric_dtype(df[col]): + raise ValueError(f"All target columns must be numeric but got {col=} with dtype={col_dtype}") + + if ( + pd.api.types.is_object_dtype(df[col]) + or pd.api.types.is_string_dtype(df[col]) + or isinstance(col_dtype, pd.CategoricalDtype) + ): + astype_dict[col] = "category" + elif pd.api.types.is_numeric_dtype(df[col]) or pd.api.types.is_bool_dtype(df[col]): + astype_dict[col] = "float32" + else: + raise ValueError( + f"All columns must contain numeric, object, category, string, or bool dtype but got {col=} with dtype={col_dtype}" + ) + + if future_df is not None and col in future_df.columns: + if future_df[col].dtype != col_dtype: + raise ValueError( + f"Column {col} in future_df has dtype {future_df[col].dtype} but column in df has dtype {col_dtype}" + ) + future_astype_dict[col] = astype_dict[col] + + df = df.astype(astype_dict, copy=True) + if future_df is not None: + future_df = future_df.astype(future_astype_dict, copy=True) + + return df, future_df + + +def validate_df_inputs( + df: "pd.DataFrame", + future_df: "pd.DataFrame | None", + target_columns: list[str], + prediction_length: int, + id_column: str = "item_id", + timestamp_column: str = "timestamp", +) -> tuple["pd.DataFrame", "pd.DataFrame | None", "pd.Timedelta", list[int], list[int] | None, np.ndarray]: + """ + Validates and prepares dataframe inputs + + Parameters + ---------- + df + Input dataframe containing time series data with columns: + - id_column: Identifier for each time series + - timestamp_column: Timestamps for each observation + - target_columns: One or more target variables to forecast + - Additional columns are treated as covariates + future_df + Optional dataframe containing future covariate values with columns: + - id_column: Identifier for each time series + - timestamp_column: Future timestamps + - Subset of covariate columns from df + target_columns + Names of target columns to forecast + prediction_length + Number of future time steps to predict + id_column + Name of column containing time series identifiers + timestamp_column + Name of column containing timestamps + + Returns + ------- + A tuple containing: + - Validated and sorted input dataframe + - Validated and sorted future dataframe (if provided) + - Inferred frequency of the time series + - List of series lengths from input dataframe + - List of series lengths from future dataframe (if provided) + - Original order of time series IDs + + Raises + ------ + ValueError + If validation fails for: + - Missing required columns + - Invalid data types + - Inconsistent frequencies + - Insufficient data points + - Mismatched series between df and future_df + - Invalid future_df lengths + """ + + import pandas as pd + + required_cols = [id_column, timestamp_column] + target_columns + missing_cols = [col for col in required_cols if col not in df.columns] + if missing_cols: + raise ValueError(f"df does not contain all expected columns. Missing columns: {missing_cols}") + + if future_df is not None: + future_required_cols = [id_column, timestamp_column] + missing_future_cols = [col for col in future_required_cols if col not in future_df.columns] + targets_in_future = [col for col in future_df.columns if col in target_columns] + extra_future_cols = [col for col in future_df.columns if col not in df.columns] + if missing_future_cols: + raise ValueError( + f"future_df does not contain all expected columns. Missing columns: {missing_future_cols}" + ) + if targets_in_future: + raise ValueError( + f"future_df cannot contain target columns. Target columns found in future_df: {targets_in_future}" + ) + if extra_future_cols: + raise ValueError(f"future_df cannot contain columns not present in df. Extra columns: {extra_future_cols}") + + df, future_df = _validate_df_types_and_cast( + df, future_df, id_column=id_column, timestamp_column=timestamp_column, target_columns=target_columns + ) + + # Get the original order of time series IDs + original_order = df[id_column].unique() + + # Sort and prepare df + df[timestamp_column] = pd.to_datetime(df[timestamp_column]) + df = df.sort_values([id_column, timestamp_column]) + + # Get series lengths + series_lengths = df[id_column].value_counts(sort=False).to_list() + + def validate_freq(timestamps: pd.Series, series_id: str): + freq = pd.infer_freq(timestamps) + if not freq: + raise ValueError(f"Could not infer frequency for series {series_id}") + return freq + + # Validate each series + all_freqs = [] + start_idx = 0 + for length in series_lengths: + if length < 3: + series_id = df.iloc[start_idx][id_column] + raise ValueError( + f"Every time series must have at least 3 data points, found {length=} for series {series_id}" + ) + + series_data = df.iloc[start_idx : start_idx + length] + timestamps = series_data[timestamp_column] + series_id = series_data.iloc[0][id_column] + all_freqs.append(validate_freq(timestamps, series_id)) + start_idx += length + + if len(set(all_freqs)) > 1: + raise ValueError("All time series must have the same frequency") + + inferred_freq = all_freqs[0] + + # Sort future_df if provided and validate its series lengths + future_series_lengths = None + if future_df is not None: + future_df[timestamp_column] = pd.to_datetime(future_df[timestamp_column]) + future_df = future_df.sort_values([id_column, timestamp_column]) + + # Validate that future_df contains all series from df + context_ids = set(df[id_column].unique()) + future_ids = set(future_df[id_column].unique()) + if context_ids != future_ids: + raise ValueError("future_df must contain the same time series IDs as df") + + future_series_lengths = future_df[id_column].value_counts(sort=False).to_list() + + # Validate future series lengths match prediction_length + future_start_idx = 0 + for future_length in future_series_lengths: + future_series_data = future_df.iloc[future_start_idx : future_start_idx + future_length] + future_timestamps = future_series_data[timestamp_column] + future_series_id = future_series_data.iloc[0][id_column] + if future_length != prediction_length: + raise ValueError( + f"Future covariates all time series must have length {prediction_length}, got {future_length} for series {future_series_id}" + ) + if future_length < 3 or inferred_freq != validate_freq(future_timestamps, future_series_id): + raise ValueError( + f"Future covariates must have the same frequency as context, found series {future_series_id} with a different frequency" + ) + future_start_idx += future_length + + assert len(series_lengths) == len(future_series_lengths) + + return df, future_df, inferred_freq, series_lengths, future_series_lengths, original_order + + +def convert_df_input_to_list_of_dicts_input( + df: "pd.DataFrame", + future_df: "pd.DataFrame | None", + target_columns: list[str], + prediction_length: int, + id_column: str = "item_id", + timestamp_column: str = "timestamp", +) -> tuple[list[dict[str, np.ndarray | dict[str, np.ndarray]]], np.ndarray, dict[str, "pd.DatetimeIndex"]]: + """ + Convert from dataframe input format to a list of dictionaries input format. + + Parameters + ---------- + df + Input dataframe containing time series data with columns: + - id_column: Identifier for each time series + - timestamp_column: Timestamps for each observation + - target_columns: One or more target variables to forecast + - Additional columns are treated as covariates + future_df + Optional dataframe containing future covariate values with columns: + - id_column: Identifier for each time series + - timestamp_column: Future timestamps + - Subset of covariate columns from df + target_columns + Names of target columns to forecast + prediction_length + Number of future time steps to predict + id_column + Name of column containing time series identifiers + timestamp_column + Name of column containing timestamps + + Returns + ------- + A tuple containing: + - Time series converted to list of dictionaries format + - Original order of time series IDs + - Dictionary mapping series IDs to future time index + """ + + import pandas as pd + + df, future_df, freq, series_lengths, future_series_lengths, original_order = validate_df_inputs( + df, + future_df=future_df, + id_column=id_column, + timestamp_column=timestamp_column, + target_columns=target_columns, + prediction_length=prediction_length, + ) + + # Convert to list of dicts format + inputs: list[dict[str, np.ndarray | dict[str, np.ndarray]]] = [] + prediction_timestamps: dict[str, pd.DatetimeIndex] = {} + start_idx: int = 0 + future_start_idx: int = 0 + + for i, length in enumerate(series_lengths): + series_data = df.iloc[start_idx : start_idx + length] + # Extract target(s) + target_data = series_data[target_columns].to_numpy().T # Shape: (n_targets, history_length) + task: dict[str, np.ndarray | dict[str, np.ndarray]] = {"target": target_data} + + # Generate future timestamps + series_id = series_data.iloc[0][id_column] + last_timestamp = series_data[timestamp_column].iloc[-1] + future_ts = pd.date_range(start=last_timestamp, periods=prediction_length + 1, freq=freq)[1:] + prediction_timestamps[series_id] = future_ts + + # Handle covariates if present + covariate_cols = [ + col for col in series_data.columns if col not in [id_column, timestamp_column] + target_columns + ] + + if covariate_cols: + past_covariates = {col: series_data[col].to_numpy() for col in covariate_cols} + task["past_covariates"] = past_covariates + + # Handle future covariates + if future_df is not None: + assert future_series_lengths is not None + future_length = future_series_lengths[i] + future_data = future_df.iloc[future_start_idx : future_start_idx + future_length] + assert future_data[timestamp_column].iloc[0] == future_ts[0], ( + f"the first timestamp in future_df must be the first forecast timestamp, found mismatch " + f"({future_data[timestamp_column].iloc[0]} != {future_ts[0]}) in series {series_id}" + ) + + if len(future_data) > 0: + future_covariates = { + col: future_data[col].to_numpy() for col in covariate_cols if col in future_data.columns + } + if future_covariates: + task["future_covariates"] = future_covariates + future_start_idx += future_length + + inputs.append(task) + start_idx += length + + assert len(inputs) == len(series_lengths) + + return inputs, original_order, prediction_timestamps diff --git a/test/test_chronos.py b/test/test_chronos.py index b491da0..621abf9 100644 --- a/test/test_chronos.py +++ b/test/test_chronos.py @@ -3,6 +3,8 @@ from pathlib import Path +import numpy as np +import pandas as pd import pytest import torch @@ -12,7 +14,14 @@ from chronos import ( ChronosPipeline, MeanScaleUniformBins, ) -from test.util import validate_tensor +from test.util import create_df, get_forecast_start_times, validate_tensor + +DUMMY_MODEL_PATH = Path(__file__).parent / "dummy-chronos-model" + + +@pytest.fixture +def pipeline() -> ChronosPipeline: + return BaseChronosPipeline.from_pretrained(DUMMY_MODEL_PATH, device_map="cpu") def test_base_chronos_pipeline_loads_from_huggingface(): @@ -167,11 +176,7 @@ def test_tokenizer_random_data(use_eos_token: bool): @pytest.mark.parametrize("model_dtype", [torch.float32, torch.bfloat16]) @pytest.mark.parametrize("input_dtype", [torch.float32, torch.bfloat16, torch.int64]) def test_pipeline_predict(model_dtype: torch.dtype, input_dtype: torch.dtype): - pipeline = ChronosPipeline.from_pretrained( - Path(__file__).parent / "dummy-chronos-model", - device_map="cpu", - torch_dtype=model_dtype, - ) + pipeline = ChronosPipeline.from_pretrained(DUMMY_MODEL_PATH, device_map="cpu", torch_dtype=model_dtype) context = 10 * torch.rand(size=(4, 16)) + 10 context = context.to(dtype=input_dtype) @@ -238,11 +243,7 @@ def test_pipeline_predict_quantiles( prediction_length: int, quantile_levels: list[int], ): - pipeline = ChronosPipeline.from_pretrained( - Path(__file__).parent / "dummy-chronos-model", - device_map="cpu", - torch_dtype=model_dtype, - ) + pipeline = ChronosPipeline.from_pretrained(DUMMY_MODEL_PATH, device_map="cpu", torch_dtype=model_dtype) context = 10 * torch.rand(size=(4, 16)) + 10 context = context.to(dtype=input_dtype) @@ -284,11 +285,7 @@ def test_pipeline_predict_quantiles( @pytest.mark.parametrize("model_dtype", [torch.float32, torch.bfloat16]) @pytest.mark.parametrize("input_dtype", [torch.float32, torch.bfloat16, torch.int64]) def test_pipeline_embed(model_dtype: torch.dtype, input_dtype: torch.dtype): - pipeline = ChronosPipeline.from_pretrained( - Path(__file__).parent / "dummy-chronos-model", - device_map="cpu", - torch_dtype=model_dtype, - ) + pipeline = ChronosPipeline.from_pretrained(DUMMY_MODEL_PATH, device_map="cpu", torch_dtype=model_dtype) d_model = pipeline.model.model.config.d_model context = 10 * torch.rand(size=(4, 16)) + 10 context = context.to(dtype=input_dtype) @@ -312,6 +309,88 @@ def test_pipeline_embed(model_dtype: torch.dtype, input_dtype: torch.dtype): validate_tensor(scale, shape=(1,), dtype=torch.float32) +@pytest.mark.parametrize( + "context_setup, expected_rows", + [ + # Targets only + ({}, 6), # 2 series * 3 predictions + # Different context lengths + ( + {"series_ids": ["X", "Y", "Z"], "n_points": [10, 17, 56], "target_cols": ["custom_target"]}, + 9, + ), # 3 series * 3 predictions + ], +) +@pytest.mark.parametrize("freq", ["s", "min", "30min", "h", "D", "W", "ME", "QE", "YE"]) +def test_predict_df_works_for_valid_inputs(pipeline, context_setup, expected_rows, freq): + prediction_length = 3 + df = create_df(**context_setup, freq=freq) + forecast_start_times = get_forecast_start_times(df, freq) + + series_ids = context_setup.get("series_ids", ["A", "B"]) + target_columns = context_setup.get("target_cols", ["target"]) + n_series = len(series_ids) + n_targets = len(target_columns) + result = pipeline.predict_df(df, target=target_columns[0], prediction_length=prediction_length) + + assert len(result) == expected_rows + assert "item_id" in result.columns and np.all( + result["item_id"].to_numpy() == np.array(series_ids).repeat(n_targets * prediction_length) + ) + assert "target_name" in result.columns and np.all( + result["target_name"].to_numpy() == np.tile(np.array(target_columns).repeat(prediction_length), n_series) + ) + assert "timestamp" in result.columns and np.all( + result.groupby("item_id")["timestamp"].min().to_numpy() == pd.to_datetime(forecast_start_times).to_numpy() + ) + assert "predictions" in result.columns + assert all(str(q) in result.columns for q in [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]) + + +def test_predict_df_with_non_uniform_timestamps_raises_error(pipeline): + df = create_df() + # Make timestamps non-uniform for series A + df.loc[df["item_id"] == "A", "timestamp"] = [ + "2023-01-01", + "2023-01-02", + "2023-01-04", + "2023-01-05", + "2023-01-06", + "2023-01-07", + "2023-01-08", + "2023-01-09", + "2023-01-10", + "2023-01-11", + ] + + with pytest.raises(ValueError, match="not infer frequency"): + pipeline.predict_df(df) + + +def test_predict_df_with_inconsistent_frequencies_raises_error(pipeline): + df = pd.DataFrame( + { + "item_id": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"], + "timestamp": [ + "2023-01-01", + "2023-01-02", + "2023-01-03", + "2023-01-04", + "2023-01-05", + "2023-01-01", + "2023-02-01", + "2023-03-01", + "2023-04-01", + "2023-05-01", + ], + "target": [1.0] * 10, + } + ) + + with pytest.raises(ValueError, match="same frequency"): + pipeline.predict_df(df) + + @pytest.mark.parametrize("n_tokens", [10, 1000, 10000]) def test_tokenizer_number_of_buckets(n_tokens): config = ChronosConfig( diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 92eb5a1..bc550a1 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -14,9 +14,9 @@ import torch from chronos import BaseChronosPipeline, Chronos2Pipeline from chronos.chronos2.config import Chronos2CoreConfig -from chronos.chronos2.dataset import convert_df_input_to_list_of_dicts_input from chronos.chronos2.layers import MHA -from test.util import validate_tensor +from chronos.df_utils import convert_df_input_to_list_of_dicts_input +from test.util import create_df, create_future_df, get_forecast_start_times, validate_tensor DUMMY_MODEL_PATH = Path(__file__).parent / "dummy-chronos2-model" @@ -387,39 +387,6 @@ def test_pipeline_can_evaluate_on_dummy_fev_task(pipeline, task_kwargs): assert isinstance(eval_summary["test_error"], float) -def create_df(series_ids=["A", "B"], n_points=[10, 10], target_cols=["target"], covariates=None, freq="h"): - """Helper to create test context DataFrames.""" - series_dfs = [] - for series_id, length in zip(series_ids, n_points): - series_data = {"item_id": series_id, "timestamp": pd.date_range(end="2001-10-01", periods=length, freq=freq)} - for target_col in target_cols: - series_data[target_col] = np.random.randn(length) - if covariates: - for cov in covariates: - series_data[cov] = np.random.randn(length) - series_dfs.append(pd.DataFrame(series_data)) - return pd.concat(series_dfs, ignore_index=True) - - -def create_future_df(forecast_start_times: list, series_ids=["A", "B"], n_points=[5, 5], covariates=None, freq="h"): - """Helper to create test future DataFrames.""" - series_dfs = [] - for series_id, length, start in zip(series_ids, n_points, forecast_start_times): - series_data = {"item_id": series_id, "timestamp": pd.date_range(start=start, periods=length, freq=freq)} - if covariates: - for cov in covariates: - series_data[cov] = np.random.randn(length) - series_dfs.append(pd.DataFrame(series_data)) - return pd.concat(series_dfs, ignore_index=True) - - -def get_forecast_start_times(df, freq="h"): - context_end_times = df.groupby("item_id")["timestamp"].max() - forecast_start_times = [pd.date_range(end_time, periods=2, freq=freq)[-1] for end_time in context_end_times] - - return forecast_start_times - - @pytest.mark.parametrize( "context_setup, future_setup, expected_rows", [ diff --git a/test/test_chronos_bolt.py b/test/test_chronos_bolt.py index 4749b3e..cabe8c5 100644 --- a/test/test_chronos_bolt.py +++ b/test/test_chronos_bolt.py @@ -5,12 +5,21 @@ from pathlib import Path import datasets import fev +import numpy as np +import pandas as pd import pytest import torch from chronos import BaseChronosPipeline, ChronosBoltPipeline from chronos.chronos_bolt import InstanceNorm, Patch -from test.util import validate_tensor +from test.util import create_df, get_forecast_start_times, validate_tensor + +DUMMY_MODEL_PATH = Path(__file__).parent / "dummy-chronos-bolt-model" + + +@pytest.fixture +def pipeline() -> ChronosBoltPipeline: + return BaseChronosPipeline.from_pretrained(DUMMY_MODEL_PATH, device_map="cpu") def test_base_chronos_pipeline_loads_from_huggingface(): @@ -20,11 +29,7 @@ def test_base_chronos_pipeline_loads_from_huggingface(): @pytest.mark.parametrize("torch_dtype", [torch.float32, torch.bfloat16]) @pytest.mark.parametrize("input_dtype", [torch.float32, torch.bfloat16, torch.int64]) def test_pipeline_predict(torch_dtype: torch.dtype, input_dtype: torch.dtype): - pipeline = ChronosBoltPipeline.from_pretrained( - Path(__file__).parent / "dummy-chronos-bolt-model", - device_map="cpu", - torch_dtype=torch_dtype, - ) + pipeline = ChronosBoltPipeline.from_pretrained(DUMMY_MODEL_PATH, device_map="cpu", torch_dtype=torch_dtype) context = 10 * torch.rand(size=(4, 16)) + 10 context = context.to(dtype=input_dtype) expected_num_quantiles = len(pipeline.quantiles) @@ -84,11 +89,7 @@ def test_pipeline_predict_quantiles( prediction_length: int, quantile_levels: list[float], ): - pipeline = ChronosBoltPipeline.from_pretrained( - Path(__file__).parent / "dummy-chronos-bolt-model", - device_map="cpu", - torch_dtype=torch_dtype, - ) + pipeline = ChronosBoltPipeline.from_pretrained(DUMMY_MODEL_PATH, device_map="cpu", torch_dtype=torch_dtype) context = 10 * torch.rand(size=(4, 16)) + 10 context = context.to(dtype=input_dtype) @@ -127,11 +128,7 @@ def test_pipeline_predict_quantiles( @pytest.mark.parametrize("model_dtype", [torch.float32, torch.bfloat16]) @pytest.mark.parametrize("input_dtype", [torch.float32, torch.bfloat16, torch.int64]) def test_pipeline_embed(model_dtype: torch.dtype, input_dtype: torch.dtype): - pipeline = ChronosBoltPipeline.from_pretrained( - Path(__file__).parent / "dummy-chronos-bolt-model", - device_map="cpu", - torch_dtype=model_dtype, - ) + pipeline = ChronosBoltPipeline.from_pretrained(DUMMY_MODEL_PATH, device_map="cpu", torch_dtype=model_dtype) d_model = pipeline.model.config.d_model context = 10 * torch.rand(size=(4, 16)) + 10 context = context.to(dtype=input_dtype) @@ -160,6 +157,88 @@ def test_pipeline_embed(model_dtype: torch.dtype, input_dtype: torch.dtype): validate_tensor(loc_scale[1], shape=(1,), dtype=torch.float32) +@pytest.mark.parametrize( + "context_setup, expected_rows", + [ + # Targets only + ({}, 6), # 2 series * 3 predictions + # Different context lengths + ( + {"series_ids": ["X", "Y", "Z"], "n_points": [10, 17, 56], "target_cols": ["custom_target"]}, + 9, + ), # 3 series * 3 predictions + ], +) +@pytest.mark.parametrize("freq", ["s", "min", "30min", "h", "D", "W", "ME", "QE", "YE"]) +def test_predict_df_works_for_valid_inputs(pipeline, context_setup, expected_rows, freq): + prediction_length = 3 + df = create_df(**context_setup, freq=freq) + forecast_start_times = get_forecast_start_times(df, freq) + + series_ids = context_setup.get("series_ids", ["A", "B"]) + target_columns = context_setup.get("target_cols", ["target"]) + n_series = len(series_ids) + n_targets = len(target_columns) + result = pipeline.predict_df(df, target=target_columns[0], prediction_length=prediction_length) + + assert len(result) == expected_rows + assert "item_id" in result.columns and np.all( + result["item_id"].to_numpy() == np.array(series_ids).repeat(n_targets * prediction_length) + ) + assert "target_name" in result.columns and np.all( + result["target_name"].to_numpy() == np.tile(np.array(target_columns).repeat(prediction_length), n_series) + ) + assert "timestamp" in result.columns and np.all( + result.groupby("item_id")["timestamp"].min().to_numpy() == pd.to_datetime(forecast_start_times).to_numpy() + ) + assert "predictions" in result.columns + assert all(str(q) in result.columns for q in [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]) + + +def test_predict_df_with_non_uniform_timestamps_raises_error(pipeline): + df = create_df() + # Make timestamps non-uniform for series A + df.loc[df["item_id"] == "A", "timestamp"] = [ + "2023-01-01", + "2023-01-02", + "2023-01-04", + "2023-01-05", + "2023-01-06", + "2023-01-07", + "2023-01-08", + "2023-01-09", + "2023-01-10", + "2023-01-11", + ] + + with pytest.raises(ValueError, match="not infer frequency"): + pipeline.predict_df(df) + + +def test_predict_df_with_inconsistent_frequencies_raises_error(pipeline): + df = pd.DataFrame( + { + "item_id": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"], + "timestamp": [ + "2023-01-01", + "2023-01-02", + "2023-01-03", + "2023-01-04", + "2023-01-05", + "2023-01-01", + "2023-02-01", + "2023-03-01", + "2023-04-01", + "2023-05-01", + ], + "target": [1.0] * 10, + } + ) + + with pytest.raises(ValueError, match="same frequency"): + pipeline.predict_df(df) + + # The following tests have been taken from # https://github.com/autogluon/autogluon/blob/f57beb26cb769c6e0d484a6af2b89eab8aee73a8/timeseries/tests/unittests/models/chronos/pipeline/test_chronos_bolt.py # Author: Caner Turkmen diff --git a/test/util.py b/test/util.py index ac1b64c..bc7b878 100644 --- a/test/util.py +++ b/test/util.py @@ -1,5 +1,7 @@ from typing import Optional, Tuple +import numpy as np +import pandas as pd import torch @@ -9,3 +11,37 @@ def validate_tensor(a: torch.Tensor, shape: Tuple[int, ...], dtype: Optional[tor if dtype is not None: assert a.dtype == dtype + + + +def create_df(series_ids=["A", "B"], n_points=[10, 10], target_cols=["target"], covariates=None, freq="h"): + """Helper to create test context DataFrames.""" + series_dfs = [] + for series_id, length in zip(series_ids, n_points): + series_data = {"item_id": series_id, "timestamp": pd.date_range(end="2001-10-01", periods=length, freq=freq)} + for target_col in target_cols: + series_data[target_col] = np.random.randn(length) + if covariates: + for cov in covariates: + series_data[cov] = np.random.randn(length) + series_dfs.append(pd.DataFrame(series_data)) + return pd.concat(series_dfs, ignore_index=True) + + +def create_future_df(forecast_start_times: list, series_ids=["A", "B"], n_points=[5, 5], covariates=None, freq="h"): + """Helper to create test future DataFrames.""" + series_dfs = [] + for series_id, length, start in zip(series_ids, n_points, forecast_start_times): + series_data = {"item_id": series_id, "timestamp": pd.date_range(start=start, periods=length, freq=freq)} + if covariates: + for cov in covariates: + series_data[cov] = np.random.randn(length) + series_dfs.append(pd.DataFrame(series_data)) + return pd.concat(series_dfs, ignore_index=True) + + +def get_forecast_start_times(df, freq="h"): + context_end_times = df.groupby("item_id")["timestamp"].max() + forecast_start_times = [pd.date_range(end_time, periods=2, freq=freq)[-1] for end_time in context_end_times] + + return forecast_start_times \ No newline at end of file From 111972a6cc04f5695030db39211952a2cbab6779 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 17 Nov 2025 17:16:50 +0100 Subject: [PATCH 18/60] Add Chronos2Pipeline.embed (#361) *Issue #, if available:* #354 *Description of changes:* This PR adds `Chronos2Pipeline.embed` to enable users to extract embeddings from the last encoder layer in an easy way. The API and behavior is similar to what Chronos and Chronos-Bolt provides. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/model.py | 118 +++++++++++++++++++------------ src/chronos/chronos2/pipeline.py | 75 ++++++++++++++++++++ test/test_chronos2.py | 29 ++++++++ 3 files changed, 175 insertions(+), 47 deletions(-) diff --git a/src/chronos/chronos2/model.py b/src/chronos/chronos2/model.py index 9b72f61..0397be2 100644 --- a/src/chronos/chronos2/model.py +++ b/src/chronos/chronos2/model.py @@ -547,6 +547,74 @@ class Chronos2Model(PreTrainedModel): return loss + def encode( + self, + context: torch.Tensor, + context_mask: torch.Tensor | None = None, + group_ids: torch.Tensor | None = None, + future_covariates: torch.Tensor | None = None, + future_covariates_mask: torch.Tensor | None = None, + num_output_patches: int = 1, + future_target: torch.Tensor | None = None, + future_target_mask: torch.Tensor | None = None, + output_attentions: bool = False, + ): + self._validate_input( + context=context, + context_mask=context_mask, + future_covariates=future_covariates, + future_covariates_mask=future_covariates_mask, + group_ids=group_ids, + num_output_patches=num_output_patches, + future_target=future_target, + future_target_mask=future_target_mask, + ) + + batch_size = context.shape[0] + patched_context, attention_mask, loc_scale = self._prepare_patched_context( + context=context, context_mask=context_mask + ) + num_context_patches = attention_mask.shape[-1] + + # get input embeddings of shape (batch, num_context_patches, d_model) + input_embeds: torch.Tensor = self.input_patch_embedding(patched_context) + # append [REG] special token embedding, if needed + if self.chronos_config.use_reg_token: + reg_input_ids = torch.full((batch_size, 1), self.config.reg_token_id, device=input_embeds.device) + reg_embeds = self.shared(reg_input_ids) + input_embeds = torch.cat([input_embeds, reg_embeds], dim=-2) + attention_mask = torch.cat( + [attention_mask.to(self.dtype), torch.ones_like(reg_input_ids).to(self.dtype)], dim=-1 + ) + + patched_future, patched_future_covariates_mask = self._prepare_patched_future( + future_covariates=future_covariates, + future_covariates_mask=future_covariates_mask, + loc_scale=loc_scale, + num_output_patches=num_output_patches, + batch_size=batch_size, + ) + future_attention_mask = torch.ones(batch_size, num_output_patches, dtype=self.dtype, device=self.device) + + # get future embeddings of shape (batch, num_output_patches, d_model) + future_embeds: torch.Tensor = self.input_patch_embedding(patched_future) + + # concatenate context and future embeddings and masks + input_embeds = torch.cat([input_embeds, future_embeds], dim=-2) + attention_mask = torch.cat([attention_mask, future_attention_mask], dim=-1) + + if group_ids is None: + # by default, each time series is treated independently, i.e., no mixing across the batch + group_ids = torch.arange(batch_size, dtype=torch.long, device=self.device) + + encoder_outputs: Chronos2EncoderOutput = self.encoder( + attention_mask=attention_mask, + inputs_embeds=input_embeds, + group_ids=group_ids, + output_attentions=output_attentions, + ) + return encoder_outputs, loc_scale, patched_future_covariates_mask, num_context_patches + def forward( self, context: torch.Tensor, @@ -625,63 +693,19 @@ class Chronos2Model(PreTrainedModel): - enc_time_self_attn_weights: Time self attention weights, if output_attentions=True - enc_group_self_attn_weights: Group self attention weights, if output_attentions=True """ - - self._validate_input( + batch_size = context.shape[0] + encoder_outputs, loc_scale, patched_future_covariates_mask, num_context_patches = self.encode( context=context, context_mask=context_mask, + group_ids=group_ids, future_covariates=future_covariates, future_covariates_mask=future_covariates_mask, - group_ids=group_ids, num_output_patches=num_output_patches, future_target=future_target, future_target_mask=future_target_mask, - ) - - batch_size = context.shape[0] - patched_context, attention_mask, loc_scale = self._prepare_patched_context( - context=context, context_mask=context_mask - ) - num_context_patches = attention_mask.shape[-1] - - # get input embeddings of shape (batch, num_context_patches, d_model) - input_embeds: torch.Tensor = self.input_patch_embedding(patched_context) - # append [REG] special token embedding, if needed - if self.chronos_config.use_reg_token: - reg_input_ids = torch.full((batch_size, 1), self.config.reg_token_id, device=input_embeds.device) - reg_embeds = self.shared(reg_input_ids) - input_embeds = torch.cat([input_embeds, reg_embeds], dim=-2) - attention_mask = torch.cat( - [attention_mask.to(self.dtype), torch.ones_like(reg_input_ids).to(self.dtype)], dim=-1 - ) - - patched_future, patched_future_covariates_mask = self._prepare_patched_future( - future_covariates=future_covariates, - future_covariates_mask=future_covariates_mask, - loc_scale=loc_scale, - num_output_patches=num_output_patches, - batch_size=batch_size, - ) - future_attention_mask = torch.ones(batch_size, num_output_patches, dtype=self.dtype, device=self.device) - - # get future embeddings of shape (batch, num_output_patches, d_model) - future_embeds: torch.Tensor = self.input_patch_embedding(patched_future) - - # concatenate context and future embeddings and masks - input_embeds = torch.cat([input_embeds, future_embeds], dim=-2) - attention_mask = torch.cat([attention_mask, future_attention_mask], dim=-1) - - if group_ids is None: - # by default, each time series is treated independently, i.e., no mixing across the batch - group_ids = torch.arange(batch_size, dtype=torch.long, device=self.device) - - encoder_outputs: Chronos2EncoderOutput = self.encoder( - attention_mask=attention_mask, - inputs_embeds=input_embeds, - group_ids=group_ids, output_attentions=output_attentions, ) hidden_states: torch.Tensor = encoder_outputs[0] - assert hidden_states.shape == (batch_size, num_context_patches + 1 + num_output_patches, self.model_dim) # slice the last num_output_patches hidden states to be input into the output_patch_embedding diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index ce398b0..cadc544 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -988,6 +988,81 @@ class Chronos2Pipeline(BaseChronosPipeline): return predictions_per_window, inference_time_s + @torch.no_grad() + def embed( + self, inputs: TensorOrArray | Sequence[TensorOrArray], batch_size: int = 256, context_length: int | None = None + ) -> tuple[list[torch.Tensor], list[tuple[torch.Tensor, torch.Tensor]]]: + """ + Get encoder embeddings for the given time series. + + Parameters + ---------- + inputs + The time series to get embeddings for, can be one of: + - A 3-dimensional `torch.Tensor` or `np.ndarray` of shape (batch, n_variates, history_length). When `n_variates > 1`, information + will be shared among the different variates of each time series in the batch. + - A list of `torch.Tensor` or `np.ndarray` where each element can either be 1-dimensional of shape (history_length,) + or 2-dimensional of shape (n_variates, history_length). The history_lengths may be different across elements; left-padding + will be applied, if needed. + batch_size + The batch size used for generating embeddings. Note that the batch size here means the total number of time series which are input into the model. + If your data has multiple variates, the effective number of time series tasks in a batch will be lower than this value, by default 256 + context_length + The maximum context length used during for inference, by default set to the model's default context length + + Returns + ------- + embeddings + a list of `torch.Tensor` where each element has shape (n_variates, num_patches + 2, d_model) and the number of elements are equal to the number + of target time series (univariate or multivariate) in the `inputs`. The extra +2 is due to embeddings of the [REG] token and a masked output patch token. + loc_scale + a list of tuples with the mean and standard deviation of each time series. + """ + if context_length is None: + context_length = self.model_context_length + + if context_length > self.model_context_length: + warnings.warn( + f"The specified context_length {context_length} is greater than the model's default context length {self.model_context_length}. " + f"Resetting context_length to {self.model_context_length}." + ) + context_length = self.model_context_length + + test_dataset = Chronos2Dataset.convert_inputs( + inputs=inputs, + context_length=context_length, + prediction_length=0, + batch_size=batch_size, + output_patch_size=self.model_output_patch_size, + mode=DatasetMode.TEST, + ) + test_loader = DataLoader( + test_dataset, batch_size=None, num_workers=1, pin_memory=True, shuffle=False, drop_last=False + ) + all_embeds: list[torch.Tensor] = [] + all_loc_scales: list[tuple[torch.Tensor, torch.Tensor]] = [] + for batch in test_loader: + assert batch["future_target"] is None + batch_context = batch["context"] + batch_group_ids = batch["group_ids"] + batch_target_idx_ranges = batch["target_idx_ranges"] + + encoder_outputs, (locs, scales), *_ = self.model.encode( + context=batch_context.to(device=self.model.device, dtype=torch.float32), + group_ids=batch_group_ids.to(self.model.device), + ) + batch_embeds = [encoder_outputs[0][start:end].cpu() for (start, end) in batch_target_idx_ranges] + batch_loc_scales = list( + zip( + [locs[start:end].cpu() for (start, end) in batch_target_idx_ranges], + [scales[start:end].cpu() for (start, end) in batch_target_idx_ranges], + ) + ) + all_embeds.extend(batch_embeds) + all_loc_scales.extend(batch_loc_scales) + + return all_embeds, all_loc_scales + @classmethod def from_pretrained(cls, pretrained_model_name_or_path, *args, **kwargs): """ diff --git a/test/test_chronos2.py b/test/test_chronos2.py index bc550a1..a13bd99 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -340,6 +340,35 @@ def test_pipeline_predict_can_handle_different_model_and_input_dtypes(dtype: tor validate_tensor(quantiles_item, (3, expected_num_quantiles, 7), dtype=torch.float32) +@pytest.mark.parametrize( + "inputs, expected_output_shapes", + [ + # NOTE: d_model for the dummy model is 6 + # Homogenous univariate task + (torch.rand(4, 1, 16), [(1, 3, 6)] * 4), + # Homogenous multivariate task + (torch.rand(4, 3, 37), [(3, 5, 6)] * 4), + # Heterogenous tasks with different history lengths + ( + [torch.rand(100), torch.rand(2, 150), torch.rand(120)], + [(1, 12, 6), (2, 12, 6), (1, 12, 6)], + ), + ], +) +def test_when_input_is_valid_then_pipeline_can_embed(pipeline, inputs, expected_output_shapes): + embeds, loc_scales = pipeline.embed(inputs) + + assert ( + isinstance(embeds, list) + and len(embeds) == len(expected_output_shapes) + and len(loc_scales) == len(expected_output_shapes) + ) + for embed, loc_scale, expected_shape in zip(embeds, loc_scales, expected_output_shapes): + validate_tensor(embed, expected_shape, dtype=torch.float32) + validate_tensor(loc_scale[0], (expected_shape[0], 1), dtype=torch.float32) + validate_tensor(loc_scale[1], (expected_shape[0], 1), dtype=torch.float32) + + @pytest.mark.parametrize( "task_kwargs", [ From 0f3c5652e52ee9382d578efc0c9b2add6fd2c90a Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 17 Nov 2025 18:02:55 +0100 Subject: [PATCH 19/60] Mask past-only covariates during loss computation (#379) *Issue #, if available:* *Description of changes:* This PR masks rows corresponding to all covariates in the future target. Specifically, this is to avoid the contribution of past-only covariates in loss computation. The previous setup was correct from the perspective of pretraining but I think this makes more sense for fine-tuning. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/dataset.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/chronos/chronos2/dataset.py b/src/chronos/chronos2/dataset.py index 8d6fd3f..cb75571 100644 --- a/src/chronos/chronos2/dataset.py +++ b/src/chronos/chronos2/dataset.py @@ -477,6 +477,7 @@ class Chronos2Dataset(IterableDataset): task_n_covariates, task_n_future_covariates, ) = self.tasks[task_idx] + task_past_tensor, task_future_tensor = task_past_tensor.clone(), task_future_tensor.clone() task_n_past_only_covariates = task_n_covariates - task_n_future_covariates full_length = task_past_tensor.shape[-1] @@ -502,7 +503,9 @@ class Chronos2Dataset(IterableDataset): # the task_context_tensor by slicing the appropriate indices which we do below if self.mode in [DatasetMode.TRAIN, DatasetMode.VALIDATION]: # the first task_n_targets elements in task_context_tensor are the targets - task_future_target = task_past_tensor[:, slice_idx : slice_idx + self.prediction_length] + task_future_target = task_past_tensor[:, slice_idx : slice_idx + self.prediction_length].clone() + # mask out all rows corresponding to covariates + task_future_target[task_n_targets:] = torch.nan if task_n_future_covariates > 0: # the last task_n_future_covariates elements in task_context_tensor are the known covariates From 359d7ff1b967a3edce86d314476a6f65182ffc24 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Tue, 18 Nov 2025 10:33:38 +0100 Subject: [PATCH 20/60] Chronos-2: Change default fine-tuning learning rate and remove experimental label (#381) *Issue #, if available:* *Description of changes:* Lower learning rates generally appear to be working better. This is probably because we are doing full fine-tuning of a model with 120M params. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- notebooks/chronos-2-quickstart.ipynb | 144 ++++++++++++++------------- src/chronos/chronos2/pipeline.py | 10 +- 2 files changed, 75 insertions(+), 79 deletions(-) diff --git a/notebooks/chronos-2-quickstart.ipynb b/notebooks/chronos-2-quickstart.ipynb index 65ae9aa..0f0d853 100644 --- a/notebooks/chronos-2-quickstart.ipynb +++ b/notebooks/chronos-2-quickstart.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "fcc7e496", "metadata": {}, "outputs": [], @@ -216,9 +216,9 @@ " 1750-01-30 04:00:00\n", " target\n", " 624.867981\n", - " 611.385071\n", + " 611.385132\n", " 624.867981\n", - " 638.598755\n", + " 638.598816\n", " \n", " \n", " 1\n", @@ -226,29 +226,29 @@ " 1750-01-30 05:00:00\n", " target\n", " 563.703125\n", - " 546.655029\n", + " 546.655090\n", " 563.703125\n", - " 578.665649\n", + " 578.665710\n", " \n", " \n", " 2\n", " H1\n", " 1750-01-30 06:00:00\n", " target\n", - " 521.589844\n", - " 505.747467\n", - " 521.589844\n", - " 537.950806\n", + " 521.589905\n", + " 505.747498\n", + " 521.589905\n", + " 537.950867\n", " \n", " \n", " 3\n", " H1\n", " 1750-01-30 07:00:00\n", " target\n", - " 489.910706\n", + " 489.910767\n", " 473.671814\n", - " 489.910706\n", - " 508.854126\n", + " 489.910767\n", + " 508.854156\n", " \n", " \n", " 4\n", @@ -266,17 +266,17 @@ ], "text/plain": [ " item_id timestamp target_name predictions 0.1 \\\n", - "0 H1 1750-01-30 04:00:00 target 624.867981 611.385071 \n", - "1 H1 1750-01-30 05:00:00 target 563.703125 546.655029 \n", - "2 H1 1750-01-30 06:00:00 target 521.589844 505.747467 \n", - "3 H1 1750-01-30 07:00:00 target 489.910706 473.671814 \n", + "0 H1 1750-01-30 04:00:00 target 624.867981 611.385132 \n", + "1 H1 1750-01-30 05:00:00 target 563.703125 546.655090 \n", + "2 H1 1750-01-30 06:00:00 target 521.589905 505.747498 \n", + "3 H1 1750-01-30 07:00:00 target 489.910767 473.671814 \n", "4 H1 1750-01-30 08:00:00 target 471.144470 452.199402 \n", "\n", " 0.5 0.9 \n", - "0 624.867981 638.598755 \n", - "1 563.703125 578.665649 \n", - "2 521.589844 537.950806 \n", - "3 489.910706 508.854126 \n", + "0 624.867981 638.598816 \n", + "1 563.703125 578.665710 \n", + "2 521.589905 537.950867 \n", + "3 489.910767 508.854156 \n", "4 471.144470 491.050293 " ] }, @@ -565,10 +565,10 @@ " DE\n", " 2017-12-12 00:00:00\n", " target\n", - " 22.242924\n", + " 22.242920\n", " 18.673723\n", - " 22.242924\n", - " 25.403452\n", + " 22.242920\n", + " 25.403454\n", " \n", " \n", " 1\n", @@ -578,16 +578,16 @@ " 19.525620\n", " 14.904278\n", " 19.525620\n", - " 23.316595\n", + " 23.316601\n", " \n", " \n", " 2\n", " DE\n", " 2017-12-12 02:00:00\n", " target\n", - " 17.415371\n", - " 12.209055\n", - " 17.415371\n", + " 17.415363\n", + " 12.209047\n", + " 17.415363\n", " 21.776979\n", " \n", " \n", @@ -596,7 +596,7 @@ " 2017-12-12 03:00:00\n", " target\n", " 16.979263\n", - " 11.165123\n", + " 11.165121\n", " 16.979263\n", " 21.435223\n", " \n", @@ -605,9 +605,9 @@ " DE\n", " 2017-12-12 04:00:00\n", " target\n", - " 18.058657\n", - " 12.096769\n", - " 18.058657\n", + " 18.058651\n", + " 12.096766\n", + " 18.058651\n", " 23.166645\n", " \n", " \n", @@ -616,15 +616,15 @@ ], "text/plain": [ " id timestamp target_name predictions 0.1 0.5 \\\n", - "0 DE 2017-12-12 00:00:00 target 22.242924 18.673723 22.242924 \n", + "0 DE 2017-12-12 00:00:00 target 22.242920 18.673723 22.242920 \n", "1 DE 2017-12-12 01:00:00 target 19.525620 14.904278 19.525620 \n", - "2 DE 2017-12-12 02:00:00 target 17.415371 12.209055 17.415371 \n", - "3 DE 2017-12-12 03:00:00 target 16.979263 11.165123 16.979263 \n", - "4 DE 2017-12-12 04:00:00 target 18.058657 12.096769 18.058657 \n", + "2 DE 2017-12-12 02:00:00 target 17.415363 12.209047 17.415363 \n", + "3 DE 2017-12-12 03:00:00 target 16.979263 11.165121 16.979263 \n", + "4 DE 2017-12-12 04:00:00 target 18.058651 12.096766 18.058651 \n", "\n", " 0.9 \n", - "0 25.403452 \n", - "1 23.316595 \n", + "0 25.403454 \n", + "1 23.316601 \n", "2 21.776979 \n", "3 21.435223 \n", "4 23.166645 " @@ -738,7 +738,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9EAAAFaCAYAAAAZ2N5BAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAA6qxJREFUeJzs3Xd4FOX2wPHvbEsvkARCJ/QuXekoVQEv9oIKehV/NkTsXkUUFVFULFfswEWxi2BDAUGkikCQ3nsJBEhC2raZ3x+zu8mm7iabZAPn8zx5lC2z7862OXPOe15F0zQNIYQQQgghhBBClMpQ1QMQQgghhBBCCCGqCwmihRBCCCGEEEIIH0kQLYQQQgghhBBC+EiCaCGEEEIIIYQQwkcSRAshhBBCCCGEED6SIFoIIYQQQgghhPCRBNFCCCGEEEIIIYSPJIgWQgghhBBCCCF8JEG0EEIIIYQQQgjhIwmihRDiAjVnzhxatWqF2WwmNja2qocTdFJSUrj22muJi4tDURSmT59e1UOqEPfeey+DBg0q93YmTZqEoih+3TY1NbXcjyuKNmvWLBRF4cCBA1U9lCJt27YNk8nEli1bqnooQgjhNwmihRCiCKtWrWLSpEmkpaVV9VB84u94d+zYwZgxY2jatCkffvghH3zwQcUOMAi89NJLfP/99z7f/qGHHuLXX3/lySefZM6cOQwdOrTiBgcoiuL5M5lM1KxZky5duvDggw+ybdu2Qrc/cOCA130K/r388sulPub+/fv56KOPeOqppyriKfm9zyvDtm3bmDRpUtAGl8Fg7ty5FX7SqE2bNgwbNoyJEydW6OMIIURFUDRN06p6EEIIEWymTZvGo48+yv79+2ncuHFVD6dU/o73vffe45577mH37t00a9as4gcYBCIjI7n22muZNWuWT7dPTExk4MCBfPrppxU7MBdFURg0aBC33XYbmqaRnp7Opk2b+Prrr8nKymLq1KlMmDDBc/sDBw6QlJTETTfdxBVXXFFoe506daJt27YlPub48eP55Zdf2LlzZ7nH73A4cDgchIaGei4rbp9PmjSJ5557jlOnThEfH1/ux/bHN998w3XXXcfSpUvp379/pT52ZXI6ndjtdkJCQnyuEHAbPnw4W7ZsqfATDb/88gtXXHEFe/bsoWnTphX6WEIIEUimqh6AEEJcKDRNIzc3l7CwsKoeCidPngQIaBl3dnY24eHhAdteVTt58mRA909ubi4WiwWDofgisBYtWnDLLbd4Xfbyyy8zYsQIHn74YVq1alUoYO7cuXOh+/jCbrfz2Wef8X//939+37coJpMJk0kOK6paVlYWERERGI1GjEZjVQ+nRAMHDqRGjRrMnj2b559/vqqHI4QQPpNybiGEKGDSpEk8+uijACQlJXnKY91ZmZkzZ3LZZZdRq1YtQkJCaNOmDTNmzCi0ncaNGzN8+HB+/fVXunbtSlhYGO+//z4ABw8e5MorryQiIoJatWp5SocVRWHZsmVe21m7di1Dhw4lJiaG8PBw+vXrx8qVK30eb1HjevbZZwFISEhAURQmTZrkuf7dd9+lbdu2hISEULduXe67775CZeL9+/enXbt2rF+/nr59+xIeHu4pCbZarTz77LM0a9aMkJAQGjRowGOPPYbVai00lk8//ZTu3bsTHh5OjRo16Nu3L7/99pvn+vnz5zNs2DDq1q1LSEgITZs2ZfLkyTidTq/t7N69m2uuuYbExERCQ0OpX78+N954I+np6YCe5c3KymL27Nme/TNmzJgi9497Lqmmafz3v//13N5t3759XHfdddSsWZPw8HAuueQSfvrpJ69tLFu2DEVR+OKLL3j66aepV68e4eHhZGRkFPmYJYmLi+OLL77AZDLx4osv+n3/4qxYsYLU1FQGDhzouUzTNOLj470y3qqqEhsbi9Fo9HofTJ06FZPJRGZmJlB4TrQv+zwtLY0xY8YQGxtLTEwMt99+O9nZ2V63cTgcTJ48maZNmxISEkLjxo156qmnCr2fCr6P3Ro3bux53FmzZnHdddcBcOmll3rGVfAzV9COHTu4/vrrSUhIICwsjJYtW/Kf//zH6zYbN27k8ssvJzo6msjISAYMGMCaNWs81//9998oisLs2bMLbd/92f/xxx8B/fvh3nvvpWXLloSFhREXF8d1111X6DPtfq/+8ccf3HvvvdSqVYv69et7XZf/Pr58nvr3789PP/3EwYMHPfsnf3WLr5/vRYsW0bt3b2JjY4mMjKRly5aFpg2YzWb69+/P/PnzS9z/QggRbOSUsRBCFHD11Veza9cuPv/8c9544w1PuWlCQgIAM2bMoG3btlx55ZWYTCZ++OEH7r33XlRV5b777vPa1s6dO7npppu4++67ueuuu2jZsiVZWVlcdtllHD9+nAcffJDExETmzp3L0qVLC43l999/5/LLL6dLly48++yzGAwGTxD/559/0r1791LHW9D06dP53//+x7x585gxYwaRkZF06NAByCuzHThwIPfccw87d+5kxowZrFu3jpUrV2I2mz3bOX36NJdffjk33ngjt9xyC7Vr10ZVVa688kpWrFjB2LFjad26NZs3b+aNN95g165dXvNjn3vuOSZNmkTPnj15/vnnsVgsrF27lt9//53BgwcDeiAQGRnJhAkTiIyM5Pfff2fixIlkZGTw6quvAmCz2RgyZAhWq5UHHniAxMREjh49yo8//khaWhoxMTHMmTOHO++8k+7duzN27FiAYstH+/bty5w5c7j11ls95dVuKSkp9OzZk+zsbMaNG0dcXByzZ8/myiuv5JtvvuGqq67y2tbkyZOxWCw88sgjWK1WLBZLkY9ZmoYNG9KvXz+WLl1KRkYG0dHRnuuys7OLbNAVGxtbYmZ41apVKIpCp06dPJcpikKvXr1Yvny557J//vmH9PR0DAYDK1euZNiwYQD8+eefdOrUicjIyCK378s+v/7660lKSmLKlCls2LCBjz76iFq1ajF16lTPbe68805mz57Ntddey8MPP8zatWuZMmUK27dvZ968eSXttkL69u3LuHHjeOutt3jqqado3bo1gOe/Rfnnn3/o06cPZrOZsWPH0rhxY/bu3csPP/zgOamxdetW+vTpQ3R0NI899hhms5n333+f/v3788cff3DxxRfTtWtXmjRpwldffcXo0aO9HuPLL7+kRo0aDBkyBIB169axatUqbrzxRurXr8+BAweYMWMG/fv3Z9u2bYUqPu69914SEhKYOHEiWVlZxT4XXz5P//nPf0hPT+fIkSO88cYbAJ7X2NfP99atWxk+fDgdOnTg+eefJyQkhD179nid/HPr0qUL8+fPL/S+FkKIoKYJIYQo5NVXX9UAbf/+/YWuy87OLnTZkCFDtCZNmnhd1qhRIw3QFi5c6HX5a6+9pgHa999/77ksJydHa9WqlQZoS5cu1TRN01RV1Zo3b64NGTJEU1XV6/GTkpK0QYMG+TTeojz77LMaoJ06dcpz2cmTJzWLxaINHjxYczqdnsvfeecdDdA++eQTz2X9+vXTAO29997z2u6cOXM0g8Gg/fnnn16Xv/feexqgrVy5UtM0Tdu9e7dmMBi0q666yuux3M87/3Mt6O6779bCw8O13NxcTdM0bePGjRqgff311yU+54iICG306NEl3iY/QLvvvvu8Lhs/frwGeD2/c+fOaUlJSVrjxo09z2Xp0qUaoDVp0qTI5+Dr4+X34IMPaoC2adMmTdM0bf/+/RpQ7N/q1atLfLxbbrlFi4uLK3T5q6++qhmNRi0jI0PTNE176623tEaNGmndu3fXHn/8cU3TNM3pdGqxsbHaQw895Lmf+z2VX3H73H3bO+64w+vyq666ymtMycnJGqDdeeedXrd75JFHNED7/fffPZcB2rPPPlvosRo1auQ1hq+//trrc1aavn37alFRUdrBgwe9Ls//Ph05cqRmsVi0vXv3ei47duyYFhUVpfXt29dz2ZNPPqmZzWbtzJkznsusVqsWGxvrtS+Kes+sXr1aA7T//e9/nstmzpypAVrv3r01h8PhdXv3dfm/E3z5PGmapg0bNkxr1KhRodv6+vl+4403Cn2/FGfu3LkaoK1du7bU2wohRLCQcm4hhPBT/jnN6enppKam0q9fP/bt2+cpH3ZLSkryZJfcFi5cSL169bjyyis9l4WGhnLXXXd53S45OZndu3dz8803c/r0aVJTU0lNTSUrK4sBAwawfPlyVFUN2PNavHgxNpuN8ePHe83bveuuu4iOji5UshwSEsLtt9/uddnXX39N69atadWqlWe8qampXHbZZQCebPv333+PqqpMnDix0Bzh/CXB+ff1uXPnSE1NpU+fPmRnZ7Njxw4AYmJiAL0ktmApcKD9/PPPdO/end69e3sui4yMZOzYsRw4cKBQF+3Ro0cHbA68Oxt47tw5r8vHjh3LokWLCv21adOmxO2dPn2aGjVqFLq8T58+OJ1OVq1aBegZ5z59+tCnTx/+/PNPALZs2UJaWhp9+vQp13MqOB+7T58+nD592lP2/vPPPwN4lZcDPPzwwwCF3pOBdurUKZYvX84dd9xBw4YNva5zv0+dTie//fYbI0eOpEmTJp7r69Spw80338yKFSs8z+eGG27Abrfz3XffeW7322+/kZaWxg033OC5LP97xm63c/r0aZo1a0ZsbCwbNmwoNM677rrLp/nPvnyeSuLr59vdS2D+/Pmlfke534Oy3JkQojqRIFoIIfy0cuVKBg4cSEREBLGxsSQkJHjm+hUVRBd08OBBmjZtWqhjbsEu2bt37wb0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jb9evXpewe8DDzzAr7/+yldffeUVRDdv3pxXXnnF8+8nnniCli1b8uqrrwLQsmVLtmzZwosvvui5zZQpUxg1apSnuVvz5s1566236NevHzNmzCh2TEIIIYQQQgiRX7UPosNNeka4rDRNY9MZFU2DNjUMhBgVchwaO9JUDAp0qGkotrQ33M+916FDB69/16lTh5MnTxZ52zFjxjBo0CBatmzJ0KFDGT58OIMHDy5x+9u3b2fs2LFel/Xq1Ys333zT67KuXbuWuJ3k5GSuu+66Yq/fvXs3EydOZO3ataSmpqKq+vpghw4d8imILo7T6eSll17iq6++4ujRo9hsNqxWK+Hh4V6369Kli9e/d+7cSbdu3bwuyx90A2zatIl//vmHzz77zHOZpmmoqsr+/ftp3bp1mccthBBCCCGEuHBU+yBaURS/SqoLsjkh1KigADVC9Lmw4SaINCs4Nff2AzM/1mz2HqiiKJ4AtKDOnTuzf/9+fvnlFxYvXsz111/PwIED+eabb8o9joiIkk86hIWFlXj9iBEjaNSoER9++CF169ZFVVXatWtX7iZfr776Km+++SbTp0+nffv2REREMH78+ELbLW38RcnMzOTuu+9m3Lhxha5r2LBhmccshBBCCCGEuLBU+yC6vNzLW1mMeDLOiqIQaVZIt2lkOrSABdH+io6O5oYbbuCGG27g2muvZejQoZw5c4aaNWtiNpsLta9v3bo1K1euZPTo0Z7LVq5cSZs2bfx63A4dOrBkyRKee+65QtedPn2anTt38uGHH9KnTx9Ab9jlL4vFUmj8K1eu5F//+he33HILoDdi27VrV6njb9myJT///LPXZevWrfP6d+fOndm2bRvNmjXza0xCCCGEEEIEO5PJ5OnrYzJd8CFehfOrO7fT6eSZZ54hKSmJsLAwmjZtyuTJk726VGuaxsSJE6lTpw5hYWEMHDiQ3bt3B3zggWJV9bGHGL0D5UhX0jjLXtkj0r3++ut8/vnn7Nixg127dvH111+TmJhIbGwsoHfoXrJkCSdOnPB0zX700UeZNWsWM2bMYPfu3bz++ut89913hZpslebJJ59k3bp13Hvvvfzzzz/s2LGDGTNmkJqaSo0aNYiLi+ODDz5gz549/P7770yYMMHv59e4cWOWL1/O0aNHSU1NBfR5yosWLWLVqlVs376du+++m5SUlFK3dffd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ly6e+7Rq1arErtDJycl06tTJE0CXxfbt27nooos8ATRAr169UFWVnTt3ei5r27atV3ODOnXq+F36XJZtlLbf3Aru74SEBAYPHuwpid+/fz+rV69m1KhRntusX7+eESNG0LBhQ6KioujXrx8Ahw4d8ut5CSGEEEKIypdSTDl3WeXNi65GXYfLoTpkokEP8m0V1KHbryC6Tp06tGnTxuuy1q1be4IHdyYwJSXF6zYpKSklZjWrG3dJt7/l3L7IH5SCXnp99913k5yc7PnbtGkTu3fv9sxF91dYmH9n18rDbDZ7/VtRFL/naZRlG77ut4L7G2DUqFF888032O125s6dS/v27Wnfvj2QV8YeHR3NZ599xrp165g3bx4gjcmEEEIIIaoDdyY6ITSwQfSFsla0P2tEVyXFqDcWUx2BH6xfQXSvXr28sowAu3btolGjRgAkJSWRmJjotURRRkYGa9eupUePHgEYbnDIy0T7d7+1a9d6/XvNmjU0b968xDb0nTt3Ztu2bTRr1qzQn8VioVWrVjgcDtavX++5z86dO0lLSyt2mx06dCA5OZkzZ84Ueb3FYvHKjheldevWbNq0yatR18qVKzEYDLRs2bLE+wZaUeMtbb+V5F//+he5ubksXLiQuXPnemWhd+zYwenTp3n55Zfp06cPrVq1kqZiQgghhBDVyEnPElcBDqLPqqjVIbosJ82p9xSrDpnoimou5lcQ/dBDD7FmzRpeeukl9uzZw9y5c/nggw+477779IEqCuPHj+eFF15gwYIFbN68mdtuu426desycuTIwI++AE3Vywsq+s+g6e8Yf8u5Dx06xIQJE9i5cyeff/45b7/9Ng8++GCJ93n88cdZtWoV999/P8nJyezevZv58+d7GmS1bNmSoUOHcvfdd7N27VrWr1/PnXfeWWK2+aabbiIxMZGRI0eycuVK9u3bx7fffutp/ta4cWP2799PcnIyqampWK2F33mjRo0iNDSU0aNHs2XLFpYuXcoDDzzArbfeWmhOfEVr3Lgxy5cv5+jRo6SmpgKl77eSREREMHLkSJ555hm2b9/OTTfd5LmuYcOGWCwW3n77bfbt28eCBQuYPHlyhT03IYQQQggRWCU1FiuLFrEGIkyQab8wlrpSHQR1Z243RQmSILpbt27MmzePzz//nHbt2jF58mSmT5/ulal77LHHeOCBBxg7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", + "image/png": "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Rnn3eaNGjVBVld27d3s1/0pJSSEtLc1rf9eqVatQF3mbzcbx48fLPCb352DLli3F3iYuLo7Q0NBi3xcGg8Hr5NENN9zAc889x7fffkvdunXJyMjgxhtv9LrfN998w+jRo3nttdc8l+Xm5hZ6fv7w5/NU3D7y9fMNYDAYGDBgAAMGDOD111/npZde4j//+Q9Lly71+i7Zv38/BoPBk80WQoiaQMq5hRCiCGFhYQCFDlrdGZT8mbL09HRmzpzp87aHDBnC0aNHWbBggeey3NxcPvzwQ6/bdenShaZNmzJt2jRPKW9+p06dKnW8/hg4cCAWi4W33nrL6/l9/PHHpKene7oyl+T666/n6NGjhZ4L6CWq7s7BI0eOxGAw8PzzzxfKgLkfu6h9bbPZePfdd71un5GRgcPh8Lqsffv2GAwGr2V3wsLCyrV/AK644gr++usvVq9e7bksKyuLDz74gMaNG5danl4WZ86c4aabbsLpdBZaVqk8evTogaZprF+/vtB1ffr0wWq1Mn36dHr37u0JmPr06cOcOXM4duyYT/Ohy7vP3WtiT58+3etydyY0/3uyadOmXl3FAT744INCmWh/PitxcXH07duXTz75hEOHDnldl/99OnjwYObPn++1nFRKSgpz586ld+/eXqX1rVu3pn379nz55Zd8+eWX1KtXzyuodW+zYDb+7bffLldW3dfPE+j7qKjybl8/32fOnCl0vftkWcGlsNavX0/btm0LncgRQohAJploIYQoQpcuXQB9uZcbb7wRs9nMiBEjGDx4MBaLhREjRnD33XeTmZnJhx9+SJ06dQplvIpz9913884773DTTTfx4IMPUq9ePT777DOCg4OBvCyQwWDgo48+4vLLL6dt27bcfvvt1K9fn6NHj7J06VIiIyP54YcfShyvO2DwRVxcHE8++STPPfccQ4cO5corr2Tnzp28++67dOvWzTN3siS33norX331Ff/3f//H0qVL6dWrF06nkx07dvDVV1951sxu1qwZ//nPf5g8eTJ9+vTh6quvJigoiHXr1pGQkMCUKVPo2bMntWrVYvTo0YwbNw5FUZgzZ06h4OL333/n/vvv57rrrqNFixY4HA7mzJmD0Wjkmmuu8dyuS5cuLF68mNdff52EhASSkpK4+OKLfd4/AE888QSff/45l19+OePGjaN27drMnj2b/fv38+233xZqkuavXbt28emnn6JpGhkZGWzatImvv/6azMxMXn/9dYYOHVroPhs2bODTTz8tdHnTpk3p0aNHsY/Vu3dvYmJiWLx4sdd8XNADbJPJxM6dOz3LU4G+RJR7TXRfgujy7vOLLrqI0aNH88EHH3jKkf/66y9mz57NyJEjufTSSz23vfPOO/m///s/rrnmGgYNGsSmTZv49ddfC5UJd+zYEaPRyNSpU0lPTycoKMiz7ntR3nrrLXr37k3nzp0ZO3YsSUlJHDhwgJ9++onk5GQAXnjhBc+6yPfeey8mk4n3338fq9XKK6+8UmibN9xwAxMnTiQ4OJh///vfhd43w4cPZ86cOURFRdGmTRtWr17N4sWLiYmJ8XnfFeTr5wn01+3LL79kwoQJdOvWjfDwcEaMGOHz5/v5559n+fLlDBs2jEaNGnHy5EneffddGjRo4DWP3m63e9a4FkKIGqUaOoILIUSNMHnyZK1+/fqawWDwWipmwYIFWocOHbTg4GCtcePG2tSpU7VPPvmk0HIyjRo10oYNG1bktvft26cNGzZMCwkJ0eLi4rSHH35Y+/bbbzVAW7NmjddtN27cqF199dVaTEyMFhQUpDVq1Ei7/vrrtSVLlvg03qIUtcSV2zvvvKO1atVKM5vNWt26dbV77rlHO3v2rNdt+vXrp7Vt27bIbdtsNm3q1Kla27ZttaCgIK1WrVpaly5dtOeee05LT0/3uu0nn3yiderUyXO7fv36aYsWLfJcv3LlSu2SSy7RQkJCtISEBO2xxx7Tfv31V68livbt26fdcccdWtOmTbXg4GCtdu3a2qWXXqotXrzY67F27Nih9e3bVwsJCdGAUpe7opglp/bu3atde+21WnR0tBYcHKx1795d+/HHH71u417iqrRltwo+nvvPYDBo0dHRWqdOnbQHH3xQ27p1a6Hbl7bElS/LeY0bN05r1qxZkdd169at0NJDR44c0QAtMTGx0O2LWuKquH1e3PuvqGWZ7Ha79txzz2lJSUma2WzWEhMTtSeffNJrSSZN05fdevzxx7XY2FgtNDRUGzJkiLZnz55CS1xpmqZ9+OGHWpMmTTSj0ejTcldbtmzRrrrqKs9r3rJlS+2ZZ57xus2GDRu0IUOGaOHh4VpoaKh26aWXaqtWrSpye7t37/a8TitWrCh0/dmzZ7Xbb79di42N1cLDw7UhQ4ZoO3bsKPRc3Ptr3bp1hbZR1L705fOkaZqWmZmp3XzzzVp0dLQGeC135cvne8mSJdq//vUvLSEhQbNYLFpCQoJ20003abt27fIa4y+//KIB2u7du4vb9UIIEZAUTSviFKQQQogqN336dB566CGOHDlC/fr1q3s44gKwb98+WrVqxS+//MKAAQOqezjiAjNy5EgURWHevHnVPRQhhPCLBNFCCFENcnJyvDrq5ubm0qlTJ5xOJ7t27arGkYkLzT333MOePXtYtGhRdQ9FXEC2b99O+/btSU5OLnEJMSGECEQSRAshRDW4/PLLadiwIR07diQ9PZ1PP/2UrVu38tlnn3HzzTdX9/CEEEIIIUQxpLGYEEJUgyFDhvDRRx/x2Wef4XQ6adOmDV988QU33HBDdQ9NCCGEEEKUQDLRQgghhBBCCCGEj2SdaCGEEEIIIYQQwkcSRAshhBBCCCGEED4KuDnRqqpy7NgxIiIiUBSluocjhBBCCCGEEOI8p2ka586dIyEhAYOh5FxzwAXRx44dIzExsbqHIYQQQgghhBDiAnP48GEaNGhQ4m0CLoiOiIgA9MFHRkZW82iEEEIIIYQQQpzvMjIySExM9MSjJQm4INpdwh0ZGSlBtBBCCCGEEEKUwul0smTJEgAGDBiA0Wis5hHVXL5MKZbGYkIIIYQQQghRgzmdTlatWsWqVatwOp3VPZzzngTRQgghhBBCCCGEjwKunNtXTqcTu91e3cMQQvjJYrGU2vFQCCGEEEKIQFXjgmhN0zhx4gRpaWnVPRQhRBkYDAaSkpKwWCzVPRQhhBBCCCH8VuOCaHcAXadOHUJDQ2UtaSFqEPc68MePH6dhw4by+RVCCCGEEDVOjQqinU6nJ4COiYmp7uEIIcogLi6OY8eO4XA4MJvN1T0cIYQQQggh/FKjJia650CHhoZW+LZP5ahsPu0k26FV+LaFEHncZdzSOVIIIYQQQtRENSoT7VYZJaBnrBo2FVKyNZIipcRUiMoiJdxCCCGEEBXLbDZz7733ev5fVK4aGURXBqsrKXbWppGoapgMcqAvhBBCCCGECHyKolCnTp3qHsYFo0aVc1cWp6ZhV/X/1zQ9Ky2EEEIIIYQQQhQkQTRgKzA1MzVXQ9MqNpDu378/48ePL/E2iqLw/fffV+jj+mLZsmUoilJhy4YdOHAARVFITk6ukO0JIYQQQgghiud0Olm2bBnLli2TvjNVQIJo8kq5g4ygKJDjgGxH1Y/j+PHjXH755T7dtiID7p49e3L8+HGioqIqZHu+aNy4MdOnT6+yx/NFII5JCCGEEEKI0kgQXbUkiAasTj3rHGpSqGXR50Kn5lZ9SXd8fDxBQUFV+ph2ux2LxUJ8fHyNbPhks9mqewhCCCGEEEKIC0iND6I1TSPLXr6/NJtGjkPDqWmEGCHHoXEsSyXDqpZ4P39LvlVV5bHHHqN27drEx8czadIkr+vzZ5dtNhv3338/9erVIzg4mEaNGjFlyhRAz5gCXHXVVSiK4vk3wIwZM2jatCkWi4WWLVsyZ86cQo8xY8YMrrzySsLCwnjxxReLLOdeuXIl/fv3JzQ0lFq1ajFkyBDOnj0LwMKFC+nduzfR0dHExMQwfPhw9u7d6/N+6N+/PwcPHuShhx5CURRP8H769Gluuukm6tevT2hoKO3bt+fzzz8vdN/777+f8ePHExsby5AhQwBYsGABzZs3Jzg4mEsvvZTZs2cXek4rVqygT58+hISEkJiYyLhx48jKyipxTEIIIYQQQgiRX43vzp3tgNqzsqrlsc+MCSPMjw7ys2fPZsKECaxdu5bVq1czZswYevXqxaBBgwrd9q233mLBggV89dVXNGzYkMOHD3P48GEA1q1bR506dZg5cyZDhw7FaDQCMG/ePB588EGmT5/OwIED+fHHH7n99ttp0KABl156qWfbkyZN4uWXX2b69OmYTCb27dvn9djJyckMGDCAO+64gzfffBOTycTSpUs9pSFZWVlMmDCBDh06kJmZycSJE7nqqqtITk7GYCj9vMx3333HRRddxNixY7nrrrs8l+fm5tKlSxcef/xxIiMj+emnn7j11ltp2rQp3bt399qP99xzDytXrgRg//79XHvttTz44IPceeedbNy4kUceecTrMffu3cvQoUN54YUX+OSTTzh16hT3338/999/PzNnzix2TEIIIYQQQgiRX40PomuSDh068OyzzwLQvHlz3nnnHZYsWVJkEH3o0CGaN29O7969URSFRo0aea6Li4sDIDo6mvj4eM/l06ZNY8yYMZ414iZMmMCaNWuYNm2aVxB98803c/vtt3v+XTCIfuWVV+jatSvvvvuu57K2bdt6/v+aa67xuv0nn3xCXFwc27Zto127dqXuh9q1a2M0GomIiPAaf/369b2C3wceeIBff/2Vr776yiuIbt68Oa+88orn30888QQtW7bk1VdfBaBly5Zs2bKFF1980XObKVOmMGrUKE9zt+bNm/PWW2/Rr18/ZsyYUeyYhBBCCCGEECK/Gh9Eh5r0jHBZaZrGpjMqmgZtahkIMirkODR2pKkYFOhQ21BsaW+on3uvQ4cOXv+uV68eJ0+eLPK2Y8aMYdCgQbRs2ZKhQ4cyfPhwBg8eXOL2t2/fztixY70u69WrF2+++abXZV27di1xO8nJyVx33XXFXr97924mTpzI2rVrSU1NRVX19cEOHTrkUxBdHKfTyUsvvcRXX33F0aNHsdlsWK1WQkNDvW7XpUsXr3/v3LmTbt26eV2WP+gG2LRpE//88w+fffaZ5zJN01BVlf3799O6desyj1sIIYQQQghx4ajxQbSiKH6VVBdkc0KwUUEBagXpc2FDTRBuVnBq7u1XzPxYs9l7oIqieALQgjp37sz+/fv55ZdfWLx4Mddffz0DBw7km2++Kfc4wsJKPukQEhJS4vUjRoygUaNGfPjhhyQkJKCqKu3atSt3k69XX32VN998k+nTp9O+fXvCwsIYP358oe2WNv6iZGZmcvfddzNu3LhC1zVs2LDMYxZCCCGEEEJcWGp8EF1e7uWtLEY8GWdFUQg3K6TbNDIdWoUF0f6KjIzkhhtu4IYbbuDaa69l6NChnDlzhtq1a2M2mwu1r2/dujUrV65k9OjRnstWrlxJmzZt/HrcDh06sGTJEp577rlC150+fZqdO3fy4Ycf0qdPH0Bv2OUvi8VSaPwrV67kX//6F7fccgugN2LbtWtXqeNv2bIlP//8s9dl69at8/p3586d2bZtG82aNfNrTEIIIYQQQgQ6k8nk6etjMl3wIV6l86s7t9Pp5JlnniEpKYmQkBCaNm3K5MmTvbpUa5rGxIkTqVevHiEhIQwcOJDdu3dX+MArilXVxx5k9A6Uw11J4yx7VY9I9/rrr/P555+zY8cOdu3axddff018fDzR0dGA3qF7yZIlnDhxwtM1+9FHH2XWrFnMmDGD3bt38/rrr/Pdd98VarJVmieffJJ169Zx77338s8//7Bjxw5mzJhBamoqtWrVIiYmhg8++IA9e/bw+++/M2HCBL+fX+PGjVm+fDlHjx4lNTUV0OcpL1q0iFWrVrF9+3buvvtuUlJSSt3W3XffzY4dO3j88cfZtWsXX331FbNmzQLyTow8/vjjrFq1ivvvv5/k5GR2797N/Pnzuf/++0sckxBCCCGEEIHOYDBQv3596tev71OjX1E+fu3hqVOnMmPGDN555x22b9/O1KlTeeWVV3j77bc9t3nllVd46623eO+991i7di1hYWEMGTKE3NzcCh98RbC5M9EF9kSYSQ++MsuwlFVFiIiI8DT46tatGwcOHODnn3/2fChee+01Fi1aRGJiIp06dQJg5MiRvPnmm0ybNo22bdvy/vvvM3PmTPr37+/XY7do0YLffvuNTZs20b17d3r06MH8+fMxmUwYDAa++OIL1q9fT7t27XjooYc8Db388fzzz3PgwAGaNm3qaZT29NNP07lzZ4YMGUL//v2Jj49n5MiRpW4rKSmJb775hu+++44OHTowY8YM/vOf/wB41t3u0KEDf/zxB7t27aJPnz506tSJiRMnkpCQUOKYhBBCCCGEECI/RfMjQhw+fDh169bl448/9lx2zTXXEBISwqeffoqmaSQkJPDwww97sp/p6enUrVuXWbNmceONN5b6GBkZGURFRZGenk5kZKTXdbm5uezfv5+kpCSCg4N9HXaJ9meonLFq1A9TiA/Ni6RVTSM5VUUD2tYyEGySdYNrkhdffJH33nvPsyyYCByV8TkWQgghhLiQOZ1O1qxZA8All1ziWQJX+K6kOLQgvzLRPXv2ZMmSJezatQvQOx6vWLGCyy+/HNDX6z1x4gQDBw703CcqKoqLL76Y1atXF7lNq9VKRkaG119VKq6c25CvYVmmo+oz0cI/7777LuvWrWPfvn3MmTOHV1991WtuuBBCCCGEEOcrp9PJokWLWLRokfT4qQJ+zTp/4oknyMjIoFWrVhiNRpxOJy+++CKjRo0C4MSJEwDUrVvX635169b1XFfQlClTimxgVVXc5dxBRZxOCDcrZNo1suwQKwmzgLZ7925eeOEFzpw5Q8OGDXn44Yd58sknq3tYQgghhBBCiPOMX0H0V199xWeffcbcuXNp27YtycnJjB8/noSEhDJn/Z588kmvxlQZGRkkJiaWaVv+cqoadtcKU5YiKh70edEamXbJRAe6N954gzfeeKO6hyGEEEIIIYQ4z/kVRD/66KM88cQTnrnN7du35+DBg0yZMoXRo0cTHx8PQEpKCvXq1fPcLyUlhY4dOxa5zaCgIE/z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PZc5HA7Wr19f4v183Se+jtOf7RVly5YtdOrUqcz3F0IIIYQQIlAFbBD9WEcLAM/9beWs1Tt4zXQF0ZEW7/vEhyqEmfQs9b5zKlZXIJ1p1ziVq/9/o3ADhlKWtCqoItaJLspll13GnDlz+PPPP9m8eTOjR48ulH1t3LgxS5Ys8QoGL7vsMv7++2/+97//sXv3bp599lm2bNlS6uPdd999nDlzhptuuol169axd+9efv31V26//fZiA6bGjRuTmZnJkiVLSE1NJTs7m4YNG2KxWHj77bfZt28fCxYsYPLkyaU+fkREBKNHj+bRRx9l6dKlbN26lX//+98YDHnLjLVo0YJRo0Zx22238d1337F//37++usvpkyZwk8//VTsmIrSqVMnYmNjvQLfQYMG0bRpU0aPHs0///zDypUrefrppwFKXers0UcfZerUqXz55Zfs3LmTJ554guTkZB588EEAmjVrRmJiIpMmTWL37t389NNPvPbaa6Xul4IefPBBXn75Zb7//nt27NjBvffe69VJuyi+7hNfx+nP9grKzs5m/fr1DB482Of7CCGEEEKIsjOZTNx8883cfPPNVb6U7oUoYIPo21uaaR1t4LQVXtqQVyKsapDjSk5Hmr2DHoOiz1k2KpBlh61nVI5kqhw8p5eaxgYrRFj8C6ABTK67OFQqtOz2ySefpF+/fgwfPpxhw4YxcuRIr7myoHdCXrRoEYmJiZ7M3pAhQ3jmmWd47LHH6NatG+fOneO2224r9fHcmVSn08ngwYNp374948ePJzo6uth1lHv27Mn//d//ccMNNxAXF8crr7xCXFwcs2bN4uuvv6ZNmza8/PLLTJs2zafn/Prrr9OjRw+GDx/OwIED6dWrF61bt/aauzxz5kxuu+02Hn74YVq2bMnIkSNZt24dDRs2LHZMRTEajZ41i/Nf9v3335OZmUm3bt248847+c9//gNQaP50QePGjWPChAk8/PDDtG/fnoULF7JgwQJPZ26z2cznn3/Ojh076NChA1OnTuWFF17wab/k9/DDD3PrrbcyevRoevToQUREBFdddVWJ9/F1n/g6Tn+2V9D8+fNp2LAhffr08fk+QgghhBCi7AwGAy1atKBFixbFHteLiqNolTkZswwyMjKIiooiPT2d1emhXLkwl2Aj7LoxlCiDja2790FMI4KDg2lbu+gln3IcGoez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wIEDHDhwAFWt3IBeU4teIzqQ5O/QXRn8CqIXLFhA165due6666hTpw6dOnXiww8/9Fy/f/9+Tpw4wcCBAz2XRUVFcfHFF7N69eoitzllyhSioqI8f4mJiWV8KlUjf+d6u5/l3LNnz8ZkMvHXX3/x5ptv8vrrr/PRRx953WbatGlcdNFFbNy4kWeeeYa9e/cydOhQrrnmGv755x++/PJLVqxYwf333++5z5gxYzh8+DBLly7lm2++4d133y0xqMvMzKRfv34cPXqUBQsWsGnTJh577DFUVeWGG27g4Ycfpm3bthw/fpzjx49zww03FNpGVlYWQ4YMoVatWqxbt46vv/6axYsXe40LYOnSpezdu5elS5cye/ZsZs2a5QnKfVXSNr777jsaNGjA888/7xkv4NN+K2p/jxo1ii+++MLr5MaXX35JQkICffr0AcButzN58mQ2bdrE999/z4EDBxgzZoxfz0kIIYQQQlQP95zogkE0wOOdzAxraOTt3kEEm0qPEmsHKzQI02+3tRpLuh0Oh+cY2eGo3EZRqhPQAjwT7RpbZQXRfs1+37dvHzNmzGDChAk89dRTrFu3jnHjxmGxWBg9ejQnTpwAoG7dul73q1u3rue6gp588kkmTJjg+XdGRkbAB9JGQANsfn5OEhMTeeONN1AUhZYtW7J582beeOMN7rrrLs9tLrvsMh5++GHPv++8805GjRrlaRDWvHlz3nrrLfr168eMGTM4dOgQv/zyC3/99RfdunUD4OOPP6Z169bFjmPu3LmcOnWKdevWUbt2bQCaNWvmuT48PByTyUR8fHyJ28jNzeV///sfYWFhALzzzjuMGDGCqVOnet4DtWrV4p133sFoNNKqVSuGDRvGkiVLvJ5zaUraRu3atTEajZ6ssNuUKVNK3G/BwXpjiIL7+/rrr2f8+PGeLLb7ud50002eLPcdd9zhuX2TJk1466236NatG5mZmYSHh/v8vIQQQgghRNVzl3PXLSKIrhdq4LshIX5tr11tA0eynGw+o9IzvvLnI1c3d2duJdDXearEDt1+PXVVVencuTMvvfQSnTp1YuzYsdx111289957ZR5AUFAQkZGRXn+Bzn1mw+bnWtGXXHKJV7lxjx492L17N05nXkq7a9euXvfZtGkTs2bNIjw83PM3ZMgQVFVl//79bN++HZPJRJcuXTz3adWqVYld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", "text/plain": [ "
    " ] @@ -1056,19 +1056,19 @@ " 2015-05-03\n", " Sales\n", " 28939.392578\n", - " 25214.275391\n", + " 25214.277344\n", " 28939.392578\n", - " 32411.095703\n", + " 32411.097656\n", " \n", " \n", " 1\n", " 1\n", " 2015-05-10\n", " Sales\n", - " 25541.921875\n", - " 21921.326172\n", - " 25541.921875\n", - " 29191.931641\n", + " 25541.919922\n", + " 21921.324219\n", + " 25541.919922\n", + " 29191.929688\n", " \n", " \n", " 2\n", @@ -1076,9 +1076,9 @@ " 2015-05-17\n", " Sales\n", " 23640.238281\n", - " 20500.337891\n", + " 20500.339844\n", " 23640.238281\n", - " 26884.664062\n", + " 26884.666016\n", " \n", " \n", " 3\n", @@ -1095,10 +1095,10 @@ " 1\n", " 2015-05-31\n", " Sales\n", - " 22679.359375\n", + " 22679.361328\n", " 19722.287109\n", - " 22679.359375\n", - " 25990.041016\n", + " 22679.361328\n", + " 25990.042969\n", " \n", " \n", "\n", @@ -1106,18 +1106,18 @@ ], "text/plain": [ " id timestamp target_name predictions 0.1 0.5 \\\n", - "0 1 2015-05-03 Sales 28939.392578 25214.275391 28939.392578 \n", - "1 1 2015-05-10 Sales 25541.921875 21921.326172 25541.921875 \n", - "2 1 2015-05-17 Sales 23640.238281 20500.337891 23640.238281 \n", + "0 1 2015-05-03 Sales 28939.392578 25214.277344 28939.392578 \n", + "1 1 2015-05-10 Sales 25541.919922 21921.324219 25541.919922 \n", + "2 1 2015-05-17 Sales 23640.238281 20500.339844 23640.238281 \n", "3 1 2015-05-24 Sales 26778.261719 23318.355469 26778.261719 \n", - "4 1 2015-05-31 Sales 22679.359375 19722.287109 22679.359375 \n", + "4 1 2015-05-31 Sales 22679.361328 19722.287109 22679.361328 \n", "\n", " 0.9 \n", - "0 32411.095703 \n", - "1 29191.931641 \n", - "2 26884.664062 \n", + "0 32411.097656 \n", + "1 29191.929688 \n", + "2 26884.666016 \n", "3 30162.820312 \n", - "4 25990.041016 " + "4 25990.042969 " ] }, "metadata": {}, @@ -1401,9 +1401,9 @@ "id": "c99a5ae1", "metadata": {}, "source": [ - "## (Experimental) Fine-Tuning\n", + "## Fine-Tuning\n", "\n", - "Chronos-2 supports fine-tuning on your own data. This is an experimental feature that may change in future versions." + "Chronos-2 supports fine-tuning on your own data." ] }, { @@ -1456,10 +1456,6 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_2466579/3520825307.py:2: FutureWarning: Fine-tuning support is experimental and may be changed in future versions.\n", - " finetuned_pipeline = pipeline.fit(\n", - "/fsx/ansarnd/repos/chronos-forecasting/.venv/lib/python3.11/site-packages/torch/backends/cuda/__init__.py:131: UserWarning: Please use the new API settings to control TF32 behavior, such as torch.backends.cudnn.conv.fp32_precision = 'tf32' or torch.backends.cuda.matmul.fp32_precision = 'ieee'. Old settings, e.g, torch.backends.cuda.matmul.allow_tf32 = True, torch.backends.cudnn.allow_tf32 = True, allowTF32CuDNN() and allowTF32CuBLAS() will be deprecated after Pytorch 2.9. Please see https://pytorch.org/docs/main/notes/cuda.html#tensorfloat-32-tf32-on-ampere-and-later-devices (Triggered internally at /pytorch/aten/src/ATen/Context.cpp:80.)\n", - " return torch._C._get_cublas_allow_tf32()\n", "Could not estimate the number of tokens of the input, floating-point operations will not be computed\n" ] }, @@ -1470,7 +1466,7 @@ "
    \n", " \n", " \n", - " [50/50 00:04, Epoch 1/9223372036854775807]\n", + " [50/50 00:03, Epoch 1/9223372036854775807]\n", "
    \n", " \n", " \n", @@ -1482,23 +1478,23 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", "
    100.3874000.695100
    200.3450000.718000
    300.3629000.734500
    400.3464000.640800
    500.3434000.667400

    " @@ -1531,7 +1527,7 @@ "outputs": [ { "data": { - "image/png": "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8gvGjBmDBg0a4LbbblO2PWfOHLz++utYtGgRAgICcOrUKYfXTktLQ79+/fDYY49h8eLFCAgIwJYtW5T0G6PRiGnTpqF9+/YoKirCrFmzcO+99yItLQ06nfd5ppiYGOh0Onz77beYMmWKsv/OREREYPny5UhISMDBgwcxbtw4REREYPr06S6X//LLLzFr1iy899576NSpE/7++2+MGzcOYWFhGDVqlMdjShA3CjxYN5I6QxAEcU3gmAZP126CqAlQsH4d0r59e8yePRsA0KxZM7z33nvYvHmzy2A9KysLzZo1wy233AJBEJCUlKQ8FxMTAwCIjo52SF9/++23MXr0aKUf47Rp07B79268/fbbDsH6I488gjFjxij/Owfrb775Jrp27eqgSrdp00b5e+jQoQ7Lf/rpp4iJicGRI0fQtm1br8ehfv36eOeddzB9+nS89NJL6Nq1K2677TYMHz4cjRs3VpabOXOm8ndycjKeffZZrFy50m2wPnv2bMyfPx/33XcfAKBRo0Y4cuQI/ve//2HUqFEejylB3CjwNPhiq5yZRK1gCIIgajYFqmCdJloJomZAwbpGQgNkhbu6XtsX2rdv7/B/fHw88vLyXC47evRopa77jjvuwF133YXbb7/d4/aPHj2K8ePHOzzWs2dPLF682OGxrl27etxOWloaHnjgAbfPnzhxArNmzcKff/6JixcvQpLkfs1ZWVmagnUAmDhxIkaOHImtW7di9+7dWLVqFebOnYuffvpJmbz4+uuv8c477yA9PR1FRUWwWq2IjIx0uT2j0Yj09HQ8/vjjGDdunPK41WpVjPPKc0wJ4nqDK+sMQIno+3WMIAiCqFquOtSsV99+EARhh4ZPGhEEwadU9OokMNBxRwVBUAJdZzp37oyMjAz8+uuv2LRpE4YNG4b+/fvj22+/rfB+hIV5ntwICQnx+PzgwYORlJSEpUuXIiEhAZIkoW3btjCbzR7XcyYiIgKDBw/G4MGD8eqrryI1NRWvvvoqBgwYgF27dmH48OF46aWXkJqaiqioKKxcuRLz5893ua2ioiIAwNKlS9GjRw+H53iavT+PKUFcK6hd4I0WCtYJgiBqOg6t28gclCBqBBUymHv99dchCIJDX+8+ffpAEASHnyeffNJhvaysLAwaNAihoaGIjY3Fc889B6vV0cli69at6Ny5MwwGA5o2bYrly5eXef33338fycnJCA4ORo8ePbBnz56KvJ0blsjISDz44INYunQpvv76a3z33Xe4fPkyADnwd27h0KpVK+zYscPhsR07dqB169Y+vW779u2xefNml89dunQJx48fx8yZM9GvXz+0atVKMZ6rCIIgoGXLljAaZf+BnTt3IikpCS+88AK6du2KZs2a4fTp027Xr1evHhISEnDq1Ck0bdrU4adRo0bKcp6OKUHcCBSqUijJEZ4gCKLmQ63bblwCAgIwbtw4jBs3DgEBNLtekyj3p7F3717873//K5NyDQDjxo3Dyy+/rPwfGhqq/C2KIgYNGoS4uDjs3LkTOTk5GDlyJAIDAzF37lwAcm/sQYMG4cknn8SXX36JzZs3Y+zYsYiPj0dqaioAOXV52rRpWLJkCXr06IFFixYhNTUVx48fR2xsbHnf1g3HggULEB8fj06dOkGn02HVqlWIi4tDdHQ0ALmGe/PmzejZsycMBgNq1aqF5557DsOGDUOnTp3Qv39//Pzzz/j++++xadMmn157xowZaNeuHZ566ik8+eSTCAoKwpYtW/DAAw+gdu3aqFOnDj766CPEx8cjKysL//3vf33aflpaGmbPno0RI0agdevWCAoKwrZt2/Dpp5/i+eefByDX9GdlZWHlypXo1q0b1qxZgx9++MHjdl966SVMnjwZUVFRuOOOO2AymfDXX3/hypUrmDZtmtdjShA3AupgvZhqHwmCIGo8+WQwd8Oi0+lQv3796t4NwgXlUtaLioowfPhwLF26FLVq1SrzfGhoKOLi4pQfdf3vhg0bcOTIEXzxxRfo2LEj7rzzTrzyyit4//33lfTmJUuWoFGjRpg/fz5atWqFSZMm4f7778fChQuV7SxYsADjxo3DmDFj0Lp1ayxZsgShoaH49NNPy/OWblgiIiIUo7du3bohMzMTa9euVdzW58+fj40bNyIxMRGdOnUCAAwZMgSLFy/G22+/jTZt2uB///sfli1bhj59+vj02s2bN8eGDRtw4MABdO/eHSkpKfjxxx8REBAAnU6HlStXYt++fWjbti2mTp2Kt956y6ftN2jQAMnJyXjppZfQo0cPdO7cGYsXL8ZLL72EF154AQBw9913Y+rUqZg0aRI6duyInTt34sUXX/S43bFjx+Ljjz/GsmXL0K5dO/Tu3RvLly9XlHVvx5QgbgTUqoyRWgAR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Wq2YPHkyoqOjUadOHTz//PMYNWqUw7Fzd5y2bduG7t27w2AwID4+Hv/9739htdoLfL19doCsWH/88ce49957ERoaimbNmuGnn35yWGft2rVo3rw5QkJCcNtttzkcA1e4Oyd42vrHH3+MRo0aITg4WNN+utseZ8WKFUhOTkZUVBQeeughFBYWOjw/ePBgrFy50uM+EzUHrqzHhcgDPnKDJwiCqNmoa9a5sk416wRR/ZDBnEZKrcW487Pq6eH+66jzCAkM87rc4sWL0aRJE3z00UfYu3cv9Hq9pu3v3bsXsbGxWLZsGe644w7N63E+++wzTJgwATt27AAAXL16FX379sXYsWOxcOFClJSU4Pnnn8ewYcPw22+/udxGXFwctm3bhtOnTyMpKcnlMoWFhRg1ahTeffddMMYwf/58DBw4ECdOnEBERESZ5S0WC1JTU5GSkoLff/8dAQEBePXVV3HHHXfgn3/+gU6nw5AhQzBu3Dj83//9H8xmM/bs2QNBcN+m5I8//sCIESMcHnvjjTfw5ZdfYtmyZWjVqhUWL16M1atX47bbbvN4nM6dO4eBAwdi9OjR+Pzzz3Hs2DGMGzcOwcHBDsG4Fl566SW8+eabeOutt/Duu+9i+PDhOH36NGrXro0zZ87gvvvuw8SJEzF+/Hj89ddf+M9//uNxe57OiZMnT+K7777D999/XynnWHp6OlavXo1ffvkFV65cwbBhw/D66687TNR0794dr732GkwmEwwGg0/Hhqh6ihRlXQdAIkdhgiCIGk6+iQfrQLitZt25swdBEFUPBevXEVFRUYiIiIBer0dcXJzm9WJiYgAA0dHRPq3HadasGd58803l/1dffRWdOnXC3Llzlcc+/fRTJCYm4t9//0Xz5s3LbGP27Nm47777kJycjObNmyMlJQUDBw7E/fffD51OTgDp27evwzofffQRoqOjsW3bNtx1111ltvn1119DkiR8/PHHSgC+bNkyREdHY+vWrejatSvy8/Nx1113oUmTJgCAVq1auX2fV69eRX5+PhISEhwef/fddzFjxgzce++9AID33nsPa9eu9XqcXnjhBSQmJuK9996DIAho2bIlsrOz8fzzz2PWrFnK+9bC6NGj8fDDDwMA5s6di3feeQd79uzBHXfcgQ8//BBNmjRRTNpatGiBgwcP4o033nC7PU/nhNlsxueff64s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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+sAAAFMCAYAAACzhi02AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXd8FFX3/z+zm2TTEwIJSSAkdAgtdCMiSDEKoiiKBWkKKIII+IgPPxGwgY1m5REFFPWLHQtIlaIUQTBIF0JCAiSEUFI2yba5vz9m7+zsZstskk0CnPfrlVd2Z6fcnZ25c88953yOwBhjIAiCIAiCIAiCIAiizqCp7QYQBEEQBEEQBEEQBGEPGesEQRAEQRAEQRAEUccgY50gCIIgCIIgCIIg6hhkrBMEQRAEQRAEQRBEHYOMdYIgCIIgCIIgCIKoY5CxThAEQRAEQRAEQRB1DDLWCYIgCIIgCIIgCKKOQcY6QRAEQRAEQRAEQdQxyFgnCIIgCIIgCIIgiDoGGesEQRBErdK3b1/07du3Ro9pNpsxY8YMJCQkQKPRYOjQoTV6/GuBffv24eabb0ZISAgEQUB6enptN8kjb775Jtq0aQNRFOVlJSUlGDduHGJjYyEIAqZOnYqsrCwIgoCVK1fWXmOvEbZt2wZBELBt2zZ52UMPPYThw4fXXqMIgiBuEMhYJwiCILzi0KFDuP/++5GYmIjAwEA0atQIAwcOxLvvvlvbTVPN8uXL8dZbb+H+++/Hp59+imnTptV2k3zK+fPnMXfuXNUGt8lkwgMPPIDLly9j0aJFWLVqFRITE33axtdeew133303GjZsCEEQMHfuXK+2LyoqwhtvvIHnn38eGo1teDNv3jysXLkSEydOxKpVqzBy5Mhqbrn3zJs3D2vWrKntZlSa559/Ht999x0OHjxY200hCIK4rvGr7QYQBEEQ1w67du3CbbfdhiZNmmD8+PGIjY1FTk4O9uzZgyVLluDpp5+u7Saq4rfffkOjRo2waNGi2m5KjXD+/Hm89NJLSEpKQkpKisf1MzIycObMGSxbtgzjxo3zfQMBzJo1C7GxsejcuTM2bNjg9fbLly+H2WzGww8/bLf8t99+w0033YQ5c+bIyxhjKCsrg7+/f5XbXRnmzZuH+++//5qN6OjcuTO6deuGBQsW4LPPPqvt5hAEQVy3kLFOEARBqOa1115DREQE9u3bh8jISLvP8vPza6dRlSA/P79C+6uCKIowGo0IDAystn3WJvy3rM5zpNfrERIS4vLzzMxMJCUloaCgANHR0V7vf8WKFbj77rsr/Ab5+flITk62WyYIwnXzW9UWw4cPx5w5c/DBBx8gNDS0tptDEARxXUJh8ARBEIRqMjIy0K5dO6dGXExMjN37FStWoF+/foiJiYFOp0NycjI+/PBDVccxGAyYM2cOWrRoAZ1Oh4SEBMyYMQMGg8FuvU2bNuGWW25BZGQkQkND0bp1a/y///f/XO6X5ypv3boVR44cgSAIdvm4er0ezz77LBISEqDT6dC6dWu8/fbbYIzZ7UcQBEyePBlffPEF2rVrB51Oh/Xr1wMAzp07h8ceewwNGzaETqdDu3btsHz58gptKS8vx9y5c9GqVSsEBgYiLi4O9913HzIyMuR13n77bdx8882oX78+goKC0LVrV3z77bcV9uXuPGzbtg3du3cHAIwdO1b+zq7ytceMGYM+ffoAAB544AEIgmCnKfDbb7+hd+/eCAkJQWRkJO655x4cO3bMbh9z586FIAg4evQoHnnkEdSrVw+33HKLy98FAJKSktx+7o7MzEz8888/GDBggLyM51pnZmZi7dq18vfOyspymrM+ZswYhIaG4ty5cxg6dChCQ0MRHR2N//znP7BYLHbHE0URixcvRrt27RAYGIiGDRviiSeewJUrVzy2VRAE6PV6fPrpp3KbxowZI7fB2Xng59NxP5MnT8aaNWvQvn17+Vrj16EStdfk2bNnMXToUISEhCAmJgbTpk2rcM9xBg4cCL1ej02bNnn8zgRBEETlIM86QRAEoZrExETs3r0bhw8fRvv27d2u++GHH6Jdu3a4++674efnh59//hlPPfUURFHEpEmTXG4niiLuvvtu/PHHH5gwYQLatm2LQ4cOYdGiRfj333/lXN8jR47grrvuQseOHfHyyy9Dp9Ph1KlT2Llzp8t9R0dHY9WqVXjttddQUlKC+fPnAwDatm0LxhjuvvtubN26FY8//jhSUlKwYcMGPPfcczh37lyFkPnffvsNX3/9NSZPnowGDRogKSkJFy5cwE033SQbUtHR0fj111/x+OOPo6ioCFOnTgUAWCwW3HXXXdiyZQseeughPPPMMyguLsamTZtw+PBhNG/eHACwZMkS3H333RgxYgSMRiNW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dZ62b9+OHj16QKfTIS4uDv/9739hNtsSfD39doDksf74449x7733Ijg4GC1btsRPP/1kt826devQqlUrBAUF4bbbbrM7B85wdU3wsPWPP/4YTZs2RWBgoKp2utofZ9WqVUhKSkJERAQeeughFBcX230+ZMgQrF692m2biboD96zHBkkDPlKDJwiCqNsoc9a5Z51y1gmi9iGBOZWUm0tx56e1U8P919EXEOQf4nG9JUuWoHnz5vjoo4+wb98+aLVaVfvft28fYmJisGLFCtxxxx2qt+N8+umnmDhxInbu3AkAuHr1Kvr164dx48Zh0aJFKCsrw/PPP4/hw4fjt99+c7qP2NhYbN++HWfOnEFiYqLTdYqLizF69Gi8++67YIxhwYIFGDRoEE6ePImwsLAK65tMJqSlpSE1NRW///47/Pz88Oqrr+KOO+7AP//8A41Gg6FDh2L8+PH4v//7PxiNRuzduxeC4LpMyR9//IGRI0faLXvjjTfwxRdfYMWKFWjbti2WLFmCNWvW4LbbbnN7ns6dO4dBgwZhzJgx+Oyzz3D8+HGMHz8egYGBdsa4Gl566SW8+eabeOutt/Duu+9ixIgROHPmDKKiopCTk4P77rsPkyZNwoQJE/DXX3/h2Wefdbs/d9fEqVOn8N133+H777+vlmssIyMDa9aswS+//IIrV65g+PDheP311+0manr06IHXXnsNBoMBOp3Oq3ND1DwlsmddA0AkRWGCIIg6TqGBG+tAqDVn3bGyB0EQNQ8Z69cRERERCAsLg1arRWxsrOrtoqOjAQCRkZFebcdp2bIl3nzzTfn9q6++is6dO2PevHnysuXLlyMhIQH//vsvWrVqVWEfc+bMwX333YekpCS0atUKqampGDRoEO6//35oNFIASL9+/ey2+eijjxAZGYnt27fjrrvuqrDPr776CqIo4uOPP5YN8BUrViAyMhLbtm1Dt27dUFhYiLvuugvNmzcHALRt29bl97x69SoKCwsRHx9vt/zdd9/FzJkzce+99wIA3nvvPaxbt87jeXrhhReQkJCA9957D4IgoE2bNjh//jyef/55zJ49W/7eahgzZgwefvhhAMC8efPwzjvvYO/evbjjjjvw4Ycfonnz5rJIW+vWrXHo0CG88cYbLvfn7powGo347LPP5HXU4G5/oihi5cqV8oTLyJEjsWXLFjtjPT4+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", "text/plain": [ "

    " ] @@ -1567,8 +1563,14 @@ "id": "91083481", "metadata": {}, "source": [ - "**Note:** Fine-tuning is experimental functionality intended for advanced users. The default fine-tuning hyperparameters may not always improve accuracy for your specific use case." + "**Note:** Fine-tuning functionality is intended for advanced users. The default fine-tuning hyperparameters may not always improve accuracy for your specific use case. We recommend experimenting with different hyperparameters. " ] + }, + { + "cell_type": "markdown", + "id": "771d7f6a", + "metadata": {}, + "source": [] } ], "metadata": { diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index cadc544..d5fdde4 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -100,7 +100,7 @@ class Chronos2Pipeline(BaseChronosPipeline): | Sequence[Mapping[str, TensorOrArray | Mapping[str, TensorOrArray | None]]] | None = None, context_length: int | None = None, - learning_rate: float = 1e-5, + learning_rate: float = 1e-6, num_steps: int = 1000, batch_size: int = 256, output_dir: Path | str | None = None, @@ -126,7 +126,7 @@ class Chronos2Pipeline(BaseChronosPipeline): context_length The maximum context length used during fine-tuning, by default set to the model's default context length learning_rate - The learning rate for the optimizer, by default 1e-5 + The learning rate for the optimizer, by default 1e-6 num_steps The number of steps to fine-tune for, by default 1000 batch_size @@ -153,12 +153,6 @@ class Chronos2Pipeline(BaseChronosPipeline): from chronos.chronos2.trainer import Chronos2Trainer, EvaluateAndSaveFinalStepCallback - warnings.warn( - "Fine-tuning support is experimental and may be changed in future versions.", - category=FutureWarning, - stacklevel=2, - ) - # Create a copy of the model to avoid modifying the original config = deepcopy(self.model.config) model = Chronos2Model(config).to(self.model.device) # type: ignore From 67a6f91aec23ddbd8a256270af9491a4ad1b570d Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Tue, 18 Nov 2025 10:52:56 +0100 Subject: [PATCH 21/60] Update version to 2.1.0rc1 for pre-release (#383) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index 8c0d5d5..5604250 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.0.0" +__version__ = "2.1.0rc1" From 182aafe18463988fd41cdf710ff070722602ca64 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 21 Nov 2025 11:37:14 +0100 Subject: [PATCH 22/60] Update torch dependency version to >=2.2,<3 (#388) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ae6cad6..2e97fce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ readme = "README.md" license = { file = "LICENSE" } requires-python = ">=3.10" dependencies = [ - "torch>=2.0,<3", + "torch>=2.2,<3", "transformers>=4.41,<5", "accelerate>=0.34,<2", "numpy>=1.21,<3", From 7daaa7194c9472f16eab0ea2f9d7eac317002201 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 21 Nov 2025 11:50:52 +0100 Subject: [PATCH 23/60] Bump version to 2.1.0 (#389) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index 5604250..9aa3f90 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.1.0rc1" +__version__ = "2.1.0" From 972a09b62668ae3f62ac46f552ed01bcda793363 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 24 Nov 2025 09:22:43 +0100 Subject: [PATCH 24/60] Chronos-2: Convert assert about batch size to warning (#392) --- src/chronos/chronos2/trainer.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/chronos/chronos2/trainer.py b/src/chronos/chronos2/trainer.py index 561da9e..bd4e464 100644 --- a/src/chronos/chronos2/trainer.py +++ b/src/chronos/chronos2/trainer.py @@ -3,6 +3,7 @@ # Authors: Abdul Fatir Ansari +import warnings from typing import TYPE_CHECKING, cast from torch.utils.data import DataLoader, Dataset @@ -48,11 +49,16 @@ class Chronos2Trainer(Trainer): train_dataset = cast("Chronos2Dataset", self.train_dataset) - assert train_dataset.batch_size == self.args.train_batch_size, ( - f"The batch_size of the train_dataset ({train_dataset.batch_size}) does not match the batch_size " - f"in TrainingArguments ({self.args.train_batch_size}). If you're using a machine with multiple GPUs, " - f"ensure that only a single GPU is visible by setting the CUDA_VISIBLE_DEVICES environment variable." - ) + if self.args.train_batch_size > train_dataset.batch_size: + warnings.warn( + f"The batch_size of the train_dataset ({train_dataset.batch_size}) does not match the batch_size " + f"in TrainingArguments ({self.args.train_batch_size}). On machines with multiple GPUs, this may indicate " + f"that multiple GPUs are visible and transformers is using DataParallel for training by default. " + f"This may lead to unnecessary slowdown and unexpected behavior. We strongly recommend setting the CUDA_VISIBLE_DEVICES " + f"environment variable to ensure that only a single GPU is visible.", + category=UserWarning, + stacklevel=3, + ) dataloader_params = { # Disable automatic batching as we handle batching ourselves @@ -74,11 +80,16 @@ class Chronos2Trainer(Trainer): eval_dataset = cast("Chronos2Dataset", self.eval_dataset) - assert eval_dataset.batch_size == self.args.eval_batch_size, ( - f"The batch_size of the eval_dataset ({eval_dataset.batch_size}) does not match the batch_size " - f"in TrainingArguments ({self.args.eval_batch_size}). If you're using a machine with multiple GPUs, " - f"ensure that only a single GPU is visible by setting the CUDA_VISIBLE_DEVICES environment variable." - ) + if self.args.eval_batch_size > eval_dataset.batch_size: + warnings.warn( + f"The batch_size of the eval_dataset ({eval_dataset.batch_size}) does not match the batch_size " + f"in TrainingArguments ({self.args.eval_batch_size}). On machines with multiple GPUs, this may indicate " + f"that multiple GPUs are visible and transformers is using DataParallel for training by default. " + f"This may lead to unnecessary slowdown and unexpected behavior. We strongly recommend setting the CUDA_VISIBLE_DEVICES " + f"environment variable to ensure that only a single GPU is visible.", + category=UserWarning, + stacklevel=3, + ) dataloader_params = { # Disable automatic batching as we handle batching ourselves From d6f8ea43015818a8a88ca4ee8e6fa74e65b37dcf Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Tue, 25 Nov 2025 13:18:43 +0100 Subject: [PATCH 25/60] Fix link in Chronos-Bolt tutorial notebook entry (#396) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cefefb5..52d5e69 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ ## 🚀 News - **20 Oct 2025**: 🚀 [Chronos-2](https://huggingface.co/amazon/chronos-2) released. It offers _zero-shot_ support for univariate, multivariate, and covariate-informed forecasting tasks. Chronos-2 achieves the best performance on fev-bench, GIFT-Eval and Chronos Benchmark II amongst pretrained models. Check out [this notebook](notebooks/chronos-2-quickstart.ipynb) to get started with Chronos-2. -- **14 Feb 2025**: 🚀 Chronos-Bolt is now available on Amazon SageMaker JumpStart! Check out the [tutorial notebook](notebooks/deploy-chronos-bolt-to-amazon-sagemaker.ipynb) to learn how to deploy Chronos endpoints for production use in 3 lines of code. +- **14 Feb 2025**: 🚀 Chronos-Bolt is now available on Amazon SageMaker JumpStart! Check out the [tutorial notebook](notebooks/deploy-chronos-to-amazon-sagemaker.ipynb) to learn how to deploy Chronos endpoints for production use in 3 lines of code. - **12 Dec 2024**: 📊 We released [`fev`](https://github.com/autogluon/fev), a lightweight package for benchmarking time series forecasting models based on the [Hugging Face `datasets`](https://huggingface.co/docs/datasets/en/index) library. - **26 Nov 2024**: ⚡️ Chronos-Bolt models released [on HuggingFace](https://huggingface.co/collections/amazon/chronos-models-65f1791d630a8d57cb718444). Chronos-Bolt models are more accurate (5% lower error), up to 250x faster and 20x more memory efficient than the original Chronos models of the same size! - **13 Mar 2024**: 🚀 Chronos [paper](https://arxiv.org/abs/2403.07815) and inference code released. From bcd563eb664fb5c856611132e804353ac47a1ffb Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Tue, 25 Nov 2025 15:30:32 +0100 Subject: [PATCH 26/60] Optimize `convert_df_input_to_list_of_dicts_input` and `validate_df_inputs` (#395) *Issue #, if available:* Addresses #391 *Description of changes:* - Speed up `convert_df_input_to_list_of_dicts_input` and `validate_df_inputs` via a few tricks: - Replace `df.iloc[start_idx:end_idx][col]` with `df[col].iloc[start_idx:end_idx]` to avoid copying data on each slice - Vectorize computation of future timestamps using numpy - Work with `dict[str, np.ndarray]` instead of `pd.DataFrame` when working with covariates to avoid repeated `.to_numpy()` calls. **Before** ``` Benchmarking 20000 series, 200 steps, 0 covariates... Average runtime: 27.33s Benchmarking 20000 series, 200 steps, 5 covariates... Average runtime: 44.69s ``` **After** ``` Benchmarking 20000 series, 200 steps, 0 covariates... Average runtime: 4.60s Benchmarking 20000 series, 200 steps, 5 covariates... Average runtime: 8.92s ```
    ```python import time import numpy as np import pandas as pd from chronos.df_utils import convert_df_input_to_list_of_dicts_input def benchmark_convert_df_input( num_items: int, num_steps: int, num_covariates: int = 0, num_trials: int = 10, freq: str = "D" ) -> None: """ Benchmark convert_df_input_to_list_of_dicts_input function. Args: num_items: Number of time series num_steps: Number of observations per series num_covariates: Number of covariates to include num_trials: Number of benchmark trials freq: Frequency string for timestamps """ prediction_length = 24 # Generate context DataFrame item_ids = np.repeat(np.arange(num_items), num_steps) timestamps = np.tile(pd.date_range("2020-01-01", periods=num_steps, freq=freq), num_items) df_data = {"item_id": item_ids, "timestamp": timestamps, "target": np.random.randn(num_items * num_steps)} df_data.update({f"cov_{i}": np.random.randn(num_items * num_steps) for i in range(num_covariates)}) df = pd.DataFrame(df_data) # Generate future_df with covariates future_df = None if num_covariates > 0: future_item_ids = np.repeat(np.arange(num_items), prediction_length) offset = pd.tseries.frequencies.to_offset(freq) future_start = pd.Timestamp("2020-01-01") + num_steps * offset future_timestamps = np.tile(pd.date_range(start=future_start, periods=prediction_length, freq=freq), num_items) future_data = {"item_id": future_item_ids, "timestamp": future_timestamps} future_data.update({f"cov_{i}": np.random.randn(num_items * prediction_length) for i in range(num_covariates)}) future_df = pd.DataFrame(future_data) times = [] print(f"Benchmarking {num_items} series, {num_steps} steps, {num_covariates} covariates...") for _ in range(num_trials): start = time.perf_counter() convert_df_input_to_list_of_dicts_input( df=df, future_df=future_df, id_column="item_id", timestamp_column="timestamp", target_columns=["target"], prediction_length=prediction_length, ) end = time.perf_counter() times.append(end - start) print(f"Average runtime: {sum(times) / len(times):.2f}s") if __name__ == "__main__": # Test without covariates benchmark_convert_df_input(20_000, 200, num_covariates=0, num_trials=1) # Test with covariates benchmark_convert_df_input(20_000, 200, num_covariates=5, num_trials=1) ```
    By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/df_utils.py | 90 +++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 44 deletions(-) diff --git a/src/chronos/df_utils.py b/src/chronos/df_utils.py index e17584f..e63ec4f 100644 --- a/src/chronos/df_utils.py +++ b/src/chronos/df_utils.py @@ -4,6 +4,7 @@ # Authors: Abdul Fatir Ansari +import warnings from typing import TYPE_CHECKING import numpy as np @@ -62,7 +63,7 @@ def validate_df_inputs( prediction_length: int, id_column: str = "item_id", timestamp_column: str = "timestamp", -) -> tuple["pd.DataFrame", "pd.DataFrame | None", "pd.Timedelta", list[int], list[int] | None, np.ndarray]: +) -> tuple["pd.DataFrame", "pd.DataFrame | None", str, list[int], np.ndarray]: """ Validates and prepares dataframe inputs @@ -95,7 +96,6 @@ def validate_df_inputs( - Validated and sorted future dataframe (if provided) - Inferred frequency of the time series - List of series lengths from input dataframe - - List of series lengths from future dataframe (if provided) - Original order of time series IDs Raises @@ -147,7 +147,7 @@ def validate_df_inputs( # Get series lengths series_lengths = df[id_column].value_counts(sort=False).to_list() - def validate_freq(timestamps: pd.Series, series_id: str): + def validate_freq(timestamps: pd.DatetimeIndex, series_id: str): freq = pd.infer_freq(timestamps) if not freq: raise ValueError(f"Could not infer frequency for series {series_id}") @@ -156,16 +156,15 @@ def validate_df_inputs( # Validate each series all_freqs = [] start_idx = 0 + timestamp_index = pd.DatetimeIndex(df[timestamp_column]) for length in series_lengths: if length < 3: - series_id = df.iloc[start_idx][id_column] + series_id = df[id_column].iloc[start_idx] raise ValueError( f"Every time series must have at least 3 data points, found {length=} for series {series_id}" ) - - series_data = df.iloc[start_idx : start_idx + length] - timestamps = series_data[timestamp_column] - series_id = series_data.iloc[0][id_column] + timestamps = timestamp_index[start_idx : start_idx + length] + series_id = df[id_column].iloc[start_idx] all_freqs.append(validate_freq(timestamps, series_id)) start_idx += length @@ -190,10 +189,10 @@ def validate_df_inputs( # Validate future series lengths match prediction_length future_start_idx = 0 + future_timestamps_index = pd.DatetimeIndex(future_df[timestamp_column]) for future_length in future_series_lengths: - future_series_data = future_df.iloc[future_start_idx : future_start_idx + future_length] - future_timestamps = future_series_data[timestamp_column] - future_series_id = future_series_data.iloc[0][id_column] + future_timestamps = future_timestamps_index[future_start_idx : future_start_idx + future_length] + future_series_id = future_df[id_column].iloc[future_start_idx] if future_length != prediction_length: raise ValueError( f"Future covariates all time series must have length {prediction_length}, got {future_length} for series {future_series_id}" @@ -206,7 +205,7 @@ def validate_df_inputs( assert len(series_lengths) == len(future_series_lengths) - return df, future_df, inferred_freq, series_lengths, future_series_lengths, original_order + return df, future_df, inferred_freq, series_lengths, original_order def convert_df_input_to_list_of_dicts_input( @@ -252,7 +251,7 @@ def convert_df_input_to_list_of_dicts_input( import pandas as pd - df, future_df, freq, series_lengths, future_series_lengths, original_order = validate_df_inputs( + df, future_df, freq, series_lengths, original_order = validate_df_inputs( df, future_df=future_df, id_column=id_column, @@ -264,50 +263,53 @@ def convert_df_input_to_list_of_dicts_input( # Convert to list of dicts format inputs: list[dict[str, np.ndarray | dict[str, np.ndarray]]] = [] prediction_timestamps: dict[str, pd.DatetimeIndex] = {} - start_idx: int = 0 - future_start_idx: int = 0 - for i, length in enumerate(series_lengths): - series_data = df.iloc[start_idx : start_idx + length] - # Extract target(s) - target_data = series_data[target_columns].to_numpy().T # Shape: (n_targets, history_length) - task: dict[str, np.ndarray | dict[str, np.ndarray]] = {"target": target_data} + indptr = np.concatenate([[0], np.cumsum(series_lengths)]).astype("int64") + target_array = df[target_columns].to_numpy().T # Shape: (n_targets, len(df)) + last_ts = pd.DatetimeIndex(df[timestamp_column].iloc[indptr[1:] - 1]) # Shape: (n_series,) + offset = pd.tseries.frequencies.to_offset(freq) + with warnings.catch_warnings(): + # Silence PerformanceWarning for non-vectorized offsets https://github.com/pandas-dev/pandas/blob/95624ca2e99b0/pandas/core/arrays/datetimes.py#L822 + warnings.simplefilter("ignore", category=pd.errors.PerformanceWarning) + # Generate all prediction timestamps at once by stacking offsets into shape (n_series * prediction_length) + prediction_timestamps_array = pd.DatetimeIndex( + np.dstack([last_ts + step * offset for step in range(1, prediction_length + 1)]).ravel() + ) - # Generate future timestamps - series_id = series_data.iloc[0][id_column] - last_timestamp = series_data[timestamp_column].iloc[-1] - future_ts = pd.date_range(start=last_timestamp, periods=prediction_length + 1, freq=freq)[1:] - prediction_timestamps[series_id] = future_ts + past_covariates_dict = { + col: df[col].to_numpy() for col in df.columns if col not in [id_column, timestamp_column] + target_columns + } + if future_df is not None: + future_covariates_dict = { + col: future_df[col].to_numpy() for col in future_df.columns if col not in [id_column, timestamp_column] + } + + for i in range(len(series_lengths)): + start_idx, end_idx = indptr[i], indptr[i + 1] + future_start_idx, future_end_idx = i * prediction_length, (i + 1) * prediction_length + + series_id = df[id_column].iloc[start_idx] + prediction_timestamps[series_id] = prediction_timestamps_array[future_start_idx:future_end_idx] + task: dict[str, np.ndarray | dict[str, np.ndarray]] = {"target": target_array[:, start_idx:end_idx]} # Handle covariates if present - covariate_cols = [ - col for col in series_data.columns if col not in [id_column, timestamp_column] + target_columns - ] - - if covariate_cols: - past_covariates = {col: series_data[col].to_numpy() for col in covariate_cols} - task["past_covariates"] = past_covariates + if len(past_covariates_dict) > 0: + task["past_covariates"] = {col: values[start_idx:end_idx] for col, values in past_covariates_dict.items()} # Handle future covariates if future_df is not None: - assert future_series_lengths is not None - future_length = future_series_lengths[i] - future_data = future_df.iloc[future_start_idx : future_start_idx + future_length] - assert future_data[timestamp_column].iloc[0] == future_ts[0], ( + first_future_timestamp = future_df[timestamp_column].iloc[future_start_idx] + assert first_future_timestamp == prediction_timestamps[series_id][0], ( f"the first timestamp in future_df must be the first forecast timestamp, found mismatch " - f"({future_data[timestamp_column].iloc[0]} != {future_ts[0]}) in series {series_id}" + f"({first_future_timestamp} != {prediction_timestamps[series_id][0]}) in series {series_id}" ) - if len(future_data) > 0: - future_covariates = { - col: future_data[col].to_numpy() for col in covariate_cols if col in future_data.columns + if len(future_covariates_dict) > 0: + task["future_covariates"] = { + col: values[future_start_idx:future_end_idx] for col, values in future_covariates_dict.items() } - if future_covariates: - task["future_covariates"] = future_covariates - future_start_idx += future_length inputs.append(task) - start_idx += length assert len(inputs) == len(series_lengths) From c5907ef52e51d471d6c5b926c16841d17f425652 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Tue, 25 Nov 2025 16:06:58 +0100 Subject: [PATCH 27/60] Chronos-2: Add LoRA fine-tuning support (#393) *Issue #, if available:* *Description of changes:* Adds support for LoRA fine-tuning. - [x] Move peft/pandas dependency to an extra - [x] Add tests for LoRA - [x] Update notebook with LoRA info - [x] Enable automatic recognition and loading of LoRA adapters By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- notebooks/chronos-2-quickstart.ipynb | 2 +- pyproject.toml | 15 +++- src/chronos/chronos2/pipeline.py | 71 +++++++++++++++++- test/dummy-chronos2-lora/adapter_config.json | 35 +++++++++ .../adapter_model.safetensors | Bin 0 -> 26784 bytes test/test_chronos2.py | 16 +++- 6 files changed, 133 insertions(+), 6 deletions(-) create mode 100644 test/dummy-chronos2-lora/adapter_config.json create mode 100644 test/dummy-chronos2-lora/adapter_model.safetensors diff --git a/notebooks/chronos-2-quickstart.ipynb b/notebooks/chronos-2-quickstart.ipynb index 0f0d853..b74adf6 100644 --- a/notebooks/chronos-2-quickstart.ipynb +++ b/notebooks/chronos-2-quickstart.ipynb @@ -37,7 +37,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install 'chronos-forecasting>=2.0' 'pandas[pyarrow]' 'matplotlib'" + "%pip install 'chronos-forecasting>=2.1' 'pandas[pyarrow]' 'matplotlib'" ] }, { diff --git a/pyproject.toml b/pyproject.toml index 2e97fce..bd8110a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,6 @@ dependencies = [ "numpy>=1.21,<3", "einops>=0.7.0,<1", "scikit-learn>=1.6.0,<2", - "boto3", ] classifiers = [ "Programming Language :: Python :: 3", @@ -40,7 +39,19 @@ packages = ["src/chronos"] path = "src/chronos/__about__.py" [project.optional-dependencies] -test = ["pytest~=8.0", "numpy>=1.21,<3", "fev>=0.6.1", "pandas>=2.0,<2.4"] +extras = [ + "boto3>=1.10,<2", + "peft>=0.13.0,<1", + "fev>=0.6.1", + "pandas[pyarrow]>=2.0,<2.4", +] +test = [ + "pytest~=8.0", + "boto3>=1.10,<2", + "peft>=0.13.0,<1", + "fev>=0.6.1", + "pandas[pyarrow]>=2.0,<2.4", +] typecheck = ["mypy~=1.9"] dev = [ "gluonts[pro]~=0.16", diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index d5fdde4..c2a6cce 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -9,13 +9,15 @@ import time import warnings from copy import deepcopy from pathlib import Path -from typing import TYPE_CHECKING, Any, Mapping, Sequence +from typing import TYPE_CHECKING, Any, Literal, Mapping, Sequence import numpy as np import torch from einops import rearrange, repeat from torch.utils.data import DataLoader from transformers import AutoConfig +from transformers.utils.import_utils import is_peft_available +from transformers.utils.peft_utils import find_adapter_config_file import chronos.chronos2 from chronos.base import BaseChronosPipeline, ForecastType @@ -28,6 +30,7 @@ if TYPE_CHECKING: import datasets import fev import pandas as pd + from peft import LoraConfig logger = logging.getLogger(__name__) @@ -99,6 +102,8 @@ class Chronos2Pipeline(BaseChronosPipeline): | Sequence[TensorOrArray] | Sequence[Mapping[str, TensorOrArray | Mapping[str, TensorOrArray | None]]] | None = None, + finetune_mode: Literal["full", "lora"] = "full", + lora_config: "LoraConfig | dict | None" = None, context_length: int | None = None, learning_rate: float = 1e-6, num_steps: int = 1000, @@ -123,10 +128,16 @@ class Chronos2Pipeline(BaseChronosPipeline): validation_inputs The time series used for validation and model selection. The format of `validation_inputs` is exactly the same as `inputs`, by default None which means that no validation is performed. Note that enabling validation may slow down fine-tuning for large datasets. + finetune_mode + One of "full" (performs full fine-tuning) or "lora" (performs Low Rank Adaptation (LoRA) fine-tuning), by default "full" + lora_config + The configuration to use for LoRA fine-tuning when finetune_mode="lora". Can be a `LoraConfig` object or a dict which is used to initialize `LoraConfig`. + When unspecified and finetune_mode="lora", a default configuration is used context_length The maximum context length used during fine-tuning, by default set to the model's default context length learning_rate The learning rate for the optimizer, by default 1e-6 + When finetune_mode="lora", we recommend using a higher value of the learning rate, such as 1e-5 num_steps The number of steps to fine-tune for, by default 1000 batch_size @@ -151,13 +162,55 @@ class Chronos2Pipeline(BaseChronosPipeline): import torch.cuda from transformers.training_args import TrainingArguments + if finetune_mode == "lora": + if is_peft_available(): + from peft import LoraConfig, get_peft_model + else: + warnings.warn( + "`peft` is required for `finetune_mode='lora'`. Please install it with `pip install peft`. Falling back to `finetune_mode='full'`." + ) + finetune_mode = "full" + from chronos.chronos2.trainer import Chronos2Trainer, EvaluateAndSaveFinalStepCallback + assert finetune_mode in ["full", "lora"], f"finetune_mode must be one of ['full', 'lora'], got {finetune_mode}" + + if finetune_mode == "full" and lora_config is not None: + raise ValueError( + "lora_config should not be specified when `finetune_mode='full'`. To enable LoRA, set `finetune_mode='lora'`." + ) + # Create a copy of the model to avoid modifying the original config = deepcopy(self.model.config) model = Chronos2Model(config).to(self.model.device) # type: ignore model.load_state_dict(self.model.state_dict()) + if finetune_mode == "lora": + if lora_config is None: + lora_config = LoraConfig( + r=8, + lora_alpha=16, + target_modules=[ + "self_attention.q", + "self_attention.v", + "self_attention.k", + "self_attention.o", + "output_patch_embedding.output_layer", + ], + ) + elif isinstance(lora_config, dict): + lora_config = LoraConfig(**lora_config) + else: + assert isinstance(lora_config, LoraConfig), ( + f"lora_config must be an instance of LoraConfig or a dict, got {type(lora_config)}" + ) + + model = get_peft_model(model, lora_config) + n_trainable_params, n_params = model.get_nb_trainable_parameters() + logger.info( + f"Using LoRA. Number of trainable parameters: {n_trainable_params}, total parameters: {n_params}." + ) + if context_length is None: context_length = self.model_context_length @@ -1064,9 +1117,25 @@ class Chronos2Pipeline(BaseChronosPipeline): Supports the same arguments as ``AutoConfig`` and ``AutoModel`` from ``transformers``. """ + # Check if the model is on S3 and cache it locally first + # NOTE: Only base models (not LoRA adapters) are supported via S3 if str(pretrained_model_name_or_path).startswith("s3://"): return BaseChronosPipeline.from_pretrained(pretrained_model_name_or_path, *args, **kwargs) + # Check if the hub model_id or local path is a LoRA adapter + if find_adapter_config_file(pretrained_model_name_or_path) is not None: + if not is_peft_available(): + raise ImportError( + f"The model at {pretrained_model_name_or_path} is a `peft` adaptor, but `peft` is not available. " + f"Please install `peft` with `pip install peft` to use this model. " + ) + from peft import AutoPeftModel + + model = AutoPeftModel.from_pretrained(pretrained_model_name_or_path, *args, **kwargs) + model = model.merge_and_unload() + return cls(model=model) + + # Handle the case for the base model config = AutoConfig.from_pretrained(pretrained_model_name_or_path, *args, **kwargs) assert hasattr(config, "chronos_config"), "Not a Chronos config file" diff --git a/test/dummy-chronos2-lora/adapter_config.json b/test/dummy-chronos2-lora/adapter_config.json new file mode 100644 index 0000000..1e714bb --- /dev/null +++ b/test/dummy-chronos2-lora/adapter_config.json @@ -0,0 +1,35 @@ +{ + "alpha_pattern": {}, + "auto_mapping": { + "base_model_class": "Chronos2Model", + "parent_library": "chronos.chronos2.model" + }, + "base_model_name_or_path": "test/dummy-chronos2-model", + "bias": "none", + "fan_in_fan_out": false, + "inference_mode": true, + "init_lora_weights": true, + "layer_replication": null, + "layers_pattern": null, + "layers_to_transform": null, + "loftq_config": {}, + "lora_alpha": 16, + "lora_dropout": 0.0, + "megatron_config": null, + "megatron_core": "megatron.core", + "modules_to_save": null, + "peft_type": "LORA", + "r": 8, + "rank_pattern": {}, + "revision": null, + "target_modules": [ + "self_attention.q", + "self_attention.k", + "self_attention.o", + "output_patch_embedding.output_layer", + "self_attention.v" + ], + "task_type": null, + "use_dora": false, + "use_rslora": false +} \ No newline at end of file diff --git a/test/dummy-chronos2-lora/adapter_model.safetensors b/test/dummy-chronos2-lora/adapter_model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..384ea1ae4e1dba9b5e965e2128e258cf5f932f65 GIT binary patch literal 26784 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 literal 0 HcmV?d00001 diff --git a/test/test_chronos2.py b/test/test_chronos2.py index a13bd99..793c64c 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -38,6 +38,10 @@ def test_base_chronos2_pipeline_loads_from_hf(): BaseChronosPipeline.from_pretrained("amazon/chronos-2", device_map="cpu") +def test_chronos2_lora_pipeline_loads_from_disk(): + Chronos2Pipeline.from_pretrained(Path(__file__).parent / "dummy-chronos2-lora", device_map="cpu") + + @pytest.mark.parametrize( "inputs, prediction_length, expected_output_shapes", [ @@ -671,12 +675,20 @@ def test_predict_df_with_future_df_with_different_freq_raises_error(pipeline): ), ], ) +@pytest.mark.parametrize("finetune_mode", ["full", "lora"]) def test_when_input_is_valid_then_pipeline_can_be_finetuned( - pipeline, inputs, prediction_length, expected_output_shapes + pipeline, inputs, prediction_length, expected_output_shapes, finetune_mode ): # Get outputs before fine-tuning orig_outputs_before = pipeline.predict(inputs, prediction_length=prediction_length) - ft_pipeline = pipeline.fit(inputs, prediction_length=prediction_length, num_steps=5, min_past=1, batch_size=32) + ft_pipeline = pipeline.fit( + inputs, + prediction_length=prediction_length, + num_steps=5, + min_past=1, + batch_size=32, + finetune_mode=finetune_mode, + ) # Get outputs from fine-tuned pipeline ft_outputs = ft_pipeline.predict(inputs, prediction_length=prediction_length) # Get outputs from original pipeline after fine-tuning From b438bed63fc6ffd2e30d400dc70776404ac434d7 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Thu, 27 Nov 2025 16:52:37 +0100 Subject: [PATCH 28/60] Chronos-2: Add option to skip dataframe validation in `predict_df` (#400) *Issue #, if available:* *Description of changes:* This PR adds a `validate_inputs ` argument to `predict_df` (defaults to `True`), which allows the user to disable dataframe validation when they know that their dataframe is in the right format. This reduces runtime by removing the input validation component, e.g., when calling this method from [AutoGluon](https://github.com/autogluon/autogluon/pull/5427), and also handles series with shorter than 3 timesteps. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 4 ++++ src/chronos/df_utils.py | 39 +++++++++++++++++++++++++------- test/test_chronos2.py | 22 +++++++++++++----- 3 files changed, 51 insertions(+), 14 deletions(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index c2a6cce..30785ef 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -785,6 +785,7 @@ class Chronos2Pipeline(BaseChronosPipeline): prediction_length: int | None = None, quantile_levels: list[float] = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], batch_size: int = 256, + validate_inputs: bool = True, **predict_kwargs, ) -> "pd.DataFrame": """ @@ -814,6 +815,8 @@ class Chronos2Pipeline(BaseChronosPipeline): The batch size used for prediction. Note that the batch size here means the number of time series, including target(s) and covariates, which are input into the model. If your data has multiple target and/or covariates, the effective number of time series tasks in a batch will be lower than this value, by default 256 + validate_inputs + When True, the dataframe(s) will be validated before prediction **predict_kwargs Additional arguments passed to predict_quantiles @@ -844,6 +847,7 @@ class Chronos2Pipeline(BaseChronosPipeline): timestamp_column=timestamp_column, target_columns=target, prediction_length=prediction_length, + validate_inputs=validate_inputs, ) # Generate forecasts diff --git a/src/chronos/df_utils.py b/src/chronos/df_utils.py index e63ec4f..41f68e7 100644 --- a/src/chronos/df_utils.py +++ b/src/chronos/df_utils.py @@ -215,6 +215,7 @@ def convert_df_input_to_list_of_dicts_input( prediction_length: int, id_column: str = "item_id", timestamp_column: str = "timestamp", + validate_inputs: bool = True, ) -> tuple[list[dict[str, np.ndarray | dict[str, np.ndarray]]], np.ndarray, dict[str, "pd.DatetimeIndex"]]: """ Convert from dataframe input format to a list of dictionaries input format. @@ -240,6 +241,8 @@ def convert_df_input_to_list_of_dicts_input( Name of column containing time series identifiers timestamp_column Name of column containing timestamps + validate_inputs + When True, the dataframe(s) will be validated be conversion Returns ------- @@ -251,14 +254,34 @@ def convert_df_input_to_list_of_dicts_input( import pandas as pd - df, future_df, freq, series_lengths, original_order = validate_df_inputs( - df, - future_df=future_df, - id_column=id_column, - timestamp_column=timestamp_column, - target_columns=target_columns, - prediction_length=prediction_length, - ) + if validate_inputs: + df, future_df, freq, series_lengths, original_order = validate_df_inputs( + df, + future_df=future_df, + id_column=id_column, + timestamp_column=timestamp_column, + target_columns=target_columns, + prediction_length=prediction_length, + ) + else: + # Get the original order of time series IDs + original_order = df[id_column].unique() + + # Get series lengths + series_lengths = df[id_column].value_counts(sort=False).to_list() + + # If validation is skipped, the first freq in the dataframe is used + timestamp_index = pd.DatetimeIndex(df[timestamp_column]) + start_idx = 0 + for length in series_lengths: + if length < 3: + start_idx += length + continue + timestamps = timestamp_index[start_idx : start_idx + length] + freq = pd.infer_freq(timestamps) + break + + assert freq is not None, "validate is False, but could not infer frequency from the dataframe" # Convert to list of dicts format inputs: list[dict[str, np.ndarray | dict[str, np.ndarray]]] = [] diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 793c64c..abad44b 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -450,7 +450,10 @@ def test_pipeline_can_evaluate_on_dummy_fev_task(pipeline, task_kwargs): ], ) @pytest.mark.parametrize("freq", ["s", "min", "30min", "h", "D", "W", "ME", "QE", "YE"]) -def test_predict_df_works_for_valid_inputs(pipeline, context_setup, future_setup, expected_rows, freq): +@pytest.mark.parametrize("validate_inputs", [True, False]) +def test_predict_df_works_for_valid_inputs( + pipeline, context_setup, future_setup, expected_rows, freq, validate_inputs +): prediction_length = 3 df = create_df(**context_setup, freq=freq) forecast_start_times = get_forecast_start_times(df, freq) @@ -460,7 +463,13 @@ def test_predict_df_works_for_valid_inputs(pipeline, context_setup, future_setup target_columns = context_setup.get("target_cols", ["target"]) n_series = len(series_ids) n_targets = len(target_columns) - result = pipeline.predict_df(df, future_df=future_df, target=target_columns, prediction_length=prediction_length) + result = pipeline.predict_df( + df, + future_df=future_df, + target=target_columns, + prediction_length=prediction_length, + validate_inputs=validate_inputs, + ) assert len(result) == expected_rows assert "item_id" in result.columns and np.all( @@ -516,9 +525,10 @@ def test_predict_df_future_df_validation_errors(pipeline, future_data, error_mat pipeline.predict_df(df, future_df=future_df) -def test_predict_df_with_non_uniform_timestamps_raises_error(pipeline): +@pytest.mark.parametrize("validate_inputs", [True, False]) +def test_predict_df_with_non_uniform_timestamps_raises_error(pipeline, validate_inputs): df = create_df() - # Make timestamps non-uniform for series A + # Make timestamps non-uniform for series A (first series) df.loc[df["item_id"] == "A", "timestamp"] = [ "2023-01-01", "2023-01-02", @@ -532,8 +542,8 @@ def test_predict_df_with_non_uniform_timestamps_raises_error(pipeline): "2023-01-11", ] - with pytest.raises(ValueError, match="not infer frequency"): - pipeline.predict_df(df) + with pytest.raises((ValueError, AssertionError), match="not infer frequency"): + pipeline.predict_df(df, validate_inputs=validate_inputs) def test_predict_df_with_inconsistent_frequencies_raises_error(pipeline): From 32023ec99f9925ccb2869f9c7aa6205d3f63fb18 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 28 Nov 2025 00:07:25 +0100 Subject: [PATCH 29/60] Bump version to 2.2.0rc1 --- src/chronos/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index 9aa3f90..36934eb 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.1.0" +__version__ = "2.2.0rc1" From a942c0609c887b52e332213d221624956fa4538d Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 28 Nov 2025 00:08:38 +0100 Subject: [PATCH 30/60] Update peft version constraint in pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index bd8110a..d9e7117 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,7 +41,7 @@ path = "src/chronos/__about__.py" [project.optional-dependencies] extras = [ "boto3>=1.10,<2", - "peft>=0.13.0,<1", + "peft>=0.13.0,<0.18", "fev>=0.6.1", "pandas[pyarrow]>=2.0,<2.4", ] From 514019fb1cba28ad037adc9192b5820884b67468 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 28 Nov 2025 13:54:52 +0100 Subject: [PATCH 31/60] Fix potential crash due to unbound local in df_utils (#404) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/df_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/chronos/df_utils.py b/src/chronos/df_utils.py index 41f68e7..598b794 100644 --- a/src/chronos/df_utils.py +++ b/src/chronos/df_utils.py @@ -273,6 +273,7 @@ def convert_df_input_to_list_of_dicts_input( # If validation is skipped, the first freq in the dataframe is used timestamp_index = pd.DatetimeIndex(df[timestamp_column]) start_idx = 0 + freq = None for length in series_lengths: if length < 3: start_idx += length From 5cde42eb1f41d3041750ca70e7f6c3db07998073 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Fri, 28 Nov 2025 16:55:35 +0100 Subject: [PATCH 32/60] Chronos-2: Add option to specify callbacks in `fit` (#405) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 30785ef..125d1d9 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -19,6 +19,7 @@ from transformers import AutoConfig from transformers.utils.import_utils import is_peft_available from transformers.utils.peft_utils import find_adapter_config_file + import chronos.chronos2 from chronos.base import BaseChronosPipeline, ForecastType from chronos.chronos2 import Chronos2Model @@ -31,6 +32,7 @@ if TYPE_CHECKING: import fev import pandas as pd from peft import LoraConfig + from transformers.trainer_callback import TrainerCallback logger = logging.getLogger(__name__) @@ -111,6 +113,7 @@ class Chronos2Pipeline(BaseChronosPipeline): output_dir: Path | str | None = None, min_past: int | None = None, finetuned_ckpt_name: str = "finetuned-ckpt", + callbacks: list["TrainerCallback"] | None = None, **extra_trainer_kwargs, ) -> "Chronos2Pipeline": """ @@ -151,6 +154,8 @@ class Chronos2Pipeline(BaseChronosPipeline): are filtered out, by default set equal to prediction_length finetuned_ckpt_name The name of the directory inside `output_dir` in which the final fine-tuned checkpoint will be saved, by default "finetuned-ckpt" + callbacks + A list of `TrainerCallback`s which will be forwarded to the HuggingFace `Trainer` **extra_trainer_kwargs Extra kwargs are directly forwarded to `TrainingArguments` @@ -276,7 +281,7 @@ class Chronos2Pipeline(BaseChronosPipeline): ) eval_dataset = None - callbacks = [] + callbacks = callbacks or [] if validation_inputs is not None: # construct validation dataset eval_dataset = Chronos2Dataset.convert_inputs( From 8c686cfa712f71b530cc73a11b465b079c5870fc Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Sun, 30 Nov 2025 16:53:59 +0100 Subject: [PATCH 33/60] Bump version from 2.2.0rc1 to 2.2.0rc2 --- src/chronos/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index 36934eb..c03ccb9 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.2.0rc1" +__version__ = "2.2.0rc2" From 4eea8d0122eb3409d50e146399d8f8dc82aca40d Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Mon, 1 Dec 2025 13:10:16 +0100 Subject: [PATCH 34/60] Handle `prediction_length` below 3 (#407) *Issue #, if available:* Fixes #403 *Description of changes:* - Update the `future_df` validation logic to only check that `prediction_length` values are provided for each item. - Update unit tests for DF-based methods in `test_chronos2.py` - Ignore fine-tuned checkpoint folders with `.gitignore` By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- .gitignore | 4 +- src/chronos/df_utils.py | 57 +++++++++----------------- test/test_chronos2.py | 90 +++++++++++++++++++---------------------- 3 files changed, 65 insertions(+), 86 deletions(-) diff --git a/.gitignore b/.gitignore index 8cf79d6..79a1a50 100644 --- a/.gitignore +++ b/.gitignore @@ -160,4 +160,6 @@ cython_debug/ #.idea/ # macOS stuff -.DS_store \ No newline at end of file +.DS_store + +chronos-2-finetuned diff --git a/src/chronos/df_utils.py b/src/chronos/df_utils.py index 598b794..af422ef 100644 --- a/src/chronos/df_utils.py +++ b/src/chronos/df_utils.py @@ -185,25 +185,13 @@ def validate_df_inputs( if context_ids != future_ids: raise ValueError("future_df must contain the same time series IDs as df") - future_series_lengths = future_df[id_column].value_counts(sort=False).to_list() - - # Validate future series lengths match prediction_length - future_start_idx = 0 - future_timestamps_index = pd.DatetimeIndex(future_df[timestamp_column]) - for future_length in future_series_lengths: - future_timestamps = future_timestamps_index[future_start_idx : future_start_idx + future_length] - future_series_id = future_df[id_column].iloc[future_start_idx] - if future_length != prediction_length: - raise ValueError( - f"Future covariates all time series must have length {prediction_length}, got {future_length} for series {future_series_id}" - ) - if future_length < 3 or inferred_freq != validate_freq(future_timestamps, future_series_id): - raise ValueError( - f"Future covariates must have the same frequency as context, found series {future_series_id} with a different frequency" - ) - future_start_idx += future_length - - assert len(series_lengths) == len(future_series_lengths) + future_series_lengths = future_df[id_column].value_counts(sort=False) + if (future_series_lengths != prediction_length).any(): + invalid_series = future_series_lengths[future_series_lengths != prediction_length] + raise ValueError( + f"future_df must contain {prediction_length=} values for each series, " + f"but found series with different lengths: {invalid_series.to_dict()}" + ) return df, future_df, inferred_freq, series_lengths, original_order @@ -303,10 +291,16 @@ def convert_df_input_to_list_of_dicts_input( past_covariates_dict = { col: df[col].to_numpy() for col in df.columns if col not in [id_column, timestamp_column] + target_columns } + future_covariates_dict = {} if future_df is not None: - future_covariates_dict = { - col: future_df[col].to_numpy() for col in future_df.columns if col not in [id_column, timestamp_column] - } + for col in future_df.columns.drop([id_column, timestamp_column]): + future_covariates_dict[col] = future_df[col].to_numpy() + if validate_inputs: + if (pd.DatetimeIndex(future_df[timestamp_column]) != pd.DatetimeIndex(prediction_timestamps_array)).any(): + raise ValueError( + "future_df timestamps do not match the expected prediction timestamps. " + "You can disable this check by setting `validate_inputs=False`" + ) for i in range(len(series_lengths)): start_idx, end_idx = indptr[i], indptr[i + 1] @@ -316,23 +310,12 @@ def convert_df_input_to_list_of_dicts_input( prediction_timestamps[series_id] = prediction_timestamps_array[future_start_idx:future_end_idx] task: dict[str, np.ndarray | dict[str, np.ndarray]] = {"target": target_array[:, start_idx:end_idx]} - # Handle covariates if present if len(past_covariates_dict) > 0: task["past_covariates"] = {col: values[start_idx:end_idx] for col, values in past_covariates_dict.items()} - - # Handle future covariates - if future_df is not None: - first_future_timestamp = future_df[timestamp_column].iloc[future_start_idx] - assert first_future_timestamp == prediction_timestamps[series_id][0], ( - f"the first timestamp in future_df must be the first forecast timestamp, found mismatch " - f"({first_future_timestamp} != {prediction_timestamps[series_id][0]}) in series {series_id}" - ) - - if len(future_covariates_dict) > 0: - task["future_covariates"] = { - col: values[future_start_idx:future_end_idx] for col, values in future_covariates_dict.items() - } - + if len(future_covariates_dict) > 0: + task["future_covariates"] = { + col: values[future_start_idx:future_end_idx] for col, values in future_covariates_dict.items() + } inputs.append(task) assert len(inputs) == len(series_lengths) diff --git a/test/test_chronos2.py b/test/test_chronos2.py index abad44b..18f2e11 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -421,43 +421,39 @@ def test_pipeline_can_evaluate_on_dummy_fev_task(pipeline, task_kwargs): @pytest.mark.parametrize( - "context_setup, future_setup, expected_rows", + "context_setup, future_setup", [ # Targets only - ({}, None, 6), # 2 series * 3 predictions + ({}, None), # Multiple targets with different context lengths - ( - {"target_cols": ["sales", "revenue", "profit"], "n_points": [10, 17]}, - None, - 18, - ), # 2 series * 3 targets * 3 predictions + ({"target_cols": ["sales", "revenue", "profit"], "n_points": [10, 17]}, None), # With past covariates - ({"covariates": ["cov1"]}, None, 6), + ({"covariates": ["cov1"]}, None), # With future covariates - ({"covariates": ["cov1"]}, {"covariates": ["cov1"], "n_points": [3, 3]}, 6), + ({"covariates": ["cov1"]}, {"covariates": ["cov1"]}), # With past-only and future covariates - ({"covariates": ["cov1", "cov2"]}, {"covariates": ["cov1"], "n_points": [3, 3]}, 6), + ({"covariates": ["cov1", "cov2"]}, {"covariates": ["cov1"]}), # With past-only and future covariates and different series order ( {"series_ids": ["B", "C", "A", "Z"], "n_points": [10, 20, 100, 256], "covariates": ["cov1", "cov2"]}, - { - "series_ids": ["B", "C", "A", "Z"], - "covariates": ["cov1"], - "n_points": [3, 3, 3, 3], - }, - 12, + {"series_ids": ["B", "C", "A", "Z"], "covariates": ["cov1"]}, ), ], ) @pytest.mark.parametrize("freq", ["s", "min", "30min", "h", "D", "W", "ME", "QE", "YE"]) +@pytest.mark.parametrize("prediction_length", [1, 4]) @pytest.mark.parametrize("validate_inputs", [True, False]) def test_predict_df_works_for_valid_inputs( - pipeline, context_setup, future_setup, expected_rows, freq, validate_inputs + pipeline, context_setup, future_setup, freq, validate_inputs, prediction_length ): - prediction_length = 3 df = create_df(**context_setup, freq=freq) forecast_start_times = get_forecast_start_times(df, freq) - future_df = create_future_df(forecast_start_times, **future_setup, freq=freq) if future_setup else None + if future_setup: + series_ids = future_setup.get("series_ids", ["A", "B"]) + future_setup_with_n_points = {**future_setup, "n_points": [prediction_length] * len(series_ids)} + future_df = create_future_df(forecast_start_times, **future_setup_with_n_points, freq=freq) + else: + future_df = None series_ids = context_setup.get("series_ids", ["A", "B"]) target_columns = context_setup.get("target_cols", ["target"]) @@ -471,6 +467,7 @@ def test_predict_df_works_for_valid_inputs( validate_inputs=validate_inputs, ) + expected_rows = n_series * n_targets * prediction_length assert len(result) == expected_rows assert "item_id" in result.columns and np.all( result["item_id"].to_numpy() == np.array(series_ids).repeat(n_targets * prediction_length) @@ -580,23 +577,23 @@ def test_predict_df_with_future_df_missing_series_raises_error(pipeline): pipeline.predict_df(df, future_df=future_df) -def test_predict_df_with_future_df_with_different_lengths_raises_error(pipeline): - df = create_df(series_ids=["A", "B"], covariates=["cov1"]) - future_df = create_future_df( - get_forecast_start_times(df), series_ids=["A", "B"], n_points=[3, 7], covariates=["cov1"] - ) - - with pytest.raises(ValueError, match="all time series must have length"): - pipeline.predict_df(df, future_df=future_df, prediction_length=3) - - def test_predict_df_with_future_df_with_different_freq_raises_error(pipeline): df = create_df(series_ids=["A", "B"], covariates=["cov1"], freq="h") future_df = create_future_df( get_forecast_start_times(df), series_ids=["A", "B"], n_points=[3, 3], covariates=["cov1"], freq="D" ) - with pytest.raises(ValueError, match="must have the same frequency as context"): + with pytest.raises(ValueError, match="future_df timestamps do not match"): + pipeline.predict_df(df, future_df=future_df, prediction_length=3) + + +def test_predict_df_with_future_df_with_different_lengths_raises_error(pipeline): + df = create_df(series_ids=["A", "B"], covariates=["cov1"]) + future_df = create_future_df( + get_forecast_start_times(df), series_ids=["A", "B"], n_points=[3, 7], covariates=["cov1"] + ) + + with pytest.raises(ValueError, match="future_df must contain prediction"): pipeline.predict_df(df, future_df=future_df, prediction_length=3) @@ -874,40 +871,36 @@ def test_when_input_time_series_are_too_short_then_finetuning_raises_error(pipel @pytest.mark.parametrize( - "context_setup, future_setup, expected_rows", + "context_setup, future_setup", [ # Targets only - ({}, None, 6), # 2 series * 3 predictions + ({}, None), # Multiple targets with different context lengths - ( - {"target_cols": ["sales", "revenue", "profit"], "n_points": [10, 17]}, - None, - 18, - ), # 2 series * 3 targets * 3 predictions + ({"target_cols": ["sales", "revenue", "profit"], "n_points": [10, 17]}, None), # With past covariates - ({"covariates": ["cov1"]}, None, 6), + ({"covariates": ["cov1"]}, None), # With future covariates - ({"covariates": ["cov1"]}, {"covariates": ["cov1"], "n_points": [3, 3]}, 6), + ({"covariates": ["cov1"]}, {"covariates": ["cov1"]}), # With past-only and future covariates - ({"covariates": ["cov1", "cov2"]}, {"covariates": ["cov1"], "n_points": [3, 3]}, 6), + ({"covariates": ["cov1", "cov2"]}, {"covariates": ["cov1"]}), # With past-only and future covariates and different series order ( {"series_ids": ["B", "C", "A", "Z"], "n_points": [10, 20, 100, 256], "covariates": ["cov1", "cov2"]}, - { - "series_ids": ["B", "C", "A", "Z"], - "covariates": ["cov1"], - "n_points": [3, 3, 3, 3], - }, - 12, + {"series_ids": ["B", "C", "A", "Z"], "covariates": ["cov1"]}, ), ], ) @pytest.mark.parametrize("freq", ["h", "D", "ME"]) -def test_two_step_finetuning_with_df_input_works(pipeline, context_setup, future_setup, expected_rows, freq): +def test_two_step_finetuning_with_df_input_works(pipeline, context_setup, future_setup, freq): prediction_length = 3 df = create_df(**context_setup, freq=freq) forecast_start_times = get_forecast_start_times(df, freq) - future_df = create_future_df(forecast_start_times, **future_setup, freq=freq) if future_setup else None + if future_setup: + series_ids = future_setup.get("series_ids", ["A", "B"]) + future_setup_with_n_points = {**future_setup, "n_points": [prediction_length] * len(series_ids)} + future_df = create_future_df(forecast_start_times, **future_setup_with_n_points, freq=freq) + else: + future_df = None series_ids = context_setup.get("series_ids", ["A", "B"]) target_columns = context_setup.get("target_cols", ["target"]) @@ -940,6 +933,7 @@ def test_two_step_finetuning_with_df_input_works(pipeline, context_setup, future ) # Check predictions from the fine-tuned model are valid + expected_rows = n_series * n_targets * prediction_length assert len(result) == expected_rows assert "item_id" in result.columns and np.all( result["item_id"].to_numpy() == np.array(series_ids).repeat(n_targets * prediction_length) From 1da6965318cec90d008be8344b513949d382ac9c Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 1 Dec 2025 15:13:50 +0100 Subject: [PATCH 35/60] Chronos-2: set default dataloader_num_workers=0 in Trainer (#409) *Issue #, if available:* *Description of changes:* 0 is a better default than 1. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 125d1d9..94b2b3e 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -265,7 +265,7 @@ class Chronos2Pipeline(BaseChronosPipeline): report_to="none", max_steps=num_steps, gradient_accumulation_steps=1, - dataloader_num_workers=1, + dataloader_num_workers=0, tf32=has_sm80 and not use_cpu, bf16=has_sm80 and not use_cpu, save_only_model=True, From c1237a52593550c1d580d9105187997af449df79 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 1 Dec 2025 17:56:37 +0100 Subject: [PATCH 36/60] Chronos-2: Add option to remove PrinterCallback (#410) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 94b2b3e..9f8a0dc 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -19,7 +19,6 @@ from transformers import AutoConfig from transformers.utils.import_utils import is_peft_available from transformers.utils.peft_utils import find_adapter_config_file - import chronos.chronos2 from chronos.base import BaseChronosPipeline, ForecastType from chronos.chronos2 import Chronos2Model @@ -114,6 +113,7 @@ class Chronos2Pipeline(BaseChronosPipeline): min_past: int | None = None, finetuned_ckpt_name: str = "finetuned-ckpt", callbacks: list["TrainerCallback"] | None = None, + remove_printer_callback: bool = False, **extra_trainer_kwargs, ) -> "Chronos2Pipeline": """ @@ -156,6 +156,8 @@ class Chronos2Pipeline(BaseChronosPipeline): The name of the directory inside `output_dir` in which the final fine-tuned checkpoint will be saved, by default "finetuned-ckpt" callbacks A list of `TrainerCallback`s which will be forwarded to the HuggingFace `Trainer` + remove_printer_callback + If True, all instances of `PrinterCallback` are removed from callbacks **extra_trainer_kwargs Extra kwargs are directly forwarded to `TrainingArguments` @@ -165,6 +167,7 @@ class Chronos2Pipeline(BaseChronosPipeline): """ import torch.cuda + from transformers.trainer_callback import PrinterCallback from transformers.training_args import TrainingArguments if finetune_mode == "lora": @@ -322,6 +325,10 @@ class Chronos2Pipeline(BaseChronosPipeline): eval_dataset=eval_dataset, callbacks=callbacks, ) + + if remove_printer_callback: + trainer.pop_callback(PrinterCallback) + trainer.train() # update max_output_patches, if the model was fine-tuned with longer prediction_length From 9afe64332f2456188da9375daa57e87eff7512ca Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 1 Dec 2025 19:21:44 +0100 Subject: [PATCH 37/60] Bump version to 2.2.0rc3 (#411) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index c03ccb9..9724440 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.2.0rc2" +__version__ = "2.2.0rc3" From 7513dee92de065103a81efe2565d02aafa437f7e Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 3 Dec 2025 15:33:08 +0100 Subject: [PATCH 38/60] Chronos-2: Do not catch exceptions in predict_fev when fine-tuning (#417) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 9f8a0dc..37bb3c5 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -1030,11 +1030,7 @@ class Chronos2Pipeline(BaseChronosPipeline): finetune_kwargs["prediction_length"] = first_window.horizon finetune_kwargs["batch_size"] = finetune_kwargs.get("batch_size", batch_size) - try: - pipeline = self.fit(inputs=inputs, **finetune_kwargs) - except Exception as e: - msg = f"Finetuning failed with error: {e}. Continuing with the pretrained model." - warnings.warn(msg, category=UserWarning, stacklevel=2) + pipeline = self.fit(inputs=inputs, **finetune_kwargs) predictions_per_window = [] inference_time_s = 0.0 From 3cb8f8831a8662cd3315e23479d35641c6b64b08 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 3 Dec 2025 16:15:37 +0100 Subject: [PATCH 39/60] Chronos-2: Rename predict_batches_jointly to cross_learning (#418) *Issue #, if available:* *Description of changes:* - Rename `predict_batches_jointly` to `cross_learning` - Add deprecation warning - Add cross_learning to predict_df docstring By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 27 ++++++++++++++-- test/test_chronos2.py | 54 ++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 3 deletions(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 37bb3c5..74b4771 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -443,7 +443,7 @@ class Chronos2Pipeline(BaseChronosPipeline): prediction_length: int | None = None, batch_size: int = 256, context_length: int | None = None, - predict_batches_jointly: bool = False, + cross_learning: bool = False, limit_prediction_length: bool = False, **kwargs, ) -> list[torch.Tensor]: @@ -529,7 +529,7 @@ class Chronos2Pipeline(BaseChronosPipeline): will be lower than this value, by default 256 context_length The maximum context length used during for inference, by default set to the model's default context length - predict_batches_jointly + cross_learning If True, cross-learning is enabled, i.e., all the tasks in `inputs` will be predicted jointly and the model will share information across all inputs, by default False The following must be noted when using cross-learning: - Cross-learning doesn't always improve forecast accuracy and must be tested for individual use cases. @@ -549,6 +549,14 @@ class Chronos2Pipeline(BaseChronosPipeline): if prediction_length is None: prediction_length = model_prediction_length + if kwargs.get("predict_batches_jointly") is not None: + warnings.warn( + "The `predict_batches_jointly` argument is deprecated and will be removed in a future version. " + "Please use `cross_learning=True` to enable the cross-learning mode.", + category=FutureWarning, + stacklevel=2, + ) + cross_learning = kwargs.pop("predict_batches_jointly") # The maximum number of output patches to generate in a single forward pass before the long-horizon heuristic kicks in. Note: A value larger # than the model's default max_output_patches may lead to degradation in forecast accuracy, defaults to a model-specific value max_output_patches = kwargs.pop("max_output_patches", self.max_output_patches) @@ -606,7 +614,7 @@ class Chronos2Pipeline(BaseChronosPipeline): batch_future_covariates = batch["future_covariates"] batch_target_idx_ranges = batch["target_idx_ranges"] - if predict_batches_jointly: + if cross_learning: batch_group_ids = torch.zeros_like(batch_group_ids) batch_prediction = self._predict_batch( @@ -797,6 +805,8 @@ class Chronos2Pipeline(BaseChronosPipeline): prediction_length: int | None = None, quantile_levels: list[float] = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], batch_size: int = 256, + context_length: int | None = None, + cross_learning: bool = False, validate_inputs: bool = True, **predict_kwargs, ) -> "pd.DataFrame": @@ -827,6 +837,15 @@ class Chronos2Pipeline(BaseChronosPipeline): The batch size used for prediction. Note that the batch size here means the number of time series, including target(s) and covariates, which are input into the model. If your data has multiple target and/or covariates, the effective number of time series tasks in a batch will be lower than this value, by default 256 + context_length + The maximum context length used during for inference, by default set to the model's default context length + cross_learning + If True, cross-learning is enabled, i.e., all the tasks in `inputs` will be predicted jointly and the model will share information across all inputs, by default False + The following must be noted when using cross-learning: + - Cross-learning doesn't always improve forecast accuracy and must be tested for individual use cases. + - Results become dependent on batch size. Very large batch sizes may not provide benefits as they deviate from the maximum group size used during pretraining. + For optimal results, consider using a batch size around 100 (as used in the Chronos-2 technical report). + - Cross-learning is most helpful when individual time series have limited historical context, as the model can leverage patterns from related series in the batch. validate_inputs When True, the dataframe(s) will be validated before prediction **predict_kwargs @@ -869,6 +888,8 @@ class Chronos2Pipeline(BaseChronosPipeline): quantile_levels=quantile_levels, limit_prediction_length=False, batch_size=batch_size, + context_length=context_length, + cross_learning=cross_learning, **predict_kwargs, ) # since predict_df tasks are homogenous by input design, we can safely stack the list of tensors into a single tensor diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 18f2e11..3fac726 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -597,6 +597,60 @@ def test_predict_df_with_future_df_with_different_lengths_raises_error(pipeline) pipeline.predict_df(df, future_df=future_df, prediction_length=3) +@pytest.mark.parametrize( + "context_setup, future_setup", + [ + # Targets only + ({}, None), + # Multiple targets with different context lengths + ({"target_cols": ["sales", "revenue", "profit"], "n_points": [10, 17]}, None), + # With past covariates + ({"covariates": ["cov1"]}, None), + # With future covariates + ({"covariates": ["cov1"]}, {"covariates": ["cov1"]}), + # With past-only and future covariates + ({"covariates": ["cov1", "cov2"]}, {"covariates": ["cov1"]}), + # With past-only and future covariates and different series order + ( + {"series_ids": ["B", "C", "A", "Z"], "n_points": [10, 20, 100, 256], "covariates": ["cov1", "cov2"]}, + {"series_ids": ["B", "C", "A", "Z"], "covariates": ["cov1"]}, + ), + ], +) +@pytest.mark.parametrize("prediction_length", [1, 4]) +def test_predict_df_outputs_different_results_with_cross_learning_enabled( + pipeline, context_setup, future_setup, prediction_length +): + freq = "h" + df = create_df(**context_setup, freq=freq) + forecast_start_times = get_forecast_start_times(df, freq) + if future_setup: + series_ids = future_setup.get("series_ids", ["A", "B"]) + future_setup_with_n_points = {**future_setup, "n_points": [prediction_length] * len(series_ids)} + future_df = create_future_df(forecast_start_times, **future_setup_with_n_points, freq=freq) + else: + future_df = None + + series_ids = context_setup.get("series_ids", ["A", "B"]) + target_columns = context_setup.get("target_cols", ["target"]) + result_with_cross_learning = pipeline.predict_df( + df, + future_df=future_df, + target=target_columns, + prediction_length=prediction_length, + cross_learning=True, + ) + result_without_cross_learning = pipeline.predict_df( + df, + future_df=future_df, + target=target_columns, + prediction_length=prediction_length, + cross_learning=False, + ) + + assert not np.array_equal(result_with_cross_learning["predictions"], result_without_cross_learning["predictions"]) + + @pytest.mark.parametrize( "inputs, prediction_length, expected_output_shapes", [ From f0e1ef5b8f3b01052bb2ef95eed6fb9615726cbc Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 3 Dec 2025 17:05:02 +0100 Subject: [PATCH 40/60] Chronos-2: Update context_length if fine-tuned with longer than default (#419) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 74b4771..8c10e16 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -331,7 +331,8 @@ class Chronos2Pipeline(BaseChronosPipeline): trainer.train() - # update max_output_patches, if the model was fine-tuned with longer prediction_length + # update context_length and max_output_patches, if the model was fine-tuned with larger values + model.chronos_config.context_length = max(model.chronos_config.context_length, context_length) model.chronos_config.max_output_patches = max( model.chronos_config.max_output_patches, math.ceil(prediction_length / self.model_output_patch_size) ) From 564218776afa53d637a4f979090916c3c4e4a54c Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 3 Dec 2025 17:32:14 +0100 Subject: [PATCH 41/60] Chronos-2: Ensure updated chronos_config is saved after fine-tuning (#420) *Issue #, if available:* *Description of changes:* Previously, only the returned pipeline had correct configuration but it was not being saved to disk. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 8c10e16..7641e92 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -336,6 +336,8 @@ class Chronos2Pipeline(BaseChronosPipeline): model.chronos_config.max_output_patches = max( model.chronos_config.max_output_patches, math.ceil(prediction_length / self.model_output_patch_size) ) + # update chronos_config in model's config, so it is saved correctly + model.config.chronos_config = model.chronos_config.__dict__ # Create a new pipeline with the fine-tuned model finetuned_pipeline = Chronos2Pipeline(model=model) From 89031842fa482901954e6abb2bde0e8722e8bd95 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Thu, 4 Dec 2025 10:43:56 +0100 Subject: [PATCH 42/60] Chronos-2: Handle missing 'peft' and lora_config specified (#421) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 7641e92..93e7d3b 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -178,6 +178,7 @@ class Chronos2Pipeline(BaseChronosPipeline): "`peft` is required for `finetune_mode='lora'`. Please install it with `pip install peft`. Falling back to `finetune_mode='full'`." ) finetune_mode = "full" + lora_config = None from chronos.chronos2.trainer import Chronos2Trainer, EvaluateAndSaveFinalStepCallback From 5f5da1ac89aa32a1e9f3156ea7589116907869da Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Thu, 4 Dec 2025 13:24:48 +0100 Subject: [PATCH 43/60] Bump version from 2.2.0rc3 to 2.2.0rc4 (#422) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index 9724440..f622982 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.2.0rc3" +__version__ = "2.2.0rc4" From fdda16fc023369282e3cdff469f9d63e3bb19999 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 8 Dec 2025 13:49:34 +0100 Subject: [PATCH 44/60] Bump version from 2.2.0rc4 to 2.2.0 (#426) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- scripts/evaluation/evaluate.py | 6 +++--- src/chronos/__about__.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/evaluation/evaluate.py b/scripts/evaluation/evaluate.py index 1ea9fca..594f0c2 100644 --- a/scripts/evaluation/evaluate.py +++ b/scripts/evaluation/evaluate.py @@ -295,7 +295,7 @@ def chronos_2( device: str = "cuda", torch_dtype: str = "float32", batch_size: int = 32, - predict_batches_jointly: bool = False, + cross_learning: bool = False, ): """Evaluate Chronos-2 models. @@ -316,7 +316,7 @@ def chronos_2( batch_size : int, optional, default = 32 Batch size for inference. For Chronos-Bolt models, significantly larger batch sizes can be used - predict_batches_jointly: bool, optional, default = False + cross_learning: bool, optional, default = False If True, cross-learning is enables and model makes joint predictions for all items in the batch """ @@ -335,7 +335,7 @@ def chronos_2( metrics_path=metrics_path, model_id=model_id, batch_size=batch_size, - predict_batches_jointly=predict_batches_jointly, + cross_learning=cross_learning, ) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index f622982..8a124bf 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.2.0rc4" +__version__ = "2.2.0" From c74311fbeb886a4c25ac7a7c421bf3b3b0e0b94f Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 8 Dec 2025 15:11:47 +0100 Subject: [PATCH 45/60] Add validate_inputs to predict_df in BaseChronosPipeline (#427) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/chronos/base.py b/src/chronos/base.py index 8f452b1..2f077e5 100644 --- a/src/chronos/base.py +++ b/src/chronos/base.py @@ -141,6 +141,7 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): target: str = "target", prediction_length: int | None = None, quantile_levels: list[float] = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], + validate_inputs: bool = True, **predict_kwargs, ) -> "pd.DataFrame": """ @@ -162,6 +163,8 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): Number of steps to predict for each time series quantile_levels Quantile levels to compute + validate_inputs + When True, the dataframe(s) will be validated before prediction **predict_kwargs Additional arguments passed to predict_quantiles @@ -196,6 +199,7 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): timestamp_column=timestamp_column, target_columns=[target], prediction_length=prediction_length, + validate_inputs=validate_inputs, ) # NOTE: any covariates, if present, are ignored here From 75a2dfe228e39d55283f477c01399b9e53d89661 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 8 Dec 2025 14:12:26 +0000 Subject: [PATCH 46/60] Update docstring --- src/chronos/base.py | 3 ++- src/chronos/chronos2/pipeline.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/chronos/base.py b/src/chronos/base.py index 2f077e5..11fcd5c 100644 --- a/src/chronos/base.py +++ b/src/chronos/base.py @@ -164,7 +164,8 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): quantile_levels Quantile levels to compute validate_inputs - When True, the dataframe(s) will be validated before prediction + When True, the dataframe(s) will be validated before prediction, ensuring that timestamps have a + regular frequency, and item IDs match between past and future data. Setting to False disables these checks. **predict_kwargs Additional arguments passed to predict_quantiles diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 93e7d3b..3d22a8e 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -851,7 +851,8 @@ class Chronos2Pipeline(BaseChronosPipeline): For optimal results, consider using a batch size around 100 (as used in the Chronos-2 technical report). - Cross-learning is most helpful when individual time series have limited historical context, as the model can leverage patterns from related series in the batch. validate_inputs - When True, the dataframe(s) will be validated before prediction + When True, the dataframe(s) will be validated before prediction, ensuring that timestamps have a + regular frequency, and item IDs match between past and future data. Setting to False disables these checks. **predict_kwargs Additional arguments passed to predict_quantiles From d608e0dd68e206c24d662b9809cd50d9e8fa16b7 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 8 Dec 2025 15:52:25 +0100 Subject: [PATCH 47/60] Chronos-2: Update quick start notebook with LoRA example (#415) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- notebooks/chronos-2-quickstart.ipynb | 227 +++++++++++++++++++++++---- 1 file changed, 196 insertions(+), 31 deletions(-) diff --git a/notebooks/chronos-2-quickstart.ipynb b/notebooks/chronos-2-quickstart.ipynb index b74adf6..d2489c1 100644 --- a/notebooks/chronos-2-quickstart.ipynb +++ b/notebooks/chronos-2-quickstart.ipynb @@ -37,7 +37,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install 'chronos-forecasting>=2.1' 'pandas[pyarrow]' 'matplotlib'" + "%pip install 'chronos-forecasting>=2.2[extras]' 'matplotlib'" ] }, { @@ -58,7 +58,7 @@ "from chronos import BaseChronosPipeline, Chronos2Pipeline\n", "\n", "# Load the Chronos-2 pipeline\n", - "# GPU recommended for faster inference, but CPU is also supported\n", + "# GPU recommended for faster inference, but CPU is also supported using device_map=\"cpu\"\n", "pipeline: Chronos2Pipeline = BaseChronosPipeline.from_pretrained(\"amazon/chronos-2\", device_map=\"cuda\")" ] }, @@ -511,12 +511,14 @@ "energy_context_df = pd.read_parquet(\n", " \"https://autogluon.s3.amazonaws.com/datasets/timeseries/electricity_price/train.parquet\"\n", ")\n", + "energy_context_df[timestamp_column] = pd.to_datetime(energy_context_df[timestamp_column])\n", "display(energy_context_df.head())\n", "\n", "# Load future values of covariates\n", "energy_test_df = pd.read_parquet(\n", " \"https://autogluon.s3.amazonaws.com/datasets/timeseries/electricity_price/test.parquet\"\n", ")\n", + "energy_test_df[timestamp_column] = pd.to_datetime(energy_test_df[timestamp_column])\n", "energy_future_df = energy_test_df.drop(columns=target)\n", "display(energy_future_df.head())" ] @@ -1005,10 +1007,12 @@ "\n", "# Load historical sales and past values of covariates\n", "sales_context_df = pd.read_parquet(\"https://autogluon.s3.amazonaws.com/datasets/timeseries/retail_sales/train.parquet\")\n", + "sales_context_df[timestamp_column] = pd.to_datetime(sales_context_df[timestamp_column])\n", "display(sales_context_df.head())\n", "\n", "# Load future values of covariates\n", "sales_test_df = pd.read_parquet(\"https://autogluon.s3.amazonaws.com/datasets/timeseries/retail_sales/test.parquet\")\n", + "sales_test_df[timestamp_column] = pd.to_datetime(sales_test_df[timestamp_column])\n", "sales_future_df = sales_test_df.drop(columns=target)\n", "display(sales_future_df.head())" ] @@ -1221,7 +1225,7 @@ "source": [ "## Cross-Learning with Joint Prediction\n", "\n", - "Chronos-2 supports **cross-learning** through the `predict_batches_jointly=True` parameter, which enables the model to share information across all time series in a batch during prediction. This can be particularly beneficial when forecasting multiple related time series with short historical context." + "Chronos-2 supports **cross-learning** through the `cross_learning=True` parameter, which enables the model to share information across all time series in a batch during prediction. This can be particularly beneficial when forecasting multiple related time series with short historical context." ] }, { @@ -1237,7 +1241,7 @@ " context_df,\n", " prediction_length=24,\n", " quantile_levels=[0.1, 0.5, 0.9],\n", - " predict_batches_jointly=True, # Enable cross-learning\n", + " cross_learning=True, # Enable cross-learning\n", " batch_size=100,\n", ")" ] @@ -1247,9 +1251,11 @@ "id": "b427ca20", "metadata": {}, "source": [ + "
    \n", + "\n", "### Important Considerations for Cross-Learning\n", "\n", - "When using `predict_batches_jointly=True`, keep these caveats in mind:\n", + "When using `cross_learning=True`, keep these caveats in mind:\n", "\n", "- **Task-dependent results**: Cross-learning may not always improve forecasts and could worsen performance for some tasks. Evaluate this feature for your specific use case.\n", "\n", @@ -1257,7 +1263,9 @@ "\n", "- **Input homogeneity**: This feature works best with homogeneous inputs (e.g., multiple univariate time series of the same type). Mixing different task types may lead to unexpected behavior.\n", "\n", - "- **Short context benefit**: Cross-learning is most helpful when individual time series have limited historical context, as the model can leverage patterns from related series in the batch." + "- **Short context benefit**: Cross-learning is most helpful when individual time series have limited historical context, as the model can leverage patterns from related series in the batch.\n", + "\n", + "
    " ] }, { @@ -1403,7 +1411,13 @@ "source": [ "## Fine-Tuning\n", "\n", - "Chronos-2 supports fine-tuning on your own data." + "Chronos-2 supports fine-tuning on your own data. You may either fine-tune all weights of the model (_full fine-tuning_) or a [low rank adapter (LoRA)](https://huggingface.co/docs/peft/en/package_reference/lora), which significantly reduces the number of trainable parameters.\n", + "\n", + "
    \n", + "\n", + "**Note:** Fine-tuning functionality is intended for advanced users. The default fine-tuning hyperparameters may not always improve accuracy for your specific use case. We recommend experimenting with different hyperparameters. In case of limited data (too few and/or too short series), fine-tuning may not improve over zero-shot (and may even worsen accuracy sometimes).\n", + "\n", + "
    " ] }, { @@ -1415,13 +1429,17 @@ "\n", "The `fit` method accepts:\n", "- `inputs`: Time series for fine-tuning (same format as predict_quantiles)\n", + "- `finetune_mode`: `\"full\"` or `\"lora\"`\n", + "- `lora_config`: The [`LoraConfig`](https://huggingface.co/docs/peft/en/package_reference/lora#peft.LoraConfig), in case `finetune_mode=\"lora\"`\n", "- `prediction_length`: Forecast horizon for fine-tuning\n", "- `validation_inputs`: Optional validation data (same format as inputs)\n", - "- `learning_rate`: Optimizer learning rate (default: 1e-5)\n", + "- `learning_rate`: Optimizer learning rate (default: 1e-6, we recommend a higher learning rate such as 1e-5 for LoRA)\n", "- `num_steps`: Number of training steps (default: 1000)\n", "- `batch_size`: Batch size for training (default: 256)\n", "\n", - "Returns a new pipeline with the fine-tuned model." + "Returns a new pipeline with the fine-tuned model.\n", + "\n", + "Please read the docstring for details about specific arguments." ] }, { @@ -1465,8 +1483,8 @@ "\n", "
    \n", " \n", - " \n", - " [50/50 00:03, Epoch 1/9223372036854775807]\n", + " \n", + " [1000/1000 01:13, Epoch 1/9223372036854775807]\n", "
    \n", " \n", " \n", @@ -1477,24 +1495,44 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
    100.6951001000.645200
    200.7180002000.531200
    300.7345003000.506000
    400.6408004000.463900
    500.6674005000.458000
    6000.523900
    7000.460600
    8000.431000
    9000.443300
    10000.501900

    " @@ -1508,14 +1546,14 @@ } ], "source": [ - "# Fine-tune the model\n", + "# Fine-tune the model by default full fine-tuning will be performed\n", "finetuned_pipeline = pipeline.fit(\n", " inputs=train_inputs,\n", " prediction_length=13,\n", - " num_steps=50, # few fine-tuning steps for a quick demo\n", + " num_steps=1000, \n", " learning_rate=1e-5,\n", " batch_size=32,\n", - " logging_steps=10,\n", + " logging_steps=100,\n", ")" ] }, @@ -1527,7 +1565,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+sAAAFMCAYAAACzhi02AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXd8FFX3/z+zm2TTEwIJSSAkdAgtdCMiSDEKoiiKBWkKKIII+IgPPxGwgY1m5REFFPWLHQtIlaIUQTBIF0JCAiSEUFI2yba5vz9m7+zsZstskk0CnPfrlVd2Z6fcnZ25c88953yOwBhjIAiCIAiCIAiCIAiizqCp7QYQBEEQBEEQBEEQBGEPGesEQRAEQRAEQRAEUccgY50gCIIgCIIgCIIg6hhkrBMEQRAEQRAEQRBEHYOMdYIgCIIgCIIgCIKoY5CxThAEQRAEQRAEQRB1DDLWCYIgCIIgCIIgCKKOQcY6QRAEQRAEQRAEQdQxyFgnCIIgCIIgCIIgiDoGGesEQRBErdK3b1/07du3Ro9pNpsxY8YMJCQkQKPRYOjQoTV6/GuBffv24eabb0ZISAgEQUB6enptN8kjb775Jtq0aQNRFOVlJSUlGDduHGJjYyEIAqZOnYqsrCwIgoCVK1fWXmOvEbZt2wZBELBt2zZ52UMPPYThw4fXXqMIgiBuEMhYJwiCILzi0KFDuP/++5GYmIjAwEA0atQIAwcOxLvvvlvbTVPN8uXL8dZbb+H+++/Hp59+imnTptV2k3zK+fPnMXfuXNUGt8lkwgMPPIDLly9j0aJFWLVqFRITE33axtdeew133303GjZsCEEQMHfuXK+2LyoqwhtvvIHnn38eGo1teDNv3jysXLkSEydOxKpVqzBy5Mhqbrn3zJs3D2vWrKntZlSa559/Ht999x0OHjxY200hCIK4rvGr7QYQBEEQ1w67du3CbbfdhiZNmmD8+PGIjY1FTk4O9uzZgyVLluDpp5+u7Saq4rfffkOjRo2waNGi2m5KjXD+/Hm89NJLSEpKQkpKisf1MzIycObMGSxbtgzjxo3zfQMBzJo1C7GxsejcuTM2bNjg9fbLly+H2WzGww8/bLf8t99+w0033YQ5c+bIyxhjKCsrg7+/f5XbXRnmzZuH+++//5qN6OjcuTO6deuGBQsW4LPPPqvt5hAEQVy3kLFOEARBqOa1115DREQE9u3bh8jISLvP8vPza6dRlSA/P79C+6uCKIowGo0IDAystn3WJvy3rM5zpNfrERIS4vLzzMxMJCUloaCgANHR0V7vf8WKFbj77rsr/Ab5+flITk62WyYIwnXzW9UWw4cPx5w5c/DBBx8gNDS0tptDEARxXUJh8ARBEIRqMjIy0K5dO6dGXExMjN37FStWoF+/foiJiYFOp0NycjI+/PBDVccxGAyYM2cOWrRoAZ1Oh4SEBMyYMQMGg8FuvU2bNuGWW25BZGQkQkND0bp1a/y///f/XO6X5ypv3boVR44cgSAIdvm4er0ezz77LBISEqDT6dC6dWu8/fbbYIzZ7UcQBEyePBlffPEF2rVrB51Oh/Xr1wMAzp07h8ceewwNGzaETqdDu3btsHz58gptKS8vx9y5c9GqVSsEBgYiLi4O9913HzIyMuR13n77bdx8882oX78+goKC0LVrV3z77bcV9uXuPGzbtg3du3cHAIwdO1b+zq7ytceMGYM+ffoAAB544AEIgmCnKfDbb7+hd+/eCAkJQWRkJO655x4cO3bMbh9z586FIAg4evQoHnnkEdSrVw+33HKLy98FAJKSktx+7o7MzEz8888/GDBggLyM51pnZmZi7dq18vfOyspymrM+ZswYhIaG4ty5cxg6dChCQ0MRHR2N//znP7BYLHbHE0URixcvRrt27RAYGIiGDRviiSeewJUrVzy2VRAE6PV6fPrpp3KbxowZI7fB2Xng59NxP5MnT8aaNWvQvn17+Vrj16EStdfk2bNnMXToUISEhCAmJgbTpk2rcM9xBg4cCL1ej02bNnn8zgRBEETlIM86QRAEoZrExETs3r0bhw8fRvv27d2u++GHH6Jdu3a4++674efnh59//hlPPfUURFHEpEmTXG4niiLuvvtu/PHHH5gwYQLatm2LQ4cOYdGiRfj333/lXN8jR47grrvuQseOHfHyyy9Dp9Ph1KlT2Llzp8t9R0dHY9WqVXjttddQUlKC+fPnAwDatm0LxhjuvvtubN26FY8//jhSUlKwYcMGPPfcczh37lyFkPnffvsNX3/9NSZPnowGDRogKSkJFy5cwE033SQbUtHR0fj111/x+OOPo6ioCFOnTgUAWCwW3HXXXdiyZQseeughPPPMMyguLsamTZtw+PBhNG/eHACwZMkS3H333RgxYgSMRiNW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dZ62b9+OHj16QKfTIS4uDv/9739hNtsSfD39doDksf74449x7733Ijg4GC1btsRPP/1kt826devQqlUrBAUF4bbbbrM7B85wdU3wsPWPP/4YTZs2RWBgoKp2utofZ9WqVUhKSkJERAQeeughFBcX230+ZMgQrF692m2biboD96zHBkkDPlKDJwiCqNsoc9a5Z51y1gmi9iGBOZWUm0tx56e1U8P919EXEOQf4nG9JUuWoHnz5vjoo4+wb98+aLVaVfvft28fYmJisGLFCtxxxx2qt+N8+umnmDhxInbu3AkAuHr1Kvr164dx48Zh0aJFKCsrw/PPP4/hw4fjt99+c7qP2NhYbN++HWfOnEFiYqLTdYqLizF69Gi8++67YIxhwYIFGDRoEE6ePImwsLAK65tMJqSlpSE1NRW///47/Pz88Oqrr+KOO+7AP//8A41Gg6FDh2L8+PH4v//7PxiNRuzduxeC4LpMyR9//IGRI0faLXvjjTfwxRdfYMWKFWjbti2WLFmCNWvW4LbbbnN7ns6dO4dBgwZhzJgx+Oyzz3D8+HGMHz8egYGBdsa4Gl566SW8+eabeOutt/Duu+9ixIgROHPmDKKiopCTk4P77rsPkyZNwoQJE/DXX3/h2Wefdbs/d9fEqVOn8N133+H777+vlmssIyMDa9aswS+//IIrV65g+PDheP311+0manr06IHXXnsNBoMBOp3Oq3ND1DwlsmddA0AkRWGCIIg6TqGBG+tAqDVn3bGyB0EQNQ8Z69cRERERCAsLg1arRWxsrOrtoqOjAQCRkZFebcdp2bIl3nzzTfn9q6++is6dO2PevHnysuXLlyMhIQH//vsvWrVqVWEfc+bMwX333YekpCS0atUKqampGDRoEO6//35oNFIASL9+/ey2+eijjxAZGYnt27fjrrvuqrDPr776CqIo4uOPP5YN8BUrViAyMhLbtm1Dt27dUFhYiLvuugvNmzcHALRt29bl97x69SoKCwsRHx9vt/zdd9/FzJkzce+99wIA3nvvPaxbt87jeXrhhReQkJCA9957D4IgoE2bNjh//jyef/55zJ49W/7eahgzZgwefvhhAMC8efPwzjvvYO/evbjjjjvw4Ycfonnz5rJIW+vWrXHo0CG88cYbLvfn7powGo347LPP5HXU4G5/oihi5cqV8oTLyJEjsWXLFjtjPT4+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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+sAAAFMCAYAAACzhi02AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXd4FFX3x7+zm+ymJwQSkkBI6B1CJyKCFIMgiqJYeGlSFEEEXsWXnwhYUVTKqyiKCor6ghULKE2KUgTB0EEICaGFEEgv2+b+/pi9syVbZpNsNibn8zx5ksxOuTM7c+eee875HoExxkAQBEEQBEEQBEEQRI1B5esGEARBEARBEARBEARhCxnrBEEQBEEQBEEQBFHDIGOdIAiCIAiCIAiCIGoYZKwTBEEQBEEQBEEQRA2DjHWCIAiCIAiCIAiCqGGQsU4QBEEQBEEQBEEQNQwy1gmCIAiCIAiCIAiihkHGOkEQBEEQBEEQBEHUMMhYJwiCIAiCIAiCIIgaBhnrBEEQRKXp378/+vfvX63HNBqNmDNnDuLj46FSqTBixIhqPf4/gYMHD+KWW25BcHAwBEFAamqqr5vklsWLF6NNmzYQRVFeVlRUhEmTJiEmJgaCIGDmzJke7XP8+PFITEy0WSYIAhYuXOh222vXruH+++9H/fr1IQgCli1bhp07d0IQBOzcudOjdtRF1qxZA0EQkJGRIS/r3bs35syZ47tGEQRB/EMgY50gCKIOcuzYMdx///1ISEhAQEAAGjVqhMGDB+Ptt9/2ddMU8/HHH+ONN97A/fffj08++QSzZs3ydZO8ypUrV7Bw4ULFBrfBYMADDzyAmzdvYunSpVi7di0SEhK82sZXXnkFd999Nxo2bKjYGLamoKAAr7/+Op599lmoVJYhyquvvoo1a9Zg6tSpWLt2LcaMGVPFLXfOrFmzsHnzZsydOxdr167FkCFDqu3YjigpKcHChQv/0RMFzz77LFasWIGsrCxfN4UgCKJG4+frBhAEQRDVy969e3H77bejSZMmmDx5MmJiYnDx4kXs378fy5cvx5NPPunrJiri119/RaNGjbB06VJfN6VauHLlCl544QUkJiYiKSnJ7fppaWm4cOECVq1ahUmTJnm/gQDmzZuHmJgYdOnSBZs3b/Z4+48//hhGoxEPP/ywzfJff/0VvXv3xoIFC6qqqYr59ddfcc899+Dpp5+Wl7Vq1QqlpaXQaDTV3p6SkhK88MILAFDt0SxVxT333IOwsDC8++67ePHFF33dHIIgiBoLGesEQRB1jFdeeQXh4eE4ePAgIiIibD7Lzs72TaMqQHZ2drn2VwZRFKHX6xEQEFBl+/Ql/LusymtUXFyM4OBgp5+np6cjMTEROTk5iIqK8nj/q1evxt13313uO8jOzka7du083l9V4Og+U6lUteY+8QUqlQr3338/Pv30U7zwwgsQBMHXTSIIgqiRUBg8QRBEHSMtLQ3t27d3aMRFR0fb/L969WoMGDAA0dHR0Gq1aNeuHd577z1Fx9HpdFiwYAFatGgBrVaL+Ph4zJkzBzqdzma9rVu34tZbb0VERARCQkLQunVr/N///Z/T/WZkZEAQBOzYsQMnTpyAIAg2+cPFxcX497//jfj4eGi1WrRu3RpvvvkmGGM2+xEEAdOnT8fnn3+O9u3bQ6vV4pdffgEAXL58GY8++igaNmwIrVaL9u3b4+OPPy7XlrKyMixcuBCtWrVCQEAAYmNjcd999yEtLU1e580338Qtt9yC+vXrIzAwEN26dcPXX39dbl+ursPOnTvRo0cPAMCECRPkc16zZo3DazR+/Hj069cPAPDAAw9AEAQbL+yvv/6Kvn37Ijg4GBEREbjnnntw6tQpm30sXLgQgiDg5MmTeOSRR1CvXj3ceuutTr8XAOXywj0hPT0dR48exaBBg+RlPDc8PT0dGzdulM87IyPDYS609TaVDRPn+2eMYcWKFfKxnR2jf//+6NChA06ePInbb78dQUFBaNSoERYvXlxu30qfDXsyMjLkSRBu5FqnGzjTjrDP2efP0JtvvokPPvgAzZs3h1arRY8ePXDw4MFy258+fRr3338/IiMjERAQgO7du+OHH34ot96JEycwYMAABAYGonHjxnj55ZdttAesGTx4MC5cuPCP0FEgCILwFeRZJwiCqGMkJCRg3759OH78ODp06OBy3ffeew/t27fH3XffDT8/P/z444944oknIIoipk2b5nQ7URRx99134/fff8eUKVPQtm1bHDt2DEuXLsXff/+NDRs2AJAG93fddRc6deqEF198EVqtFufOncOePXuc7jsqKgpr167FK6+8gqKiIixatAgA0LZtWzDGcPfdd2PHjh2YOHEikpKSsHnzZjzzzDO4fPlyuZD5X3/9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7t27A5BCpQHgxx9/hE6nww8//GDjgVMSptu8eXMcOXIEAwcOdOs5U6lUGDhwIAYOHIglS5bg1VdfxXPPPYcdO3bYKIMrISEhAdu2bStn8J0+fVr+3BVRUVEIDQ2FyWRye+zmzZvjjz/+gMFgkMW47Pnmm28QEBCAzZs3Q6vVystXr15dbl1316EqPJD8/M+cOVPus9OnT6NBgwYuS7N5kzZt2gCQVOGVTIhwL3BeXp7NcvvoiZqG0mfjrbfesvHIx8XFAXA+SQFI18Q65J5T0WvSrFkzAIC/v7/b5yEhIQFnz54tt9zRvQZIFRf0er0c9UIQBEGUh8LgCYIg6hg7duxw6H3j+co8bJV73azXzc/Pd2ho2jNq1ChcvnwZq1atKvdZaWmpHGp98+bNcp8nJSUBgNsyVo4YOnQoTCYT3nnnHZvlS5cuhSAIsiK3M9RqNUaOHIlvvvkGx48fL/f59evX5b9HjhyJnJyccscCLNdMrVZDEAQbz2ZGRkY5xW8l14Eb0fbGqSfExsYiKSkJn3zyic1+jh8/ji1btmDo0KEV3ndlSU5OBgD8+eefitbnavu7d++Wl5lMJnzwwQdV37gqROmz0a1bNwwaNEj+4doKQUFBABzfB82bN8fp06dt7tMjR464rK7giujoaPTv3x/vv/++PIlnjfVxhg4div379+PAgQM2n3/++ecO933o0CEAzisaEARBEORZJwiCqHM8+eSTKCkpwb333os2bdpAr9dj7969WL9+PRITE+Xc7DvuuAMajQbDhw/HY489hqKiIqxatQrR0dEOB+7WjBkzBl9++SUef/xx7NixA3369IHJZMLp06fx5ZdfYvPmzejevTtefPFF7N69G8OGDUNCQgKys7Px7rvvonHjxm5rejti+PDhuP322/Hcc88hIyMDnTt3xpYtW/D9999j5syZsoHnitdeew07duxAr169MHnyZLRr1w43b97E4cOHsW3bNtmwHjt2LD799FPMnj0bBw4cQN++fVFcXIxt27bhiSeewD333INhw4ZhyZIlGDJkCB555BFkZ2djxYoVaNGiBY4ePSofU8l1aN68OSIiIrBy5UqEhoYiODgYvXr18jin/I033sCdd96J5ORkTJw4US7dFh4eLtfrrihr167FhQsXUFJSAkAypF9++WUA0j3hKrKhWbNm6NChA7Zt24ZHH33U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e++12W78+PEYMWKEzXYzZ85E//795f/79++P6dOnY+bMmWjQoIFcXu/48eO48847ERISgoYNG2LMmDHIyclx2vYffvgBo0aNwsSJE9GiRQu0b98eDz/8MF555RV5nYMHD2Lw4MFo0KABwsPD0a9fPxw+fNjlNbl48SJGjRqFiIgIREZG4p577kFGRob8+c6dO9GzZ08EBwcjIiICffr0wYULF5zub926dRg+fLjNMqPRiBkzZiAiIgL169fHs88+i3HjxtlcO2fXadeuXejZsye0Wi1iY2Pxn//8B0ajJcHX3XcHSB7rDz/8EPfeey+CgoLQsmVL/PDDDzbbbNq0Ca1atUJgYCBuv/12m2vgCGf3BA9b//DDD9G0aVMEBAQoaqez/XHWrl2LxMREhIeH46GHHkJhYaHN58OHD8e6detctpmoOXDPekygNOAjNXiCIIiajXXOOvesU846QfgeEphTSJmxBHd+4psa7j+Pu4ZA/2C36y1fvhzNmzfHBx98gIMHD0KtViva/8GDBxEdHY3Vq1djyJAhirfjfPLJJ5g6dSr27NkDAMjLy8OAAQMwadIkLF26FKWlpXj22WcxatQo/Prrrw73ERMTg127duHChQtISEhwuE5hYSHGjRuHt99+G4wxvPXWWxg6dCjOnj2L0NDQcusbDAakpKQgOTkZv/32G/z8/PDyyy9jyJAhOHr0KFQqFUaMGIHJkyfjf//7H/R6PQ4cOABBcF6m5Pfff8eYMWNslr3++uv4/PPPsXr1arRt2xbLly/Hhg0bcPvtt7u8TpcvX8bQoUMxfvx4fPrppzh9+jQmT56MgIAAG2NcCS+88AIWL16MN954A2+//TZGjx6NCxcuIDIyEhcvXsR9992HadOmYcqUKfjzzz/x73//2+X+XN0T586dwzfffINvv/22Su6xtLQ0bNiwAT/99BNyc3MxatQovPbaazYTNT179sQrr7wCnU4HrVbr0bUhqp8i2bOuAiCSojBBEEQNJ1/HjXUgxJyzbl/ZgyCI6oeM9VpEeHg4QkNDoVarERMTo3i7qKgoAEBERIRH23FatmyJxYsXy/+//PLL6NKlC1599VV52ccff4z4+Hj8/fffaNWqVbl9LFiwAPfddx8SExPRqlUrJCcnY+jQobj//vuhUkkBIAMGDLDZ5oMPPkBERAR27dqFu+66q9w+169f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", "text/plain": [ "

    " ] @@ -1554,22 +1592,149 @@ " sales_test_df,\n", " target_column=\"Sales\",\n", " timeseries_id=\"1\",\n", - " title_suffix=\"(fine-tuned)\",\n", + " title_suffix=\"(full fine-tuned)\",\n", ")" ] }, { - "cell_type": "markdown", - "id": "91083481", + "cell_type": "code", + "execution_count": 21, + "id": "7944046c", "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Could not estimate the number of tokens of the input, floating-point operations will not be computed\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
    \n", + " \n", + " \n", + " [1000/1000 01:53, Epoch 1/9223372036854775807]\n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    StepTraining Loss
    1000.752000
    2000.617800
    3000.596500
    4000.539700
    5000.544400
    6000.605700
    7000.546800
    8000.511900
    9000.537200
    10000.583500

    " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "**Note:** Fine-tuning functionality is intended for advanced users. The default fine-tuning hyperparameters may not always improve accuracy for your specific use case. We recommend experimenting with different hyperparameters. " + "# Fine-tune the model with LoRA\n", + "lora_finetuned_pipeline = pipeline.fit(\n", + " inputs=train_inputs,\n", + " prediction_length=13,\n", + " num_steps=1000,\n", + " learning_rate=1e-4,\n", + " batch_size=32,\n", + " logging_steps=100,\n", + " finetune_mode=\"lora\",\n", + ")" ] }, { - "cell_type": "markdown", - "id": "771d7f6a", + "cell_type": "code", + "execution_count": 22, + "id": "44e5d367", "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3LMeohIQ6C2gRM+o765FeHl5YcKECdJrwnOgX4MgCIKoVAqsVIWpzjpBEIRnw431UB8BAd5AVqkoMkfUDhQKBWJiYqq7GYQNXFKDJzwfxhimTp2KunXrQhAESY2/tiAIArZt2+bWY3z22WcYPHiwW4/hbg4cOABBEJCbm1ut7Vi8eDFiY2MdrvP444/jvffeq5oGEZUC5awTBEH8s8jjnnUfIMhbDH2n8m0EUf2QsV7D2LlzJzZs2ICffvoJ6enpZdT77VEVRq4z1qxZg86dOyMwMBChoaHo0qULli5dWq1tsqa0tBQvv/wyFi1aVN1NcTuVfU2Ud38LFizA66+/jry8vEprC+FeeBh8sLf4voi8MwRBEB5NrjFnPVQlIJD67lqHXq/HiRMncOLECej1+upuDmEGGes1jOTkZERERODee+9FeHh4leedaDQa5yvZYN26dZg9ezZmzZqFxMREHDlyBPPmzUNhYWElt7BifPPNNwgODkbv3r0rtJ/ynidPoyq+R4cOHdC8eXN8+eWXbj8WUTlwgbmG/qJ3ppg86wRBEB6NybMuIMBL7LsLqe+uNej1euzYsQM7duwgY93DIGNdJowxlGiLquWPMXmd5YQJE/Dss88iLS0NgiBIuScxMTFYsWKFxbqxsbFYvHixtBwAHnroIYvtJkyYgFGjRllsN3v2bPTr1096369fP8ycOROzZ89G/fr1pfJ6Z8+exdChQxEYGIiGDRti3LhxyM7Ottv27du3Y8yYMZg0aRJatGiB9u3b44knnsDrr78urXPy5EkMGjQI9evXR0hICPr27YvTp087PCfXr1/HmDFjEBoairp16+LBBx9EamqqtPzAgQPo2bMnAgICEBoait69e+PatWt297dlyxaMHDnS4jOdTodZs2YhNDQU9erVw4svvoiEhASLc2fvPB08eBA9e/aESqVCREQE/vvf/0KnMyX4OvvtANFjvXbtWjz00EPw9/dHy5YtsX37dottduzYgVatWsHPzw/333+/xTmwhb1rgoetr127Fk2bNoWvr6+sdtrbH2fjxo2IiYlBSEgIHn/8cRQUFFgsHzlyJLZs2eKwzYTnwD3r4X7igI/U4AmCIDwb85x17lmnnHWCqH5IYE4mpbpiDP28emq4/5JwG37eAU7XW7lyJZo3b45PP/0UJ0+ehFKplLX/kydPokGDBli/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", + "text/plain": [ + "

    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Use the LoRA fine-tuned model for predictions\n", + "lora_finetuned_pred_df = lora_finetuned_pipeline.predict_df(\n", + " sales_context_df,\n", + " future_df=sales_future_df,\n", + " prediction_length=13,\n", + " quantile_levels=[0.1, 0.5, 0.9],\n", + " id_column=\"id\",\n", + " timestamp_column=\"timestamp\",\n", + " target=\"Sales\",\n", + ")\n", + "\n", + "plot_forecast(\n", + " sales_context_df,\n", + " lora_finetuned_pred_df,\n", + " sales_test_df,\n", + " target_column=\"Sales\",\n", + " timeseries_id=\"1\",\n", + " title_suffix=\"(LoRA fine-tuned)\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7c899976", + "metadata": {}, + "outputs": [], "source": [] } ], From 086e66002381a98c4d7b7a00bc9806d452215d18 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 8 Dec 2025 16:02:44 +0100 Subject: [PATCH 48/60] Add unittests for `df_utils` (#414) *Issue #, if available:* *Description of changes:* This PR improves test coverage by adding unit tests for `df_utils`. Previously these methods were only being tested as part of Chronos-2 integration tests. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- .gitignore | 3 + test/test_df_utils.py | 361 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 364 insertions(+) create mode 100644 test/test_df_utils.py diff --git a/.gitignore b/.gitignore index 79a1a50..3f85b65 100644 --- a/.gitignore +++ b/.gitignore @@ -163,3 +163,6 @@ cython_debug/ .DS_store chronos-2-finetuned + +# Kiro IDE +.kiro diff --git a/test/test_df_utils.py b/test/test_df_utils.py new file mode 100644 index 0000000..2ffe1e8 --- /dev/null +++ b/test/test_df_utils.py @@ -0,0 +1,361 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +from unittest.mock import patch + +import numpy as np +import pandas as pd +import pytest + +from chronos.df_utils import ( + convert_df_input_to_list_of_dicts_input, + validate_df_inputs, +) +from test.util import create_df, create_future_df, get_forecast_start_times + + +# Tests for validate_df_inputs function + + +@pytest.mark.parametrize("freq", ["s", "min", "30min", "h", "D", "W", "ME", "QE", "YE"]) +def test_validate_df_inputs_returns_correct_metadata_for_valid_inputs(freq): + """Test that function returns validated dataframes, frequency, series lengths, and original order.""" + # Create test data with 2 series + df = create_df(series_ids=["A", "B"], n_points=[10, 15], target_cols=["target"], freq=freq) + + # Call validate_df_inputs + validated_df, validated_future_df, inferred_freq, series_lengths, original_order = validate_df_inputs( + df=df, + future_df=None, + target_columns=["target"], + prediction_length=5, + id_column="item_id", + timestamp_column="timestamp", + ) + + # Verify key return values + assert validated_future_df is None + assert inferred_freq is not None + assert series_lengths == [10, 15] + assert list(original_order) == ["A", "B"] + # Verify dataframe is sorted + assert validated_df["item_id"].iloc[0] == "A" + assert validated_df["item_id"].iloc[10] == "B" + + +def test_validate_df_inputs_casts_mixed_dtypes_correctly(): + """Test that numeric columns are cast to float32 and categorical/string/object columns are cast to category.""" + # Create dataframe with mixed column types + df = pd.DataFrame({ + "item_id": ["A"] * 10, + "timestamp": pd.date_range(end="2001-10-01", periods=10, freq="h"), + "target": np.random.randn(10), # numeric + "numeric_cov": np.random.randint(0, 10, 10), # integer numeric + "string_cov": ["cat1"] * 5 + ["cat2"] * 5, # string + "bool_cov": [True, False] * 5, # boolean + }) + + # Call validate_df_inputs + validated_df, _, _, _, _ = validate_df_inputs( + df=df, + future_df=None, + target_columns=["target"], + prediction_length=5, + ) + + # Verify dtypes after validation + assert validated_df["target"].dtype == np.float32 + assert validated_df["numeric_cov"].dtype == np.float32 + assert validated_df["string_cov"].dtype.name == "category" + assert validated_df["bool_cov"].dtype == np.float32 # booleans are cast to float32 + + +def test_validate_df_inputs_raises_error_when_series_has_insufficient_data(): + """Test that ValueError is raised for series with < 3 data points.""" + # Create dataframe with one series having only 2 points + df = create_df(series_ids=["A", "B"], n_points=[10, 2], target_cols=["target"], freq="h") + + # Verify error is raised with series ID in message + with pytest.raises(ValueError, match=r"Every time series must have at least 3 data points.*series B"): + validate_df_inputs( + df=df, + future_df=None, + target_columns=["target"], + prediction_length=5, + ) + + +def test_validate_df_inputs_raises_error_when_future_df_has_mismatched_series_ids(): + """Test that ValueError is raised when future_df has different series IDs than df.""" + # Create df with series A and B + df = create_df(series_ids=["A", "B"], n_points=[10, 15], target_cols=["target"], freq="h") + + # Create future_df with only series A + forecast_start_times = get_forecast_start_times(df, freq="h") + future_df = create_future_df( + forecast_start_times=[forecast_start_times[0]], + series_ids=["A"], + n_points=[5], + covariates=None, + freq="h" + ) + + # Verify appropriate error is raised + with pytest.raises(ValueError, match=r"future_df must contain the same time series IDs as df"): + validate_df_inputs( + df=df, + future_df=future_df, + target_columns=["target"], + prediction_length=5, + ) + + +def test_validate_df_inputs_raises_error_when_future_df_has_incorrect_lengths(): + """Test that ValueError is raised when future_df lengths don't match prediction_length.""" + # Create df with series A and B with a covariate + df = create_df(series_ids=["A", "B"], n_points=[10, 13], target_cols=["target"], covariates=["cov1"], freq="h") + + # Create future_df with varying lengths per series (3 and 7 instead of 5) + forecast_start_times = get_forecast_start_times(df, freq="h") + future_df = create_future_df( + forecast_start_times=forecast_start_times, + series_ids=["A", "B"], + n_points=[3, 7], # incorrect lengths + covariates=["cov1"], + freq="h" + ) + + # Verify error message indicates which series have incorrect lengths + with pytest.raises(ValueError, match=r"future_df must contain prediction_length=5 values for each series.*different lengths"): + validate_df_inputs( + df=df, + future_df=future_df, + target_columns=["target"], + prediction_length=5, + ) + + +# Tests for convert_df_input_to_list_of_dicts_input function + + +def test_convert_df_with_single_target_preserves_values(): + """Test conversion with single target column.""" + df = create_df(series_ids=["A", "B"], n_points=[10, 12], target_cols=["target"], freq="h") + + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=None, + target_columns=["target"], + prediction_length=5, + ) + + # Verify output list has correct length (one per series) + assert len(inputs) == 2 + + # Verify target arrays have correct shape and values match input + assert inputs[0]["target"].shape == (1, 10) # (n_targets=1, n_timesteps=10) + assert inputs[1]["target"].shape == (1, 12) # (n_targets=1, n_timesteps=12) + + # Verify values are preserved + df_sorted = df.sort_values(["item_id", "timestamp"]) + np.testing.assert_array_almost_equal(inputs[0]["target"][0], df_sorted[df_sorted["item_id"] == "A"]["target"].values) + np.testing.assert_array_almost_equal(inputs[1]["target"][0], df_sorted[df_sorted["item_id"] == "B"]["target"].values) + + +def test_convert_df_with_multiple_targets_preserves_values_and_shape(): + """Test conversion with multiple target columns.""" + df = create_df(series_ids=["A", "B"], n_points=[10, 14], target_cols=["target1", "target2"], freq="h") + + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=None, + target_columns=["target1", "target2"], + prediction_length=5, + ) + + # Verify target arrays have shape (n_targets, n_timesteps) + assert inputs[0]["target"].shape == (2, 10) + assert inputs[1]["target"].shape == (2, 14) + + # Verify all target values are preserved for both series + df_sorted = df.sort_values(["item_id", "timestamp"]) + for i, series_id in enumerate(["A", "B"]): + series_data = df_sorted[df_sorted["item_id"] == series_id] + np.testing.assert_array_almost_equal(inputs[i]["target"][0], series_data["target1"].values) + np.testing.assert_array_almost_equal(inputs[i]["target"][1], series_data["target2"].values) + + +def test_convert_df_with_past_covariates_includes_them_in_output(): + """Test conversion with past covariates only.""" + df = create_df(series_ids=["A", "B"], n_points=[10, 16], target_cols=["target"], covariates=["cov1", "cov2"], freq="h") + + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=None, + target_columns=["target"], + prediction_length=5, + ) + + # Verify output includes past_covariates dictionary + assert "past_covariates" in inputs[0] + assert "cov1" in inputs[0]["past_covariates"] + assert "cov2" in inputs[0]["past_covariates"] + + # Verify covariate values match input for both series + assert inputs[0]["past_covariates"]["cov1"].shape == (10,) + assert inputs[0]["past_covariates"]["cov2"].shape == (10,) + assert inputs[1]["past_covariates"]["cov1"].shape == (16,) + assert inputs[1]["past_covariates"]["cov2"].shape == (16,) + + # Verify no future_covariates key in output + assert "future_covariates" not in inputs[0] + + +def test_convert_df_with_past_and_future_covariates_includes_both(): + """Test conversion with both past and future covariates.""" + df = create_df(series_ids=["A", "B"], n_points=[10, 18], target_cols=["target"], covariates=["cov1"], freq="h") + + forecast_start_times = get_forecast_start_times(df, freq="h") + future_df = create_future_df( + forecast_start_times=forecast_start_times, + series_ids=["A", "B"], + n_points=[5, 5], + covariates=["cov1"], + freq="h" + ) + + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=future_df, + target_columns=["target"], + prediction_length=5, + ) + + # Verify output includes both past_covariates and future_covariates dictionaries for both series + assert "past_covariates" in inputs[0] + assert "future_covariates" in inputs[0] + assert "past_covariates" in inputs[1] + assert "future_covariates" in inputs[1] + + # Verify all covariate values are preserved with correct shapes + assert inputs[0]["past_covariates"]["cov1"].shape == (10,) + assert inputs[0]["future_covariates"]["cov1"].shape == (5,) + assert inputs[1]["past_covariates"]["cov1"].shape == (18,) + assert inputs[1]["future_covariates"]["cov1"].shape == (5,) + + +@pytest.mark.parametrize("freq", ["s", "min", "30min", "h", "D", "W", "ME", "QE", "YE"]) +def test_convert_df_generates_prediction_timestamps_with_correct_frequency(freq): + """Test that prediction timestamps follow the inferred frequency.""" + # Use multiple series with irregular lengths + df = create_df(series_ids=["A", "B", "C"], n_points=[10, 15, 12], target_cols=["target"], freq=freq) + + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=None, + target_columns=["target"], + prediction_length=5, + ) + + # Verify timestamps for all series + for series_id in ["A", "B", "C"]: + # Verify timestamps start after last context timestamp + last_context_time = df[df["item_id"] == series_id]["timestamp"].max() + first_pred_time = prediction_timestamps[series_id][0] + assert first_pred_time > last_context_time + + # Verify timestamps are evenly spaced according to frequency + pred_times = prediction_timestamps[series_id] + assert len(pred_times) == 5 + inferred_freq = pd.infer_freq(pred_times) + assert inferred_freq is not None + + +def test_convert_df_skips_validation_when_disabled(): + """Test that validate_inputs=False skips validation.""" + df = create_df(series_ids=["A", "B"], n_points=[10, 12], target_cols=["target"], freq="h") + + # Mock validate_df_inputs to verify it's not called when validation is disabled + with patch("chronos.df_utils.validate_df_inputs") as mock_validate: + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=None, + target_columns=["target"], + prediction_length=5, + validate_inputs=False, + ) + + # Verify validate_df_inputs was not called + mock_validate.assert_not_called() + + # Verify conversion still works + assert len(inputs) == 2 + + +def test_convert_df_preserves_all_values_with_random_inputs(): + """Generate random dataframe and verify all values are preserved exactly.""" + # Generate random parameters + n_series = np.random.randint(2, 5) + n_targets = np.random.randint(1, 4) + n_past_only_covariates = np.random.randint(1, 3) + n_future_covariates = np.random.randint(1, 3) + prediction_length = 5 + + series_ids = [f"series_{i}" for i in range(n_series)] + n_points = [np.random.randint(10, 20) for _ in range(n_series)] + target_cols = [f"target_{i}" for i in range(n_targets)] + past_only_covariates = [f"past_cov_{i}" for i in range(n_past_only_covariates)] + future_covariates = [f"future_cov_{i}" for i in range(n_future_covariates)] + all_covariates = past_only_covariates + future_covariates + + # Create dataframe with all covariates + df = create_df(series_ids=series_ids, n_points=n_points, target_cols=target_cols, covariates=all_covariates, freq="h") + + # Create future_df with only future covariates (not past-only ones) + forecast_start_times = get_forecast_start_times(df, freq="h") + future_df = create_future_df( + forecast_start_times=forecast_start_times, + series_ids=series_ids, + n_points=[prediction_length] * n_series, + covariates=future_covariates, + freq="h" + ) + + # Convert to list-of-dicts format + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=future_df, + target_columns=target_cols, + prediction_length=prediction_length, + ) + + # Verify all target values are preserved exactly + df_sorted = df.sort_values(["item_id", "timestamp"]) + for i, series_id in enumerate(series_ids): + series_data = df_sorted[df_sorted["item_id"] == series_id] + assert inputs[i]["target"].shape == (n_targets, n_points[i]) + + for j, target_col in enumerate(target_cols): + np.testing.assert_array_almost_equal(inputs[i]["target"][j], series_data[target_col].values) + + # Verify all past covariate values are preserved (both past-only and future covariates) + for i, series_id in enumerate(series_ids): + series_data = df_sorted[df_sorted["item_id"] == series_id] + assert "past_covariates" in inputs[i] + for cov in all_covariates: + np.testing.assert_array_almost_equal(inputs[i]["past_covariates"][cov], series_data[cov].values) + + # Verify only future covariates are in future_covariates (not past-only ones) + future_df_sorted = future_df.sort_values(["item_id", "timestamp"]) + for i, series_id in enumerate(series_ids): + series_future_data = future_df_sorted[future_df_sorted["item_id"] == series_id] + assert "future_covariates" in inputs[i] + # Only future covariates should be present + assert set(inputs[i]["future_covariates"].keys()) == set(future_covariates) + for cov in future_covariates: + np.testing.assert_array_almost_equal(inputs[i]["future_covariates"][cov], series_future_data[cov].values) + + # Verify output structure is correct + assert len(inputs) == n_series + assert list(original_order) == series_ids + assert len(prediction_timestamps) == n_series From eb5b61234a103fe44347bd4518fa3faf7eabbea5 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 10 Dec 2025 14:59:13 +0100 Subject: [PATCH 49/60] Chronos-2: Only pin_memory when device type is cuda (#431) --- src/chronos/chronos2/pipeline.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 3d22a8e..3eddcd7 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -608,7 +608,9 @@ class Chronos2Pipeline(BaseChronosPipeline): output_patch_size=self.model_output_patch_size, mode=DatasetMode.TEST, ) - test_loader = DataLoader(test_dataset, batch_size=None, pin_memory=True, shuffle=False, drop_last=False) + test_loader = DataLoader( + test_dataset, batch_size=None, pin_memory=self.model.device.type == "cuda", shuffle=False, drop_last=False + ) all_predictions: list[torch.Tensor] = [] for batch in test_loader: @@ -1122,7 +1124,12 @@ class Chronos2Pipeline(BaseChronosPipeline): mode=DatasetMode.TEST, ) test_loader = DataLoader( - test_dataset, batch_size=None, num_workers=1, pin_memory=True, shuffle=False, drop_last=False + test_dataset, + batch_size=None, + num_workers=0, + pin_memory=self.model.device.type == "cuda", + shuffle=False, + drop_last=False, ) all_embeds: list[torch.Tensor] = [] all_loc_scales: list[tuple[torch.Tensor, torch.Tensor]] = [] From 71ff0d64baad4f28f2c4640413fc6b6b0d1b4b41 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Mon, 15 Dec 2025 19:27:05 +0100 Subject: [PATCH 50/60] Chronos-2: Add option to disable `DataParallel` (#434) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 3eddcd7..e99d8d9 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -114,6 +114,7 @@ class Chronos2Pipeline(BaseChronosPipeline): finetuned_ckpt_name: str = "finetuned-ckpt", callbacks: list["TrainerCallback"] | None = None, remove_printer_callback: bool = False, + disable_data_parallel: bool = True, **extra_trainer_kwargs, ) -> "Chronos2Pipeline": """ @@ -158,6 +159,8 @@ class Chronos2Pipeline(BaseChronosPipeline): A list of `TrainerCallback`s which will be forwarded to the HuggingFace `Trainer` remove_printer_callback If True, all instances of `PrinterCallback` are removed from callbacks + disable_data_parallel + If True, ensures that DataParallel is disabled and training happens on a single GPU **extra_trainer_kwargs Extra kwargs are directly forwarded to `TrainingArguments` @@ -319,6 +322,11 @@ class Chronos2Pipeline(BaseChronosPipeline): training_args = TrainingArguments(**training_kwargs) + if disable_data_parallel and not use_cpu: + # This is a hack to disable the default `transformers` behavior of using DataParallel + training_args._n_gpu = 1 + assert training_args.n_gpu == 1 # Ensure that the hack worked + trainer = Chronos2Trainer( model=model, args=training_args, From 2896499580ae1c3c1944631c8e32fc67420f7fb9 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Tue, 16 Dec 2025 13:07:19 +0100 Subject: [PATCH 51/60] Update version to 2.2.1 (#435) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index 8a124bf..b19ee4b 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.2.0" +__version__ = "2.2.1" From efb86e02c23bf11b700260f04f67c1b56cb51482 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 17 Dec 2025 11:45:16 +0100 Subject: [PATCH 52/60] Chronos-2: Add after_batch callback (#436) *Issue #, if available:* *Description of changes:* Adds support for custom callbacks after each batch is processed during prediction. This allows for keeping track of the time limit in AutoGluon. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/pipeline.py | 5 ++++- test/test_chronos2.py | 13 ++++++++++++- test/util.py | 17 ++++++++++++++--- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index e99d8d9..91ed3da 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -9,7 +9,7 @@ import time import warnings from copy import deepcopy from pathlib import Path -from typing import TYPE_CHECKING, Any, Literal, Mapping, Sequence +from typing import TYPE_CHECKING, Any, Literal, Mapping, Sequence, Callable import numpy as np import torch @@ -577,6 +577,8 @@ class Chronos2Pipeline(BaseChronosPipeline): # effective batch size increases by a factor of `len(unrolled_quantiles)` when making long-horizon predictions, # by default [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] unrolled_quantiles = kwargs.pop("unrolled_quantiles", [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]) + # A callback which is called after each batch has been processed + after_batch_callback: Callable = kwargs.pop("after_batch", lambda: None) if len(kwargs) > 0: raise TypeError(f"Unexpected keyword arguments: {list(kwargs.keys())}.") @@ -641,6 +643,7 @@ class Chronos2Pipeline(BaseChronosPipeline): target_idx_ranges=batch_target_idx_ranges, ) all_predictions.extend(batch_prediction) + after_batch_callback() return all_predictions diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 3fac726..3d8884e 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -16,7 +16,7 @@ from chronos import BaseChronosPipeline, Chronos2Pipeline from chronos.chronos2.config import Chronos2CoreConfig from chronos.chronos2.layers import MHA from chronos.df_utils import convert_df_input_to_list_of_dicts_input -from test.util import create_df, create_future_df, get_forecast_start_times, validate_tensor +from test.util import create_df, create_future_df, get_forecast_start_times, validate_tensor, timeout_callback DUMMY_MODEL_PATH = Path(__file__).parent / "dummy-chronos2-model" @@ -1008,6 +1008,17 @@ def test_two_step_finetuning_with_df_input_works(pipeline, context_setup, future assert not np.allclose(orig_result_before["predictions"].to_numpy(), result["predictions"].to_numpy()) +def test_when_predict_df_called_with_timeout_callback_then_timeout_error_is_raised(pipeline): + num_series = 1000 + large_df = create_df(series_ids=[j for j in range(num_series)], n_points=[2048] * num_series) + with pytest.raises(TimeoutError, match="time limit exceeded"): + pipeline.predict_df( + large_df, + prediction_length=48, + after_batch=timeout_callback(0.1), + ) + + @pytest.mark.parametrize("attn_implementation", ["eager", "sdpa"]) def test_pipeline_works_with_different_attention_implementations(attn_implementation): """Test that the pipeline works with different attention implementations.""" diff --git a/test/util.py b/test/util.py index bc7b878..943e072 100644 --- a/test/util.py +++ b/test/util.py @@ -1,4 +1,5 @@ -from typing import Optional, Tuple +import time +from typing import Callable, Optional, Tuple import numpy as np import pandas as pd @@ -13,7 +14,6 @@ def validate_tensor(a: torch.Tensor, shape: Tuple[int, ...], dtype: Optional[tor assert a.dtype == dtype - def create_df(series_ids=["A", "B"], n_points=[10, 10], target_cols=["target"], covariates=None, freq="h"): """Helper to create test context DataFrames.""" series_dfs = [] @@ -44,4 +44,15 @@ def get_forecast_start_times(df, freq="h"): context_end_times = df.groupby("item_id")["timestamp"].max() forecast_start_times = [pd.date_range(end_time, periods=2, freq=freq)[-1] for end_time in context_end_times] - return forecast_start_times \ No newline at end of file + return forecast_start_times + + +def timeout_callback(seconds: float | None) -> Callable: + """Return a callback object that raises an exception if time limit is exceeded.""" + start_time = time.monotonic() + + def callback() -> None: + if seconds is not None and time.monotonic() - start_time > seconds: + raise TimeoutError("time limit exceeded") + + return callback From c50fed93df60669770ba2770141172277ff13840 Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Wed, 17 Dec 2025 13:44:43 +0100 Subject: [PATCH 53/60] Speed up predict_df (#437) *Issue #, if available:* *Description of changes:* - Remove for-loop with numpy operations + single pd.DataFrame construction By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/base.py | 30 +++++++++++++----------- src/chronos/chronos2/pipeline.py | 40 +++++++++++++++++--------------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/chronos/base.py b/src/chronos/base.py index 11fcd5c..7592c46 100644 --- a/src/chronos/base.py +++ b/src/chronos/base.py @@ -218,22 +218,26 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): quantiles_np = quantiles.numpy() # [n_series, horizon, num_quantiles] mean_np = mean.numpy() # [n_series, horizon] - results_dfs = [] - for i, (series_id, future_ts) in enumerate(prediction_timestamps.items()): - q_pred = quantiles_np[i] # (horizon, num_quantiles) - point_pred = mean_np[i] # (horizon) + series_ids = list(prediction_timestamps.keys()) + future_ts = list(prediction_timestamps.values()) - series_forecast_data = {id_column: series_id, timestamp_column: future_ts, "target_name": target} - series_forecast_data["predictions"] = point_pred - for q_idx, q_level in enumerate(quantile_levels): - series_forecast_data[str(q_level)] = q_pred[:, q_idx] + data = { + id_column: np.repeat(series_ids, prediction_length), + timestamp_column: np.concatenate(future_ts), + "target_name": target, + "predictions": mean_np.ravel(), + } - results_dfs.append(pd.DataFrame(series_forecast_data)) + quantiles_flat = quantiles_np.reshape(-1, len(quantile_levels)) + for q_idx, q_level in enumerate(quantile_levels): + data[str(q_level)] = quantiles_flat[:, q_idx] - predictions_df = pd.concat(results_dfs, ignore_index=True) - predictions_df.set_index(id_column, inplace=True) - predictions_df = predictions_df.loc[original_order] - predictions_df.reset_index(inplace=True) + predictions_df = pd.DataFrame(data) + # If validate_inputs=False, the df is used as-is without sorting by item_id, no reordering required + if validate_inputs: + predictions_df.set_index(id_column, inplace=True) + predictions_df = predictions_df.loc[original_order] + predictions_df.reset_index(inplace=True) return predictions_df diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index 91ed3da..b3ffb05 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -9,7 +9,7 @@ import time import warnings from copy import deepcopy from pathlib import Path -from typing import TYPE_CHECKING, Any, Literal, Mapping, Sequence, Callable +from typing import TYPE_CHECKING, Callable, Literal, Mapping, Sequence import numpy as np import torch @@ -914,27 +914,29 @@ class Chronos2Pipeline(BaseChronosPipeline): quantiles_np = torch.stack(quantiles).numpy() # [n_tasks, n_variates, horizon, num_quantiles] mean_np = torch.stack(mean).numpy() # [n_tasks, n_variates, horizon] - results_dfs = [] - for i, (series_id, future_ts) in enumerate(prediction_timestamps.items()): - q_pred = quantiles_np[i] # (n_variates, prediction_length, len(quantile_levels)) - point_pred = mean_np[i] # (n_variates, prediction_length) + n_tasks = len(prediction_timestamps) + n_variates = len(target) - for target_idx, target_col in enumerate(target): - series_forecast_data: dict[str | tuple[str, str], Any] = { - id_column: series_id, - timestamp_column: future_ts, - "target_name": target_col, - } - series_forecast_data["predictions"] = point_pred[target_idx] - for q_idx, q_level in enumerate(quantile_levels): - series_forecast_data[str(q_level)] = q_pred[target_idx, :, q_idx] + series_ids = list(prediction_timestamps.keys()) + future_ts = list(prediction_timestamps.values()) - results_dfs.append(pd.DataFrame(series_forecast_data)) + data = { + id_column: np.repeat(series_ids, n_variates * prediction_length), + timestamp_column: np.concatenate([np.tile(ts, n_variates) for ts in future_ts]), + "target_name": np.tile(np.repeat(target, prediction_length), n_tasks), + "predictions": mean_np.ravel(), + } - predictions_df = pd.concat(results_dfs, ignore_index=True) - predictions_df.set_index(id_column, inplace=True) - predictions_df = predictions_df.loc[original_order] - predictions_df.reset_index(inplace=True) + quantiles_flat = quantiles_np.reshape(-1, len(quantile_levels)) + for q_idx, q_level in enumerate(quantile_levels): + data[str(q_level)] = quantiles_flat[:, q_idx] + + predictions_df = pd.DataFrame(data) + # If validate_inputs=False, the df is used as-is without sorting by item_id, no reordering required + if validate_inputs: + predictions_df.set_index(id_column, inplace=True) + predictions_df = predictions_df.loc[original_order] + predictions_df.reset_index(inplace=True) return predictions_df From fd533389c300660f9d8e3a00fcb29e4ca1174745 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Wed, 17 Dec 2025 19:12:57 +0100 Subject: [PATCH 54/60] Bump version from 2.2.1 to 2.2.2 (#439) *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chronos/__about__.py b/src/chronos/__about__.py index b19ee4b..ba51ced 100644 --- a/src/chronos/__about__.py +++ b/src/chronos/__about__.py @@ -1 +1 @@ -__version__ = "2.2.1" +__version__ = "2.2.2" From 822c77342416e30fbba6e4fa19c9de678bca18f3 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Thu, 18 Dec 2025 18:26:13 +0100 Subject: [PATCH 55/60] Add Pandas version field to bug report template --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index f197c08..6c2121f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -30,4 +30,4 @@ CUDA version: PyTorch version: HuggingFace transformers version: HuggingFace accelerate version: - +Pandas version: From 5edd2ad23df16e3f3199fe7ff62ecd791bc1702c Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Tue, 30 Dec 2025 16:18:38 +0100 Subject: [PATCH 56/60] Update notebook on Chronos-2 deployment to SageMaker (#444) *Issue #, if available:* *Description of changes:* - Refactor the notebook to cover real-time inference (CPU & GPU), serverless inference and batch prediction options for Chronos-2 on SageMaker - Update README By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- README.md | 2 +- .../deploy-chronos-to-amazon-sagemaker.ipynb | 1478 ++++++++++------- 2 files changed, 866 insertions(+), 614 deletions(-) diff --git a/README.md b/README.md index 52d5e69..3ee487d 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ ## 🚀 News +- **30 Dec 2025**: ☁️ Deploy Chronos-2 to AWS with Amazon SageMaker: new guide covers real-time inference (GPU/CPU), serverless endpoints with automatic scaling, and batch transform for large-scale forecasting. See the [deployment tutorial](notebooks/deploy-chronos-to-amazon-sagemaker.ipynb). - **20 Oct 2025**: 🚀 [Chronos-2](https://huggingface.co/amazon/chronos-2) released. It offers _zero-shot_ support for univariate, multivariate, and covariate-informed forecasting tasks. Chronos-2 achieves the best performance on fev-bench, GIFT-Eval and Chronos Benchmark II amongst pretrained models. Check out [this notebook](notebooks/chronos-2-quickstart.ipynb) to get started with Chronos-2. -- **14 Feb 2025**: 🚀 Chronos-Bolt is now available on Amazon SageMaker JumpStart! Check out the [tutorial notebook](notebooks/deploy-chronos-to-amazon-sagemaker.ipynb) to learn how to deploy Chronos endpoints for production use in 3 lines of code. - **12 Dec 2024**: 📊 We released [`fev`](https://github.com/autogluon/fev), a lightweight package for benchmarking time series forecasting models based on the [Hugging Face `datasets`](https://huggingface.co/docs/datasets/en/index) library. - **26 Nov 2024**: ⚡️ Chronos-Bolt models released [on HuggingFace](https://huggingface.co/collections/amazon/chronos-models-65f1791d630a8d57cb718444). Chronos-Bolt models are more accurate (5% lower error), up to 250x faster and 20x more memory efficient than the original Chronos models of the same size! - **13 Mar 2024**: 🚀 Chronos [paper](https://arxiv.org/abs/2403.07815) and inference code released. diff --git a/notebooks/deploy-chronos-to-amazon-sagemaker.ipynb b/notebooks/deploy-chronos-to-amazon-sagemaker.ipynb index c7e3f3c..27e678e 100644 --- a/notebooks/deploy-chronos-to-amazon-sagemaker.ipynb +++ b/notebooks/deploy-chronos-to-amazon-sagemaker.ipynb @@ -2,206 +2,223 @@ "cells": [ { "cell_type": "markdown", - "id": "2da16609", + "id": "0c7f9134", "metadata": {}, "source": [ - "# SageMaker JumpStart - Deploy Chronos-2 endpoints to AWS for production use" + "# Deploy Chronos-2 to AWS with Amazon SageMaker" ] }, { "cell_type": "markdown", - "id": "9f776b6f", + "id": "3053768c", "metadata": {}, "source": [ - "In this demo notebook, we will walk through the process of using the **SageMaker Python SDK** to deploy a **Chronos-2** model to a cloud endpoint on AWS. To simplify deployment, we will leverage **SageMaker JumpStart**.\n", + "This notebook shows how to deploy **Chronos-2** to AWS using **Amazon SageMaker**.\n", "\n", - "### Why Deploy to an Endpoint?\n", - "So far, we’ve seen how to run models locally, which is useful for experimentation. However, in a production setting, a forecasting model is typically just one component of a larger system. Running models locally doesn’t scale well and lacks the reliability needed for real-world applications.\n", + "### Why Deploy to SageMaker?\n", + "Running models locally works for experimentation, but production use cases need reliability, scale, and integration into existing workflows. For example, you may need to generate forecasts for thousands of time series on a regular schedule, or integrate forecasts into applications that serve many users. SageMaker lets you deploy Chronos-2 to the cloud and access it from anywhere.\n", "\n", - "To address this, we deploy models as **endpoints** on AWS. An endpoint acts as a **hosted service**—we can send it requests (containing time series data), and it returns forecasts in response. This allows seamless integration into production workflows, ensuring scalability and real-time inference." + "### Deployment Options\n", + "This notebook covers three deployment modes on SageMaker:\n", + "\n", + "1. **[Real-time Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html)**\n", + " - ✅ Highest throughput, consistently low latency, supports both GPU and CPU instances\n", + " - ✅ Simple setup via JumpStart\n", + " - ❌ By default, you pay for the time the endpoint is running (can be configured to [scale to zero](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-zero-instances.html))\n", + "\n", + "2. **[Serverless Inference (CPU only)](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)**\n", + " - ✅ Pay only for active inference time, no infrastructure management\n", + " - ✅ Cost-efficient for intermittent or unpredictable traffic\n", + " - ❌ Cold start latency on first request after idle, lowest throughput of all options\n", + " - ❌ More complex setup (requires repackaging model artifacts)\n", + "\n", + "3. **[Batch Transform](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html)**\n", + " - ✅ Pay only for active compute time, no persistent infrastructure\n", + " - ✅ Cost-efficient for large-scale batch prediction jobs\n", + " - ❌ Initialization takes severa minutes for each job (not for real-time use), requires data in S3\n", + " - ❌ More complex setup (requires repackaging model artifacts)\n", + "\n", + "**Reference benchmark** on a dataset with 1M rows (2000 time series with 500 observations each) and prediction length of 28:\n", + "| Mode | Instance | Inference time (s) |\n", + "|------|----------|------|\n", + "| Real-time (GPU) | ml.g5.2xlarge | 18 |\n", + "| Real-time (CPU) | ml.c5.4xlarge | 50 |\n", + "| Serverless | 6GB memory | 120 |\n", + "| Batch Transform | ml.c5.4xlarge | 60 (+200s setup) |\n", + "\n", + "We recommend starting with **Real-time Inference** as it offers the simplest setup and highest throughput. Consider Serverless or Batch Transform when you need to optimize costs and don't require GPU acceleration.\n", + "\n", + "For a complete specification of all supported request parameters, see the **Endpoint API Reference** at the end of this notebook." ] }, { "cell_type": "markdown", - "id": "3c77da85", + "id": "78b40323", "metadata": {}, "source": [ - "
    \n", - "⚠️ Looking for Chronos-Bolt or original Chronos?
    \n", - "This notebook covers Chronos-2, our latest and recommended model. For documentation on older models (Chronos-Bolt and original Chronos), see the legacy deployment walkthrough.\n", + "
    \n", + "ℹ️ New to Chronos-2?
    \n", + "For an overview of Chronos-2 capabilities (univariate, multivariate, covariates), see the Chronos-2 Quick Start notebook.\n", "
    " ] }, { "cell_type": "markdown", - "id": "59912f1f", + "id": "a07155fb", "metadata": {}, "source": [ - "### Chronos-2 vs. Previous Models\n", - "\n", - "**Chronos-2** is a foundation model for time series forecasting that builds on [Chronos](https://arxiv.org/abs/2403.07815) and [Chronos-Bolt](https://aws.amazon.com/blogs/machine-learning/fast-and-accurate-zero-shot-forecasting-with-chronos-bolt-and-autogluon/). It offers significant improvements in capabilities, better accuracy, and can handle diverse forecasting scenarios not supported by earlier models.\n", - "\n", - "| Capability | Chronos-2 | Chronos-Bolt | Chronos |\n", - "|------------|-----------|--------------|----------|\n", - "| Univariate Forecasting | ✅ | ✅ | ✅ |\n", - "| Cross-learning across items | ✅ | ❌ | ❌ |\n", - "| Multivariate Forecasting | ✅ | ❌ | ❌ |\n", - "| Past-only (real/categorical) covariates | ✅ | ❌ | ❌ |\n", - "| Known future (real/categorical) covariates | ✅ | 🧩 | ❌ |\n", - "| Max. Context Length | 8192 | 2048 | 512 |\n", - "| Max. Prediction Length | 1024 | 64 | 64 |\n", - "\n", - "🧩 Chronos-Bolt does not natively support future covariates, but they can be combined with external covariate regressors (see [AutoGluon tutorial](https://auto.gluon.ai/stable/tutorials/timeseries/forecasting-chronos.html#incorporating-the-covariates)). This only models per-timestep effects, not effects across time. In contrast, Chronos-2 supports all covariate types natively." + "
    \n", + "⚠️ Looking for Chronos-Bolt or original Chronos?
    \n", + "This notebook covers Chronos-2, the latest and recommended model. For documentation on older models (Chronos-Bolt and original Chronos), see the legacy deployment walkthrough.\n", + "
    " ] }, { "cell_type": "markdown", - "id": "a0583a66", + "id": "1f595c0a", "metadata": {}, "source": [ - "## Deploy the model" - ] - }, - { - "cell_type": "markdown", - "id": "690d9093", - "metadata": {}, - "source": [ - "First, update the SageMaker SDK to access the latest models:" + "## Setup" ] }, { "cell_type": "code", "execution_count": null, - "id": "a4ed0fb5", + "id": "4907ecb7", "metadata": {}, "outputs": [], "source": [ - "!pip install -U -q sagemaker" + "!pip install -U -q \"sagemaker<3\"" ] }, { "cell_type": "markdown", - "id": "a07054a7", + "id": "69fa28b0", "metadata": {}, "source": [ - "We create a `JumpStartModel` with the necessary configuration based on the model ID. The key parameters are:\n", - "- `model_id`: Specifies the model to use. We use `pytorch-forecasting-chronos-2` for the [Chronos-2](https://github.com/amazon-science/chronos-forecasting) model.\n", - "- `instance_type`: Defines the AWS instance for serving the endpoint. Chronos-2 currently requires a **GPU instance** from the `ml.g5`, `ml.g6`, `ml.g6e`, or `ml.g4dn` families with a single GPU. The model does not benefit from multi-GPU instances. **CPU support is coming soon**.\n", - "\n", - " You can check the pricing for different SageMaker instance types for real-time inference [here](https://aws.amazon.com/sagemaker-ai/pricing/).\n", - "\n", - "The `JumpStartModel` will automatically set the necessary attributes such as `image_uri` based on the chosen `model_id` and `instance_type`." + "If running in a SageMaker Notebook with the correct execution role, `role` can be set to `None`. Otherwise, specify your IAM role ARN." ] }, { "cell_type": "code", "execution_count": null, - "id": "ffbae4f0", + "id": "6c135de1", + "metadata": {}, + "outputs": [], + "source": [ + "role = None # or \"arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXXXXXXXXXX\"" + ] + }, + { + "cell_type": "markdown", + "id": "9be17b67", + "metadata": {}, + "source": [ + "---\n", + "## Section 1: Real-time Inference\n", + "\n", + "Real-time inference is the simplest option. SageMaker keeps a dedicated instance running, ready to serve predictions with low latency.\n", + "\n", + "**When to use:**\n", + "- Interactive applications that need sub-second response times\n", + "- Consistent, predictable traffic\n", + "- When simplicity matters more than cost optimization" + ] + }, + { + "cell_type": "markdown", + "id": "1abbbaf5", + "metadata": {}, + "source": [ + "### Deploy the Model\n", + "\n", + "With SageMaker JumpStart, you configure the deployment with a few parameters:\n", + "\n", + "- `model_id`: The model to deploy. Use `pytorch-forecasting-chronos-2` for [Chronos-2](https://huggingface.co/amazon/chronos-2).\n", + "- `instance_type`: The AWS instance type for serving. Supported options:\n", + " - **GPU**: `ml.g5.xlarge`, `ml.g5.2xlarge`, `ml.g6.xlarge`, `ml.g6.2xlarge`, `ml.g6e.xlarge`, `ml.g6e.2xlarge`, `ml.g4dn.xlarge`, `ml.g4dn.2xlarge`\n", + " - **CPU**: `ml.m5.xlarge`, `ml.m5.2xlarge`, `ml.m5.4xlarge`, `ml.c5.xlarge`, `ml.c5.2xlarge`, `ml.c5.4xlarge`\n", + "\n", + "JumpStart automatically sets other attributes like `image_uri` based on your choices. See [SageMaker pricing](https://aws.amazon.com/sagemaker/ai/pricing/) for instance costs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba78fc0b", "metadata": {}, "outputs": [], "source": [ "from sagemaker.jumpstart.model import JumpStartModel\n", "\n", - "model = JumpStartModel(\n", + "js_model = JumpStartModel(\n", " model_id=\"pytorch-forecasting-chronos-2\",\n", " instance_type=\"ml.g5.2xlarge\",\n", - " # You might need to provide the SageMaker execution role to ensure necessary AWS resources are accessible\n", - " # role=\"arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXXXXXXXXXX\",\n", - ")" + " role=role,\n", + ")\n", + "\n", + "predictor = js_model.deploy()" ] }, { "cell_type": "markdown", - "id": "eb864ee1", + "id": "f1ce1202", "metadata": {}, "source": [ - "Next, we deploy the model and create an endpoint. Deployment typically takes a few minutes, as SageMaker provisions the instance, loads the model, and sets up the endpoint for inference.\n" + "> **Note:** After the endpoint is deployed, it will incur charges until you delete it with `predictor.delete_predictor()`" + ] + }, + { + "cell_type": "markdown", + "id": "9ef676fc", + "metadata": {}, + "source": [ + "To connect to an existing endpoint instead:" ] }, { "cell_type": "code", "execution_count": null, - "id": "7fd0068b", - "metadata": {}, - "outputs": [], - "source": [ - "predictor = model.deploy()" - ] - }, - { - "cell_type": "markdown", - "id": "f4dd66e7", - "metadata": {}, - "source": [ - "> **Note:** Once the endpoint is deployed, it remains active and incurs charges on your AWS account until it is deleted. The cost depends on factors such as the instance type, the region where the endpoint is hosted, and the duration it remains running. To avoid unnecessary charges, make sure to delete the endpoint when it is no longer needed. For detailed pricing information, refer to the [SageMaker AI pricing page](https://aws.amazon.com/sagemaker-ai/pricing/)." - ] - }, - { - "cell_type": "markdown", - "id": "48ce52ef", - "metadata": {}, - "source": [ - "Alternatively, you can connect to an existing endpoint." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a09367fc", + "id": "159e1e83", "metadata": {}, "outputs": [], "source": [ "# from sagemaker.predictor import Predictor\n", "# from sagemaker.serializers import JSONSerializer\n", "# from sagemaker.deserializers import JSONDeserializer\n", - "\n", - "# predictor = Predictor(\n", - "# \"NAME_OF_EXISTING_ENDPOINT\",\n", - "# serializer=JSONSerializer(),\n", - "# deserializer=JSONDeserializer(),\n", - "# )" + "#\n", + "# predictor = Predictor(\"NAME_OF_EXISTING_ENDPOINT\", serializer=JSONSerializer(), deserializer=JSONDeserializer())" ] }, { "cell_type": "markdown", - "id": "f3def973", + "id": "88c075c6", "metadata": {}, "source": [ - "## Querying the endpoint" - ] - }, - { - "cell_type": "markdown", - "id": "6fbe39f9", - "metadata": {}, - "source": [ - "We can now invoke the endpoint to make a forecast. We send a **payload** to the endpoint, which includes historical time series values and configuration parameters, such as the prediction length. The endpoint processes this input and returns a **response** containing the forecasted values based on the provided data." + "### Query the Endpoint" ] }, { "cell_type": "code", - "execution_count": 2, - "id": "1ae7b33e", + "execution_count": null, + "id": "1c5d7cfd", "metadata": { "lines_to_next_cell": 1 }, "outputs": [], "source": [ - "# Define a utility function to print the response in a pretty format\n", "from pprint import pformat\n", "\n", "\n", "def nested_round(data, decimals=2):\n", - " \"\"\"Round numbers, including nested dicts and list.\"\"\"\n", + " \"\"\"Round numbers, including nested dicts and lists.\"\"\"\n", " if isinstance(data, float):\n", " return round(data, decimals)\n", " elif isinstance(data, list):\n", " return [nested_round(item, decimals) for item in data]\n", " elif isinstance(data, dict):\n", " return {key: nested_round(value, decimals) for key, value in data.items()}\n", - " else:\n", - " return data\n", + " return data\n", "\n", "\n", "def pretty_format(data):\n", @@ -210,26 +227,26 @@ }, { "cell_type": "markdown", - "id": "cb1629c7", + "id": "e008ad07", "metadata": {}, "source": [ - "### Univariate forecasting" + "#### Univariate Forecasting" ] }, { "cell_type": "code", - "execution_count": 3, - "id": "320a9c49", + "execution_count": 33, + "id": "af030c65", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'predictions': [{'mean': [-0.36, 4.03, 5.31, 2.44, -2.47, -5.09, -4.31, 0.07, 4.41, 5.16],\n", - " '0.1': [-1.69, 2.84, 4.0, 0.97, -3.77, -6.19, -5.34, -1.77, 2.55, 3.61],\n", - " '0.5': [-0.36, 4.03, 5.31, 2.44, -2.47, -5.09, -4.31, 0.07, 4.41, 5.16],\n", - " '0.9': [1.03, 5.0, 6.31, 3.81, -0.85, -3.89, -2.89, 1.84, 5.59, 6.44]}]}\n" + "{'predictions': [{'mean': [-0.36, 4.02, 5.3, 2.45, -2.48, -5.14, -4.33, 0.06, 4.42, 5.14],\n", + " '0.1': [-1.68, 2.86, 4.01, 1.01, -3.77, -6.22, -5.39, -1.77, 2.6, 3.62],\n", + " '0.5': [-0.36, 4.02, 5.3, 2.45, -2.48, -5.14, -4.33, 0.06, 4.42, 5.14],\n", + " '0.9': [1.02, 5.02, 6.32, 3.82, -0.85, -3.92, -2.93, 1.83, 5.63, 6.44]}]}\n" ] } ], @@ -238,9 +255,7 @@ " \"inputs\": [\n", " {\"target\": [0.0, 4.0, 5.0, 1.5, -3.0, -5.0, -3.0, 1.5, 5.0, 4.0, 0.0, -4.0, -5.0, -1.5, 3.0, 5.0, 3.0, -1.5, -5.0, -4.0]},\n", " ],\n", - " \"parameters\": {\n", - " \"prediction_length\": 10\n", - " }\n", + " \"parameters\": {\"prediction_length\": 10},\n", "}\n", "response = predictor.predict(payload)\n", "print(pretty_format(response))" @@ -248,32 +263,32 @@ }, { "cell_type": "markdown", - "id": "0f37d392", + "id": "a2e4d3a2", "metadata": {}, "source": [ - "A payload may also contain **multiple time series**, potentially including `start` and `item_id` fields." + "#### Multiple Time Series with Metadata" ] }, { "cell_type": "code", - "execution_count": 4, - "id": "14c62c74", + "execution_count": 34, + "id": "cd8d2d7c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'predictions': [{'mean': [1.7, 1.95, 1.66, 1.55, 1.84],\n", - " '0.1': [0.28, 0.32, -0.08, -0.35, -0.18],\n", - " '0.5': [1.7, 1.95, 1.66, 1.55, 1.84],\n", - " '0.9': [3.09, 3.77, 3.62, 3.58, 4.22],\n", + "{'predictions': [{'mean': [1.69, 1.94, 1.65, 1.54, 1.84],\n", + " '0.1': [0.28, 0.31, -0.07, -0.35, -0.18],\n", + " '0.5': [1.69, 1.94, 1.65, 1.54, 1.84],\n", + " '0.9': [3.09, 3.77, 3.62, 3.58, 4.23],\n", " 'item_id': 'product_A',\n", " 'start': '2024-01-01T10:00:00'},\n", - " {'mean': [-1.21, -1.4, -1.27, -1.34, -1.27],\n", - " '0.1': [-4.19, -5.84, -6.38, -7.53, -8.0],\n", - " '0.5': [-1.21, -1.4, -1.27, -1.34, -1.27],\n", - " '0.9': [2.02, 2.92, 3.55, 4.62, 5.66],\n", + " {'mean': [-1.2, -1.41, -1.27, -1.37, -1.3],\n", + " '0.1': [-4.21, -5.83, -6.39, -7.58, -8.05],\n", + " '0.5': [-1.2, -1.41, -1.27, -1.37, -1.3],\n", + " '0.9': [2.01, 2.91, 3.55, 4.66, 5.66],\n", " 'item_id': 'product_B',\n", " 'start': '2024-02-02T10:00:00'}]}\n" ] @@ -282,23 +297,10 @@ "source": [ "payload = {\n", " \"inputs\": [\n", - " {\n", - " \"target\": [1.0, 2.0, 3.0, 2.0, 0.5, 2.0, 3.0, 2.0, 1.0],\n", - " \"item_id\": \"product_A\",\n", - " \"start\": \"2024-01-01T01:00:00\",\n", - " },\n", - " {\n", - " \"target\": [5.4, 3.0, 3.0, 2.0, 1.5, 2.0, -1.0],\n", - " \"item_id\": \"product_B\",\n", - " \"start\": \"2024-02-02T03:00:00\",\n", - " },\n", + " {\"target\": [1.0, 2.0, 3.0, 2.0, 0.5, 2.0, 3.0, 2.0, 1.0], \"item_id\": \"product_A\", \"start\": \"2024-01-01T01:00:00\"},\n", + " {\"target\": [5.4, 3.0, 3.0, 2.0, 1.5, 2.0, -1.0], \"item_id\": \"product_B\", \"start\": \"2024-02-02T03:00:00\"},\n", " ],\n", - " \"parameters\": {\n", - " \"prediction_length\": 5,\n", - " \"freq\": \"1h\",\n", - " \"quantile_levels\": [0.1, 0.5, 0.9],\n", - " \"batch_size\": 2,\n", - " },\n", + " \"parameters\": {\"prediction_length\": 5, \"freq\": \"1h\", \"quantile_levels\": [0.1, 0.5, 0.9]},\n", "}\n", "response = predictor.predict(payload)\n", "print(pretty_format(response))" @@ -306,31 +308,23 @@ }, { "cell_type": "markdown", - "id": "6ae41cdc", - "metadata": { - "lines_to_next_cell": 0 - }, + "id": "d6a84b17", + "metadata": {}, "source": [ - "### Forecasting with covariates\n", - "\n", - "Chronos-2 models also support forecasting with **covariates** (a.k.a. exogenous features or related time series). These can be provided using the `past_covariates` and `future_covariates` keys.\n", - "\n", - "**Note:** If you only provide `past_covariates` without matching keys in `future_covariates`, the model will treat them as past-only covariates (features that are only available historically but not in the future).\n", - "If future values of covariates are available, it is recommended to provide them in `future_covariates` as this typically results in more accurate forecasts." + "#### Forecasting with Covariates" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "e57f1541", + "execution_count": 35, + "id": "0dcaa27a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'predictions': [{'mean': [1.73, 2.09, 1.73], '0.1': [0.36, 0.6, 0.17], '0.5': [1.73, 2.09, 1.73], '0.9': [3.11, 3.8, 3.52]},\n", - " {'mean': [-0.61, -0.41, -1.43], '0.1': [-4.16, -5.59, -7.53], '0.5': [-0.61, -0.41, -1.43], '0.9': [3.12, 4.56, 3.91]}]}\n" + "{'predictions': [{'mean': [1.73, 2.09, 1.74], '0.1': [0.35, 0.58, 0.17], '0.5': [1.73, 2.09, 1.74], '0.9': [3.11, 3.79, 3.52]}]}\n" ] } ], @@ -339,37 +333,15 @@ " \"inputs\": [\n", " {\n", " \"target\": [1.0, 2.0, 3.0, 2.0, 0.5, 2.0, 3.0, 2.0, 1.0],\n", - " # past_covariates must have the same length as \"target\"\n", " \"past_covariates\": {\n", " \"feat_1\": [3.0, 6.0, 9.0, 6.0, 1.5, 6.0, 9.0, 6.0, 3.0],\n", - " # Categorical covariates should be provided as strings\n", " \"feat_2\": [\"A\", \"B\", \"B\", \"B\", \"A\", \"A\", \"A\", \"A\", \"B\"],\n", - " # feat_3 is a past-only covariate (not present in future_covariates)\n", - " \"feat_3\": [10.0, 20.0, 30.0, 20.0, 5.0, 20.0, 30.0, 20.0, 10.0],\n", - " },\n", - " # future_covariates must have length equal to \"prediction_length\"\n", - " \"future_covariates\": {\n", - " \"feat_1\": [2.5, 2.2, 3.3],\n", - " \"feat_2\": [\"B\", \"A\", \"A\"],\n", - " },\n", - " },\n", - " {\n", - " \"target\": [5.4, 3.0, 3.0, 2.0, 1.5, 2.0, -1.0],\n", - " \"past_covariates\": {\n", - " \"feat_1\": [0.6, 1.2, 1.8, 1.2, 0.3, 1.2, 1.8],\n", - " \"feat_2\": [\"A\", \"B\", \"B\", \"B\", \"A\", \"A\", \"A\"],\n", - " \"feat_3\": [5.4, 3.0, 3.0, 2.0, 1.5, 2.0, -1.0],\n", - " },\n", - " \"future_covariates\": {\n", - " \"feat_1\": [1.2, 0.3, 4.4],\n", - " \"feat_2\": [\"A\", \"B\", \"A\"],\n", + " \"feat_3\": [10.0, 20.0, 30.0, 20.0, 5.0, 20.0, 30.0, 20.0, 10.0], # past-only\n", " },\n", + " \"future_covariates\": {\"feat_1\": [2.5, 2.2, 3.3], \"feat_2\": [\"B\", \"A\", \"A\"]},\n", " },\n", " ],\n", - " \"parameters\": {\n", - " \"prediction_length\": 3,\n", - " \"quantile_levels\": [0.1, 0.5, 0.9],\n", - " },\n", + " \"parameters\": {\"prediction_length\": 3, \"quantile_levels\": [0.1, 0.5, 0.9]},\n", "}\n", "response = predictor.predict(payload)\n", "print(pretty_format(response))" @@ -377,28 +349,26 @@ }, { "cell_type": "markdown", - "id": "76c88a22", + "id": "98c40db2", "metadata": {}, "source": [ - "### Multivariate forecasting\n", - "\n", - "Chronos-2 also supports **multivariate forecasting**, where multiple related time series are forecasted jointly. For multivariate forecasting, provide the target as a list of lists, where each inner list represents one dimension of the multivariate series." + "#### Multivariate Forecasting" ] }, { "cell_type": "code", - "execution_count": 6, - "id": "b73609be", + "execution_count": 36, + "id": "9ca28aea", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'predictions': [{'mean': [[3.66, 3.55, 3.5, 3.42], [2.0, 2.05, 2.19, 2.23], [3.33, 3.27, 3.25, 3.22]],\n", - " '0.1': [[1.98, 1.52, 1.17, 0.88], [0.84, 0.18, 0.0, -0.25], [2.5, 2.27, 2.08, 1.94]],\n", - " '0.5': [[3.66, 3.55, 3.5, 3.42], [2.0, 2.05, 2.19, 2.23], [3.33, 3.27, 3.25, 3.22]],\n", - " '0.9': [[5.75, 6.25, 6.59, 7.0], [3.8, 4.47, 4.88, 5.31], [4.38, 4.62, 4.78, 5.0]]}]}\n" + "{'predictions': [{'mean': [[3.66, 3.54, 3.5, 3.42], [2.01, 2.07, 2.2, 2.25], [3.33, 3.27, 3.25, 3.21]],\n", + " '0.1': [[1.98, 1.52, 1.16, 0.88], [0.84, 0.21, 0.03, -0.27], [2.49, 2.26, 2.08, 1.94]],\n", + " '0.5': [[3.66, 3.54, 3.5, 3.42], [2.01, 2.07, 2.2, 2.25], [3.33, 3.27, 3.25, 3.21]],\n", + " '0.9': [[5.76, 6.22, 6.59, 6.99], [3.8, 4.48, 4.89, 5.31], [4.38, 4.61, 4.79, 5.0]]}]}\n" ] } ], @@ -406,9 +376,6 @@ "payload = {\n", " \"inputs\": [\n", " {\n", - " # For multivariate forecasting, target is a list of lists\n", - " # Each inner list represents one dimension with the same length\n", - " # np.array(target) would have shape [num_dimensions, length]\n", " \"target\": [\n", " [1.0, 2.0, 3.0, 2.0, 1.0, 2.0, 3.0, 4.0], # Dimension 1\n", " [5.0, 4.0, 3.0, 4.0, 5.0, 4.0, 3.0, 2.0], # Dimension 2\n", @@ -416,10 +383,7 @@ " ],\n", " },\n", " ],\n", - " \"parameters\": {\n", - " \"prediction_length\": 4,\n", - " \"quantile_levels\": [0.1, 0.5, 0.9],\n", - " },\n", + " \"parameters\": {\"prediction_length\": 4, \"quantile_levels\": [0.1, 0.5, 0.9]},\n", "}\n", "response = predictor.predict(payload)\n", "print(pretty_format(response))" @@ -427,201 +391,143 @@ }, { "cell_type": "markdown", - "id": "9479e7a3", + "id": "e04e42b2", "metadata": {}, "source": [ - "## Endpoint API\n", - "So far, we have explored several examples of querying the endpoint with different payload structures. Below is a comprehensive API specification detailing all supported parameters, their meanings, and how they affect the model’s predictions.\n", + "### Working with Long-Format DataFrames\n", "\n", - "* **inputs** (required): List with at most 1000 time series that need to be forecasted. Each time series is represented by a dictionary with the following keys:\n", - " * **target** (required): Observed time series values.\n", - " - For univariate forecasting: List of numeric values.\n", - " - For multivariate forecasting: List of lists, where each inner list represents one dimension. All dimensions must have the same length. If converted to a numpy array via `np.array(target)`, the shape would be `[num_dimensions, length]`.\n", - " - It is recommended that each time series contains at least 30 observations.\n", - " - If any time series contains fewer than 5 observations, an error will be raised.\n", - " * **item_id**: String that uniquely identifies each time series.\n", - " - If provided, the ID must be unique for each time series.\n", - " - If provided, then the endpoint response will also include the **item_id** field for each forecast.\n", - " * **start**: Timestamp of the first time series observation in ISO format (`YYYY-MM-DD` or `YYYY-MM-DDThh:mm:ss`).\n", - " - If **start** field is provided, then **freq** must also be provided as part of **parameters**.\n", - " - If provided, then the endpoint response will also include the **start** field indicating the first timestamp of each forecast.\n", - " * **past_covariates**: Dictionary containing the past values of the covariates for this time series.\n", - " - Each key in **past_covariates** correspond to the name of the covariate. Each value must be an array consisting of all-numeric or all-string values, with the length equal to the length of the **target**.\n", - " - Covariates that appear only in **past_covariates** (and not in **future_covariates**) are treated as past-only covariates.\n", - " * **future_covariates**: Dictionary containing the future values of the covariates for this time series (values during the forecast horizon).\n", - " - Each key in **future_covariates** correspond to the name of the covariate. Each value must be an array consisting of all-numeric or all-string values, with the length equal to **prediction_length**.\n", - " - Covariates that appear in both **past_covariates** and **future_covariates** are treated as known future covariates.\n", - "* **parameters**: Optional parameters to configure the model.\n", - " * **prediction_length**: Integer corresponding to the number of future time series values that need to be predicted. Defaults to `1`. Values up to `1024` are supported.\n", - " * **quantile_levels**: List of floats in range (0, 1) specifying which quantiles should should be included in the probabilistic forecast. Defaults to `[0.1, 0.5, 0.9]`.\n", - " - Chronos-2 natively supports quantile levels in range `[0.01, 0.99]`. Predictions outside the range will be clipped.\n", - " * **freq**: Frequency of the time series observations in [pandas-compatible format](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases). For example, `1h` for hourly data or `2W` for bi-weekly data.\n", - " - If **freq** is provided, then **start** must also be provided for each time series in **inputs**.\n", - " * **batch_size**: Number of time series processed in parallel by the model. Larger values speed up inference but may lead to out of memory errors. Defaults to `256`.\n", - " * **predict_batches_jointly**: If `True`, the model will apply group attention to all items in the batch, instead of processing each item separately (described as \"full cross-learning mode\" in the [technical report](https://www.arxiv.org/abs/2510.15821)). This may produce more accurate forecasts at the cost of lower inference speed. Defaults to `False`.\n", - "\n", - "All keys not marked with (required) are optional.\n", - "\n", - "The endpoint response contains the probabilistic (quantile) forecast for each time series included in the request." - ] - }, - { - "cell_type": "markdown", - "id": "5ee1e161", - "metadata": {}, - "source": [ - "## Working with long-format data frames" - ] - }, - { - "cell_type": "markdown", - "id": "a744884c", - "metadata": {}, - "source": [ - "The endpoint communicates using JSON format for both input and output. However, in practice, time series data is often stored in a **long-format data frame** (where each row represents a timestamp for a specific item).\n", - "\n", - "In the following example, we demonstrate how to:\n", - "\n", - "1. Convert a long-format data frame into the JSON payload format required by the endpoint.\n", - "2. Send the request and retrieve predictions.\n", - "3. Convert the response back into a long-format data frame for further analysis.\n", - "\n", - "First, we load an example dataset in long data frame format." + "Time series data is often stored in long-format DataFrames. The following helper functions convert between DataFrame and payload formats. You can skip this section if you prefer to construct payloads manually." ] }, { "cell_type": "code", - "execution_count": 7, - "id": "6ecba0ca", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
    \n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    item_idtimestampscaled_pricepromotion_emailpromotion_homepageunit_sales
    01062_1012018-01-010.8791300.00.0636.0
    11062_1012018-01-080.9945170.00.0123.0
    21062_1012018-01-151.0055130.00.0391.0
    31062_1012018-01-221.0000000.00.0339.0
    41062_1012018-01-290.8833090.00.0661.0
    \n", - "
    " - ], - "text/plain": [ - " item_id timestamp scaled_price promotion_email promotion_homepage \\\n", - "0 1062_101 2018-01-01 0.879130 0.0 0.0 \n", - "1 1062_101 2018-01-08 0.994517 0.0 0.0 \n", - "2 1062_101 2018-01-15 1.005513 0.0 0.0 \n", - "3 1062_101 2018-01-22 1.000000 0.0 0.0 \n", - "4 1062_101 2018-01-29 0.883309 0.0 0.0 \n", - "\n", - " unit_sales \n", - "0 636.0 \n", - "1 123.0 \n", - "2 391.0 \n", - "3 339.0 \n", - "4 661.0 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": 37, + "id": "fb8e4c95", + "metadata": { + "lines_to_next_cell": 1 + }, + "outputs": [], "source": [ "import pandas as pd\n", "\n", + "\n", + "def convert_df_to_payload(\n", + " past_df,\n", + " future_df=None,\n", + " prediction_length=1,\n", + " freq=\"D\",\n", + " target=\"target\",\n", + " id_column=\"item_id\",\n", + " timestamp_column=\"timestamp\",\n", + "):\n", + " \"\"\"\n", + " Converts past and future DataFrames into JSON payload format for the Chronos endpoint.\n", + "\n", + " Args:\n", + " past_df: Historical data with target, timestamp_column, and id_column.\n", + " future_df: Future covariates with timestamp_column and id_column.\n", + " prediction_length: Number of future time steps to predict.\n", + " freq: Pandas-compatible frequency of the time series.\n", + " target: Column name(s) for target values (str for univariate, list for multivariate).\n", + " id_column: Column name for item IDs.\n", + " timestamp_column: Column name for timestamps.\n", + "\n", + " Returns:\n", + " dict: JSON payload formatted for the Chronos endpoint.\n", + " \"\"\"\n", + " past_df = past_df.sort_values([id_column, timestamp_column])\n", + " if future_df is not None:\n", + " future_df = future_df.sort_values([id_column, timestamp_column])\n", + "\n", + " target_cols = [target] if isinstance(target, str) else target\n", + " past_covariate_cols = list(past_df.columns.drop([*target_cols, id_column, timestamp_column]))\n", + " future_covariate_cols = [] if future_df is None else [col for col in past_covariate_cols if col in future_df.columns]\n", + "\n", + " inputs = []\n", + " for item_id, past_group in past_df.groupby(id_column):\n", + " if len(target_cols) > 1:\n", + " target_values = [past_group[col].tolist() for col in target_cols]\n", + " series_length = len(target_values[0])\n", + " else:\n", + " target_values = past_group[target_cols[0]].tolist()\n", + " series_length = len(target_values)\n", + "\n", + " if series_length < 5:\n", + " raise ValueError(f\"Time series '{item_id}' has fewer than 5 observations.\")\n", + "\n", + " series_dict = {\n", + " \"target\": target_values,\n", + " \"item_id\": str(item_id),\n", + " \"start\": past_group[timestamp_column].iloc[0].isoformat(),\n", + " }\n", + "\n", + " if past_covariate_cols:\n", + " series_dict[\"past_covariates\"] = past_group[past_covariate_cols].to_dict(orient=\"list\")\n", + "\n", + " if future_covariate_cols:\n", + " future_group = future_df[future_df[id_column] == item_id]\n", + " if len(future_group) != prediction_length:\n", + " raise ValueError(\n", + " f\"future_df must contain exactly {prediction_length=} values for each item_id from past_df \"\n", + " f\"(got {len(future_group)=}) for {item_id=}\"\n", + " )\n", + " series_dict[\"future_covariates\"] = future_group[future_covariate_cols].to_dict(orient=\"list\")\n", + "\n", + " inputs.append(series_dict)\n", + "\n", + " return {\n", + " \"inputs\": inputs,\n", + " \"parameters\": {\"prediction_length\": prediction_length, \"freq\": freq},\n", + " }\n", + "\n", + "\n", + "def convert_response_to_df(response, freq=\"D\"):\n", + " \"\"\"\n", + " Converts a JSON response from the Chronos endpoint into a long-format DataFrame.\n", + "\n", + " Args:\n", + " response: JSON response containing forecasts.\n", + " freq: Pandas-compatible frequency of the time series.\n", + "\n", + " Returns:\n", + " pd.DataFrame: Long-format DataFrame with timestamps, item_id, and forecasted values.\n", + " \"\"\"\n", + " dfs = []\n", + " for forecast in response[\"predictions\"]:\n", + " if isinstance(forecast[\"mean\"], list) and isinstance(forecast[\"mean\"][0], list):\n", + " # Multivariate forecast\n", + " timestamps = pd.date_range(forecast[\"start\"], freq=freq, periods=len(forecast[\"mean\"][0]))\n", + " for dim_idx in range(len(forecast[\"mean\"])):\n", + " dim_data = {\"item_id\": forecast.get(\"item_id\"), \"timestamp\": timestamps, \"target\": f\"target_{dim_idx + 1}\"}\n", + " for key, value in forecast.items():\n", + " if key not in [\"item_id\", \"start\"]:\n", + " dim_data[key] = value[dim_idx]\n", + " dfs.append(pd.DataFrame(dim_data))\n", + " else:\n", + " # Univariate forecast\n", + " forecast_df = pd.DataFrame(forecast).drop(columns=[\"start\"])\n", + " forecast_df[\"timestamp\"] = pd.date_range(forecast[\"start\"], freq=freq, periods=len(forecast_df))\n", + " cols = [\"item_id\", \"timestamp\"] + [c for c in forecast_df.columns if c not in [\"item_id\", \"timestamp\"]]\n", + " forecast_df = forecast_df[cols]\n", + " dfs.append(forecast_df)\n", + "\n", + " return pd.concat(dfs, ignore_index=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "ed20630a", + "metadata": { + "lines_to_next_cell": 0 + }, + "outputs": [], + "source": [ "df = pd.read_csv(\n", " \"https://autogluon.s3.amazonaws.com/datasets/timeseries/grocery_sales/test.csv\",\n", " parse_dates=[\"timestamp\"],\n", ")\n", - "df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "4288470c", - "metadata": {}, - "source": [ - "We split the data into two parts:\n", - "- Past data, including historic values of the target column and the covariates.\n", - "- Future data that contains the future values of the covariates during the forecast horizon." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "d95eb6d7", - "metadata": {}, - "outputs": [], - "source": [ + "\n", "prediction_length = 8\n", "target_col = \"unit_sales\"\n", "freq = pd.infer_freq(df[df.item_id == df.item_id[0]][\"timestamp\"])\n", @@ -632,9 +538,11 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "c2482ffd", - "metadata": {}, + "execution_count": 39, + "id": "e9528df2", + "metadata": { + "lines_to_next_cell": 0 + }, "outputs": [ { "data": { @@ -731,7 +639,7 @@ "4 661.0 " ] }, - "execution_count": 9, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -742,10 +650,10 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "c47905f8", + "execution_count": 40, + "id": "b3e58f08", "metadata": { - "lines_to_next_cell": 1 + "lines_to_next_cell": 0 }, "outputs": [ { @@ -830,7 +738,7 @@ "27 1062_101 2018-07-09 1.000000 0.0 0.0" ] }, - "execution_count": 10, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -839,189 +747,10 @@ "future_df.head()" ] }, - { - "cell_type": "markdown", - "id": "e9f54de7", - "metadata": {}, - "source": [ - "We can now convert this data into a JSON payload." - ] - }, { "cell_type": "code", - "execution_count": 11, - "id": "55bbad68", - "metadata": { - "lines_to_next_cell": 1 - }, - "outputs": [], - "source": [ - "def convert_df_to_payload(\n", - " past_df,\n", - " future_df=None,\n", - " prediction_length=1,\n", - " freq=\"D\",\n", - " target=\"target\",\n", - " id_column=\"item_id\",\n", - " timestamp_column=\"timestamp\",\n", - "):\n", - " \"\"\"\n", - " Converts past and future DataFrames into JSON payload format for the Chronos endpoint.\n", - "\n", - " Args:\n", - " past_df (pd.DataFrame): Historical data with `target`, `timestamp_column`, and `id_column`.\n", - " future_df (pd.DataFrame, optional): Future covariates with `timestamp_column` and `id_column`.\n", - " Covariates in past_df but not in future_df are treated as past-only covariates.\n", - " prediction_length (int): Number of future time steps to predict.\n", - " freq (str): Pandas-compatible frequency of the time series.\n", - " target (str or list[str]): Column name(s) for target values.\n", - " Use a string for univariate forecasting or a list of strings for multivariate forecasting.\n", - " id_column (str): Column name for item IDs.\n", - " timestamp_column (str): Column name for timestamps.\n", - "\n", - " Returns:\n", - " dict: JSON payload formatted for the Chronos endpoint.\n", - " \"\"\"\n", - " past_df = past_df.sort_values([id_column, timestamp_column])\n", - " if future_df is not None:\n", - " future_df = future_df.sort_values([id_column, timestamp_column])\n", - "\n", - " target_cols = [target] if isinstance(target, str) else target\n", - " past_covariate_cols = list(past_df.columns.drop([*target_cols, id_column, timestamp_column]))\n", - " future_covariate_cols = [] if future_df is None else [col for col in past_covariate_cols if col in future_df.columns]\n", - "\n", - " inputs = []\n", - " for item_id, past_group in past_df.groupby(id_column):\n", - " if len(target_cols) > 1:\n", - " target_values = [past_group[col].tolist() for col in target_cols]\n", - " series_length = len(target_values[0])\n", - " else:\n", - " target_values = past_group[target_cols[0]].tolist()\n", - " series_length = len(target_values)\n", - "\n", - " if series_length < 5:\n", - " raise ValueError(f\"Time series '{item_id}' has fewer than 5 observations.\")\n", - "\n", - " series_dict = {\n", - " \"target\": target_values,\n", - " \"item_id\": str(item_id),\n", - " \"start\": past_group[timestamp_column].iloc[0].isoformat(),\n", - " }\n", - "\n", - " if past_covariate_cols:\n", - " series_dict[\"past_covariates\"] = past_group[past_covariate_cols].to_dict(orient=\"list\")\n", - "\n", - " if future_covariate_cols:\n", - " future_group = future_df[future_df[id_column] == item_id]\n", - " if len(future_group) != prediction_length:\n", - " raise ValueError(\n", - " f\"future_df must contain exactly {prediction_length=} values for each item_id from past_df \"\n", - " f\"(got {len(future_group)=}) for {item_id=}\"\n", - " )\n", - " series_dict[\"future_covariates\"] = future_group[future_covariate_cols].to_dict(orient=\"list\")\n", - "\n", - " inputs.append(series_dict)\n", - "\n", - " return {\n", - " \"inputs\": inputs,\n", - " \"parameters\": {\"prediction_length\": prediction_length, \"freq\": freq},\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "d5226957", - "metadata": {}, - "outputs": [], - "source": [ - "payload = convert_df_to_payload(\n", - " past_df,\n", - " future_df,\n", - " prediction_length=prediction_length,\n", - " freq=freq,\n", - " target=\"unit_sales\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "4611c3e6", - "metadata": {}, - "source": [ - "We can now send the payload to the endpoint." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "504a731e", - "metadata": { - "lines_to_next_cell": 1 - }, - "outputs": [], - "source": [ - "response = predictor.predict(payload)" - ] - }, - { - "cell_type": "markdown", - "id": "742be985", - "metadata": {}, - "source": [ - "Note how Chronos-2 generated predictions for >300 time series in the dataset (with covariates!) in less than 2 seconds.\n", - "\n", - "Finally, we can convert the response back to a long-format data frame." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "a48807f6", - "metadata": { - "lines_to_next_cell": 1 - }, - "outputs": [], - "source": [ - "def convert_response_to_df(response, freq=\"D\"):\n", - " \"\"\"\n", - " Converts a JSON response from the Chronos endpoint into a long-format DataFrame.\n", - "\n", - " Args:\n", - " response (dict): JSON response containing forecasts.\n", - " freq (str): Pandas-compatible frequency of the time series.\n", - "\n", - " Returns:\n", - " pd.DataFrame: Long-format DataFrame with timestamps, item_id, and forecasted values.\n", - " For multivariate forecasts, creates separate rows for each target dimension (target_1, target_2, etc.).\n", - " \"\"\"\n", - " dfs = []\n", - " for forecast in response[\"predictions\"]:\n", - " if isinstance(forecast[\"mean\"], list) and isinstance(forecast[\"mean\"][0], list):\n", - " # Multivariate forecast\n", - " timestamps = pd.date_range(forecast[\"start\"], freq=freq, periods=len(forecast[\"mean\"][0]))\n", - " for dim_idx in range(len(forecast[\"mean\"])):\n", - " dim_data = {\"item_id\": forecast.get(\"item_id\"), \"timestamp\": timestamps, \"target\": f\"target_{dim_idx + 1}\"}\n", - " for key, value in forecast.items():\n", - " if key not in [\"item_id\", \"start\"]:\n", - " dim_data[key] = value[dim_idx]\n", - " dfs.append(pd.DataFrame(dim_data))\n", - " else:\n", - " # Univariate forecast\n", - " forecast_df = pd.DataFrame(forecast).drop(columns=[\"start\"])\n", - " forecast_df[\"timestamp\"] = pd.date_range(forecast[\"start\"], freq=freq, periods=len(forecast_df))\n", - " # Reorder columns to have item_id and timestamp first\n", - " cols = [\"item_id\", \"timestamp\"] + [c for c in forecast_df.columns if c not in [\"item_id\", \"timestamp\"]]\n", - " forecast_df = forecast_df[cols]\n", - " dfs.append(forecast_df)\n", - "\n", - " return pd.concat(dfs, ignore_index=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "ce0cf954", + "execution_count": 41, + "id": "68aef8ee", "metadata": {}, "outputs": [ { @@ -1058,90 +787,621 @@ " 0\n", " 1062_101\n", " 2018-06-11\n", - " 320.0\n", - " 186.0\n", - " 320.0\n", - " 488.0\n", + " 320.102539\n", + " 186.102356\n", + " 320.102539\n", + " 486.852112\n", " \n", " \n", " 1\n", " 1062_101\n", " 2018-06-18\n", - " 318.0\n", - " 175.0\n", - " 318.0\n", - " 496.0\n", + " 317.431396\n", + " 174.692490\n", + " 317.431396\n", + " 495.592224\n", " \n", " \n", " 2\n", " 1062_101\n", " 2018-06-25\n", - " 316.0\n", - " 169.0\n", - " 316.0\n", - " 508.0\n", + " 316.319000\n", + " 169.798355\n", + " 316.319000\n", + " 507.396881\n", " \n", " \n", " 3\n", " 1062_101\n", " 2018-07-02\n", - " 316.0\n", - " 171.0\n", - " 316.0\n", - " 506.0\n", + " 316.502472\n", + " 170.463837\n", + " 316.502472\n", + " 505.163483\n", " \n", " \n", " 4\n", " 1062_101\n", " 2018-07-09\n", - " 310.0\n", - " 165.0\n", - " 310.0\n", - " 506.0\n", + " 309.931396\n", + " 164.362732\n", + " 309.931396\n", + " 505.276794\n", " \n", " \n", "\n", "
    " ], "text/plain": [ - " item_id timestamp mean 0.1 0.5 0.9\n", - "0 1062_101 2018-06-11 320.0 186.0 320.0 488.0\n", - "1 1062_101 2018-06-18 318.0 175.0 318.0 496.0\n", - "2 1062_101 2018-06-25 316.0 169.0 316.0 508.0\n", - "3 1062_101 2018-07-02 316.0 171.0 316.0 506.0\n", - "4 1062_101 2018-07-09 310.0 165.0 310.0 506.0" + " item_id timestamp mean 0.1 0.5 0.9\n", + "0 1062_101 2018-06-11 320.102539 186.102356 320.102539 486.852112\n", + "1 1062_101 2018-06-18 317.431396 174.692490 317.431396 495.592224\n", + "2 1062_101 2018-06-25 316.319000 169.798355 316.319000 507.396881\n", + "3 1062_101 2018-07-02 316.502472 170.463837 316.502472 505.163483\n", + "4 1062_101 2018-07-09 309.931396 164.362732 309.931396 505.276794" ] }, - "execution_count": 15, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "payload = convert_df_to_payload(past_df, future_df, prediction_length=prediction_length, freq=freq, target=\"unit_sales\")\n", + "response = predictor.predict(payload)\n", "forecast_df = convert_response_to_df(response, freq=freq)\n", "forecast_df.head()" ] }, { "cell_type": "markdown", - "id": "e89cbc36", + "id": "19467a6e", "metadata": {}, "source": [ - "## Clean up the endpoint\n", - "Don't forget to clean up resources when finished to avoid unnecessary charges." + "### Clean Up\n", + "\n", + "The endpoint incurs charges until deleted. Alternatively, you can configure [scaling to zero](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-zero-instances.html) to save costs when the endpoint is idle." ] }, { "cell_type": "code", - "execution_count": 16, - "id": "9602a0a5", - "metadata": { - "lines_to_next_cell": 3 - }, + "execution_count": null, + "id": "b2ab130b", + "metadata": {}, "outputs": [], "source": [ "predictor.delete_predictor()" ] + }, + { + "cell_type": "markdown", + "id": "bad58ba2", + "metadata": {}, + "source": [ + "---\n", + "## Setup for Serverless Inference and Batch Transform\n", + "\n", + "Serverless Inference and Batch Transform only support CPU instances. Unlike real-time inference with JumpStart, these modes require you to create a custom SageMaker Model with repackaged artifacts.\n", + "\n", + "The following section sets up a reusable model that you can use for both Serverless (Section 2) and Batch Transform (Section 3)." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "64a2da8d", + "metadata": { + "lines_to_next_cell": 1 + }, + "outputs": [], + "source": [ + "import boto3\n", + "import json\n", + "import tempfile\n", + "import tarfile\n", + "from pathlib import Path\n", + "from sagemaker import Session\n", + "from sagemaker.model import Model\n", + "from sagemaker.jumpstart.model import JumpStartModel\n", + "from sagemaker.serializers import JSONSerializer\n", + "from sagemaker.deserializers import JSONDeserializer\n", + "\n", + "\n", + "def repackage_jumpstart_model(js_model, output_bucket, output_key):\n", + " \"\"\"\n", + " Repackages JumpStart model artifacts into a single tar.gz file for serverless/batch deployment.\n", + "\n", + " Args:\n", + " js_model: JumpStartModel instance with model_data configured.\n", + " output_bucket: S3 bucket to store the repackaged model.\n", + " output_key: S3 key for the output tar.gz file.\n", + "\n", + " Returns:\n", + " str: S3 URI of the repackaged model.\n", + " \"\"\"\n", + " s3 = boto3.client(\"s3\")\n", + " s3_uri = js_model.model_data[\"S3DataSource\"][\"S3Uri\"].rstrip(\"/\") + \"/\"\n", + " bucket, prefix = s3_uri.replace(\"s3://\", \"\").split(\"/\", 1)\n", + "\n", + " with tempfile.TemporaryDirectory() as tmpdir:\n", + " tmpdir = Path(tmpdir)\n", + "\n", + " # Download all model artifacts\n", + " for page in s3.get_paginator(\"list_objects_v2\").paginate(Bucket=bucket, Prefix=prefix):\n", + " for obj in page.get(\"Contents\", []):\n", + " if not obj[\"Key\"].endswith(\"/\"):\n", + " local_file = tmpdir / obj[\"Key\"][len(prefix):]\n", + " local_file.parent.mkdir(parents=True, exist_ok=True)\n", + " s3.download_file(bucket, obj[\"Key\"], str(local_file))\n", + "\n", + " # Create tar.gz archive\n", + " tar_path = tmpdir / \"model.tar.gz\"\n", + " with tarfile.open(tar_path, \"w:gz\") as tar:\n", + " tar.add(tmpdir, arcname=\".\")\n", + "\n", + " s3.upload_file(str(tar_path), output_bucket, output_key)\n", + "\n", + " return f\"s3://{output_bucket}/{output_key}\"" + ] + }, + { + "cell_type": "markdown", + "id": "44cb4b63", + "metadata": {}, + "source": [ + "### Create the SageMaker Model\n", + "\n", + "This model can be used for both Serverless Inference and Batch Transform." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "83b50172", + "metadata": {}, + "outputs": [], + "source": [ + "# Reuse the role defined in Setup, or define a new one\n", + "# role = None # or \"arn:aws:iam::...\"\n", + "\n", + "# Use JumpStart to get the model artifacts and container image\n", + "js_model = JumpStartModel(\n", + " model_id=\"pytorch-forecasting-chronos-2\",\n", + " instance_type=\"ml.c5.4xlarge\", # Important: use CPU instance to ensure that correct image_uri is used\n", + " role=role,\n", + ")\n", + "\n", + "# Repackage model artifacts into a single tar.gz\n", + "session = Session()\n", + "bucket = session.default_bucket() # or \"your-bucket-name\"\n", + "s3_prefix = \"chronos-2\" # S3 prefix for model artifacts and data\n", + "\n", + "model_uri = repackage_jumpstart_model(js_model, bucket, output_key=f\"{s3_prefix}/model.tar.gz\")\n", + "print(f\"Repackaged model uploaded to: {model_uri}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89da3362", + "metadata": {}, + "outputs": [], + "source": [ + "from sagemaker.predictor import Predictor\n", + "\n", + "chronos_model = Model(\n", + " name=\"chronos-2-cpu\", # Important: Model name should start with 'chronos-2'\n", + " model_data=model_uri,\n", + " image_uri=js_model.image_uri,\n", + " role=role,\n", + " predictor_cls=Predictor,\n", + ")\n", + "chronos_model.create()" + ] + }, + { + "cell_type": "markdown", + "id": "129bc389", + "metadata": {}, + "source": [ + "Alternatively, you can load an existing model as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7cb0f14", + "metadata": {}, + "outputs": [], + "source": [ + "# model_info = boto3.client(\"sagemaker\").describe_model(ModelName=\"chronos-2-cpu\")\n", + "# model = Model(\n", + "# model_data=model_info[\"PrimaryContainer\"][\"ModelDataUrl\"],\n", + "# image_uri=model_info[\"PrimaryContainer\"][\"Image\"],\n", + "# role=model_info[\"ExecutionRoleArn\"],\n", + "# name=model_info[\"ModelName\"],\n", + "# )" + ] + }, + { + "cell_type": "markdown", + "id": "ba12b52d", + "metadata": {}, + "source": [ + "---\n", + "## Section 2: Serverless Inference\n", + "\n", + "[Serverless Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html) scales compute capacity based on traffic and scales to zero when idle, so you only pay for actual inference time.\n", + "\n", + "**When to use:**\n", + "- Sporadic or unpredictable traffic\n", + "- Cost-sensitive workloads with variable demand\n", + "- Development and testing environments\n", + "\n", + "**Limitations:**\n", + "- Cold start latency (first request after idle typically takes 30-60 seconds)\n", + "- Maximum memory: 6GB" + ] + }, + { + "cell_type": "markdown", + "id": "f6fc783c", + "metadata": {}, + "source": [ + "### Deploy Serverless Endpoint" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6006c1a6", + "metadata": {}, + "outputs": [], + "source": [ + "from sagemaker.serverless import ServerlessInferenceConfig\n", + "\n", + "serverless_predictor = chronos_model.deploy(\n", + " serverless_inference_config=ServerlessInferenceConfig(\n", + " memory_size_in_mb=6144, # Maximum available memory\n", + " max_concurrency=1,\n", + " ),\n", + " serializer=JSONSerializer(),\n", + " deserializer=JSONDeserializer(),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ed5056fa", + "metadata": { + "lines_to_next_cell": 0 + }, + "source": [ + "### Query Serverless Endpoint" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "8cb6f9f4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'predictions': [{'mean': [-0.36, 4.02, 5.3, 2.45, -2.48, -5.14, -4.33, 0.06, 4.42, 5.14],\n", + " '0.1': [-1.68, 2.86, 4.01, 1.01, -3.77, -6.22, -5.39, -1.77, 2.6, 3.62],\n", + " '0.5': [-0.36, 4.02, 5.3, 2.45, -2.48, -5.14, -4.33, 0.06, 4.42, 5.14],\n", + " '0.9': [1.02, 5.02, 6.32, 3.82, -0.85, -3.92, -2.93, 1.83, 5.63, 6.44]}]}\n" + ] + } + ], + "source": [ + "payload = {\n", + " \"inputs\": [\n", + " {\"target\": [0.0, 4.0, 5.0, 1.5, -3.0, -5.0, -3.0, 1.5, 5.0, 4.0, 0.0, -4.0, -5.0, -1.5, 3.0, 5.0, 3.0, -1.5, -5.0, -4.0]},\n", + " ],\n", + " \"parameters\": {\"prediction_length\": 10},\n", + "}\n", + "response = serverless_predictor.predict(payload)\n", + "print(pretty_format(response))" + ] + }, + { + "cell_type": "markdown", + "id": "b4224e6a", + "metadata": {}, + "source": [ + "### Clean Up" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "85d3f37e", + "metadata": {}, + "outputs": [], + "source": [ + "serverless_predictor.delete_predictor()" + ] + }, + { + "cell_type": "markdown", + "id": "47b366e3", + "metadata": {}, + "source": [ + "---\n", + "## Section 3: Batch Transform\n", + "\n", + "[Batch Transform](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html) processes large datasets offline. SageMaker spins up compute, processes all data, and shuts down automatically.\n", + "\n", + "\n", + "**When to use:**\n", + "- Large-scale batch forecasting (thousands of time series)\n", + "- Scheduled or periodic forecasting jobs\n", + "- When latency is not critical\n", + "\n", + "**Limitations:**\n", + "- Not suitable for real-time predictions\n", + "- Requires data to be staged in S3" + ] + }, + { + "cell_type": "markdown", + "id": "7f94af60", + "metadata": {}, + "source": [ + "### Prepare Input Data\n", + "\n", + "The model uses the same API as described in the Endpoint API Reference at the end of the notebook, so you need to prepare your data in the expected JSON format.\n", + "\n", + "Batch Transform reads input from S3. Each line in the input file is a JSON payload that can contain multiple time series. For large datasets, use `items_per_record` to control how many time series are included per line (and thus per request)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ebe07edc", + "metadata": {}, + "outputs": [], + "source": [ + "# Load sample data\n", + "df = pd.read_csv(\n", + " \"https://autogluon.s3.amazonaws.com/datasets/timeseries/grocery_sales/test.csv\",\n", + " parse_dates=[\"timestamp\"],\n", + ")\n", + "\n", + "prediction_length = 8\n", + "target_col = \"unit_sales\"\n", + "freq = pd.infer_freq(df[df.item_id == df.item_id[0]][\"timestamp\"])\n", + "\n", + "past_df = df.groupby(\"item_id\").head(-prediction_length)\n", + "future_df = df.groupby(\"item_id\").tail(prediction_length).drop(columns=[target_col])\n", + "\n", + "# Convert DataFrame to payload and split into chunks\n", + "payload = convert_df_to_payload(past_df, future_df, prediction_length=prediction_length, freq=freq, target=target_col)\n", + "items_per_record = 100 # Number of time series per JSONL line\n", + "inputs, params = payload[\"inputs\"], payload[\"parameters\"]\n", + "lines = [json.dumps({\"inputs\": inputs[i:i + items_per_record], \"parameters\": params}) for i in range(0, len(inputs), items_per_record)]\n", + "\n", + "# Upload input data to S3\n", + "input_key = f\"{s3_prefix}/batch-input/input.jsonl\"\n", + "boto3.client(\"s3\").put_object(Bucket=bucket, Key=input_key, Body=\"\\n\".join(lines).encode())\n", + "input_s3_uri = f\"s3://{bucket}/{input_key}\"\n", + "print(f\"Input data uploaded to: {input_s3_uri} ({len(lines)} records)\")" + ] + }, + { + "cell_type": "markdown", + "id": "87f9ad5f", + "metadata": {}, + "source": [ + "### Run Batch Transform\n", + "\n", + "This uses the same `chronos_model` created in the setup section above." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d49d7b94", + "metadata": {}, + "outputs": [], + "source": [ + "from sagemaker.transformer import Transformer\n", + "\n", + "output_s3_uri = f\"s3://{bucket}/{s3_prefix}/batch-output/\"\n", + "\n", + "transformer = Transformer(\n", + " model_name=chronos_model.name,\n", + " instance_count=1,\n", + " instance_type=\"ml.c5.4xlarge\", # CPU instance\n", + " output_path=output_s3_uri,\n", + " strategy=\"SingleRecord\", # Process one JSON line at a time\n", + " assemble_with=\"Line\",\n", + " accept=\"application/json\",\n", + ")\n", + "\n", + "transformer.transform(\n", + " data=input_s3_uri,\n", + " content_type=\"application/json\",\n", + " split_type=\"Line\",\n", + " wait=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "dd65239f", + "metadata": {}, + "source": [ + "### Retrieve Batch Results" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "8c0fe2a4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    item_idtimestampmean0.10.50.9
    01062_1012018-06-11320.102539186.102356320.102539486.852112
    11062_1012018-06-18317.431396174.692490317.431396495.592224
    21062_1012018-06-25316.319000169.798355316.319000507.396881
    31062_1012018-07-02316.502472170.463837316.502472505.163483
    41062_1012018-07-09309.931396164.362732309.931396505.276794
    \n", + "
    " + ], + "text/plain": [ + " item_id timestamp mean 0.1 0.5 0.9\n", + "0 1062_101 2018-06-11 320.102539 186.102356 320.102539 486.852112\n", + "1 1062_101 2018-06-18 317.431396 174.692490 317.431396 495.592224\n", + "2 1062_101 2018-06-25 316.319000 169.798355 316.319000 507.396881\n", + "3 1062_101 2018-07-02 316.502472 170.463837 316.502472 505.163483\n", + "4 1062_101 2018-07-09 309.931396 164.362732 309.931396 505.276794" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "output_key = f\"{s3_prefix}/batch-output/{input_key.split('/')[-1]}.out\"\n", + "result = boto3.client(\"s3\").get_object(Bucket=bucket, Key=output_key)\n", + "output_lines = result[\"Body\"].read().decode().strip().split(\"\\n\")\n", + "\n", + "# Combine predictions from all records\n", + "all_predictions = [p for line in output_lines for p in json.loads(line)[\"predictions\"]]\n", + "forecast_df = convert_response_to_df({\"predictions\": all_predictions}, freq=freq)\n", + "forecast_df.head()" + ] + }, + { + "cell_type": "markdown", + "id": "19a8d5d6", + "metadata": {}, + "source": [ + "---\n", + "## See Also\n", + "\n", + "- [Scale real-time endpoints to zero](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-zero-instances.html) to optimize costs when the endpoint is idle\n", + "- [Asynchronous Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference.html) handles traffic spikes better than real-time inference thanks to request queueing" + ] + }, + { + "cell_type": "markdown", + "id": "0164216d", + "metadata": {}, + "source": [ + "---\n", + "## Endpoint API Reference\n", + "\n", + "Below is a complete API specification for the Chronos-2 endpoint.\n", + "\n", + "* **inputs** (required): List with at most 1000 time series that need to be forecasted. Each time series is represented by a dictionary with the following keys:\n", + " * **target** (required): Observed time series values.\n", + " - For univariate forecasting: List of numeric values.\n", + " - For multivariate forecasting: List of lists, where each inner list represents one dimension. All dimensions must have the same length. If converted to a numpy array via `np.array(target)`, the shape would be `[num_dimensions, length]`.\n", + " - It is recommended that each time series contains at least 30 observations.\n", + " - If any time series contains fewer than 5 observations, an error will be raised.\n", + " * **item_id**: String that uniquely identifies each time series.\n", + " - If provided, the ID must be unique for each time series.\n", + " - If provided, then the endpoint response will also include the **item_id** field for each forecast.\n", + " * **start**: Timestamp of the first time series observation in ISO format (`YYYY-MM-DD` or `YYYY-MM-DDThh:mm:ss`).\n", + " - If **start** field is provided, then **freq** must also be provided as part of **parameters**.\n", + " - If provided, then the endpoint response will also include the **start** field indicating the first timestamp of each forecast.\n", + " * **past_covariates**: Dictionary containing the past values of the covariates for this time series.\n", + " - Each key in **past_covariates** corresponds to the name of the covariate. Each value must be an array consisting of all-numeric or all-string values, with the length equal to the length of the **target**.\n", + " - Covariates that appear only in **past_covariates** (and not in **future_covariates**) are treated as past-only covariates.\n", + " * **future_covariates**: Dictionary containing the future values of the covariates for this time series (values during the forecast horizon).\n", + " - Each key in **future_covariates** corresponds to the name of the covariate. Each value must be an array consisting of all-numeric or all-string values, with the length equal to **prediction_length**.\n", + " - Covariates that appear in both **past_covariates** and **future_covariates** are treated as known future covariates.\n", + "* **parameters**: Optional parameters to configure the model.\n", + " * **prediction_length**: Integer corresponding to the number of future time series values that need to be predicted. Defaults to `1`. Values up to `1024` are supported.\n", + " * **quantile_levels**: List of floats in range (0, 1) specifying which quantiles should be included in the probabilistic forecast. Defaults to `[0.1, 0.5, 0.9]`.\n", + " - Chronos-2 natively supports quantile levels in range `[0.01, 0.99]`. Predictions outside the range will be clipped.\n", + " * **freq**: Frequency of the time series observations in [pandas-compatible format](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases). For example, `1h` for hourly data or `2W` for bi-weekly data.\n", + " - If **freq** is provided, then **start** must also be provided for each time series in **inputs**.\n", + " * **batch_size**: Number of time series processed in parallel by the model. Larger values speed up inference but may lead to out of memory errors. Defaults to `256`.\n", + " * **cross_learning**: If `True`, the model will apply group attention to all items in the batch, instead of processing each item separately (described as \"full cross-learning mode\" in the [technical report](https://www.arxiv.org/abs/2510.15821)). This may produce more accurate forecasts for some tasks. Defaults to `False`.\n", + "\n", + "All keys not marked with (required) are optional.\n", + "\n", + "The endpoint response contains the probabilistic (quantile) forecast for each time series included in the request." + ] } ], "metadata": { @@ -1151,21 +1411,13 @@ "notebook_metadata_filter": "-all" }, "kernelspec": { - "display_name": "sm", + "display_name": "ag", "language": "python", "name": "python3" }, "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.11" + "version": "3.12.9" } }, "nbformat": 4, From f889ae66477b53f6beb130f5c7b13590b29a1035 Mon Sep 17 00:00:00 2001 From: Abdul Fatir Date: Tue, 6 Jan 2026 14:52:41 +0100 Subject: [PATCH 57/60] Add new model IDs to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3ee487d..31c0fc2 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,8 @@ This package provides an interface to the Chronos family of **pretrained time se | Model ID | Parameters | | ---------------------------------------------------------------------- | ---------- | | [`amazon/chronos-2`](https://huggingface.co/amazon/chronos-2) | 120M | +| [`autogluon/chronos-2-synth`](https://huggingface.co/autogluon/chronos-2-synth) | 120M | +| [`autogluon/chronos-2-small`](https://huggingface.co/autogluon/chronos-2-small) | 28M | | [`amazon/chronos-bolt-tiny`](https://huggingface.co/amazon/chronos-bolt-tiny) | 9M | | [`amazon/chronos-bolt-mini`](https://huggingface.co/amazon/chronos-bolt-mini) | 21M | | [`amazon/chronos-bolt-small`](https://huggingface.co/amazon/chronos-bolt-small) | 48M | From 1f099eb265a4b423529929321929d4258dc031d8 Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Mon, 19 Jan 2026 13:59:08 +0100 Subject: [PATCH 58/60] Allow explicitly passing the frequency to predict_df (#449) *Issue #, if available:* #425 *Description of changes:* - Add `freq: str | None` parameter to `predict_df` methods. This can only be set in combination with `validate_inputs=False`. If specified, the user-provided `freq` will be used instead of the tryin to infer the `freq` from the data. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/base.py | 12 +- src/chronos/chronos2/pipeline.py | 12 +- src/chronos/df_utils.py | 44 ++++-- test/test_df_utils.py | 223 ++++++++++++++++++++++--------- 4 files changed, 213 insertions(+), 78 deletions(-) diff --git a/src/chronos/base.py b/src/chronos/base.py index 7592c46..2bba087 100644 --- a/src/chronos/base.py +++ b/src/chronos/base.py @@ -142,6 +142,7 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): prediction_length: int | None = None, quantile_levels: list[float] = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], validate_inputs: bool = True, + freq: str | None = None, **predict_kwargs, ) -> "pd.DataFrame": """ @@ -164,8 +165,14 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): quantile_levels Quantile levels to compute validate_inputs - When True, the dataframe(s) will be validated before prediction, ensuring that timestamps have a - regular frequency, and item IDs match between past and future data. Setting to False disables these checks. + [ADVANCED] When True (default), validates dataframes before prediction. Setting to False removes the + validation overhead, but may silently lead to wrong predictions if data is misformatted. When False, you + must ensure: (1) all dataframes are sorted by (id_column, timestamp_column); (2) future_df (if provided) + has the same item IDs as df with exactly prediction_length rows of future timestamps per item; (3) all + timestamps are regularly spaced (e.g., with hourly frequency). + freq + Frequency string for timestamp generation (e.g., "h", "D", "W"). Can only be used when + validate_inputs=False. When provided, skips frequency inference from the data. **predict_kwargs Additional arguments passed to predict_quantiles @@ -200,6 +207,7 @@ class BaseChronosPipeline(metaclass=PipelineRegistry): timestamp_column=timestamp_column, target_columns=[target], prediction_length=prediction_length, + freq=freq, validate_inputs=validate_inputs, ) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index b3ffb05..c7ccbbb 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -825,6 +825,7 @@ class Chronos2Pipeline(BaseChronosPipeline): context_length: int | None = None, cross_learning: bool = False, validate_inputs: bool = True, + freq: str | None = None, **predict_kwargs, ) -> "pd.DataFrame": """ @@ -864,8 +865,14 @@ class Chronos2Pipeline(BaseChronosPipeline): For optimal results, consider using a batch size around 100 (as used in the Chronos-2 technical report). - Cross-learning is most helpful when individual time series have limited historical context, as the model can leverage patterns from related series in the batch. validate_inputs - When True, the dataframe(s) will be validated before prediction, ensuring that timestamps have a - regular frequency, and item IDs match between past and future data. Setting to False disables these checks. + [ADVANCED] When True (default), validates dataframes before prediction. Setting to False removes the + validation overhead, but may silently lead to wrong predictions if data is misformatted. When False, you + must ensure: (1) all dataframes are sorted by (id_column, timestamp_column); (2) future_df (if provided) + has the same item IDs as df with exactly prediction_length rows of future timestamps per item; (3) all + timestamps are regularly spaced (e.g., with hourly frequency). + freq + Frequency string for timestamp generation (e.g., "h", "D", "W"). Can only be used when + validate_inputs=False. When provided, skips frequency inference from the data. **predict_kwargs Additional arguments passed to predict_quantiles @@ -896,6 +903,7 @@ class Chronos2Pipeline(BaseChronosPipeline): timestamp_column=timestamp_column, target_columns=target, prediction_length=prediction_length, + freq=freq, validate_inputs=validate_inputs, ) diff --git a/src/chronos/df_utils.py b/src/chronos/df_utils.py index af422ef..3adc1b0 100644 --- a/src/chronos/df_utils.py +++ b/src/chronos/df_utils.py @@ -204,6 +204,7 @@ def convert_df_input_to_list_of_dicts_input( id_column: str = "item_id", timestamp_column: str = "timestamp", validate_inputs: bool = True, + freq: str | None = None, ) -> tuple[list[dict[str, np.ndarray | dict[str, np.ndarray]]], np.ndarray, dict[str, "pd.DatetimeIndex"]]: """ Convert from dataframe input format to a list of dictionaries input format. @@ -230,7 +231,14 @@ def convert_df_input_to_list_of_dicts_input( timestamp_column Name of column containing timestamps validate_inputs - When True, the dataframe(s) will be validated be conversion + [ADVANCED] When True (default), validates dataframes before prediction. Setting to False removes the + validation overhead, but may silently lead to wrong predictions if data is misformatted. When False, you + must ensure: (1) all dataframes are sorted by (id_column, timestamp_column); (2) future_df (if provided) + has the same item IDs as df with exactly prediction_length rows of future timestamps per item; (3) all + timestamps are regularly spaced (e.g., with hourly frequency). + freq + Frequency string for timestamp generation (e.g., "h", "D", "W"). Can only be used + when validate_inputs=False. When provided, skips frequency inference from the data. Returns ------- @@ -242,6 +250,16 @@ def convert_df_input_to_list_of_dicts_input( import pandas as pd + if freq is not None and validate_inputs: + raise ValueError( + "freq can only be provided when validate_inputs=False. " + "When using freq with validate_inputs=False, you must ensure: " + "(1) all dataframes are sorted by (id_column, timestamp_column); " + "(2) future_df (if provided) has the same item IDs as df with exactly " + "prediction_length rows of future timestamps per item; " + "(3) all timestamps are regularly spaced." + ) + if validate_inputs: df, future_df, freq, series_lengths, original_order = validate_df_inputs( df, @@ -258,19 +276,19 @@ def convert_df_input_to_list_of_dicts_input( # Get series lengths series_lengths = df[id_column].value_counts(sort=False).to_list() - # If validation is skipped, the first freq in the dataframe is used - timestamp_index = pd.DatetimeIndex(df[timestamp_column]) - start_idx = 0 - freq = None - for length in series_lengths: - if length < 3: - start_idx += length - continue - timestamps = timestamp_index[start_idx : start_idx + length] - freq = pd.infer_freq(timestamps) - break + # If freq is not provided, infer from the first series with >= 3 points + if freq is None: + timestamp_index = pd.DatetimeIndex(df[timestamp_column]) + start_idx = 0 + for length in series_lengths: + if length < 3: + start_idx += length + continue + timestamps = timestamp_index[start_idx : start_idx + length] + freq = pd.infer_freq(timestamps) + break - assert freq is not None, "validate is False, but could not infer frequency from the dataframe" + assert freq is not None, "validate_inputs is False, but could not infer frequency from the dataframe" # Convert to list of dicts format inputs: list[dict[str, np.ndarray | dict[str, np.ndarray]]] = [] diff --git a/test/test_df_utils.py b/test/test_df_utils.py index 2ffe1e8..7d5d814 100644 --- a/test/test_df_utils.py +++ b/test/test_df_utils.py @@ -13,7 +13,6 @@ from chronos.df_utils import ( ) from test.util import create_df, create_future_df, get_forecast_start_times - # Tests for validate_df_inputs function @@ -22,7 +21,7 @@ def test_validate_df_inputs_returns_correct_metadata_for_valid_inputs(freq): """Test that function returns validated dataframes, frequency, series lengths, and original order.""" # Create test data with 2 series df = create_df(series_ids=["A", "B"], n_points=[10, 15], target_cols=["target"], freq=freq) - + # Call validate_df_inputs validated_df, validated_future_df, inferred_freq, series_lengths, original_order = validate_df_inputs( df=df, @@ -32,7 +31,7 @@ def test_validate_df_inputs_returns_correct_metadata_for_valid_inputs(freq): id_column="item_id", timestamp_column="timestamp", ) - + # Verify key return values assert validated_future_df is None assert inferred_freq is not None @@ -46,15 +45,17 @@ def test_validate_df_inputs_returns_correct_metadata_for_valid_inputs(freq): def test_validate_df_inputs_casts_mixed_dtypes_correctly(): """Test that numeric columns are cast to float32 and categorical/string/object columns are cast to category.""" # Create dataframe with mixed column types - df = pd.DataFrame({ - "item_id": ["A"] * 10, - "timestamp": pd.date_range(end="2001-10-01", periods=10, freq="h"), - "target": np.random.randn(10), # numeric - "numeric_cov": np.random.randint(0, 10, 10), # integer numeric - "string_cov": ["cat1"] * 5 + ["cat2"] * 5, # string - "bool_cov": [True, False] * 5, # boolean - }) - + df = pd.DataFrame( + { + "item_id": ["A"] * 10, + "timestamp": pd.date_range(end="2001-10-01", periods=10, freq="h"), + "target": np.random.randn(10), # numeric + "numeric_cov": np.random.randint(0, 10, 10), # integer numeric + "string_cov": ["cat1"] * 5 + ["cat2"] * 5, # string + "bool_cov": [True, False] * 5, # boolean + } + ) + # Call validate_df_inputs validated_df, _, _, _, _ = validate_df_inputs( df=df, @@ -62,7 +63,7 @@ def test_validate_df_inputs_casts_mixed_dtypes_correctly(): target_columns=["target"], prediction_length=5, ) - + # Verify dtypes after validation assert validated_df["target"].dtype == np.float32 assert validated_df["numeric_cov"].dtype == np.float32 @@ -74,7 +75,7 @@ def test_validate_df_inputs_raises_error_when_series_has_insufficient_data(): """Test that ValueError is raised for series with < 3 data points.""" # Create dataframe with one series having only 2 points df = create_df(series_ids=["A", "B"], n_points=[10, 2], target_cols=["target"], freq="h") - + # Verify error is raised with series ID in message with pytest.raises(ValueError, match=r"Every time series must have at least 3 data points.*series B"): validate_df_inputs( @@ -89,17 +90,13 @@ def test_validate_df_inputs_raises_error_when_future_df_has_mismatched_series_id """Test that ValueError is raised when future_df has different series IDs than df.""" # Create df with series A and B df = create_df(series_ids=["A", "B"], n_points=[10, 15], target_cols=["target"], freq="h") - + # Create future_df with only series A forecast_start_times = get_forecast_start_times(df, freq="h") future_df = create_future_df( - forecast_start_times=[forecast_start_times[0]], - series_ids=["A"], - n_points=[5], - covariates=None, - freq="h" + forecast_start_times=[forecast_start_times[0]], series_ids=["A"], n_points=[5], covariates=None, freq="h" ) - + # Verify appropriate error is raised with pytest.raises(ValueError, match=r"future_df must contain the same time series IDs as df"): validate_df_inputs( @@ -114,7 +111,7 @@ def test_validate_df_inputs_raises_error_when_future_df_has_incorrect_lengths(): """Test that ValueError is raised when future_df lengths don't match prediction_length.""" # Create df with series A and B with a covariate df = create_df(series_ids=["A", "B"], n_points=[10, 13], target_cols=["target"], covariates=["cov1"], freq="h") - + # Create future_df with varying lengths per series (3 and 7 instead of 5) forecast_start_times = get_forecast_start_times(df, freq="h") future_df = create_future_df( @@ -122,11 +119,13 @@ def test_validate_df_inputs_raises_error_when_future_df_has_incorrect_lengths(): series_ids=["A", "B"], n_points=[3, 7], # incorrect lengths covariates=["cov1"], - freq="h" + freq="h", ) - + # Verify error message indicates which series have incorrect lengths - with pytest.raises(ValueError, match=r"future_df must contain prediction_length=5 values for each series.*different lengths"): + with pytest.raises( + ValueError, match=r"future_df must contain prediction_length=5 values for each series.*different lengths" + ): validate_df_inputs( df=df, future_df=future_df, @@ -141,42 +140,46 @@ def test_validate_df_inputs_raises_error_when_future_df_has_incorrect_lengths(): def test_convert_df_with_single_target_preserves_values(): """Test conversion with single target column.""" df = create_df(series_ids=["A", "B"], n_points=[10, 12], target_cols=["target"], freq="h") - + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( df=df, future_df=None, target_columns=["target"], prediction_length=5, ) - + # Verify output list has correct length (one per series) assert len(inputs) == 2 - + # Verify target arrays have correct shape and values match input assert inputs[0]["target"].shape == (1, 10) # (n_targets=1, n_timesteps=10) assert inputs[1]["target"].shape == (1, 12) # (n_targets=1, n_timesteps=12) - + # Verify values are preserved df_sorted = df.sort_values(["item_id", "timestamp"]) - np.testing.assert_array_almost_equal(inputs[0]["target"][0], df_sorted[df_sorted["item_id"] == "A"]["target"].values) - np.testing.assert_array_almost_equal(inputs[1]["target"][0], df_sorted[df_sorted["item_id"] == "B"]["target"].values) + np.testing.assert_array_almost_equal( + inputs[0]["target"][0], df_sorted[df_sorted["item_id"] == "A"]["target"].values + ) + np.testing.assert_array_almost_equal( + inputs[1]["target"][0], df_sorted[df_sorted["item_id"] == "B"]["target"].values + ) def test_convert_df_with_multiple_targets_preserves_values_and_shape(): """Test conversion with multiple target columns.""" df = create_df(series_ids=["A", "B"], n_points=[10, 14], target_cols=["target1", "target2"], freq="h") - + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( df=df, future_df=None, target_columns=["target1", "target2"], prediction_length=5, ) - + # Verify target arrays have shape (n_targets, n_timesteps) assert inputs[0]["target"].shape == (2, 10) assert inputs[1]["target"].shape == (2, 14) - + # Verify all target values are preserved for both series df_sorted = df.sort_values(["item_id", "timestamp"]) for i, series_id in enumerate(["A", "B"]): @@ -187,26 +190,28 @@ def test_convert_df_with_multiple_targets_preserves_values_and_shape(): def test_convert_df_with_past_covariates_includes_them_in_output(): """Test conversion with past covariates only.""" - df = create_df(series_ids=["A", "B"], n_points=[10, 16], target_cols=["target"], covariates=["cov1", "cov2"], freq="h") - + df = create_df( + series_ids=["A", "B"], n_points=[10, 16], target_cols=["target"], covariates=["cov1", "cov2"], freq="h" + ) + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( df=df, future_df=None, target_columns=["target"], prediction_length=5, ) - + # Verify output includes past_covariates dictionary assert "past_covariates" in inputs[0] assert "cov1" in inputs[0]["past_covariates"] assert "cov2" in inputs[0]["past_covariates"] - + # Verify covariate values match input for both series assert inputs[0]["past_covariates"]["cov1"].shape == (10,) assert inputs[0]["past_covariates"]["cov2"].shape == (10,) assert inputs[1]["past_covariates"]["cov1"].shape == (16,) assert inputs[1]["past_covariates"]["cov2"].shape == (16,) - + # Verify no future_covariates key in output assert "future_covariates" not in inputs[0] @@ -214,29 +219,29 @@ def test_convert_df_with_past_covariates_includes_them_in_output(): def test_convert_df_with_past_and_future_covariates_includes_both(): """Test conversion with both past and future covariates.""" df = create_df(series_ids=["A", "B"], n_points=[10, 18], target_cols=["target"], covariates=["cov1"], freq="h") - + forecast_start_times = get_forecast_start_times(df, freq="h") future_df = create_future_df( forecast_start_times=forecast_start_times, series_ids=["A", "B"], n_points=[5, 5], covariates=["cov1"], - freq="h" + freq="h", ) - + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( df=df, future_df=future_df, target_columns=["target"], prediction_length=5, ) - + # Verify output includes both past_covariates and future_covariates dictionaries for both series assert "past_covariates" in inputs[0] assert "future_covariates" in inputs[0] assert "past_covariates" in inputs[1] assert "future_covariates" in inputs[1] - + # Verify all covariate values are preserved with correct shapes assert inputs[0]["past_covariates"]["cov1"].shape == (10,) assert inputs[0]["future_covariates"]["cov1"].shape == (5,) @@ -249,21 +254,21 @@ def test_convert_df_generates_prediction_timestamps_with_correct_frequency(freq) """Test that prediction timestamps follow the inferred frequency.""" # Use multiple series with irregular lengths df = create_df(series_ids=["A", "B", "C"], n_points=[10, 15, 12], target_cols=["target"], freq=freq) - + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( df=df, future_df=None, target_columns=["target"], prediction_length=5, ) - + # Verify timestamps for all series for series_id in ["A", "B", "C"]: # Verify timestamps start after last context timestamp last_context_time = df[df["item_id"] == series_id]["timestamp"].max() first_pred_time = prediction_timestamps[series_id][0] assert first_pred_time > last_context_time - + # Verify timestamps are evenly spaced according to frequency pred_times = prediction_timestamps[series_id] assert len(pred_times) == 5 @@ -274,7 +279,7 @@ def test_convert_df_generates_prediction_timestamps_with_correct_frequency(freq) def test_convert_df_skips_validation_when_disabled(): """Test that validate_inputs=False skips validation.""" df = create_df(series_ids=["A", "B"], n_points=[10, 12], target_cols=["target"], freq="h") - + # Mock validate_df_inputs to verify it's not called when validation is disabled with patch("chronos.df_utils.validate_df_inputs") as mock_validate: inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( @@ -284,10 +289,10 @@ def test_convert_df_skips_validation_when_disabled(): prediction_length=5, validate_inputs=False, ) - + # Verify validate_df_inputs was not called mock_validate.assert_not_called() - + # Verify conversion still works assert len(inputs) == 2 @@ -300,17 +305,19 @@ def test_convert_df_preserves_all_values_with_random_inputs(): n_past_only_covariates = np.random.randint(1, 3) n_future_covariates = np.random.randint(1, 3) prediction_length = 5 - + series_ids = [f"series_{i}" for i in range(n_series)] n_points = [np.random.randint(10, 20) for _ in range(n_series)] target_cols = [f"target_{i}" for i in range(n_targets)] past_only_covariates = [f"past_cov_{i}" for i in range(n_past_only_covariates)] future_covariates = [f"future_cov_{i}" for i in range(n_future_covariates)] all_covariates = past_only_covariates + future_covariates - + # Create dataframe with all covariates - df = create_df(series_ids=series_ids, n_points=n_points, target_cols=target_cols, covariates=all_covariates, freq="h") - + df = create_df( + series_ids=series_ids, n_points=n_points, target_cols=target_cols, covariates=all_covariates, freq="h" + ) + # Create future_df with only future covariates (not past-only ones) forecast_start_times = get_forecast_start_times(df, freq="h") future_df = create_future_df( @@ -318,9 +325,9 @@ def test_convert_df_preserves_all_values_with_random_inputs(): series_ids=series_ids, n_points=[prediction_length] * n_series, covariates=future_covariates, - freq="h" + freq="h", ) - + # Convert to list-of-dicts format inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( df=df, @@ -328,23 +335,23 @@ def test_convert_df_preserves_all_values_with_random_inputs(): target_columns=target_cols, prediction_length=prediction_length, ) - + # Verify all target values are preserved exactly df_sorted = df.sort_values(["item_id", "timestamp"]) for i, series_id in enumerate(series_ids): series_data = df_sorted[df_sorted["item_id"] == series_id] assert inputs[i]["target"].shape == (n_targets, n_points[i]) - + for j, target_col in enumerate(target_cols): np.testing.assert_array_almost_equal(inputs[i]["target"][j], series_data[target_col].values) - + # Verify all past covariate values are preserved (both past-only and future covariates) for i, series_id in enumerate(series_ids): series_data = df_sorted[df_sorted["item_id"] == series_id] assert "past_covariates" in inputs[i] for cov in all_covariates: np.testing.assert_array_almost_equal(inputs[i]["past_covariates"][cov], series_data[cov].values) - + # Verify only future covariates are in future_covariates (not past-only ones) future_df_sorted = future_df.sort_values(["item_id", "timestamp"]) for i, series_id in enumerate(series_ids): @@ -354,8 +361,102 @@ def test_convert_df_preserves_all_values_with_random_inputs(): assert set(inputs[i]["future_covariates"].keys()) == set(future_covariates) for cov in future_covariates: np.testing.assert_array_almost_equal(inputs[i]["future_covariates"][cov], series_future_data[cov].values) - + # Verify output structure is correct assert len(inputs) == n_series assert list(original_order) == series_ids assert len(prediction_timestamps) == n_series + + +def test_convert_df_with_freq_and_validate_inputs_raises_error(): + """Test that providing freq with validate_inputs=True raises ValueError.""" + df = create_df(series_ids=["A", "B"], n_points=[10, 12], target_cols=["target"], freq="h") + + with pytest.raises(ValueError, match="freq can only be provided when validate_inputs=False"): + convert_df_input_to_list_of_dicts_input( + df=df, + future_df=None, + target_columns=["target"], + prediction_length=5, + freq="h", + validate_inputs=True, + ) + + +@pytest.mark.parametrize("use_future_df", [True, False]) +def test_convert_df_with_freq_and_validate_inputs_false(use_future_df): + """Test that freq works with validate_inputs=False.""" + df = create_df(series_ids=["A", "B"], n_points=[10, 12], target_cols=["target"], covariates=["cov1"], freq="h") + prediction_length = 5 + + future_df = None + if use_future_df: + forecast_start_times = get_forecast_start_times(df, freq="h") + future_df = create_future_df( + forecast_start_times=forecast_start_times, + series_ids=["A", "B"], + n_points=[prediction_length, prediction_length], + covariates=["cov1"], + freq="h", + ) + + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=future_df, + target_columns=["target"], + prediction_length=prediction_length, + freq="h", + validate_inputs=False, + ) + + assert len(inputs) == 2 + assert len(prediction_timestamps) == 2 + for series_id in ["A", "B"]: + assert len(prediction_timestamps[series_id]) == prediction_length + + +@pytest.mark.parametrize("use_future_df", [True, False]) +def test_convert_df_with_mismatched_freq_uses_user_provided_freq(use_future_df): + """Test that user-provided freq overrides data frequency when validate_inputs=False.""" + # Create data with hourly frequency + data_freq = "h" + df = create_df( + series_ids=["A", "B"], n_points=[10, 12], target_cols=["target"], covariates=["cov1"], freq=data_freq + ) + prediction_length = 5 + + # User provides daily frequency (different from data) + user_freq = "D" + + future_df = None + if use_future_df: + # Create future_df with hourly frequency (matching data, not user freq) + forecast_start_times = get_forecast_start_times(df, freq=data_freq) + future_df = create_future_df( + forecast_start_times=forecast_start_times, + series_ids=["A", "B"], + n_points=[prediction_length, prediction_length], + covariates=["cov1"], + freq=data_freq, + ) + + inputs, original_order, prediction_timestamps = convert_df_input_to_list_of_dicts_input( + df=df, + future_df=future_df, + target_columns=["target"], + prediction_length=prediction_length, + freq=user_freq, + validate_inputs=False, + ) + + # Prediction should work + assert len(inputs) == 2 + assert len(prediction_timestamps) == 2 + + # Forecast timestamps should use user-provided freq (daily), not data freq (hourly) + for series_id in ["A", "B"]: + pred_ts = prediction_timestamps[series_id] + assert len(pred_ts) == prediction_length + # Verify the frequency matches user-provided freq + inferred_freq = pd.infer_freq(pred_ts) + assert inferred_freq == user_freq From 0e9db70afc1c046867b4925e881c89458d3dda94 Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Thu, 19 Feb 2026 10:10:07 +0100 Subject: [PATCH 59/60] Move input preparation outside of Chronos2Dataset (#466) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit *Issue #, if available:* This PR enables fine-tuning on datasets that don't fit into memory. The main idea is to decouple the preprocessing logic from the `Chronos2Dataset` class. The workflow is as follows: 1. Preprocess raw data once using `prepare_tasks()` → save to any `Sequence[PreparedTask]` container like `datasets.Dataset` 2. During training, load tasks lazily via memory-mapped Arrow files 3. Pass data to `pipeline.fit(..., convert_inputs=False)` to skip redundant preprocessing *Description of changes:* - Added `PreparedTask` `TypedDict` defining the preprocessed task schema (context, future_covariates, n_targets, n_covariates, n_future_covariates as torch.Tensor/int) - Extracted `prepare_tasks()` as a standalone function so it can be used in preprocessing scripts - Added `convert_inputs` parameter to `Chronos2Dataset` and `Chronos2Pipeline.fit()` to toggle between raw input preprocessing (default) and pre-processed input passthrough. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/dataset.py | 255 ++++++++++++++++++------------- src/chronos/chronos2/pipeline.py | 20 ++- test/test_chronos2.py | 24 +++ 3 files changed, 182 insertions(+), 117 deletions(-) diff --git a/src/chronos/chronos2/dataset.py b/src/chronos/chronos2/dataset.py index cb75571..1b8a77a 100644 --- a/src/chronos/chronos2/dataset.py +++ b/src/chronos/chronos2/dataset.py @@ -5,7 +5,7 @@ import math from enum import Enum -from typing import TYPE_CHECKING, Iterator, Mapping, Sequence, TypeAlias, cast +from typing import TYPE_CHECKING, Any, Iterable, Iterator, Mapping, Sequence, TypeAlias, TypedDict, cast import numpy as np import torch @@ -20,6 +20,16 @@ if TYPE_CHECKING: TensorOrArray: TypeAlias = torch.Tensor | np.ndarray +class PreparedTask(TypedDict): + """A preprocessed time series task ready for model training/inference.""" + + context: torch.Tensor # (n_variates, history_length), float32 + future_covariates: torch.Tensor # (n_variates, prediction_length), float32 + n_targets: int + n_covariates: int + n_future_covariates: int + + def left_pad_and_cat_2D(tensors: list[torch.Tensor]) -> torch.Tensor: """ Left pads tensors in the list to the length of the longest tensor along the second axis, then concats @@ -39,7 +49,7 @@ def left_pad_and_cat_2D(tensors: list[torch.Tensor]) -> torch.Tensor: def validate_and_prepare_single_dict_task( task: Mapping[str, TensorOrArray | Mapping[str, TensorOrArray]], idx: int, prediction_length: int -) -> tuple[torch.Tensor, torch.Tensor, int, int, int]: +) -> PreparedTask: """Validates and prepares a single dictionary task for Chronos2Model. Parameters @@ -197,15 +207,98 @@ def validate_and_prepare_single_dict_task( # number of known-future covariates task_n_future_covariates = len(task_future_covariates_keys) - return ( - task_context_tensor, - task_future_covariates_tensor, - task_n_targets, - task_n_covariates, - task_n_future_covariates, + return PreparedTask( + context=task_context_tensor, + future_covariates=task_future_covariates_tensor, + n_targets=task_n_targets, + n_covariates=task_n_covariates, + n_future_covariates=task_n_future_covariates, ) +def prepare_tasks( + raw_tasks: Iterable[Mapping[str, Any]], + prediction_length: int, + min_past: int = 1, + mode: "DatasetMode | str" = "train", +) -> list[PreparedTask]: + """Prepare multiple time series tasks for training/inference. + + This function handles mode-specific preprocessing (e.g., filtering short series) + and calls validate_and_prepare_single_dict_task for each task. + """ + tasks: list[PreparedTask] = [] + + for idx, raw_task in enumerate(raw_tasks): + # For non-TEST modes, fix future_covariates (replace None/empty with NaN arrays) + if mode != DatasetMode.TEST: + raw_future_covariates = raw_task.get("future_covariates", {}) + if raw_future_covariates: + raw_future_covariates = cast(dict[str, TensorOrArray | None], raw_future_covariates) + fixed_future_covariates = {} + for key, value in raw_future_covariates.items(): + fixed_future_covariates[key] = ( + np.full(prediction_length, np.nan) if value is None or len(value) == 0 else value + ) + raw_task = {**raw_task, "future_covariates": fixed_future_covariates} + + raw_task = cast(dict[str, TensorOrArray | Mapping[str, TensorOrArray]], raw_task) + task = validate_and_prepare_single_dict_task(raw_task, idx, prediction_length) + + # Filter by minimum length (except in TEST mode) + if mode != DatasetMode.TEST and task["context"].shape[-1] < min_past + prediction_length: + continue + + tasks.append(task) + + if len(tasks) == 0: + raise ValueError( + "The dataset is empty after filtering based on the length of the time series (length >= min_past + prediction_length). " + "Please provide longer time series or reduce `min_past` or `prediction_length`. " + ) + + return tasks + + +def validate_prepared_schema(task: Any) -> None: + """Validate that a task matches the PreparedTask schema.""" + if not isinstance(task, Mapping): + raise TypeError( + f"Expected task to be a dict-like, got {type(task).__name__}. " + "Set convert_inputs=True when calling fit() to preprocess raw inputs." + ) + + required_keys = {"context", "future_covariates", "n_targets", "n_covariates", "n_future_covariates"} + missing = required_keys - set(task.keys()) + if missing: + raise TypeError( + f"Task is missing required keys: {missing}. Set convert_inputs=True when calling fit() to preprocess raw inputs." + ) + + context = task["context"] + if not isinstance(context, torch.Tensor) or context.ndim != 2: + raise TypeError( + f"Expected 'context' to be 2-d torch.Tensor, got {type(context).__name__} " + f"with shape {getattr(context, 'shape', 'N/A')}. " + "Set convert_inputs=True when calling fit() to preprocess raw inputs." + ) + + future_covariates = task["future_covariates"] + if not isinstance(future_covariates, torch.Tensor) or future_covariates.ndim != 2: + raise TypeError( + f"Expected 'future_covariates' to be 2-d torch.Tensor, got {type(future_covariates).__name__} " + f"with shape {getattr(future_covariates, 'shape', 'N/A')}. " + "Set convert_inputs=True when calling fit() to preprocess raw inputs." + ) + + if context.shape[0] != future_covariates.shape[0]: + raise ValueError( + f"Expected 'context' and 'future_covariates' to have the same first dimension, " + f"got {context.shape[0]} and {future_covariates.shape[0]}. " + "Set convert_inputs=True when calling fit() to preprocess raw inputs." + ) + + def convert_list_of_tensors_input_to_list_of_dicts_input( list_of_tensors: Sequence[TensorOrArray], ) -> list[dict[str, torch.Tensor]]: @@ -383,49 +476,65 @@ class Chronos2Dataset(IterableDataset): Arguments ---------- inputs - Time series data. Must be a list of dictionaries where each dictionary may have the following keys. - - `target` (required): a 1-d or 2-d `torch.Tensor` or `np.ndarray` of shape (history_length,) or (n_variates, history_length). - Forecasts will be generated for items in `target`. - - `past_covariates` (optional): a dict of past-only covariates or past values of known future covariates. The keys of the dict - must be names of the covariates and values must be 1-d `torch.Tensor` or `np.ndarray` with length equal to the `history_length` - of `target`. - - `future_covariates` (optional): a dict of future values of known future covariates. The keys of the dict must be names of the - covariates and values must be 1-d `torch.Tensor` or `np.ndarray` with length equal to the `prediction_length`. All keys in - `future_covariates` must be a subset of the keys in `past_covariates`. - Note: when the mode is set to TRAIN, the values inside `future_covariates` are not technically used for training the model; - however, this key is used to infer which covariates are known into the future. Therefore, if your task contains known future covariates, - make sure that this key exists in `inputs`. The values of individual future covariates may be set to `None` or an empty array. + Time series data. Can be either: + + 1. Raw inputs (when `convert_inputs=True`, default): A sequence of dictionaries where each + dictionary may have the following keys: + - `target` (required): a 1-d or 2-d `torch.Tensor` or `np.ndarray` of shape (history_length,) + or (n_variates, history_length). Forecasts will be generated for items in `target`. + - `past_covariates` (optional): a dict of past-only covariates or past values of known future + covariates. + - `future_covariates` (optional): a dict of future values of known future covariates. + + 2. Pre-processed inputs (when `convert_inputs=False`): A sequence of `PreparedTask` dicts with keys: + `context`, `future_covariates`, `n_targets`, `n_covariates`, `n_future_covariates`. + Use `prepare_tasks()` to create pre-processed inputs. context_length The maximum context length used for training or inference prediction_length The prediction horizon batch_size - The batch size for training the model. Note that the batch size here means the number of time series, including target(s) and - covariates, that are input into the model. If your data has multiple target and/or covariates, the effective number of time series - tasks in a batch will be lower than this value. + The batch size for training the model. Note that the batch size here means the number of time series, + including target(s) and covariates, that are input into the model. output_patch_size - The output patch size of the model. This is used to compute the number of patches needed to cover `prediction_length` + The output patch size of the model. This is used to compute the number of patches needed to cover + `prediction_length` min_past - The minimum number of time steps the context must have during training. All time series shorter than `min_past + prediction_length` - are filtered out, by default 1 + The minimum number of time steps the context must have during training. All time series shorter than + `min_past + prediction_length` are filtered out, by default 1 mode `DatasetMode` governing whether to generate training, validation or test samples, by default "train" + convert_inputs + If True (default), preprocess raw inputs. If False, inputs are expected to be already preprocessed. """ def __init__( self, - inputs: Sequence[Mapping[str, TensorOrArray | Mapping[str, TensorOrArray | None]]], + inputs: TensorOrArray | Sequence[TensorOrArray] | Sequence[Mapping[str, Any]] | Sequence[PreparedTask], context_length: int, prediction_length: int, batch_size: int, output_patch_size: int, min_past: int = 1, mode: str | DatasetMode = DatasetMode.TRAIN, + convert_inputs: bool = True, ) -> None: super().__init__() assert mode in {DatasetMode.TRAIN, DatasetMode.VALIDATION, DatasetMode.TEST}, f"Invalid mode: {mode}" - self.tasks = Chronos2Dataset._prepare_tasks(inputs, prediction_length, min_past, mode) + self.tasks: Sequence[PreparedTask] + if convert_inputs: + if isinstance(inputs, (torch.Tensor, np.ndarray)): + inputs = convert_tensor_input_to_list_of_dicts_input(inputs) + elif ( + isinstance(inputs, Sequence) and len(inputs) > 0 and isinstance(inputs[0], (torch.Tensor, np.ndarray)) + ): + inputs = convert_list_of_tensors_input_to_list_of_dicts_input(cast(Sequence[TensorOrArray], inputs)) + self.tasks = prepare_tasks(cast(Iterable[Mapping[str, Any]], inputs), prediction_length, min_past, mode) + else: + validate_prepared_schema(inputs[0]) + self.tasks = cast(Sequence[PreparedTask], inputs) + self.context_length = context_length self.prediction_length = prediction_length self.batch_size = batch_size @@ -433,51 +542,13 @@ class Chronos2Dataset(IterableDataset): self.min_past = min_past self.mode = mode - @staticmethod - def _prepare_tasks( - inputs: Sequence[Mapping[str, TensorOrArray | Mapping[str, TensorOrArray | None]]], - prediction_length: int, - min_past: int, - mode: str | DatasetMode, - ): - tasks = [] - for idx, raw_task in enumerate(inputs): - if mode != DatasetMode.TEST: - raw_future_covariates = raw_task.get("future_covariates", {}) - raw_future_covariates = cast(dict[str, TensorOrArray | None], raw_future_covariates) - if raw_future_covariates: - fixed_future_covariates = {} - for key, value in raw_future_covariates.items(): - fixed_future_covariates[key] = ( - np.full(prediction_length, np.nan) if value is None or len(value) == 0 else value - ) - raw_task = {**raw_task, "future_covariates": fixed_future_covariates} - - raw_task = cast(dict[str, TensorOrArray | Mapping[str, TensorOrArray]], raw_task) - # convert to a format compatible with model's forward - task = validate_and_prepare_single_dict_task(raw_task, idx, prediction_length) - - if mode != DatasetMode.TEST and task[0].shape[-1] < min_past + prediction_length: - # filter tasks based on min_past + prediction_length - continue - tasks.append(task) - - if len(tasks) == 0: - raise ValueError( - "The dataset is empty after filtering based on the length of the time series (length >= min_past + prediction_length). " - "Please provide longer time series or reduce `min_past` or `prediction_length`. " - ) - return tasks - def _construct_slice(self, task_idx: int) -> tuple[torch.Tensor, torch.Tensor | None, torch.Tensor, int]: - ( - task_past_tensor, # shape: (task_n_targets + task_n_covariates, history_length) - task_future_tensor, - task_n_targets, - task_n_covariates, - task_n_future_covariates, - ) = self.tasks[task_idx] - task_past_tensor, task_future_tensor = task_past_tensor.clone(), task_future_tensor.clone() + task = self.tasks[task_idx] + task_past_tensor = task["context"].clone() # shape: (task_n_targets + task_n_covariates, history_length) + task_future_tensor = task["future_covariates"].clone() + task_n_targets = int(task["n_targets"]) + task_n_covariates = int(task["n_covariates"]) + task_n_future_covariates = int(task["n_future_covariates"]) task_n_past_only_covariates = task_n_covariates - task_n_future_covariates full_length = task_past_tensor.shape[-1] @@ -575,7 +646,7 @@ class Chronos2Dataset(IterableDataset): while current_batch_size < self.batch_size: task_idx = np.random.randint(len(self.tasks)) task_indices.append(task_idx) - current_batch_size += self.tasks[task_idx][0].shape[0] + current_batch_size += self.tasks[task_idx]["context"].shape[0] yield self._build_batch(task_indices) @@ -587,7 +658,7 @@ class Chronos2Dataset(IterableDataset): while task_idx < len(self.tasks) and current_batch_size < self.batch_size: task_indices.append(task_idx) - current_batch_size += self.tasks[task_idx][0].shape[0] + current_batch_size += self.tasks[task_idx]["context"].shape[0] task_idx += 1 yield self._build_batch(task_indices) @@ -617,39 +688,3 @@ class Chronos2Dataset(IterableDataset): yield batch else: yield from self._generate_sequential_batches() - - @classmethod - def convert_inputs( - cls, - inputs: TensorOrArray - | Sequence[TensorOrArray] - | Sequence[Mapping[str, TensorOrArray | Mapping[str, TensorOrArray | None]]], - context_length: int, - prediction_length: int, - batch_size: int, - output_patch_size: int, - min_past: int = 1, - mode: str | DatasetMode = DatasetMode.TRAIN, - ) -> "Chronos2Dataset": - """Convert from different input formats to a Chronos2Dataset.""" - if isinstance(inputs, (torch.Tensor, np.ndarray)): - inputs = convert_tensor_input_to_list_of_dicts_input(inputs) - elif isinstance(inputs, list) and all([isinstance(x, (torch.Tensor, np.ndarray)) for x in inputs]): - inputs = cast(list[TensorOrArray], inputs) - inputs = convert_list_of_tensors_input_to_list_of_dicts_input(inputs) - elif isinstance(inputs, list) and all([isinstance(x, dict) for x in inputs]): - pass - else: - raise ValueError("Unexpected inputs format") - - inputs = cast(list[dict[str, TensorOrArray | dict[str, TensorOrArray]]], inputs) - - return cls( - inputs, - context_length=context_length, - prediction_length=prediction_length, - batch_size=batch_size, - output_patch_size=output_patch_size, - min_past=min_past, - mode=mode, - ) diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index c7ccbbb..bff11d1 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -115,6 +115,7 @@ class Chronos2Pipeline(BaseChronosPipeline): callbacks: list["TrainerCallback"] | None = None, remove_printer_callback: bool = False, disable_data_parallel: bool = True, + convert_inputs: bool = True, **extra_trainer_kwargs, ) -> "Chronos2Pipeline": """ @@ -161,6 +162,10 @@ class Chronos2Pipeline(BaseChronosPipeline): If True, all instances of `PrinterCallback` are removed from callbacks disable_data_parallel If True, ensures that DataParallel is disabled and training happens on a single GPU + convert_inputs + If True (default), preprocess raw inputs (convert tensors, encode categoricals, validate). + If False, inputs are expected to be already preprocessed using `chronos.chronos2.dataset.prepare_tasks`. + This allows for efficient training on large datasets that don't fit in memory. **extra_trainer_kwargs Extra kwargs are directly forwarded to `TrainingArguments` @@ -229,7 +234,7 @@ class Chronos2Pipeline(BaseChronosPipeline): if min_past is None: min_past = prediction_length - train_dataset = Chronos2Dataset.convert_inputs( + train_dataset = Chronos2Dataset( inputs=inputs, context_length=context_length, prediction_length=prediction_length, @@ -237,6 +242,7 @@ class Chronos2Pipeline(BaseChronosPipeline): output_patch_size=self.model_output_patch_size, min_past=min_past, mode=DatasetMode.TRAIN, + convert_inputs=convert_inputs, ) if output_dir is None: @@ -290,14 +296,14 @@ class Chronos2Pipeline(BaseChronosPipeline): eval_dataset = None callbacks = callbacks or [] if validation_inputs is not None: - # construct validation dataset - eval_dataset = Chronos2Dataset.convert_inputs( + eval_dataset = Chronos2Dataset( inputs=validation_inputs, context_length=context_length, prediction_length=prediction_length, batch_size=batch_size, output_patch_size=self.model_output_patch_size, mode=DatasetMode.VALIDATION, + convert_inputs=convert_inputs, ) # set validation parameters @@ -610,8 +616,8 @@ class Chronos2Pipeline(BaseChronosPipeline): ) context_length = self.model_context_length - test_dataset = Chronos2Dataset.convert_inputs( - inputs=inputs, + test_dataset = Chronos2Dataset( + inputs, context_length=context_length, prediction_length=prediction_length, batch_size=batch_size, @@ -1136,8 +1142,8 @@ class Chronos2Pipeline(BaseChronosPipeline): ) context_length = self.model_context_length - test_dataset = Chronos2Dataset.convert_inputs( - inputs=inputs, + test_dataset = Chronos2Dataset( + inputs, context_length=context_length, prediction_length=0, batch_size=batch_size, diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 3d8884e..07d41a6 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -1143,3 +1143,27 @@ def test_eager_and_sdpa_produce_identical_outputs(pipeline): for out_eager, out_sdpa in zip(outputs_eager_grouped, outputs_sdpa_grouped): # Should match exactly or very close (numerical precision) assert torch.allclose(out_eager, out_sdpa, atol=1e-5, rtol=1e-4) + + +def test_pipeline_can_be_finetuned_with_preprocessed_hf_dataset(pipeline): + """Test that fine-tuning works with preprocessed inputs from a HuggingFace Dataset.""" + from chronos.chronos2.dataset import prepare_tasks + + prediction_length = 8 + raw_inputs = [{"target": torch.rand(20)}, {"target": torch.rand(25)}, {"target": torch.rand(30)}] + + # Preprocess and convert to HF Dataset (simulating Arrow-based lazy loading) + prepared_tasks = prepare_tasks(raw_inputs, prediction_length=prediction_length, min_past=1, mode="train") + hf_dataset = datasets.Dataset.from_list(prepared_tasks).with_format("torch") + + # Fine-tune with preprocessed inputs + ft_pipeline = pipeline.fit( + hf_dataset, prediction_length=prediction_length, num_steps=5, min_past=1, batch_size=32, convert_inputs=False + ) + + # Verify fine-tuned model can predict + ft_outputs = ft_pipeline.predict(raw_inputs, prediction_length=prediction_length) + assert len(ft_outputs) == len(raw_inputs) + for ft_out in ft_outputs: + assert ft_out.shape == (1, DEFAULT_MODEL_NUM_QUANTILES, prediction_length) + assert not torch.isnan(ft_out).any() From f951d9aefa06f5389b2ed6b0e51fd5a1a4cf194b Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Thu, 19 Feb 2026 13:30:08 +0100 Subject: [PATCH 60/60] Rename task -> input in dataset.py (#467) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit *Issue #, if available:* *Description of changes:* Rename all variables and methods that refer to "task" in `dataset.py` to use `input` instead: - `PreparedTask` → `PreparedInput` - `self.tasks` → `self.inputs` - `prepare_tasks` → `prepare_inputs` - `validate_and_prepare_single_dict_task` → `validate_and_prepare_single_dict_input` - All `task_` prefixed local variables renamed (e.g., `task_target` → `target`, `task_context` → `context`, `task_past_tensor` → `past_tensor`, etc.) By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- src/chronos/chronos2/dataset.py | 322 +++++++++++++++---------------- src/chronos/chronos2/pipeline.py | 2 +- test/test_chronos2.py | 4 +- 3 files changed, 164 insertions(+), 164 deletions(-) diff --git a/src/chronos/chronos2/dataset.py b/src/chronos/chronos2/dataset.py index 1b8a77a..2e1b6a1 100644 --- a/src/chronos/chronos2/dataset.py +++ b/src/chronos/chronos2/dataset.py @@ -20,8 +20,8 @@ if TYPE_CHECKING: TensorOrArray: TypeAlias = torch.Tensor | np.ndarray -class PreparedTask(TypedDict): - """A preprocessed time series task ready for model training/inference.""" +class PreparedInput(TypedDict): + """A preprocessed time series input ready for model training/inference.""" context: torch.Tensor # (n_variates, history_length), float32 future_covariates: torch.Tensor # (n_variates, prediction_length), float32 @@ -47,14 +47,14 @@ def left_pad_and_cat_2D(tensors: list[torch.Tensor]) -> torch.Tensor: return torch.cat(padded, dim=0) -def validate_and_prepare_single_dict_task( - task: Mapping[str, TensorOrArray | Mapping[str, TensorOrArray]], idx: int, prediction_length: int -) -> PreparedTask: - """Validates and prepares a single dictionary task for Chronos2Model. +def validate_and_prepare_single_dict_input( + raw_input: Mapping[str, TensorOrArray | Mapping[str, TensorOrArray]], idx: int, prediction_length: int +) -> PreparedInput: + """Validates and prepares a single dictionary input for Chronos2Model. Parameters ---------- - task + raw_input A dictionary representing a time series that contains: - `target` (required): a 1-d or 2-d `torch.Tensor` or `np.ndarray` of shape (history_length,) or (n_variates, history_length). Forecasts will be generated for items in `target`. @@ -65,27 +65,27 @@ def validate_and_prepare_single_dict_task( covariates and values must be 1-d `torch.Tensor` or `np.ndarray` with length equal to the `prediction_length`. All keys in `future_covariates` must be a subset of the keys in `past_covariates`. idx - Index of this task in the list of tasks, used for error messages + Index of this input in the list of inputs, used for error messages prediction_length Number of future time steps to predict, used to validate future covariates Returns ------ - A tuple containing: - - task_context_tensor: Concatenated tensor of target and past covariates of shape (group_size, history_length), - the first `task_n_targets` items along the first axis contain the target variables and the remaining items contain past-only covariates + A PreparedInput containing: + - context: Concatenated tensor of target and past covariates of shape (group_size, history_length), + the first `n_targets` items along the first axis contain the target variables and the remaining items contain past-only covariates and past values of known future covariates. - - task_future_covariates_tensor: Tensor of future covariates of shape (group_size, prediction_length). The last `task_n_future_covariates` + - future_covariates: Tensor of future covariates of shape (group_size, prediction_length). The last `n_future_covariates` items along the first axis contain future covariates. All the remaining elements corresponding to target and past-only covariates are NaNs. - - task_n_targets: Number of target variables - - task_n_covariates: Total number of covariates (sum of past-only and known future covariates) - - task_n_future_covariates: Number of known future covariates + - n_targets: Number of target variables + - n_covariates: Total number of covariates (sum of past-only and known future covariates) + - n_future_covariates: Number of known future covariates """ allowed_keys = {"target", "past_covariates", "future_covariates"} # validate keys - keys = set(task.keys()) + keys = set(raw_input.keys()) if not keys.issubset(allowed_keys): raise ValueError( f"Found invalid keys in element at index {idx}. Allowed keys are {allowed_keys}, but found {keys}" @@ -94,58 +94,58 @@ def validate_and_prepare_single_dict_task( raise ValueError(f"Element at index {idx} does not contain the required key 'target'") # validate target - task_target = task["target"] - if isinstance(task_target, np.ndarray): - task_target = torch.from_numpy(task_target) - assert isinstance(task_target, torch.Tensor) - if task_target.ndim > 2: + target = raw_input["target"] + if isinstance(target, np.ndarray): + target = torch.from_numpy(target) + assert isinstance(target, torch.Tensor) + if target.ndim > 2: raise ValueError( "When the input is a list of dicts, the `target` should either be 1-d with shape (history_length,) " - f" or 2-d with shape (n_variates, history_length). Found element at index {idx} with shape {tuple(task_target.shape)}." + f" or 2-d with shape (n_variates, history_length). Found element at index {idx} with shape {tuple(target.shape)}." ) - history_length = task_target.shape[-1] - task_target = task_target.view(-1, history_length) + history_length = target.shape[-1] + target = target.view(-1, history_length) # validate past_covariates cat_encoders: dict = {} - task_past_covariates = task.get("past_covariates", {}) - if not isinstance(task_past_covariates, dict): + past_covariates = raw_input.get("past_covariates", {}) + if not isinstance(past_covariates, dict): raise ValueError( f"Found invalid type for `past_covariates` in element at index {idx}. " - f'Expected dict with {{"feat_1": tensor_1, "feat_2": tensor_2, ...}}, but found {type(task_past_covariates)}' + f'Expected dict with {{"feat_1": tensor_1, "feat_2": tensor_2, ...}}, but found {type(past_covariates)}' ) # gather keys and ensure known-future keys come last to match downstream assumptions - task_covariates_keys = sorted(task_past_covariates.keys()) + covariates_keys = sorted(past_covariates.keys()) - task_future_covariates = task.get("future_covariates", {}) - if not isinstance(task_future_covariates, dict): + future_covariates = raw_input.get("future_covariates", {}) + if not isinstance(future_covariates, dict): raise ValueError( f"Found invalid type for `future_covariates` in element at index {idx}. " - f'Expected dict with {{"feat_1": tensor_1, "feat_2": tensor_2, ...}}, but found {type(task_future_covariates)}' + f'Expected dict with {{"feat_1": tensor_1, "feat_2": tensor_2, ...}}, but found {type(future_covariates)}' ) - task_future_covariates_keys = sorted(task_future_covariates.keys()) - if not set(task_future_covariates_keys).issubset(task_covariates_keys): + future_covariates_keys = sorted(future_covariates.keys()) + if not set(future_covariates_keys).issubset(covariates_keys): raise ValueError( - f"Expected keys in `future_covariates` to be a subset of `past_covariates` {task_covariates_keys}, " - f"but found {task_future_covariates_keys} in element at index {idx}" + f"Expected keys in `future_covariates` to be a subset of `past_covariates` {covariates_keys}, " + f"but found {future_covariates_keys} in element at index {idx}" ) # create ordered keys: past-only first, then known-future (so known-future are the last rows) - task_past_only_keys = [k for k in task_covariates_keys if k not in task_future_covariates_keys] # past_only_keys - task_ordered_covariate_keys = task_past_only_keys + task_future_covariates_keys + past_only_keys = [k for k in covariates_keys if k not in future_covariates_keys] + ordered_covariate_keys = past_only_keys + future_covariates_keys - task_past_covariates_list: list[torch.Tensor] = [] - for key in task_ordered_covariate_keys: - tensor = task_past_covariates[key] + past_covariates_list: list[torch.Tensor] = [] + for key in ordered_covariate_keys: + tensor = past_covariates[key] if isinstance(tensor, np.ndarray): # apply encoding to categorical variates if not np.issubdtype(tensor.dtype, np.number): # target encoding, if the target is 1-d - if task_target.shape[0] == 1: + if target.shape[0] == 1: cat_encoder = TargetEncoder(target_type="continuous", smooth=1.0) X = tensor.astype(str).reshape(-1, 1) - y = task_target.view(-1).numpy() + y = target.view(-1).numpy() mask = np.isfinite(y) X = X[mask] y = y[mask] @@ -163,18 +163,18 @@ def validate_and_prepare_single_dict_task( f"Individual `past_covariates` must be 1-d with length equal to the length of `target` (= {history_length}), " f"found: {key} with shape {tuple(tensor.shape)} in element at index {idx}" ) - task_past_covariates_list.append(tensor) - task_past_covariates_tensor = ( - torch.stack(task_past_covariates_list, dim=0) - if task_past_covariates_list - else torch.zeros((0, history_length), device=task_target.device) + past_covariates_list.append(tensor) + past_covariates_tensor = ( + torch.stack(past_covariates_list, dim=0) + if past_covariates_list + else torch.zeros((0, history_length), device=target.device) ) - # validate future_covariates (build rows in the same task_ordered_covariate_keys order) - task_future_covariates_list: list[torch.Tensor] = [] - for key in task_ordered_covariate_keys: + # validate future_covariates (build rows in the same ordered_covariate_keys order) + future_covariates_list: list[torch.Tensor] = [] + for key in ordered_covariate_keys: # future values of past-only covariates are filled with NaNs - tensor = task_future_covariates.get(key, torch.full((prediction_length,), fill_value=torch.nan)) + tensor = future_covariates.get(key, torch.full((prediction_length,), fill_value=torch.nan)) if isinstance(tensor, np.ndarray): # apply encoding to categorical variates if not np.issubdtype(tensor.dtype, np.number): @@ -187,52 +187,52 @@ def validate_and_prepare_single_dict_task( f"Individual `future_covariates` must be 1-d with length equal to the {prediction_length=}, " f"found: {key} with shape {tuple(tensor.shape)} in element at index {idx}" ) - task_future_covariates_list.append(tensor) - task_future_covariates_tensor = ( - torch.stack(task_future_covariates_list, dim=0) - if task_future_covariates_list - else torch.zeros((0, prediction_length), device=task_target.device) + future_covariates_list.append(tensor) + future_covariates_tensor = ( + torch.stack(future_covariates_list, dim=0) + if future_covariates_list + else torch.zeros((0, prediction_length), device=target.device) ) # future values of target series are filled with NaNs - task_future_covariates_target_padding = torch.full( - (task_target.shape[0], prediction_length), fill_value=torch.nan, device=task_target.device + future_covariates_target_padding = torch.full( + (target.shape[0], prediction_length), fill_value=torch.nan, device=target.device ) - task_context_tensor = torch.cat([task_target, task_past_covariates_tensor], dim=0).to(dtype=torch.float32) - task_future_covariates_tensor = torch.cat( - [task_future_covariates_target_padding, task_future_covariates_tensor], dim=0 + context_tensor = torch.cat([target, past_covariates_tensor], dim=0).to(dtype=torch.float32) + future_covariates_tensor = torch.cat( + [future_covariates_target_padding, future_covariates_tensor], dim=0 ).to(dtype=torch.float32) - task_n_targets = task_target.shape[0] - task_n_covariates = task_past_covariates_tensor.shape[0] + n_targets = target.shape[0] + n_covariates = past_covariates_tensor.shape[0] # number of known-future covariates - task_n_future_covariates = len(task_future_covariates_keys) + n_future_covariates = len(future_covariates_keys) - return PreparedTask( - context=task_context_tensor, - future_covariates=task_future_covariates_tensor, - n_targets=task_n_targets, - n_covariates=task_n_covariates, - n_future_covariates=task_n_future_covariates, + return PreparedInput( + context=context_tensor, + future_covariates=future_covariates_tensor, + n_targets=n_targets, + n_covariates=n_covariates, + n_future_covariates=n_future_covariates, ) -def prepare_tasks( - raw_tasks: Iterable[Mapping[str, Any]], +def prepare_inputs( + raw_inputs: Iterable[Mapping[str, Any]], prediction_length: int, min_past: int = 1, mode: "DatasetMode | str" = "train", -) -> list[PreparedTask]: - """Prepare multiple time series tasks for training/inference. +) -> list[PreparedInput]: + """Prepare multiple time series inputs for training/inference. This function handles mode-specific preprocessing (e.g., filtering short series) - and calls validate_and_prepare_single_dict_task for each task. + and calls validate_and_prepare_single_dict_input for each input. """ - tasks: list[PreparedTask] = [] + inputs: list[PreparedInput] = [] - for idx, raw_task in enumerate(raw_tasks): + for idx, raw_input in enumerate(raw_inputs): # For non-TEST modes, fix future_covariates (replace None/empty with NaN arrays) if mode != DatasetMode.TEST: - raw_future_covariates = raw_task.get("future_covariates", {}) + raw_future_covariates = raw_input.get("future_covariates", {}) if raw_future_covariates: raw_future_covariates = cast(dict[str, TensorOrArray | None], raw_future_covariates) fixed_future_covariates = {} @@ -240,42 +240,42 @@ def prepare_tasks( fixed_future_covariates[key] = ( np.full(prediction_length, np.nan) if value is None or len(value) == 0 else value ) - raw_task = {**raw_task, "future_covariates": fixed_future_covariates} + raw_input = {**raw_input, "future_covariates": fixed_future_covariates} - raw_task = cast(dict[str, TensorOrArray | Mapping[str, TensorOrArray]], raw_task) - task = validate_and_prepare_single_dict_task(raw_task, idx, prediction_length) + raw_input = cast(dict[str, TensorOrArray | Mapping[str, TensorOrArray]], raw_input) + prepared = validate_and_prepare_single_dict_input(raw_input, idx, prediction_length) # Filter by minimum length (except in TEST mode) - if mode != DatasetMode.TEST and task["context"].shape[-1] < min_past + prediction_length: + if mode != DatasetMode.TEST and prepared["context"].shape[-1] < min_past + prediction_length: continue - tasks.append(task) + inputs.append(prepared) - if len(tasks) == 0: + if len(inputs) == 0: raise ValueError( "The dataset is empty after filtering based on the length of the time series (length >= min_past + prediction_length). " "Please provide longer time series or reduce `min_past` or `prediction_length`. " ) - return tasks + return inputs -def validate_prepared_schema(task: Any) -> None: - """Validate that a task matches the PreparedTask schema.""" - if not isinstance(task, Mapping): +def validate_prepared_schema(prepared_input: Any) -> None: + """Validate that an input matches the PreparedInput schema.""" + if not isinstance(prepared_input, Mapping): raise TypeError( - f"Expected task to be a dict-like, got {type(task).__name__}. " + f"Expected input to be a dict-like, got {type(prepared_input).__name__}. " "Set convert_inputs=True when calling fit() to preprocess raw inputs." ) required_keys = {"context", "future_covariates", "n_targets", "n_covariates", "n_future_covariates"} - missing = required_keys - set(task.keys()) + missing = required_keys - set(prepared_input.keys()) if missing: raise TypeError( - f"Task is missing required keys: {missing}. Set convert_inputs=True when calling fit() to preprocess raw inputs." + f"Input is missing required keys: {missing}. Set convert_inputs=True when calling fit() to preprocess raw inputs." ) - context = task["context"] + context = prepared_input["context"] if not isinstance(context, torch.Tensor) or context.ndim != 2: raise TypeError( f"Expected 'context' to be 2-d torch.Tensor, got {type(context).__name__} " @@ -283,7 +283,7 @@ def validate_prepared_schema(task: Any) -> None: "Set convert_inputs=True when calling fit() to preprocess raw inputs." ) - future_covariates = task["future_covariates"] + future_covariates = prepared_input["future_covariates"] if not isinstance(future_covariates, torch.Tensor) or future_covariates.ndim != 2: raise TypeError( f"Expected 'future_covariates' to be 2-d torch.Tensor, got {type(future_covariates).__name__} " @@ -486,9 +486,9 @@ class Chronos2Dataset(IterableDataset): covariates. - `future_covariates` (optional): a dict of future values of known future covariates. - 2. Pre-processed inputs (when `convert_inputs=False`): A sequence of `PreparedTask` dicts with keys: + 2. Pre-processed inputs (when `convert_inputs=False`): A sequence of `PreparedInput` dicts with keys: `context`, `future_covariates`, `n_targets`, `n_covariates`, `n_future_covariates`. - Use `prepare_tasks()` to create pre-processed inputs. + Use `prepare_inputs()` to create pre-processed inputs. context_length The maximum context length used for training or inference prediction_length @@ -510,7 +510,7 @@ class Chronos2Dataset(IterableDataset): def __init__( self, - inputs: TensorOrArray | Sequence[TensorOrArray] | Sequence[Mapping[str, Any]] | Sequence[PreparedTask], + inputs: TensorOrArray | Sequence[TensorOrArray] | Sequence[Mapping[str, Any]] | Sequence[PreparedInput], context_length: int, prediction_length: int, batch_size: int, @@ -522,7 +522,7 @@ class Chronos2Dataset(IterableDataset): super().__init__() assert mode in {DatasetMode.TRAIN, DatasetMode.VALIDATION, DatasetMode.TEST}, f"Invalid mode: {mode}" - self.tasks: Sequence[PreparedTask] + self.inputs: Sequence[PreparedInput] if convert_inputs: if isinstance(inputs, (torch.Tensor, np.ndarray)): inputs = convert_tensor_input_to_list_of_dicts_input(inputs) @@ -530,10 +530,10 @@ class Chronos2Dataset(IterableDataset): isinstance(inputs, Sequence) and len(inputs) > 0 and isinstance(inputs[0], (torch.Tensor, np.ndarray)) ): inputs = convert_list_of_tensors_input_to_list_of_dicts_input(cast(Sequence[TensorOrArray], inputs)) - self.tasks = prepare_tasks(cast(Iterable[Mapping[str, Any]], inputs), prediction_length, min_past, mode) + self.inputs = prepare_inputs(cast(Iterable[Mapping[str, Any]], inputs), prediction_length, min_past, mode) else: validate_prepared_schema(inputs[0]) - self.tasks = cast(Sequence[PreparedTask], inputs) + self.inputs = cast(Sequence[PreparedInput], inputs) self.context_length = context_length self.prediction_length = prediction_length @@ -542,16 +542,16 @@ class Chronos2Dataset(IterableDataset): self.min_past = min_past self.mode = mode - def _construct_slice(self, task_idx: int) -> tuple[torch.Tensor, torch.Tensor | None, torch.Tensor, int]: - task = self.tasks[task_idx] - task_past_tensor = task["context"].clone() # shape: (task_n_targets + task_n_covariates, history_length) - task_future_tensor = task["future_covariates"].clone() - task_n_targets = int(task["n_targets"]) - task_n_covariates = int(task["n_covariates"]) - task_n_future_covariates = int(task["n_future_covariates"]) - task_n_past_only_covariates = task_n_covariates - task_n_future_covariates + def _construct_slice(self, input_idx: int) -> tuple[torch.Tensor, torch.Tensor | None, torch.Tensor, int]: + prepared = self.inputs[input_idx] + past_tensor = prepared["context"].clone() # shape: (n_targets + n_covariates, history_length) + future_tensor = prepared["future_covariates"].clone() + n_targets = int(prepared["n_targets"]) + n_covariates = int(prepared["n_covariates"]) + n_future_covariates = int(prepared["n_future_covariates"]) + n_past_only_covariates = n_covariates - n_future_covariates - full_length = task_past_tensor.shape[-1] + full_length = past_tensor.shape[-1] if self.mode == DatasetMode.TRAIN: # slice a random subsequence from the full series @@ -565,74 +565,74 @@ class Chronos2Dataset(IterableDataset): if slice_idx >= self.context_length: # slice series, if it is longer than context_length - task_context = task_past_tensor[:, slice_idx - self.context_length : slice_idx] + context = past_tensor[:, slice_idx - self.context_length : slice_idx] else: - task_context = task_past_tensor[:, :slice_idx] + context = past_tensor[:, :slice_idx] - # In the TEST mode, we have no target available and the task_future_covariates can be directly used - # In the TRAIN and VALIDATION modes, the target and task_future_covariates need to be constructed from - # the task_context_tensor by slicing the appropriate indices which we do below + # In the TEST mode, we have no target available and the future_covariates can be directly used + # In the TRAIN and VALIDATION modes, the target and future_covariates need to be constructed from + # the context_tensor by slicing the appropriate indices which we do below if self.mode in [DatasetMode.TRAIN, DatasetMode.VALIDATION]: - # the first task_n_targets elements in task_context_tensor are the targets - task_future_target = task_past_tensor[:, slice_idx : slice_idx + self.prediction_length].clone() + # the first n_targets elements in context_tensor are the targets + future_target = past_tensor[:, slice_idx : slice_idx + self.prediction_length].clone() # mask out all rows corresponding to covariates - task_future_target[task_n_targets:] = torch.nan + future_target[n_targets:] = torch.nan - if task_n_future_covariates > 0: - # the last task_n_future_covariates elements in task_context_tensor are the known covariates - task_future_covariates = task_past_tensor[ - -task_n_future_covariates:, slice_idx : slice_idx + self.prediction_length + if n_future_covariates > 0: + # the last n_future_covariates elements in context_tensor are the known covariates + future_covariates = past_tensor[ + -n_future_covariates:, slice_idx : slice_idx + self.prediction_length ] else: # zero-length tensor for easy concatenation later - task_future_covariates = torch.zeros((0, self.prediction_length)) + future_covariates = torch.zeros((0, self.prediction_length)) - # the leading task_n_targets + task_n_past_only_covariates elements are masked because the target(s) + # the leading n_targets + n_past_only_covariates elements are masked because the target(s) # and past-only covariates are not known into the future - task_future_covariates_padding = torch.full( - (task_n_targets + task_n_past_only_covariates, self.prediction_length), + future_covariates_padding = torch.full( + (n_targets + n_past_only_covariates, self.prediction_length), fill_value=torch.nan, ) - task_future_covariates = torch.cat([task_future_covariates_padding, task_future_covariates], dim=0) + future_covariates = torch.cat([future_covariates_padding, future_covariates], dim=0) else: - task_future_target = None - task_future_covariates = task_future_tensor + future_target = None + future_covariates = future_tensor - # task_context: (task_n_targets + task_n_covariates, min(context_length, history_length)) - # task_future_target: (task_n_targets + task_n_covariates, prediction_length), the future values of known future covariates + # context: (n_targets + n_covariates, min(context_length, history_length)) + # future_target: (n_targets + n_covariates, prediction_length), the future values of known future covariates # are ignored during loss computation - # task_future_covariates: (task_n_targets + task_n_past_only_covariates + task_n_future_covariates, prediction_length), + # future_covariates: (n_targets + n_past_only_covariates + n_future_covariates, prediction_length), # the entries corresponding to targets and past-only covariates are NaNs - return task_context, task_future_target, task_future_covariates, task_n_targets + return context, future_target, future_covariates, n_targets - def _build_batch(self, task_indices: list[int]) -> dict[str, torch.Tensor | int | list[tuple[int, int]] | None]: - """Build a batch from given task indices.""" - batch_context_tensor_list = [] - batch_future_target_tensor_list = [] - batch_future_covariates_tensor_list = [] + def _build_batch(self, input_indices: list[int]) -> dict[str, torch.Tensor | int | list[tuple[int, int]] | None]: + """Build a batch from given input indices.""" + batch_context_list = [] + batch_future_target_list = [] + batch_future_covariates_list = [] batch_group_ids_list = [] target_idx_ranges: list[tuple[int, int]] = [] target_start_idx = 0 - for group_id, task_idx in enumerate(task_indices): - task_context, task_future_target, task_future_covariates, task_n_targets = self._construct_slice(task_idx) + for group_id, input_idx in enumerate(input_indices): + context, future_target, future_covariates, n_targets = self._construct_slice(input_idx) - group_size = task_context.shape[0] - task_group_ids = torch.full((group_size,), fill_value=group_id) - batch_context_tensor_list.append(task_context) - batch_future_target_tensor_list.append(task_future_target) - batch_future_covariates_tensor_list.append(task_future_covariates) - batch_group_ids_list.append(task_group_ids) - target_idx_ranges.append((target_start_idx, target_start_idx + task_n_targets)) + group_size = context.shape[0] + group_ids = torch.full((group_size,), fill_value=group_id) + batch_context_list.append(context) + batch_future_target_list.append(future_target) + batch_future_covariates_list.append(future_covariates) + batch_group_ids_list.append(group_ids) + target_idx_ranges.append((target_start_idx, target_start_idx + n_targets)) target_start_idx += group_size return { - "context": left_pad_and_cat_2D(batch_context_tensor_list), + "context": left_pad_and_cat_2D(batch_context_list), "future_target": None if self.mode == DatasetMode.TEST - else torch.cat(cast(list[torch.Tensor], batch_future_target_tensor_list), dim=0), - "future_covariates": torch.cat(batch_future_covariates_tensor_list, dim=0), + else torch.cat(cast(list[torch.Tensor], batch_future_target_list), dim=0), + "future_covariates": torch.cat(batch_future_covariates_list, dim=0), "group_ids": torch.cat(batch_group_ids_list, dim=0), "num_output_patches": self.num_output_patches, "target_idx_ranges": target_idx_ranges, @@ -641,27 +641,27 @@ class Chronos2Dataset(IterableDataset): def _generate_train_batches(self): while True: current_batch_size = 0 - task_indices = [] + input_indices = [] while current_batch_size < self.batch_size: - task_idx = np.random.randint(len(self.tasks)) - task_indices.append(task_idx) - current_batch_size += self.tasks[task_idx]["context"].shape[0] + input_idx = np.random.randint(len(self.inputs)) + input_indices.append(input_idx) + current_batch_size += self.inputs[input_idx]["context"].shape[0] - yield self._build_batch(task_indices) + yield self._build_batch(input_indices) def _generate_sequential_batches(self): - task_idx = 0 - while task_idx < len(self.tasks): + input_idx = 0 + while input_idx < len(self.inputs): current_batch_size = 0 - task_indices = [] + input_indices = [] - while task_idx < len(self.tasks) and current_batch_size < self.batch_size: - task_indices.append(task_idx) - current_batch_size += self.tasks[task_idx]["context"].shape[0] - task_idx += 1 + while input_idx < len(self.inputs) and current_batch_size < self.batch_size: + input_indices.append(input_idx) + current_batch_size += self.inputs[input_idx]["context"].shape[0] + input_idx += 1 - yield self._build_batch(task_indices) + yield self._build_batch(input_indices) def __iter__(self) -> Iterator: """ diff --git a/src/chronos/chronos2/pipeline.py b/src/chronos/chronos2/pipeline.py index bff11d1..223689d 100644 --- a/src/chronos/chronos2/pipeline.py +++ b/src/chronos/chronos2/pipeline.py @@ -164,7 +164,7 @@ class Chronos2Pipeline(BaseChronosPipeline): If True, ensures that DataParallel is disabled and training happens on a single GPU convert_inputs If True (default), preprocess raw inputs (convert tensors, encode categoricals, validate). - If False, inputs are expected to be already preprocessed using `chronos.chronos2.dataset.prepare_tasks`. + If False, inputs are expected to be already preprocessed using `chronos.chronos2.dataset.prepare_inputs`. This allows for efficient training on large datasets that don't fit in memory. **extra_trainer_kwargs Extra kwargs are directly forwarded to `TrainingArguments` diff --git a/test/test_chronos2.py b/test/test_chronos2.py index 07d41a6..2d95a37 100644 --- a/test/test_chronos2.py +++ b/test/test_chronos2.py @@ -1147,13 +1147,13 @@ def test_eager_and_sdpa_produce_identical_outputs(pipeline): def test_pipeline_can_be_finetuned_with_preprocessed_hf_dataset(pipeline): """Test that fine-tuning works with preprocessed inputs from a HuggingFace Dataset.""" - from chronos.chronos2.dataset import prepare_tasks + from chronos.chronos2.dataset import prepare_inputs prediction_length = 8 raw_inputs = [{"target": torch.rand(20)}, {"target": torch.rand(25)}, {"target": torch.rand(30)}] # Preprocess and convert to HF Dataset (simulating Arrow-based lazy loading) - prepared_tasks = prepare_tasks(raw_inputs, prediction_length=prediction_length, min_past=1, mode="train") + prepared_tasks = prepare_inputs(raw_inputs, prediction_length=prediction_length, min_past=1, mode="train") hf_dataset = datasets.Dataset.from_list(prepared_tasks).with_format("torch") # Fine-tune with preprocessed inputs