Batch Processing
Maniac's automated fine-tuning system creates task-specific model adapters (LoRAs) that dramatically improve performance while keeping costs low.
What is Fine-tuning in Maniac?
Maniac uses Parameter-Efficient Fine-Tuning (PEFT) techniques, specifically LoRA (Low-Rank Adaptation), to create specialized versions of base models for your specific tasks without the cost and complexity of full model training.
Benefits of Maniac's Fine-tuning:
Cost-Effective: Train adapters instead of full models
Fast Training: Complete training in minutes, not hours
Task-Specific: Optimized for your exact use case
Multi-Model: Train adapters for multiple base models simultaneously
Automatic: Minimal configuration required
Getting Started
1. Prepare Your Training Data
Format your data as JSON with input/output pairs:
[
{
"input": "What is 2 + 2?",
"output": "2 + 2 equals 4."
},
{
"input": "Calculate 15 * 3",
"output": "15 multiplied by 3 is 45."
},
{
"input": "What's the square root of 16?",
"output": "The square root of 16 is 4."
}
]2. Start Fine-tuning
from maniac import Maniac
client = Maniac(api_key="your-maniac-api-key")
# Start fine-tuning job
job = client.create_finetuning_job(
name="math-solver-v1",
container_id="your-container",
training_data="training_data.json",
task_type="question_answering",
base_models=["llama-2-7b", "mistral-7b", "code-llama-7b"]
)
print(f"Fine-tuning job created: {job.id}")3. Monitor Progress
# Check job status
status = client.get_finetuning_status(job.id)
print(f"Status: {status.state}") # training, completed, failed
print(f"Progress: {status.progress}%")
# Get detailed metrics
if status.state == "completed":
metrics = client.get_finetuning_metrics(job.id)
print(f"Final loss: {metrics.final_loss}")
print(f"Validation accuracy: {metrics.validation_accuracy}")Advanced Fine-tuning Configuration
Custom Training Parameters
Fine-tune the training process:
from maniac import FinetuningConfig
config = FinetuningConfig(
# Training hyperparameters
learning_rate=5e-5,
batch_size=16,
num_epochs=3,
warmup_steps=100,
# LoRA parameters
lora_rank=16,
lora_alpha=32,
lora_dropout=0.1,
# Optimization settings
optimizer="adamw",
lr_scheduler="cosine",
weight_decay=0.01,
# Early stopping
early_stopping=True,
patience=3,
min_delta=0.001
)
job = client.create_finetuning_job(
name="custom-training",
container_id="your-container",
training_data="data.json",
config=config
)Multi-Task Fine-tuning
Train a single adapter for multiple related tasks:
# Multi-task training data
training_data = {
"math_basic": "math_basic_data.json",
"math_advanced": "math_advanced_data.json",
"word_problems": "word_problems_data.json"
}
job = client.create_multitask_finetuning_job(
name="math-multitask",
container_id="your-container",
training_data=training_data,
task_weights={"math_basic": 0.4, "math_advanced": 0.4, "word_problems": 0.2}
)Data Management
Data Quality Analysis
Analyze your training data quality:
# Upload and analyze data
analysis = client.analyze_training_data(
data_file="training_data.json",
task_type="question_answering"
)
print(f"Data quality score: {analysis.quality_score}")
print(f"Recommended dataset size: {analysis.recommended_size}")
print(f"Issues found: {len(analysis.issues)}")
for issue in analysis.issues:
print(f"- {issue.severity}: {issue.description}")Data Augmentation
Automatically expand your training dataset:
# Enable data augmentation
job = client.create_finetuning_job(
name="augmented-training",
container_id="your-container",
training_data="data.json",
data_augmentation={
"enabled": True,
"methods": ["paraphrasing", "back_translation", "synonym_replacement"],
"augmentation_ratio": 2.0 # Double the dataset size
}
)Incremental Training
Add new data to existing fine-tuned models:
# Continue training with new data
incremental_job = client.create_incremental_training_job(
base_job_id="previous-job-id",
new_training_data="additional_data.json",
learning_rate=1e-5, # Lower learning rate for incremental updates
num_epochs=1
)Model Evaluation
Automatic Evaluation
Maniac automatically evaluates your fine-tuned models:
# Get evaluation results
evaluation = client.get_model_evaluation(job.id)
print(f"Overall performance: {evaluation.overall_score}")
# Task-specific metrics
for task, metrics in evaluation.task_metrics.items():
print(f"{task}:")
print(f" Accuracy: {metrics.accuracy}")
print(f" F1 Score: {metrics.f1_score}")
print(f" BLEU Score: {metrics.bleu_score}")Custom Evaluation Metrics
Define your own evaluation criteria:
from maniac import EvaluationMetric, CustomEvaluator
# Custom evaluator for code generation
code_evaluator = CustomEvaluator(
name="code_quality",
metrics=[
EvaluationMetric.SYNTAX_CORRECTNESS,
EvaluationMetric.PERFORMANCE_EFFICIENCY,
EvaluationMetric.CODE_STYLE_COMPLIANCE
]
)
# Add to fine-tuning job
job = client.create_finetuning_job(
name="code-generator",
container_id="coding-assistant",
training_data="code_data.json",
custom_evaluators=[code_evaluator]
)Human Evaluation
Set up human evaluation workflows:
# Create human evaluation task
human_eval = client.create_human_evaluation(
job_id=job.id,
evaluator_pool="expert", # or "crowd", "internal"
evaluation_criteria=[
"Accuracy",
"Clarity",
"Usefulness",
"Safety"
],
sample_size=100 # Number of responses to evaluate
)
# Check human evaluation results
results = client.get_human_evaluation_results(human_eval.id)Model Deployment
Automatic Deployment
Deploy fine-tuned models automatically:
# Enable auto-deployment for successful jobs
job = client.create_finetuning_job(
name="production-model",
container_id="your-container",
training_data="data.json",
auto_deploy=True,
deployment_config={
"environment": "production",
"traffic_percentage": 10, # Gradual rollout
"success_threshold": 0.9
}
)Manual Deployment
Control deployment manually:
# Deploy specific model version
deployment = client.deploy_finetuned_model(
job_id=job.id,
model_version="v1.2",
environment="production",
scaling_config={
"min_instances": 2,
"max_instances": 10,
"target_utilization": 0.8
}
)
print(f"Deployment ID: {deployment.id}")
print(f"Endpoint URL: {deployment.endpoint_url}")A/B Testing Deployments
Test fine-tuned models against baselines:
# A/B test fine-tuned vs base model
ab_test = client.create_model_ab_test(
name="finetuned-vs-base",
container_id="your-container",
variants={
"base": {"model": "llama-2-7b"},
"finetuned": {"model": f"finetuned-{job.id}"}
},
traffic_split={"base": 0.3, "finetuned": 0.7},
success_metrics=["accuracy", "user_satisfaction", "response_time"]
)Monitoring Fine-tuned Models
Performance Monitoring
Track fine-tuned model performance in production:
# Get performance metrics
metrics = client.get_production_metrics(
container_id="your-container",
model_version="finetuned-v1",
time_range="24h"
)
print(f"Request volume: {metrics.request_count}")
print(f"Average latency: {metrics.avg_latency_ms}ms")
print(f"Error rate: {metrics.error_rate}%")
print(f"Quality score: {metrics.avg_quality_score}")Drift Detection
Monitor for model drift and performance degradation:
# Enable drift detection
client.enable_drift_detection(
container_id="your-container",
model_version="finetuned-v1",
monitoring_config={
"check_frequency": "hourly",
"drift_threshold": 0.1,
"alert_channels": ["email", "slack"]
}
)
# Check drift status
drift_status = client.get_drift_status("your-container")
if drift_status.drift_detected:
print(f"Drift detected! Severity: {drift_status.severity}")
print(f"Recommended action: {drift_status.recommendation}")Cost Optimization
Training Cost Analysis
Understand and optimize training costs:
# Get cost breakdown
cost_analysis = client.get_training_costs(job.id)
print(f"Total training cost: ${cost_analysis.total_cost:.2f}")
print(f"Compute cost: ${cost_analysis.compute_cost:.2f}")
print(f"Data storage cost: ${cost_analysis.storage_cost:.2f}")
print(f"Cost per epoch: ${cost_analysis.cost_per_epoch:.2f}")
# Cost optimization recommendations
for rec in cost_analysis.recommendations:
print(f"💡 {rec.description} (potential savings: ${rec.savings:.2f})")Resource Optimization
Optimize training resource usage:
from maniac import ResourceConfig
# Efficient resource configuration
resource_config = ResourceConfig(
instance_type="gpu.t4.medium", # Cost-effective GPU
auto_scaling=True,
spot_instances=True, # Up to 70% cost savings
mixed_precision=True, # Faster training, lower memory
gradient_checkpointing=True # Memory optimization
)
job = client.create_finetuning_job(
name="cost-optimized-training",
container_id="your-container",
training_data="data.json",
resource_config=resource_config
)Best Practices
1. Data Quality First
Invest in high-quality, diverse training data rather than just quantity.
2. Start Small
Begin with a smaller dataset and base model, then scale up.
3. Monitor Training Progress
Use early stopping and validation metrics to prevent overfitting.
4. Gradual Deployment
Deploy with gradual traffic increase to catch issues early.
5. Continuous Evaluation
Regularly evaluate model performance and retrain when needed.
6. Version Control
Keep track of data versions, model versions, and training configurations.
Common Fine-tuning Patterns
Customer Support Agent
job = client.create_finetuning_job(
name="support-agent",
container_id="customer-support",
training_data="support_conversations.json",
task_type="conversational",
base_models=["llama-2-7b-chat"],
config=FinetuningConfig(
learning_rate=1e-4,
num_epochs=2,
lora_rank=8
)
)Code Generation Assistant
job = client.create_finetuning_job(
name="code-assistant",
container_id="coding-helper",
training_data="code_examples.json",
task_type="code_generation",
base_models=["code-llama-7b"],
config=FinetuningConfig(
learning_rate=5e-5,
num_epochs=3,
lora_rank=16
)
)Domain-Specific QA
job = client.create_finetuning_job(
name="medical-qa",
container_id="medical-assistant",
training_data="medical_qa.json",
task_type="domain_qa",
base_models=["llama-2-7b", "mistral-7b"],
config=FinetuningConfig(
learning_rate=3e-5,
num_epochs=4,
lora_rank=32 # Higher rank for complex domain
)
)Troubleshooting
Common Issues
Training Loss Not Decreasing
Check learning rate (try lower values like 1e-5)
Verify data quality and format
Increase batch size or number of epochs
Overfitting
Add dropout to LoRA configuration
Use early stopping
Reduce number of training epochs
Increase validation data size
Out of Memory Errors
Reduce batch size
Enable gradient checkpointing
Use smaller LoRA rank
Try mixed precision training
Poor Performance
Increase training data size
Check data distribution and balance
Try different base models
Adjust LoRA parameters (rank, alpha)
Next Steps
Last updated

