remiai3's picture
Upload 10 files
f62f52e verified
Tiny-GPT2 Text Generation Project Documentation
=============================================
This project enables students to run, fine-tune, and experiment with the `sshleifer/tiny-gpt2`
model locally on a laptop with 8GB or 16GB RAM, using CPU (GPU optional). The goal is to provide
hands-on experience with AI model workflows, including downloading, fine-tuning, and deploying a
text generation model via a web interface. This document covers all steps to set up and run the
project, with credits to the original model and organization.
---
1. Project Overview
The project uses the `sshleifer/tiny-gpt2` model, a lightweight version of GPT-2, for text generation.
It includes scripts to:
- Download model weights from Hugging Face.
- Test the model with a sample prompt.
- Fine-tune the model on a custom dataset.
- Deploy a web app to generate text interactively.
The setup is optimized for low-memory systems (8GB RAM) and defaults to CPU execution, but includes
instructions for GPU users.
---
2. Prerequisites
- Hardware: Laptop with at least 8GB RAM (16GB recommended). GPU (e.g., NVIDIA GTX) is optional;
scripts default to CPU.
- Operating System: Windows, macOS, or Linux.
- Software:
- Python 3.10.9 (recommended) or 3.9.10. Download from https://www.python.org/downloads/.
- Visual Studio Code (VS Code) for development (optional but recommended). Download from
https://code.visualstudio.com/.
- Hugging Face Account: Required to download model weights.
---
3. Step-by-Step Setup Instructions
.1. Obtain a Hugging Face Token
1. Go to https://huggingface.co/ and sign up or log in.
2. Navigate to https://huggingface.co/settings/tokens.
3. Click "New token", select "Read" or "Write" access, and copy the token
(e.g., hf_XXXXXXXXXXXXXXXXXXXXXXXXXX).
4. Store the token securely; you’ll use it in the download script.
3.2. Install Python
1. Download Python 3.10.9 from https://www.python.org/downloads/release/python-3109/.
2. Install Python, ensuring "Add Python to PATH" is checked.
3. Verify installation in a terminal:
```
python --version
```
Expected output: Python 3.10.9
3.3. Set Up a Virtual Environment
1. Open a terminal in your project folder (e.g., C:\Users\YourName\Documents\project).
2. Create a virtual environment:
```
python -m venv venv
```
3. Activate the virtual environment:
- Windows: `venv\Scripts\activate`
- macOS/Linux: `source venv/bin/activate`
4. Confirm activation (you’ll see `(venv)` in the terminal prompt).
3.4. Install Dependencies
1. In the activated virtual environment, create a file named `requirements.txt` with the following
content:
```
torch==2.3.0
transformers==4.38.2
huggingface_hub==0.22.2
datasets==2.21.0
numpy==1.26.4
matplotlib==3.8.3
flask==3.0.3
```
2. Install the libraries:
```
pip install -r requirements.txt
```
3. For GPU users (optional):
- Uninstall CPU PyTorch: `pip uninstall torch -y`
- Install GPU PyTorch: `pip install torch==2.3.0+cu121`
- Verify CUDA: `python -c "import torch; print(torch.cuda.is_available())"` (should print `True`).
Note: Scripts default to CPU, so GPU users don’t need to change this unless desired.
3.5. Download Model Weights
1. Create a folder named `dalle` (or any name) for the project.
2. Copy the `download_model.py` script from the repository (or create it):
```
from transformers import AutoModelForCausalLM, AutoTokenizer
from huggingface_hub import login
import os
hf_token = "YOUR_HUGGINGFACE_TOKEN" # Replace with your token
login(token=hf_token)
model_name = "sshleifer/tiny-gpt2"
save_directory = "./tiny-gpt2-model"
os.makedirs(save_directory, exist_ok=True)
model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir=save_directory)
tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=save_directory)
print(f"Model and tokenizer downloaded to {save_directory}")
```
3. Replace `YOUR_HUGGINGFACE_TOKEN` with your Hugging Face token.
4. Run the script:
```
python download_model.py
```
5. Verify the model files in
`tiny-gpt2-model/models--sshleifer--tiny-gpt2/snapshots/5f91d94bd9cd7190a9f3216ff93cd1dd95f2c7be`
(contains `config.json`, `pytorch_model.bin`, `vocab.json`, `merges.txt`).
3.6. Test the Model
1. Copy the `test_model.py` script from the repository to the `dalle` folder.
2. Run the script:
```
python test_model.py
```
3. Expected output: Generated text starting with "Once upon a time" (e.g., may be semi-coherent due
to the model’s small size).
3.7. Fine-Tune the Model
1. Create a `fine_tune` folder inside `dalle`:
```
mkdir fine_tune
cd fine_tune
```
2. Create a dataset file `sample_data.txt` (or use your own text). Example content:
```
Once upon a time, there was a brave knight who explored a magical forest.
The forest was filled with mystical creatures and ancient ruins.
The knight discovered a hidden treasure guarded by a wise dragon.
With courage and wisdom, the knight befriended the dragon and shared the treasure with the village.
```
3. Copy the `fine_tune_model.py` script from the repository to `fine_tune`.
4. Run the script:
```
python fine_tune_model.py
```
5. The script fine-tunes the model, saves it to `fine_tuned_model`, and generates a `loss_plot.png`
showing training loss.
6. Verify `fine_tuned_model` contains model files and check `loss_plot.png`.
3.8. Run the Web App
1. In the `fine_tune` folder, copy `app.py` and create a `templates` folder with `index.html` from the
repository.
2. Run the web app:
```
python app.py
```
3. Open a browser and go to `http://127.0.0.1:5000`.
4. Enter a prompt (e.g., "Once upon a time") and click "Generate Text" to see the output from the
fine-tuned model.
---
4. Notes for Students
- Model Limitations: `tiny-gpt2` is a small model, so generated text may not be highly coherent. For
better results, consider larger models like `gpt2` (requires more memory or GPU).
- Memory Management: On 8GB RAM systems, close other applications to free memory. The scripts use a
small batch size to minimize memory usage.
- GPU Support: Scripts default to CPU for compatibility. To use an NVIDIA GPU:
- Install `torch==2.3.0+cu121` (see step 3.4).
- Remove `os.environ["CUDA_VISIBLE_DEVICES"] = ""` from `fine_tune_model.py` and `app.py`.
- Change `use_cpu=True` to `use_cpu=False` in `fine_tune_model.py`.
- Experimentation: Try different prompts, datasets, or fine-tuning parameters (e.g., `num_train_epochs`,
`learning_rate`) to explore AI model behavior.
---
5. Troubleshooting
- Library Conflicts: Use the exact versions in `requirements.txt` to avoid issues.
- File Not Found: Ensure model files are in the correct path
(`tiny-gpt2-model/models--sshleifer--tiny-gpt2/snapshots/5f91d94bd9cd7190a9f3216ff93cd1dd95f2c7be`).
- Memory Errors: Reduce `max_length` in `fine_tune_model.py` (e.g., from 128 to 64) for 8GB RAM systems.
- Hugging Face Token Issues: Verify your token has "Read" or "Write" access at
https://huggingface.co/settings/tokens.
---
6. Credits and Attribution
- Original Model: `sshleifer/tiny-gpt2`, a distilled version of GPT-2, created by Steven Shleifer.
Available at https://huggingface.co/sshleifer/tiny-gpt2.
- Organization: Hugging Face, Inc. (https://huggingface.co/) provides the model weights, `transformers`
library, and `huggingface_hub` for model access.
- Project Creator: Remiai3 (GitHub/Hugging Face username). This project was developed to facilitate AI
learning and experimentation for students.
- AI Assistance: Grok 3, created by xAI (https://x.ai/), assisted in generating and debugging the code,
ensuring compatibility for low-resource systems.
---
7. Next Steps for Students
- Experiment with different datasets in `sample_data.txt` to fine-tune the model for specific tasks
(e.g., storytelling, dialogue).
- Modify `fine_tune_model.py` parameters (e.g., `learning_rate`, `num_train_epochs`) to study their
impact.
- Enhance `index.html` or `app.py` to add features like multiple prompt inputs or generation options.
- Explore larger models on Hugging Face (e.g., `gpt2-medium`) if you have a GPU or more RAM.
For questions or issues, contact Remiai3 via Hugging Face or check the repository for updates.