Spaces:
Running
Running
# Debug Guide for Auto Diffusers Config | |
This guide explains how to use the comprehensive debug logging system built into Auto Diffusers Config. | |
## Quick Start | |
### Enable Debug Logging | |
Set environment variables to control debug behavior: | |
```bash | |
# Enable debug logging | |
export DEBUG_LEVEL=DEBUG | |
export LOG_TO_FILE=true | |
export LOG_TO_CONSOLE=true | |
# Run the application | |
python launch_gradio.py | |
``` | |
### Debug Levels | |
- `DEBUG`: Most verbose, shows all operations | |
- `INFO`: Normal operations and status updates | |
- `WARNING`: Potential issues and fallbacks | |
- `ERROR`: Errors and failures only | |
## Log Files | |
When `LOG_TO_FILE=true`, logs are saved to the `logs/` directory: | |
- `auto_diffusers_YYYYMMDD_HHMMSS.log` - Complete application log | |
- `errors_YYYYMMDD_HHMMSS.log` - Error-only log for quick issue identification | |
## Component-Specific Debugging | |
### Hardware Detection | |
```python | |
import logging | |
from hardware_detector import HardwareDetector | |
logging.basicConfig(level=logging.DEBUG) | |
detector = HardwareDetector() | |
detector.print_specs() | |
``` | |
**Debug Output Includes:** | |
- System platform and architecture detection | |
- GPU vendor identification (NVIDIA/AMD/Apple/Intel) | |
- VRAM measurement attempts | |
- PyTorch/CUDA/MPS availability checks | |
- Optimization profile selection logic | |
### Memory Calculator | |
```python | |
import logging | |
from simple_memory_calculator import SimpleMemoryCalculator | |
logging.basicConfig(level=logging.DEBUG) | |
calculator = SimpleMemoryCalculator() | |
result = calculator.get_model_memory_requirements("black-forest-labs/FLUX.1-schnell") | |
``` | |
**Debug Output Includes:** | |
- Model memory lookup (known vs API estimation) | |
- HuggingFace API calls and responses | |
- File size analysis for unknown models | |
- Memory recommendation calculations | |
- Cache hit/miss operations | |
### AI Code Generation | |
```python | |
import logging | |
from auto_diffusers import AutoDiffusersGenerator | |
logging.basicConfig(level=logging.DEBUG) | |
generator = AutoDiffusersGenerator(api_key="your_key") | |
code = generator.generate_optimized_code( | |
model_name="black-forest-labs/FLUX.1-schnell", | |
prompt_text="A cat", | |
use_manual_specs=True, | |
manual_specs={...} | |
) | |
``` | |
**Debug Output Includes:** | |
- Hardware specification processing | |
- Optimization profile selection | |
- Gemini API prompt construction | |
- API request/response timing | |
- Generated code length and validation | |
### Gradio Interface | |
```python | |
import logging | |
from gradio_app import GradioAutodiffusers | |
logging.basicConfig(level=logging.DEBUG) | |
app = GradioAutodiffusers() | |
``` | |
**Debug Output Includes:** | |
- Component initialization status | |
- User input validation | |
- Model setting updates | |
- Interface event handling | |
## Environment Variables | |
Control debug behavior without modifying code: | |
```bash | |
# Debug level (DEBUG, INFO, WARNING, ERROR) | |
export DEBUG_LEVEL=DEBUG | |
# File logging (true/false) | |
export LOG_TO_FILE=true | |
# Console logging (true/false) | |
export LOG_TO_CONSOLE=true | |
# API key (masked in logs for security) | |
export GOOGLE_API_KEY=your_api_key_here | |
``` | |
## Debug Utilities | |
### System Information Logging | |
```python | |
from debug_config import log_system_info | |
log_system_info() | |
``` | |
Logs: | |
- Operating system and architecture | |
- Python version and executable path | |
- Environment variables (non-sensitive) | |
- Working directory and process ID | |
### Session Boundary Marking | |
```python | |
from debug_config import log_session_end | |
log_session_end() | |
``` | |
Creates clear session boundaries in log files for easier analysis. | |
## Common Debug Scenarios | |
### 1. API Connection Issues | |
**Problem:** Gemini API failures | |
**Debug Command:** | |
```bash | |
DEBUG_LEVEL=DEBUG LOG_TO_FILE=true python -c " | |
from auto_diffusers import AutoDiffusersGenerator | |
import logging | |
logging.basicConfig(level=logging.DEBUG) | |
gen = AutoDiffusersGenerator('test_key') | |
" | |
``` | |
**Look For:** | |
- API key validation messages | |
- Network connection attempts | |
- HTTP response codes and errors | |
### 2. Hardware Detection Problems | |
**Problem:** Wrong optimization profile selected | |
**Debug Command:** | |
```bash | |
DEBUG_LEVEL=DEBUG python -c " | |
from hardware_detector import HardwareDetector | |
import logging | |
logging.basicConfig(level=logging.DEBUG) | |
detector = HardwareDetector() | |
print('Profile:', detector.get_optimization_profile()) | |
" | |
``` | |
**Look For:** | |
- GPU detection via nvidia-smi | |
- PyTorch CUDA/MPS availability | |
- VRAM measurement calculations | |
- Profile selection logic | |
### 3. Memory Calculation Issues | |
**Problem:** Incorrect memory recommendations | |
**Debug Command:** | |
```bash | |
DEBUG_LEVEL=DEBUG python -c " | |
from simple_memory_calculator import SimpleMemoryCalculator | |
import logging | |
logging.basicConfig(level=logging.DEBUG) | |
calc = SimpleMemoryCalculator() | |
result = calc.get_model_memory_requirements('your_model_id') | |
" | |
``` | |
**Look For:** | |
- Model lookup in known database | |
- HuggingFace API calls and file parsing | |
- Memory calculation formulas | |
- Recommendation generation logic | |
### 4. Code Generation Problems | |
**Problem:** Suboptimal generated code | |
**Debug Command:** | |
```bash | |
DEBUG_LEVEL=DEBUG python launch_gradio.py | |
``` | |
**Look For:** | |
- Hardware specs passed to AI | |
- Optimization profile selection | |
- Prompt construction details | |
- API response processing | |
## Performance Debugging | |
### Timing Analysis | |
Enable timestamp logging to identify performance bottlenecks: | |
```python | |
import logging | |
import time | |
logger = logging.getLogger(__name__) | |
start_time = time.time() | |
# Your operation here | |
duration = time.time() - start_time | |
logger.info(f"Operation completed in {duration:.2f} seconds") | |
``` | |
### Memory Usage Tracking | |
Monitor memory consumption during processing: | |
```python | |
import psutil | |
import logging | |
logger = logging.getLogger(__name__) | |
process = psutil.Process() | |
memory_before = process.memory_info().rss / 1024 / 1024 # MB | |
# Your operation here | |
memory_after = process.memory_info().rss / 1024 / 1024 # MB | |
logger.info(f"Memory usage: {memory_before:.1f}MB -> {memory_after:.1f}MB (Δ{memory_after-memory_before:+.1f}MB)") | |
``` | |
## Log Analysis Tips | |
### 1. Filter by Component | |
```bash | |
grep "auto_diffusers" logs/auto_diffusers_*.log | |
grep "hardware_detector" logs/auto_diffusers_*.log | |
grep "simple_memory_calculator" logs/auto_diffusers_*.log | |
``` | |
### 2. Error-Only View | |
```bash | |
grep "ERROR" logs/auto_diffusers_*.log | |
# Or use the dedicated error log | |
cat logs/errors_*.log | |
``` | |
### 3. Timing Analysis | |
```bash | |
grep "seconds" logs/auto_diffusers_*.log | |
``` | |
### 4. API Interactions | |
```bash | |
grep -i "gemini\|api" logs/auto_diffusers_*.log | |
``` | |
## Troubleshooting Common Issues | |
### Issue: No logs generated | |
**Solution:** Check write permissions for `logs/` directory | |
### Issue: Too verbose output | |
**Solution:** Set `DEBUG_LEVEL=INFO` or `LOG_TO_CONSOLE=false` | |
### Issue: Missing log files | |
**Solution:** Ensure `LOG_TO_FILE=true` and check disk space | |
### Issue: Logs consuming too much space | |
**Solution:** Implement log rotation or clean old logs periodically | |
## Custom Debug Configuration | |
Create a custom debug setup for specific needs: | |
```python | |
from debug_config import setup_debug_logging, configure_component_loggers | |
import logging | |
# Custom setup | |
setup_debug_logging(log_level='INFO', log_to_file=True, log_to_console=False) | |
# Modify specific component verbosity | |
logging.getLogger('simple_memory_calculator').setLevel(logging.DEBUG) | |
logging.getLogger('gradio').setLevel(logging.WARNING) | |
``` | |
## Security Notes | |
- API keys are automatically masked in logs (shown as length only) | |
- Sensitive user inputs are not logged | |
- Personal hardware information is logged for debugging but can be disabled | |
- Log files may contain model names and prompts - consider this for privacy | |
## Getting Help | |
When reporting issues, include: | |
1. Debug level used (`DEBUG_LEVEL`) | |
2. Relevant log snippets from error and main log files | |
3. System information from `log_system_info()` output | |
4. Steps to reproduce the issue | |
The comprehensive logging system makes it easy to identify and resolve issues quickly! |