Sulie’s platform enables easy fine-tuning of the Mimosa foundation model to meet specific forecasting needs. This process leverages LoRA (Low-Rank Adaptation) for efficient training, allowing you to adapt the model’s performance with minimal setup.

Info: Fine-tuning in Sulie is fully automated, including hyperparameter tuning and deployment, so you can focus on refining forecasts rather than handling MLOps complexities.

Fine-Tuning Overview

Sulie’s fine-tuning feature uses automated hyperparameter tuning to identify the most effective model parameters. The Weighted Quantile Loss (WQL) metric evaluates performance, ensuring each iteration yields optimal results.

Requirements

  • A Dataset or pandas DataFrame with at least 1,000 data points in the target column is required to initiate fine-tuning.
  • Upon completion, Sulie automatically deploys your fine-tuned model, making it accessible via the same forecast interface.

Notifications

  • Once a fine-tuning job completes, you’ll receive a confirmation email with the job’s status and performance summary.

Starting a Fine-Tuning Job

To initiate a fine-tuning job, use the fine_tune method on the Sulie client. You can specify the target column and provide an optional description to identify the fine-tuning job. Below is an example with a pandas.DataFrame.

import pandas as pd
from sulie import Sulie

# Initialize the Sulie client
client = Sulie(api_key="your_api_key_here")

# Example data for fine-tuning
df = pd.DataFrame({
    'timestamp': pd.date_range(start='2023-01-01', periods=1000, freq='H'),
    'solar_demand': [...],  # hourly solar energy demand
    'location': ['Plant A', 'Plant B', ...]
})

# Start a fine-tuning job
fine_tune_job = client.fine_tune(
    dataset=df,                   # pandas DataFrame or a Sulie Dataset
    target='solar_demand',        # target column for fine-tuning
    description="Fine-tuning solar demand model"
)

Parameters for fine_tune

NameDescriptionDefault
datasetA Dataset or pandas.DataFrame containing time series data for training.Required
targetName of the column to optimize (forecast target).Required
group_byName of the column to group the DataFrame into series.Required
descriptionOptional description of the fine-tuning job.None

Each fine-tuned model is automatically deployed with a unique model name, ready for immediate inference.

Monitoring Fine-Tuning Jobs

To view the status of fine-tuning jobs, use the list_fine_tuning_jobs method, which provides a comprehensive list of all ongoing and completed fine-tuning jobs.

# Retrieve and print the list of fine-tuning jobs
fine_tuning_jobs = client.list_fine_tuning_jobs()
for job in fine_tuning_jobs:
    print(f"Job ID: {job.id}, Status: {job.status}, Description: {job.description}")

The output will include details such as job ID, status, and description, helping you monitor job progress.

Listing Deployed Models

You can view all deployed fine-tuned models using list_custom_models, which retrieves a list of all models available for inference.

# Retrieve and print the list of deployed custom models
custom_models = client.list_custom_models()
for model in custom_models:
    print(f"Model ID: {model.id}, Name: {model.name}, Deployed: {model.is_deployed}")

The list_custom_models method provides details on each model, including its ID, name, and deployment status, making it easy to identify and manage your deployed models.

Here’s how the documentation could look with an example on running forecasts using a custom model, incorporating both the list_custom_models and get_model methods for model retrieval.


Forecasting with Custom Models

Once you have fine-tuned a model, it is deployed automatically and available for custom forecasting. You can choose from your list of custom models or retrieve a specific model by name. This allows you to run forecasts with your personalized model, adapting to specific business requirements or forecast parameters.

Retrieving a Custom Model for Forecasting

To use a custom model, you first need to retrieve it. You can either:

  1. Use list_custom_models to select from all available models, or
  2. Use get_model with a model name to retrieve a specific model directly.

Here’s a step-by-step example that demonstrates listing available models, selecting a model, and then using it to run a forecast.

# Step 1: List available custom models
custom_models = client.list_custom_models()
for model in custom_models:
    print(f"Model ID: {model.id}, Name: {model.name}, Status: {model.status}")

# Step 2: Choose a model by name or ID
selected_model_name = "solar_demand_model_v1"  # example name; replace with actual model name from list
custom_model = client.get_model(selected_model_name)

# Step 3: Run a forecast using the selected custom model
forecast = client.forecast(
    dataset=df,
    target='solar_demand',
    group_by='location',
    date='timestamp',
    frequency='H',
    horizon=24,  # forecast for the next 24 hours
    model=custom_model.name,  # specify the custom model name
    num_samples=100  # generate 100 samples for probabilistic forecasting
)
print(forecast)

Parameters for get_model

NameDescriptionDefault
model_nameThe name of the model to retrieve.Required