|
|
--- |
|
|
title: Chronos 2 Forecasting |
|
|
emoji: π |
|
|
colorFrom: blue |
|
|
colorTo: purple |
|
|
sdk: docker |
|
|
pinned: false |
|
|
license: apache-2.0 |
|
|
--- |
|
|
|
|
|
# Chronos 2 Time Series Forecasting Application |
|
|
|
|
|
A production-ready web application for testing Amazon's **Chronos 2** time series forecasting model using the latest `Chronos2Pipeline` API. Built with Dash for enterprise scalability and designed for both local development and cloud deployment. |
|
|
|
|
|
## Features |
|
|
|
|
|
- **Latest Chronos 2 API**: Uses `Chronos2Pipeline.predict_df()` with DataFrame-based interface |
|
|
- **Interactive Forecasting**: Generate forecasts up to 365 days with adjustable confidence intervals |
|
|
- **Dual Model Support**: Switch between Fast (Chronos-Bolt) and Accurate (Chronos-2) variants |
|
|
- **Multivariate Ready**: Built on Chronos 2 architecture supporting multivariate forecasting |
|
|
- **Flexible Data Input**: Upload CSV/Excel files or use sample datasets |
|
|
- **Rich Visualizations**: Interactive Plotly charts with confidence bands and zoom capabilities |
|
|
- **Data Quality Analysis**: Automatic preprocessing with quality reports |
|
|
- **GPU Acceleration**: Automatic CUDA support with CPU fallback |
|
|
- **Security Hardened**: Non-root Docker containers, server-side validation, filename sanitization |
|
|
- **Production Ready**: Designed for deployment on local machines or Databricks Apps |
|
|
|
|
|
## Architecture |
|
|
|
|
|
Built following best practices for scalability and maintainability: |
|
|
|
|
|
- **Dash Framework**: Handles thousands of concurrent users |
|
|
- **Plotly Visualizations**: Smooth rendering of 100K+ data points |
|
|
- **Model Caching**: Chronos 2 loaded once at startup for fast inference |
|
|
- **Client-Side State**: Efficient state management without server sessions |
|
|
- **Modular Design**: Clean separation of components, services, and utilities |
|
|
|
|
|
## Installation |
|
|
|
|
|
### Prerequisites |
|
|
|
|
|
- Python 3.10+ |
|
|
- CUDA-capable GPU (optional, for faster inference) |
|
|
- 8GB+ RAM (4-8GB for model + overhead) |
|
|
|
|
|
### Local Setup |
|
|
|
|
|
1. **Clone the repository** |
|
|
```bash |
|
|
git clone <repository-url> |
|
|
cd chronos2-forecasting-app |
|
|
``` |
|
|
|
|
|
2. **Create a virtual environment** |
|
|
```bash |
|
|
python -m venv venv |
|
|
|
|
|
# On Windows |
|
|
venv\Scripts\activate |
|
|
|
|
|
# On Linux/Mac |
|
|
source venv/bin/activate |
|
|
``` |
|
|
|
|
|
3. **Install dependencies** |
|
|
```bash |
|
|
pip install -r requirements.txt |
|
|
``` |
|
|
|
|
|
4. **Run the application** |
|
|
```bash |
|
|
python app.py |
|
|
``` |
|
|
|
|
|
5. **Access the app** |
|
|
Open your browser to `http://127.0.0.1:8050` |
|
|
|
|
|
## Usage Guide |
|
|
|
|
|
### Quick Start |
|
|
|
|
|
1. **Load Sample Data** |
|
|
- Click one of the sample dataset buttons (Electricity, Retail, Manufacturing) |
|
|
- Or upload your own CSV/Excel file |
|
|
|
|
|
2. **Configure Data** |
|
|
- Select the date column |
|
|
- Select the target variable to forecast |
|
|
- (Optional) Select an ID column for multivariate series |
|
|
|
|
|
3. **Set Forecast Parameters** |
|
|
- Adjust the forecast horizon (1-365 days) |
|
|
- Select confidence levels (80%, 90%, 95%, 99%) |
|
|
- Choose model variant (Fast or Accurate) |
|
|
|
|
|
4. **Generate Forecast** |
|
|
- Click "Generate Forecast" button |
|
|
- Wait for model inference (typically 1-5 seconds) |
|
|
- View interactive chart with confidence intervals |
|
|
|
|
|
### Data Requirements |
|
|
|
|
|
Your data should have: |
|
|
- **Date column**: Any standard date format |
|
|
- **Target column**: Numeric values to forecast |
|
|
- **Minimum rows**: At least 2x the forecast horizon |
|
|
- **File size**: Up to 100MB |
|
|
- **Formats**: CSV, XLSX, XLS |
|
|
|
|
|
### Tips for Best Results |
|
|
|
|
|
- Use at least 2x the forecast horizon in historical data |
|
|
- Clean your data before upload (though the app handles basic preprocessing) |
|
|
- Start with the Fast model variant for quick testing |
|
|
- Use the Accurate variant for final forecasts |
|
|
- Larger confidence intervals provide more conservative forecasts |
|
|
|
|
|
## Project Structure |
|
|
|
|
|
``` |
|
|
chronos2-forecasting-app/ |
|
|
βββ app.py # Main Dash application |
|
|
βββ components/ # UI components |
|
|
β βββ upload.py # File upload component |
|
|
β βββ chart.py # Chart generation |
|
|
β βββ controls.py # Parameter controls |
|
|
βββ services/ # Business logic |
|
|
β βββ model_service.py # Chronos model wrapper |
|
|
β βββ data_processor.py # Data preprocessing |
|
|
β βββ cache_manager.py # Caching logic |
|
|
βββ utils/ # Utilities |
|
|
β βββ validators.py # Input validation |
|
|
β βββ metrics.py # Forecast metrics |
|
|
βββ config/ # Configuration |
|
|
β βββ settings.py # Environment settings |
|
|
β βββ constants.py # App constants |
|
|
βββ datasets/ # Sample datasets |
|
|
βββ static/ # Static assets |
|
|
β βββ custom.css # Custom styles |
|
|
βββ requirements.txt # Python dependencies |
|
|
βββ Dockerfile # Container definition |
|
|
βββ README.md # This file |
|
|
``` |
|
|
|
|
|
## Configuration |
|
|
|
|
|
### Environment Variables |
|
|
|
|
|
- `ENVIRONMENT`: Set to `local` or `production` |
|
|
- `DEVICE`: Set to `auto`, `cuda`, or `cpu` |
|
|
- `LOG_LEVEL`: Set to `DEBUG`, `INFO`, `WARNING`, or `ERROR` |
|
|
- `DATABRICKS_APP_PORT`: Port for Databricks deployment (default: 8080) |
|
|
|
|
|
### Local vs Databricks Configuration |
|
|
|
|
|
The app automatically detects the environment and adjusts settings: |
|
|
|
|
|
**Local Development:** |
|
|
- Host: 127.0.0.1 |
|
|
- Port: 8050 |
|
|
- Debug: Enabled |
|
|
- Storage: Local directories |
|
|
|
|
|
**Databricks Deployment:** |
|
|
- Host: 0.0.0.0 |
|
|
- Port: 8080 (or DATABRICKS_APP_PORT) |
|
|
- Debug: Disabled |
|
|
- Storage: /tmp and /dbfs |
|
|
|
|
|
## Deployment |
|
|
|
|
|
### Hugging Face Spaces (Recommended for Free Hosting) |
|
|
|
|
|
The easiest way to deploy this app for free: |
|
|
|
|
|
1. **Create a Hugging Face account** at https://huggingface.co |
|
|
|
|
|
2. **Create a new Space** |
|
|
- Go to https://huggingface.co/spaces |
|
|
- Click "Create new Space" |
|
|
- Select "Dash" as the SDK |
|
|
- Choose a name for your Space |
|
|
|
|
|
3. **Upload your code** |
|
|
- Option A: Connect your GitHub repository (recommended) |
|
|
- Option B: Upload files directly through the web interface |
|
|
|
|
|
4. **Configure the Space** |
|
|
- The app will automatically use `app.py` as the entry point |
|
|
- HuggingFace Spaces provides 16GB RAM (sufficient for Chronos-2) |
|
|
- Optional: Request GPU upgrade for faster inference |
|
|
|
|
|
5. **Access your deployed app** |
|
|
- Your app will be live at: `https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME` |
|
|
|
|
|
**Note**: First startup may take 2-3 minutes as the Chronos-2 model downloads (~500MB). |
|
|
|
|
|
### Docker Deployment |
|
|
|
|
|
1. **Build the image** |
|
|
```bash |
|
|
docker build -t chronos2-forecasting . |
|
|
``` |
|
|
|
|
|
2. **Run the container** |
|
|
```bash |
|
|
docker run -p 8080:8080 chronos2-forecasting |
|
|
``` |
|
|
|
|
|
3. **With GPU support** |
|
|
```bash |
|
|
docker run --gpus all -p 8080:8080 chronos2-forecasting |
|
|
``` |
|
|
|
|
|
### Databricks Apps Deployment |
|
|
|
|
|
1. **Upload code to DBFS** |
|
|
```bash |
|
|
databricks fs cp -r . dbfs:/apps/chronos2-forecasting/ |
|
|
``` |
|
|
|
|
|
2. **Create Databricks App** |
|
|
- Use the Databricks Apps UI |
|
|
- Point to the uploaded directory |
|
|
- Set environment variable: `ENVIRONMENT=production` |
|
|
|
|
|
3. **Configure resources** |
|
|
- Minimum: 8GB RAM |
|
|
- Recommended: GPU instance for faster inference |
|
|
|
|
|
### Production Considerations |
|
|
|
|
|
- **Memory**: Allocate 6-8GB for the model + overhead |
|
|
- **Scaling**: Use multiple workers with Gunicorn |
|
|
- **Monitoring**: Check `/health` endpoint for status |
|
|
- **Logging**: Logs to stdout for easy collection |
|
|
- **Timeouts**: Set to 300s+ for large forecasts |
|
|
|
|
|
## API Reference |
|
|
|
|
|
### Health Check Endpoint |
|
|
|
|
|
``` |
|
|
GET /health |
|
|
``` |
|
|
|
|
|
Returns: |
|
|
```json |
|
|
{ |
|
|
"status": "healthy", |
|
|
"model_loaded": true, |
|
|
"model_variant": "fast", |
|
|
"device": "cuda" |
|
|
} |
|
|
``` |
|
|
|
|
|
## Troubleshooting |
|
|
|
|
|
### Model Loading Issues |
|
|
|
|
|
**Problem**: Model fails to load |
|
|
- Check available memory (need 4-8GB) |
|
|
- Try CPU mode: Set `DEVICE=cpu` |
|
|
- Check internet connection (first run downloads model) |
|
|
|
|
|
### GPU Not Detected |
|
|
|
|
|
**Problem**: CUDA device not found |
|
|
- Verify CUDA installation: `python -c "import torch; print(torch.cuda.is_available())"` |
|
|
- Install correct PyTorch version for your CUDA |
|
|
- App will automatically fall back to CPU |
|
|
|
|
|
### Upload Failures |
|
|
|
|
|
**Problem**: File upload fails |
|
|
- Check file size (<100MB) |
|
|
- Verify file format (CSV, XLSX, XLS) |
|
|
- Ensure file is not corrupted |
|
|
|
|
|
### Slow Performance |
|
|
|
|
|
**Problem**: Forecasts take too long |
|
|
- Use Fast model variant instead of Accurate |
|
|
- Reduce forecast horizon |
|
|
- Enable GPU acceleration |
|
|
- Limit data points (app decimates to 10K for display) |
|
|
|
|
|
### Memory Errors |
|
|
|
|
|
**Problem**: Out of memory during inference |
|
|
- Switch to Fast model variant (smaller) |
|
|
- Use CPU instead of GPU |
|
|
- Reduce batch size in model_service.py |
|
|
- Close other applications |
|
|
|
|
|
## Performance Tuning |
|
|
|
|
|
### For Development |
|
|
- Enable debug mode for detailed logging |
|
|
- Use Fast model variant |
|
|
- Work with smaller datasets initially |
|
|
|
|
|
### For Production |
|
|
- Disable debug mode |
|
|
- Use GPU for inference |
|
|
- Enable caching (already configured) |
|
|
- Use Gunicorn with 4 workers |
|
|
- Set up monitoring and alerting |
|
|
|
|
|
## Contributing |
|
|
|
|
|
Contributions are welcome! Please: |
|
|
|
|
|
1. Fork the repository |
|
|
2. Create a feature branch |
|
|
3. Make your changes |
|
|
4. Add tests if applicable |
|
|
5. Submit a pull request |
|
|
|
|
|
## License |
|
|
|
|
|
This project is provided as-is for educational and research purposes. |
|
|
|
|
|
## Acknowledgments |
|
|
|
|
|
- **Chronos Model**: Amazon Science |
|
|
- **Dash Framework**: Plotly |
|
|
- **Sample Data**: Generated for demonstration purposes |
|
|
|
|
|
## Support |
|
|
|
|
|
For issues, questions, or suggestions: |
|
|
- Open an issue in the repository |
|
|
- Check existing documentation |
|
|
- Review troubleshooting guide above |
|
|
|
|
|
## Changelog |
|
|
|
|
|
### Version 1.0.1 (Latest - Chronos 2 Full Implementation) |
|
|
- **BREAKING**: Migrated to Chronos 2 API with `Chronos2Pipeline` |
|
|
- Fixed deprecated pandas methods (`fillna(method=...)` β `ffill()`/`bfill()`) |
|
|
- Updated to `chronos-forecasting==2.0.0` package |
|
|
- Fixed type hints (`any` β `Any`) across all modules |
|
|
- Added DataFrame-based prediction interface |
|
|
- Security improvements: |
|
|
- Non-root user in Docker container |
|
|
- Server-side file validation |
|
|
- Filename sanitization |
|
|
- Health check timeout configuration |
|
|
- Updated model paths to support Chronos-2 (s3://autogluon/chronos-2) |
|
|
- Fixed data format compatibility (id/timestamp/target columns) |
|
|
- Added `requests` library for health checks |
|
|
|
|
|
### Version 1.0.0 (Initial Release) |
|
|
- Chronos 2 model integration |
|
|
- Single-page Dash application |
|
|
- CSV/Excel upload support |
|
|
- Interactive visualizations |
|
|
- Confidence interval display |
|
|
- Sample datasets included |
|
|
- Docker deployment ready |
|
|
- Databricks Apps compatible |
|
|
|
|
|
## Roadmap |
|
|
|
|
|
Future enhancements being considered: |
|
|
- Multi-series forecasting UI |
|
|
- Model comparison features |
|
|
- Export forecast results |
|
|
- Custom model fine-tuning |
|
|
- Real-time data streaming |
|
|
- Advanced metrics dashboard |
|
|
- API-only mode for programmatic access |
|
|
|
|
|
--- |
|
|
|
|
|
Built with Dash and Chronos 2 for production-ready time series forecasting. |
|
|
|