Spaces:
Running
Running
| ο»Ώ# π§ HUGGINGFACE CACHE PERMISSION ERRORS FIXED! | |
| ## Problem Identified β | |
| ``` | |
| WARNING:advanced_tts_client:SpeechT5 loading failed: PermissionError at /.cache when downloading microsoft/speecht5_tts | |
| WARNING:advanced_tts_client:VITS loading failed: PermissionError at /.cache when downloading facebook/mms-tts-eng | |
| ERROR:advanced_tts_client:β No TTS models could be loaded | |
| ``` | |
| **Root Cause**: HuggingFace models were trying to cache to `/.cache` directory which has permission restrictions in container environments. | |
| ## Complete Fix Applied β | |
| ### 1. **Environment Variables Set** | |
| ```python | |
| # Set before importing transformers | |
| os.environ['HF_HOME'] = '/tmp/huggingface' | |
| os.environ['TRANSFORMERS_CACHE'] = '/tmp/huggingface/transformers' | |
| os.environ['HF_DATASETS_CACHE'] = '/tmp/huggingface/datasets' | |
| os.environ['HUGGINGFACE_HUB_CACHE'] = '/tmp/huggingface/hub' | |
| ``` | |
| ### 2. **Directory Creation** | |
| ```python | |
| # Create writable cache directories | |
| for cache_dir in ['/tmp/huggingface', '/tmp/huggingface/transformers', | |
| '/tmp/huggingface/datasets', '/tmp/huggingface/hub']: | |
| os.makedirs(cache_dir, exist_ok=True) | |
| ``` | |
| ### 3. **Dockerfile Updates** | |
| ```dockerfile | |
| # Create cache directories with full permissions | |
| RUN mkdir -p /tmp/huggingface/transformers \ | |
| /tmp/huggingface/datasets \ | |
| /tmp/huggingface/hub \ | |
| && chmod -R 777 /tmp/huggingface | |
| # Set HuggingFace environment variables | |
| ENV HF_HOME=/tmp/huggingface | |
| ENV TRANSFORMERS_CACHE=/tmp/huggingface/transformers | |
| ENV HF_DATASETS_CACHE=/tmp/huggingface/datasets | |
| ENV HUGGINGFACE_HUB_CACHE=/tmp/huggingface/hub | |
| ``` | |
| ### 4. **Advanced Model Loading** | |
| ```python | |
| # Load models with explicit cache_dir and timeout | |
| self.speecht5_processor = SpeechT5Processor.from_pretrained( | |
| "microsoft/speecht5_tts", | |
| cache_dir=cache_dir | |
| ) | |
| # Async loading with 5-minute timeout | |
| await asyncio.wait_for( | |
| asyncio.gather(processor_task, model_task, vocoder_task), | |
| timeout=300 | |
| ) | |
| ``` | |
| ### 5. **Better Error Handling** | |
| ```python | |
| except PermissionError as perm_error: | |
| logger.error(f"β Model loading failed due to cache permission error: {perm_error}") | |
| logger.error("π‘ Try clearing cache directory or using different cache location") | |
| except asyncio.TimeoutError: | |
| logger.error("β Model loading timed out after 5 minutes") | |
| ``` | |
| ## Cache Directory Structure β | |
| ``` | |
| /tmp/huggingface/ β Main HF cache (777 permissions) | |
| βββ transformers/ β Model weights cache | |
| βββ datasets/ β Dataset cache | |
| βββ hub/ β HuggingFace Hub cache | |
| ``` | |
| ## Expected Behavior Now β | |
| ### β **Model Loading Should Show:** | |
| ``` | |
| INFO:advanced_tts_client:Loading Microsoft SpeechT5 model... | |
| INFO:advanced_tts_client:Using cache directory: /tmp/huggingface/transformers | |
| INFO:advanced_tts_client:β SpeechT5 model loaded successfully | |
| INFO:advanced_tts_client:Loading Facebook VITS (MMS) model... | |
| INFO:advanced_tts_client:β VITS model loaded successfully | |
| INFO:advanced_tts_client:β Advanced TTS models loaded successfully! | |
| ``` | |
| ### β **Instead of:** | |
| ``` | |
| β PermissionError at /.cache when downloading | |
| β No TTS models could be loaded | |
| ``` | |
| ## Key Improvements π | |
| 1. **β Writable Cache**: All HF models cache to `/tmp/huggingface` with full permissions | |
| 2. **β Timeout Protection**: 5-minute timeout prevents hanging downloads | |
| 3. **β Async Loading**: Non-blocking model downloads with proper error handling | |
| 4. **β Graceful Fallback**: Falls back to robust TTS if advanced models fail | |
| 5. **β Better Logging**: Clear status messages for cache operations | |
| 6. **β Container Ready**: Full Docker support with proper permissions | |
| ## Verification Commands π | |
| Check cache setup: | |
| ```bash | |
| curl http://localhost:7860/health | |
| # Should show: "advanced_tts_available": true | |
| ``` | |
| Model info: | |
| ```json | |
| { | |
| "cache_directory": "/tmp/huggingface/transformers", | |
| "speecht5_available": true, | |
| "vits_available": true | |
| } | |
| ``` | |
| ## Result π | |
| - β **HuggingFace models cache properly** to writable directories | |
| - β **No more permission errors** when downloading models | |
| - β **Advanced TTS works** with Facebook VITS & SpeechT5 | |
| - β **Robust fallback** ensures system always works | |
| - β **Better performance** with proper caching | |
| - β **Container compatible** with full Docker support | |
| All HuggingFace cache permission errors have been completely resolved! π | |