Skip to main content

A Fine-tuning assistant for large language models

Project description

Atuna Logo

A tasty layer on top of Unsloth for Large Language Model fine-tuning

Atuna: A fine-tuning assistant for large language models with built-in hyperparameter optimization.

Features

  • Easy fine-tuning with Unsloth integration for efficient training
  • Hyperparameter optimization with Optuna for automated tuning
  • Built-in evaluation and monitoring capabilities
  • TensorBoard integration for training visualization

Installation

From source (development)

git clone https://github.com/mapa17/atuna.git
cd atuna
uv sync
uv pip install -e .

Using the library

pip install atuna  # When published to PyPI

Quick Start

Basic Fine-tuning

from tuna import Tuna, TunaConfig, TrainingConfig, model_registry

# Configure your model
model = model_registry["unsloth/Qwen3-4B-Instruct-2507"]
config = TunaConfig(
    model_cfg=model,
    dataset_path="./data/training_set.csv",
    max_seq_length=2048,
    precision=16,  # Use 16-bit precision
)

# Create trainer
tuna = Tuna(config=config)

# Configure training
training_config = TrainingConfig(
    num_train_epochs=3,
    batch_size=1,
    learning_rate=5e-5,
    eval_epochs=1.0,
    enable_early_stopping=True,
)

# Train the model
result = tuna.train(config=training_config)
print(f"Training completed: {result.stop_reason}")

Hyperparameter Optimization

from tuna import Tuna, TunaConfig, TrainingConfig, HyperparpamConfig, model_registry

# Setup configuration
model = model_registry["unsloth/Qwen3-4B-Instruct-2507"]
config = TunaConfig(
    model_cfg=model,
    dataset_path="./data/training_set.csv",
    max_seq_length=2048,
    precision=4,  # Use 4-bit quantization for efficiency
)

tuna = Tuna(config=config)

# Configure training
training_config = TrainingConfig(
    num_train_epochs=2,
    eval_epochs=0.25,
    batch_size=1,
    data_sample=0.3,  # Use subset for faster experimentation
)

# Configure hyperparameter search
hyper_config = HyperparpamConfig(
    n_trials=10,
    learning_rate=[1e-5, 5e-5, 7e-5, 1e-4],
    weight_decay=[0.001, 0.01, 0.1],
    peft_r=[16, 32],
    lora_alpha=[32, 50, 64],
    enable_slora=True,
)

# Run optimization
study = tuna.hyperparam_tune(
    study_name="MyOptimization",
    train_config=training_config,
    hyper_config=hyper_config,
)

print(f"Best parameters: {study.best_trial.params}")

Model Evaluation

# Evaluate trained model
responses = tuna.evaluate_prompts([
    "What is machine learning?",
    "Explain fine-tuning in simple terms.",
])

for response in responses:
    print(f"Response: {response}")

CLI Usage

# Show version
tuna --version

# List available models
tuna --list-models

Data Format

Your training data should be a CSV file with request and response columns:

request,response
"What is Python?","Python is a programming language..."
"How does machine learning work?","Machine learning works by..."

Monitoring and Visualization

Optuna Dashboard

# View hyperparameter optimization results
optuna-dashboard sqlite:///./atuna_workspace/optuna_studies.db

TensorBoard

# View training metrics
tensorboard --logdir ./atuna_workspace/logs

Supported Models

  • unsloth/Qwen3-4B-Instruct-2507
  • unsloth/Qwen3-0.6B-GGUF

More models can be easily added to the model_registry.

Configuration Options

TunaConfig

  • model_cfg: Model configuration from registry
  • dataset_path: Path to training CSV file
  • max_seq_length: Maximum sequence length (default: 2048)
  • precision: Training precision - 4, 8, or 16 bit (default: 16)
  • peft_r: LoRA rank parameter (default: 32)
  • workspace: Working directory (default: "./atuna_workspace")

TrainingConfig

  • learning_rate: Learning rate (default: 2e-5)
  • batch_size: Batch size (default: 1)
  • num_train_epochs: Number of training epochs (default: 1.0)
  • eval_epochs: Evaluation frequency in epochs
  • enable_early_stopping: Enable early stopping (default: True)
  • data_sample: Fraction of data to use (default: 1.0)

HyperparpamConfig

  • n_trials: Number of optimization trials
  • learning_rate: List of learning rates to try
  • peft_r: List of LoRA rank values to try
  • lora_alpha: List of LoRA alpha values to try
  • weight_decay: List of weight decay values to try

Examples

See the examples/ directory for complete usage examples:

  • examples/basic_finetuning.py - Basic fine-tuning workflow
  • examples/hyperparameter_search.py - Hyperparameter optimization

Requirements

  • Python 3.12+
  • CUDA-capable GPU
  • See pyproject.toml for full dependency list

Development

# Clone repository
git clone https://github.com/mapa17/atuna.git
cd atuna

# Install development dependencies
uv sync --group dev

# Install pre-commit hooks
pre-commit install

# Run tests
pytest

# Build package
uv build

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

atuna-0.2.1.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

atuna-0.2.1-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file atuna-0.2.1.tar.gz.

File metadata

  • Download URL: atuna-0.2.1.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for atuna-0.2.1.tar.gz
Algorithm Hash digest
SHA256 5c954b1a82c6e4d1037a7924abb123942d4d14c9469539c0fb35aeca0599d1e4
MD5 70f5ad6d48ac0bdde508dd91e89e7200
BLAKE2b-256 9bcb79d61eaac80a8551993deb373ba6f1044cf5b6b8bf88e79127dcb5788b07

See more details on using hashes here.

Provenance

The following attestation bundles were made for atuna-0.2.1.tar.gz:

Publisher: publish-to-pypi.yml on mapa17/atuna

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atuna-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: atuna-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 4.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for atuna-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e9db0d16eedb78d3d680df542b8b2fae14d3c3435cbfad9a8e72485eb7628eda
MD5 5a5b66f0db97d1e45eeb610ccf15f7e7
BLAKE2b-256 a26387d62410339ce32d68661b7a580b2d5ed8dbebed5395e5c069dc4a59c0ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for atuna-0.2.1-py3-none-any.whl:

Publisher: publish-to-pypi.yml on mapa17/atuna

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page