File size: 15,860 Bytes
77da5ce | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 | # Meta-R2: Complete HuggingFace Deployment Guide (Option A)
> This guide walks you through every single step to deploy Meta-R2 to HuggingFace using the cleanest architecture:
> - **Your trained model (500MB)** β uploaded as a **HuggingFace Model Repository**
> - **Your code + environment** β deployed as a **HuggingFace Space** (Docker)
>
> The Space will auto-download the model from the Model Repo at startup. No Git LFS. No 500MB in your code repo.
---
## πΊοΈ Architecture Overview
```
HuggingFace
βββ YOUR-USERNAME/lifestack-agent β Model Repo (the 500MB weights)
β βββ config.json
β βββ tokenizer.json
β βββ tokenizer_config.json
β βββ special_tokens_map.json
β βββ model.safetensors (or pytorch_model.bin)
β
βββ YOUR-USERNAME/meta-r2 [SPACE] β Code Repo (Docker Space)
βββ Dockerfile (already exists β
)
βββ requirements.txt (already exists β
)
βββ app_flask.py (entry point β
)
βββ core/ agent/ scripts/ ... (all your code β
)
βββ openenv.yaml (already exists β
)
β at startup
agent.py calls AutoModelForCausalLM.from_pretrained("YOUR-USERNAME/lifestack-agent")
β HuggingFace downloads the model to the Space's /root/.cache/huggingface/
```
---
## β
Pre-Flight Checklist (Do These Before Anything Else)
Go through every item below before starting the upload steps.
### 1. Confirm Your Trained Model Files Exist
Unzip the 500MB file from Kaggle. Open the folder. You **must** see these files:
```
lifestack_model/
βββ config.json β REQUIRED
βββ tokenizer.json β REQUIRED
βββ tokenizer_config.json β REQUIRED
βββ special_tokens_map.json β REQUIRED (may be missing β check below)
βββ model.safetensors β REQUIRED (the big file)
OR
βββ pytorch_model.bin β (alternative format, also fine)
```
> **If any of these are missing**, the model is an incomplete checkpoint. Re-download or re-run training with `save_model=True` at the end of `train_trl.py`.
### 2. Confirm `requirements.txt` Is Correct
Your `requirements.txt` already has:
- `openenv-core>=0.2.3` β
(latest version, confirmed)
- `pydantic>=2.7.0` β
- `transformers>=4.40.0` β
(needed to download model from Hub)
- `torch>=2.0.0` β
**No changes needed** to `requirements.txt`.
### 3. Confirm the `Dockerfile` Entry Point
Your `Dockerfile` already runs:
```dockerfile
CMD ["python", "app_flask.py"]
```
This is correct. `app_flask.py` is the web server.
**No changes needed** to the `Dockerfile`.
### 4. Make Sure `.env` is in `.gitignore`
Check your `.gitignore` β it already has:
```
.env
```
β
Your `GROQ_API_KEY` will **never** be pushed to GitHub or HuggingFace by accident.
### 5. Make the One Required Code Change in `agent.py`
This is the only code edit required for Option A.
Open `/Users/dayalgupta/Desktop/Meta-R2/agent/agent.py` and find **lines 13β18**:
```python
# CURRENT CODE (lines 13-18):
self.api_key = os.getenv('GROQ_API_KEY')
self.local_model_path = local_model_path or os.getenv('LIFESTACK_MODEL_PATH')
# Fallback to current directory if default existence
if not self.local_model_path and os.path.exists("./lifestack_model"):
self.local_model_path = "./lifestack_model"
```
**Change it to this** (replace `YOUR-USERNAME` with your actual HuggingFace username):
```python
# UPDATED CODE:
self.api_key = os.getenv('GROQ_API_KEY')
self.local_model_path = local_model_path or os.getenv('LIFESTACK_MODEL_PATH')
# 1. Check for local folder (Kaggle / local dev)
if not self.local_model_path and os.path.exists("./lifestack_model"):
self.local_model_path = "./lifestack_model"
# 2. Fall back to HuggingFace Hub model repo (production / Space deployment)
if not self.local_model_path:
self.local_model_path = "YOUR-USERNAME/lifestack-agent"
```
**Why this works:** `AutoModelForCausalLM.from_pretrained()` (which already exists on line 41) accepts either a local folder path OR a HuggingFace Hub repo ID like `"username/repo-name"`. No other code change is needed.
### 6. Verify `lifestack_model/` Is NOT in Your Code Repo
Your model (500MB) should NOT be in the `Meta-R2` GitHub repository. Confirm:
```bash
ls /Users/dayalgupta/Desktop/Meta-R2/lifestack_model/
# Should print: "No such file or directory" OR "Empty directory"
```
If it has files, remove them:
```bash
rm -rf /Users/dayalgupta/Desktop/Meta-R2/lifestack_model/*
```
The folder can stay (it's referenced in the code) but must be empty.
---
## π¦ PART 1: Upload the Model to HuggingFace Hub
### Step 1.1 β Create a HuggingFace Account
Go to **https://huggingface.co** β click **Sign Up** β create your account. Remember your username (e.g., `dayal-gupta`) β you will use it everywhere.
### Step 1.2 β Create a New Model Repository
1. Go to **https://huggingface.co/new** (or click the `+` button β "New Model")
2. Fill in:
- **Owner:** your username
- **Model name:** `lifestack-agent` (this becomes `YOUR-USERNAME/lifestack-agent`)
- **License:** `MIT` (recommended for hackathons)
- **Visibility:** `Public` (required for the Space to download it without auth)
3. Click **Create Model**
You now have an empty model repo at `https://huggingface.co/YOUR-USERNAME/lifestack-agent`.
### Step 1.3 β Install the HuggingFace CLI
On your Mac terminal:
```bash
pip install huggingface_hub
huggingface-cli login
```
When prompted, go to **https://huggingface.co/settings/tokens** β click **New token** β name it anything β **Role: Write** β copy the token β paste it into the terminal.
### Step 1.4 β Upload the Model Files
Navigate to where your unzipped model folder is (e.g., Desktop) and run:
```bash
# Replace the path with wherever your unzipped model folder is:
huggingface-cli upload YOUR-USERNAME/lifestack-agent /path/to/your/lifestack_model/ .
```
**Example (if you unzipped on Desktop):**
```bash
huggingface-cli upload dayal-gupta/lifestack-agent /Users/dayalgupta/Desktop/lifestack_model/ .
```
This uploads ALL files from the local folder to the root of the HF repo. The `.` at the end means "upload to the root of the repo."
**This will take 3β8 minutes** for a 500MB file on a normal connection. You'll see a progress bar.
### Step 1.5 β Verify the Upload
Go to `https://huggingface.co/YOUR-USERNAME/lifestack-agent` in your browser.
You should see all files listed: `config.json`, `tokenizer.json`, `model.safetensors`, etc.
Click on `config.json` and confirm it contains `"model_type"` β this confirms the model is valid and complete.
### Step 1.6 β Add a Model Card (Optional but Impressive for Judges)
Click the **"Model Card"** tab on your repo page β click the pencil icon to edit β paste this:
```markdown
---
language: en
license: mit
tags:
- reinforcement-learning
- life-simulation
- grpo
- llama
- openenv
---
# LifeStack Agent β GRPO Fine-tuned
This model is the trained agent for [Meta-R2](https://huggingface.co/spaces/YOUR-USERNAME/meta-r2),
a reinforcement learning environment that simulates complex real-life decision-making scenarios.
Fine-tuned using GRPO (Group Relative Policy Optimization) via TRL on a custom reward function
spanning 23 life metrics across 6 domains: career, finances, relationships, physical health,
mental wellbeing, and time management.
## Usage
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("YOUR-USERNAME/lifestack-agent")
tokenizer = AutoTokenizer.from_pretrained("YOUR-USERNAME/lifestack-agent")
```
```
Click **Save**.
---
## π PART 2: Deploy the Project as a HuggingFace Space
### Step 2.1 β Create a New Space
1. Go to **https://huggingface.co/new-space**
2. Fill in:
- **Owner:** your username
- **Space name:** `meta-r2`
- **License:** `MIT`
- **SDK:** Select **"Docker"** β very important, NOT Gradio or Streamlit
- **Visibility:** `Public`
3. Click **Create Space**
You now have an empty Space at `https://huggingface.co/spaces/YOUR-USERNAME/meta-r2`.
### Step 2.2 β Connect Your GitHub Repository to the Space
This is the cleanest method β HuggingFace will auto-sync from your GitHub repo.
1. In your Space, click the **Settings** tab (gear icon)
2. Scroll down to **"Repository"** section
3. Click **"Link to a GitHub repository"**
4. Authorize HuggingFace to access your GitHub
5. Select the repo: `oki-dokii/Meta-R2`
6. Set branch: `main`
7. Click **Save**
Now every `git push` to `main` will automatically redeploy the Space.
**Alternative (manual push):** If you don't want to link GitHub, you can push directly to the HuggingFace Space repo:
```bash
cd /Users/dayalgupta/Desktop/Meta-R2
# Add HF Space as a second remote:
git remote add space https://huggingface.co/spaces/YOUR-USERNAME/meta-r2
# Push your code:
git push space main
```
### Step 2.3 β Add the `GROQ_API_KEY` Secret to the Space
Your app needs the Groq API key at runtime. **Never hardcode it.** HuggingFace Spaces have a Secrets system for this.
1. In your Space, click the **Settings** tab
2. Scroll down to **"Variables and secrets"**
3. Click **"New secret"**
4. Fill in:
- **Name:** `GROQ_API_KEY`
- **Value:** your actual Groq API key (get it from https://console.groq.com/keys)
5. Click **Save**
Your `agent.py` already reads this via `os.getenv('GROQ_API_KEY')` β
β no code change needed.
### Step 2.4 β Add `HF_TOKEN` Secret (Required to Download the Private Model)
If your model repo is **Public** (which we set in Step 1.2), you can **skip this step**.
If your model repo is **Private**, add another secret:
- **Name:** `HF_TOKEN`
- **Value:** your HuggingFace write token (same one from Step 1.3)
Then add this line at the top of `app_flask.py` (before any model-loading code):
```python
import os
from huggingface_hub import login
hf_token = os.getenv("HF_TOKEN")
if hf_token:
login(token=hf_token)
```
### Step 2.5 β Trigger the First Build
After pushing your code (Step 2.2), the Space will automatically start building.
1. Go to your Space URL: `https://huggingface.co/spaces/YOUR-USERNAME/meta-r2`
2. Click the **"App"** tab β you'll see a build log
3. The build will take **3β5 minutes** for the first time (Docker pulls base image, installs packages)
4. After build, it will show **"Running"** status β then the app will boot
**During the first boot**, the Space will call `AutoModelForCausalLM.from_pretrained("YOUR-USERNAME/lifestack-agent")` which will download the 500MB model. This takes about 60β90 seconds on HuggingFace infrastructure. **After the first boot, it is cached** and subsequent restarts are instant.
---
## π PART 3: Verify Everything is Working
### Step 3.1 β Check the Build Log
In your Space, click **"Logs"** tab. You should see:
```
β
Step 1/7 : FROM python:3.11-slim
β
Successfully built ...
β
Successfully tagged ...
```
If you see a red error, check the troubleshooting section below.
### Step 3.2 β Check the App Boot Log
After the build, click the **"App"** tab. In the log output you should see:
```
π¦ Loading local GRPO model from YOUR-USERNAME/lifestack-agent...
β
Local model LOADED.
* Running on http://0.0.0.0:7860
```
If you see `β οΈ Failed to load local model ... Falling back to Groq.` β the model download failed. Check that your HF model repo URL is correct in `agent.py` and the repo is public.
### Step 3.3 β Test the Live App
Go to `https://huggingface.co/spaces/YOUR-USERNAME/meta-r2` and click through the demo:
1. The web UI (served by `app_flask.py`) should load
2. Start an episode β the agent should respond with life decisions
3. Check that rewards are non-zero and steps > 5 (confirms the Task system is working)
---
## π οΈ Troubleshooting Common Issues
| Error | Cause | Fix |
|---|---|---|
| `ModuleNotFoundError: openenv` | Wrong package in requirements.txt | Confirm `openenv-core>=0.2.3` is in `requirements.txt` (not `openenv`) |
| `OSError: Can't load model` | Wrong repo ID in `agent.py` | Make sure it's `"YOUR-ACTUAL-USERNAME/lifestack-agent"` not literally `YOUR-USERNAME` |
| `Build failed: torch install timeout` | `torch>=2.0.0` is huge (2GB+) | Add `--extra-index-url https://download.pytorch.org/whl/cpu` to Dockerfile before pip install |
| `Port 7860 not responding` | `app_flask.py` binding to wrong interface | Confirm `app.run(host='0.0.0.0', port=7860)` at the bottom of `app_flask.py` |
| `GROQ_API_KEY not found` | Secret not set | Go to Space Settings β Variables and secrets β add `GROQ_API_KEY` |
| `Space keeps restarting` | Out of memory (free tier is 16GB RAM) | torch on CPU for 500MB model may OOM β see "Reducing Memory" note below |
### Reducing Memory Usage (If Space OOMs)
Free HuggingFace Spaces have 16GB RAM. Loading a 500MB model in float32 uses ~2GB RAM, which is fine. But if you face OOM, add this to `agent.py` line 41β44:
```python
self.local_model = AutoModelForCausalLM.from_pretrained(
self.local_model_path,
torch_dtype=torch.float16, # β half precision, halves memory
low_cpu_mem_usage=True, # β stream-loads, avoids peak RAM spike
device_map="cpu" # β explicitly CPU on free tier
)
```
---
## π Final Pre-Submission Checklist
Before submitting to the hackathon, verify every item:
- [ ] `https://huggingface.co/YOUR-USERNAME/lifestack-agent` exists and has all model files
- [ ] `https://huggingface.co/spaces/YOUR-USERNAME/meta-r2` shows **"Running"** status (green dot)
- [ ] The Space app loads in browser without errors
- [ ] The Space log shows `β
Local model LOADED` (not "Falling back to Groq")
- [ ] An episode runs and produces steps > 5 (confirms Task system is working)
- [ ] `GROQ_API_KEY` secret is set in Space settings (as fallback)
- [ ] The model repo has a Model Card explaining what it is
- [ ] Your `README.md` in the code repo links to both: the Space URL and the Model URL
- [ ] `agent.py` has been updated with `"YOUR-USERNAME/lifestack-agent"` as the HF Hub fallback
- [ ] `lifestack_model/` folder in your local `Meta-R2/` repo is empty (model not in code repo)
- [ ] All Bugs 1, 2, 3 are fixed and committed (they are β we did this already β
)
---
## π Quick Reference β All URLs
Replace `YOUR-USERNAME` with your HuggingFace username everywhere:
| What | URL |
|---|---|
| HuggingFace profile | `https://huggingface.co/YOUR-USERNAME` |
| Model repo | `https://huggingface.co/YOUR-USERNAME/lifestack-agent` |
| Space (live demo) | `https://huggingface.co/spaces/YOUR-USERNAME/meta-r2` |
| Space settings (secrets) | `https://huggingface.co/spaces/YOUR-USERNAME/meta-r2/settings` |
| Space build logs | `https://huggingface.co/spaces/YOUR-USERNAME/meta-r2` β Logs tab |
| HuggingFace API tokens | `https://huggingface.co/settings/tokens` |
| Groq API keys | `https://console.groq.com/keys` |
---
## β‘ The Exact Commands to Run Right Now (In Order)
```bash
# 1. Install HF CLI
pip install huggingface_hub
# 2. Login (will prompt for token)
huggingface-cli login
# 3. Upload model (change the path to your unzipped model folder)
huggingface-cli upload YOUR-USERNAME/lifestack-agent /path/to/lifestack_model/ .
# 4. Make the agent.py code change (edit manually in VS Code, then):
cd /Users/dayalgupta/Desktop/Meta-R2
git add agent/agent.py
git commit -m "feat: add HuggingFace Hub model fallback for Option A deployment"
git push origin main
# 5. Push to HuggingFace Space (if not using GitHub auto-sync):
git remote add space https://huggingface.co/spaces/YOUR-USERNAME/meta-r2
git push space main
```
That's it. The Space will build and boot automatically.
|