WritingStudio / docs /HUGGINGFACE_SPACES.md
jmisak's picture
Upload 46 files
d7f7508 verified
# HuggingFace Spaces Deployment Guide
## Overview
This guide explains how to deploy Writing Studio on HuggingFace Spaces for free, public access to your AI writing assistant.
## Prerequisites
- HuggingFace account ([sign up free](https://huggingface.co/join))
- Basic familiarity with Git (optional for direct upload)
## Quick Deploy
### Method 1: Direct Upload (Easiest)
1. **Create a Space**
- Go to [huggingface.co/new-space](https://huggingface.co/new-space)
- Name your Space (e.g., "writing-studio")
- Choose **Gradio** as SDK
- Select visibility (Public or Private)
- Click "Create Space"
2. **Upload Files**
- Click "Files" tab
- Upload these essential files:
- `app.py`
- `requirements.txt`
- `src/` folder (entire directory)
- `.space_config.yml` (optional)
- `README_HF_SPACES.md` (rename to README.md)
3. **Wait for Build**
- HuggingFace automatically detects `app.py` and `requirements.txt`
- First build takes 3-5 minutes (installing dependencies)
- Your Space will be live at: `https://huggingface.co/spaces/USERNAME/SPACE_NAME`
### Method 2: Git Clone (Recommended for Updates)
1. **Create a Space** (as above)
2. **Clone Locally**
```bash
git clone https://huggingface.co/spaces/USERNAME/SPACE_NAME
cd SPACE_NAME
```
3. **Copy Files**
```bash
# From your WritingStudio directory
cp -r src/ app.py requirements.txt .space_config.yml /path/to/SPACE_NAME/
cp README_HF_SPACES.md /path/to/SPACE_NAME/README.md
```
4. **Push to Space**
```bash
cd /path/to/SPACE_NAME
git add .
git commit -m "Initial deployment"
git push
```
5. **Monitor Build**
- Go to your Space URL
- Check "Logs" tab for build progress
- App will be live when build completes
### Method 3: Duplicate an Existing Space
If someone has already deployed Writing Studio:
1. Go to their Space
2. Click "⋯" menu → "Duplicate this Space"
3. Choose your username and Space name
4. Click "Duplicate Space"
5. Done! Your own copy is live
## Configuration
### Default Settings
Works out-of-the-box with:
- Model: `distilgpt2` (fast, lightweight)
- Log Level: `INFO`
- Metrics: Disabled (not needed on HF Spaces)
- Caching: Enabled
- All rubric features: Enabled
### Custom Configuration
#### Option A: Environment Variables
In your Space:
1. Go to Settings
2. Scroll to "Repository secrets"
3. Add variables:
```
DEFAULT_MODEL=gpt2
LOG_LEVEL=DEBUG
MAX_TEXT_LENGTH=5000
```
#### Option B: Edit .space_config.yml
```yaml
env:
DEFAULT_MODEL: gpt2
LOG_LEVEL: INFO
ENABLE_CACHE: "true"
MAX_TEXT_LENGTH: "5000"
```
Commit and push changes.
## Hardware Selection
### Free Tier (CPU Basic)
**Best for:**
- Testing and demos
- Small models (distilgpt2)
- Light usage
**Performance:**
- First load: ~30-60s
- Subsequent: ~5-10s per analysis
- Memory: 16GB RAM
- Storage: Unlimited
**Limitations:**
- Slower processing
- May timeout on large models
### CPU Upgrade (Paid)
**Best for:**
- Production use
- Medium models (gpt2)
- Regular users
**Performance:**
- First load: ~20-45s
- Subsequent: ~3-8s
- More CPU cores
- Better throughput
**Cost:** ~$0.10/hour
### T4 Small GPU (Paid)
**Best for:**
- Best performance
- Large models (gpt2-medium, gpt2-large)
- High traffic
**Performance:**
- First load: ~15-30s
- Subsequent: ~1-3s
- GPU acceleration
- Fastest generation
**Cost:** ~$0.60/hour
### Recommendation
Start with **Free Tier + distilgpt2**:
- Works well for most use cases
- Zero cost
- Upgrade only if needed
## Model Selection
### distilgpt2 (Default)
- **Size:** 82M parameters
- **Speed:** Fast
- **Quality:** Good
- **Free Tier:** ✅ Works great
- **Recommended for:** Most users
### gpt2
- **Size:** 124M parameters
- **Speed:** Medium
- **Quality:** Better
- **Free Tier:** ✅ Works (slower)
- **Recommended for:** CPU Upgrade tier
### gpt2-medium
- **Size:** 355M parameters
- **Speed:** Slower
- **Quality:** Great
- **Free Tier:** ⚠️ May timeout
- **Recommended for:** T4 GPU tier
### gpt2-large
- **Size:** 774M parameters
- **Speed:** Slowest
- **Quality:** Best
- **Free Tier:** ❌ Not recommended
- **Recommended for:** T4 GPU tier
## Optimization Tips
### 1. Enable Caching (Default)
Results are cached automatically:
- Same input = instant result
- Reduces compute time
- Saves hardware costs
### 2. Use Smaller Models
For free tier:
```yaml
env:
DEFAULT_MODEL: distilgpt2
```
### 3. Limit Text Length
Prevent timeouts:
```yaml
env:
MAX_TEXT_LENGTH: "3000" # Shorter = faster
```
### 4. Adjust Generation Length
Faster processing:
```yaml
env:
DEFAULT_MAX_LENGTH: "200" # Instead of 300
```
## Monitoring
### Check Logs
1. Go to your Space
2. Click "Logs" tab
3. View real-time logs
Look for:
- `INFO` - Normal operations
- `WARNING` - Potential issues
- `ERROR` - Problems to fix
### Usage Stats
HuggingFace provides:
- View count
- Unique visitors
- Uptime status
Available in Space settings.
## Troubleshooting
### Build Fails
**Problem:** Space doesn't build
**Solutions:**
1. Check `requirements.txt` syntax
2. Ensure `app.py` exists
3. Check Logs tab for errors
4. Verify file structure:
```
SPACE_NAME/
├── app.py
├── requirements.txt
├── src/
│ └── writing_studio/
│ ├── core/
│ ├── services/
│ └── utils/
```
### Out of Memory
**Problem:** "CUDA out of memory" or crashes
**Solutions:**
1. Use smaller model:
```python
DEFAULT_MODEL=distilgpt2
```
2. Reduce cache size:
```python
CACHE_MAX_SIZE=50
```
3. Upgrade to larger hardware tier
### Slow Performance
**Problem:** Analysis takes too long
**Solutions:**
1. First load is always slow (model download)
2. Use distilgpt2 for faster results
3. Upgrade hardware tier
4. Reduce text length
5. Check cache is enabled
### Model Not Found
**Problem:** "Model ... not found"
**Solutions:**
1. Check model name spelling
2. Verify model exists on HuggingFace Hub
3. Try default: `distilgpt2`
4. Check internet connectivity
### Import Errors
**Problem:** "ModuleNotFoundError"
**Solutions:**
1. Ensure all files uploaded
2. Check `src/` directory structure
3. Verify `requirements.txt` has all dependencies
4. Rebuild Space (Settings → Factory reboot)
## Best Practices
### 1. Use README_HF_SPACES.md
Rename to `README.md` in your Space:
```bash
cp README_HF_SPACES.md README.md
```
This provides users with:
- Usage instructions
- Model selection guide
- Troubleshooting help
### 2. Add Examples
In your Space README, add example texts:
````markdown
## Example Usage
Try analyzing this text:
```
The quick brown fox jumps over the lazy dog. This sentence
demonstrates pangram characteristics while maintaining
grammatical coherence.
```
````
### 3. Set Visibility
**Public Spaces:**
- Visible to everyone
- Searchable
- Can be featured
- Free community tier
**Private Spaces:**
- Only visible to you
- Not searchable
- Requires paid tier
### 4. Monitor Costs
If using paid tiers:
1. Go to Settings → Billing
2. Set spending limits
3. Monitor usage
4. Downgrade when not in use
### 5. Update Regularly
Keep your Space updated:
```bash
git pull origin main # From main repo
git push # To your Space
```
## Advanced Configuration
### Custom Domain
Point your domain to your Space:
1. Go to Settings
2. Under "Custom domain"
3. Enter your domain
4. Follow DNS instructions
### Gradio Auth
Add simple authentication:
Edit `app.py`:
```python
demo.launch(
auth=("username", "password"),
server_name="0.0.0.0",
)
```
### Analytics
Track usage with Gradio analytics:
```python
demo.launch(
server_name="0.0.0.0",
analytics_enabled=True, # HF Spaces analytics
)
```
### Sleep Mode
Free Spaces sleep after 48h inactivity:
- First request wakes it up (~30s)
- Paid tiers can disable sleep
## Comparison: HF Spaces vs Self-Hosted
| Feature | HF Spaces | Self-Hosted |
|---------|-----------|-------------|
| Cost | Free tier available | Server costs |
| Setup | 5 minutes | 30-60 minutes |
| Maintenance | Automatic | Manual |
| Scaling | Auto-scales | Manual |
| SSL/HTTPS | Included | Configure yourself |
| Domain | *.hf.space | Your domain |
| GPU Access | Paid tiers | Need GPU server |
| Monitoring | Built-in | Setup required |
| Uptime | 99.9% | Depends |
## FAQ
### Is HF Spaces free?
Yes, free tier with:
- CPU Basic hardware
- Unlimited builds
- Unlimited users
- Auto-sleep after 48h inactivity
### Can I use private models?
Yes, with HuggingFace Pro:
- Private Spaces
- Private model access
- Gated model support
### How do I update my Space?
```bash
git pull # Get latest changes
git push # Deploy to Space
```
Or upload files via web interface.
### Can I monetize my Space?
Yes, with HF Pro:
- Set usage fees
- Subscription model
- Pay-per-use
### What about data privacy?
- Data processed in-memory
- Not stored permanently
- See HF privacy policy
- Use private Spaces for sensitive data
## Resources
- [HuggingFace Spaces Docs](https://huggingface.co/docs/hub/spaces)
- [Gradio Documentation](https://gradio.app/docs/)
- [Writing Studio GitHub](https://github.com/yourusername/writing-studio)
- [HuggingFace Community](https://discuss.huggingface.co/)
## Support
Need help?
- [GitHub Issues](https://github.com/yourusername/writing-studio/issues)
- [HF Community Forums](https://discuss.huggingface.co/)
- [Discord](https://discord.gg/huggingface)
## Success Stories
After deploying:
1. Share your Space on social media
2. Add to HuggingFace Papers
3. List in model cards
4. Submit to community showcase
## Next Steps
After successful deployment:
1. **Test Thoroughly**
- Try all prompt packs
- Test different models
- Check error handling
2. **Customize**
- Update README
- Add examples
- Configure settings
3. **Share**
- Post on social media
- Add to your website
- Share with students/colleagues
4. **Monitor**
- Check logs regularly
- Monitor usage
- Gather feedback
5. **Iterate**
- Fix issues
- Add features
- Improve performance
Happy deploying! 🚀