Configure Chisel CLI for optimal performance across different workloads, from development to production-scale training.

GPU Configuration

GPU Type Selection

Choose the right GPU configuration based on your specific requirements:

Application Configuration

ChiselApp Options

Configure your ChiselApp for different scenarios:
from chisel import ChiselApp, GPUType

app = ChiselApp(
    name="my-app",              # Required: App identifier
    upload_dir=".",             # Upload directory (default: current)
    gpu=GPUType.A100_80GB_2     # GPU configuration
)

Trace Configuration

Optimize tracing for debugging and performance monitoring:
@app.capture_trace(trace_name="my_operation")
def basic_function():
    # Basic tracing - minimal overhead
    pass

Environment Variables

Core Environment Variables

Environment Configuration Files

# .env file for project configuration
CHISEL_BACKEND_URL=https://api.herdora.com
TORCH_CUDA_ARCH_LIST=8.0
PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128
CUDA_VISIBLE_DEVICES=0,1,2,3
Load in Python:
from dotenv import load_dotenv
load_dotenv()

app = ChiselApp("configured-app")

Performance Optimization

Memory Management

PyTorch Optimization

import torch
import os

# A100 architecture optimization
os.environ['TORCH_CUDA_ARCH_LIST'] = '8.0'

# Memory management
torch.cuda.set_per_process_memory_fraction(0.9)
os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'max_split_size_mb:128'

# Enable optimized attention (PyTorch 2.0+)
torch.backends.cuda.enable_flash_sdp(True)
torch.backends.cuda.enable_mem_efficient_sdp(True)

Development Configuration

Local Development Setup

import os

# Development configuration
def setup_development_environment():
    """Configure Chisel for development."""
    
    # Disable Chisel for local development
    if os.getenv('DEVELOPMENT'):
        print("💻 Development mode - Chisel inactive")
        return False
    
    # Enable debug mode
    if os.getenv('CHISEL_DEBUG'):
        import logging
        logging.basicConfig(level=logging.DEBUG)
        torch.autograd.set_detect_anomaly(True)
        os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
    
    return True

# Usage
if setup_development_environment():
    app = ChiselApp("dev-app")
else:
    # Create no-op app for local development
    class NoOpApp:
        def capture_trace(self, **kwargs):
            return lambda func: func
    
    app = NoOpApp()

Best Practices

Follow these configuration best practices for optimal Chisel CLI usage:

Configuration Checklist

  1. GPU Selection
    • Start with A100_80GB_1 for development
    • Scale up based on actual memory requirements
    • Monitor GPU utilization to ensure efficient usage
  2. Upload Optimization
    • Keep upload directories under 100MB
    • Use .gitignore to exclude unnecessary files
    • Include only required code and dependencies
  3. Memory Management
    • Use mixed precision training when possible
    • Process large datasets in chunks
    • Clear GPU memory explicitly when needed
  4. Environment Variables
    • Use .env files for project-specific configuration
    • Set CHISEL_DEBUG=1 for development debugging
    • Configure backend URLs appropriately for each environment
  5. Performance Monitoring
    • Use profile_memory=True for optimization
    • Monitor job costs and GPU utilization
    • Benchmark different configurations for your workload
# Configuration validation script
def validate_chisel_configuration():
    """Validate Chisel CLI configuration."""
    
    issues = []
    
    # Check upload directory size
    upload_dir = "."
    size_mb = get_directory_size(upload_dir)
    if size_mb > 100:
        issues.append(f"Upload directory too large: {size_mb:.1f}MB > 100MB")
    
    # Check GPU memory requirements
    estimated_memory = estimate_memory_requirement(model_params)
    gpu_memory = get_gpu_memory(gpu_type)
    if estimated_memory > gpu_memory * 0.8:
        issues.append(f"Insufficient GPU memory: {estimated_memory:.1f}GB > {gpu_memory:.1f}GB")
    
    # Check authentication
    from chisel.auth import is_authenticated
    if not is_authenticated():
        issues.append("Authentication required")
    
    if issues:
        print("❌ Configuration issues found:")
        for issue in issues:
            print(f"   - {issue}")
        return False
    else:
        print("✅ Configuration validated successfully")
        return True

# Run validation
validate_chisel_configuration()