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! |