Spaces:
Paused
Paused
File size: 5,366 Bytes
c7ea41d d5ce17f c7ea41d 767bb48 0fcfdf0 767bb48 0fcfdf0 767bb48 0fcfdf0 767bb48 0fcfdf0 767bb48 0fcfdf0 767bb48 0fcfdf0 767bb48 0fcfdf0 767bb48 0fcfdf0 767bb48 0fcfdf0 d2aafc6 767bb48 0fcfdf0 767bb48 d2aafc6 0fcfdf0 767bb48 0fcfdf0 d2aafc6 0fcfdf0 767bb48 0fcfdf0 767bb48 0fcfdf0 d2aafc6 767bb48 0fcfdf0 | 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 | ---
title: Nano-GLM (120M MoE)
emoji: π§ͺ
colorFrom: indigo
colorTo: blue
sdk: docker
app_file: app.py
pinned: false
---
# Nano-GLM (GLM-5.2 Baby 120M) - From Scratch
This repository contains a from-scratch implementation and pretraining script for a baby version (~120M parameters) of GLM-5.2 (GLM MoE DSA). The project is heavily inspired by Andrej Karpathy's nanoGPT and aims to serve as a highly educational resource.
The model is designed to be small enough to train on a single consumer laptop GPU (e.g., RTX 4050 6GB VRAM) while incorporating cutting-edge architectural innovations found in modern frontier models.
## Architectural Features Implemented
This implementation goes beyond a standard Transformer by incorporating three major innovations from recent frontier models (such as DeepSeek-V3 and GLM-5):
1. **MLA (Multi-Latent Attention):** Compresses the attention mechanism using LoRA-style projections to drastically reduce VRAM usage during training and inference.
2. **DSA (DeepSeek Sparse Attention):** Selects only the most relevant tokens to attend to via a learned indexer, rather than attending to the entire context uniformly.
3. **MoE (Mixture of Experts):** Employs a fine-grained sigmoid-routed mixture of experts alongside a shared expert, activating only a subset of parameters per token.
## Training Features
The training loop (train_glm5.py) is highly optimized for limited hardware (6GB VRAM) while maximizing throughput (achieving ~4,900 tokens/sec on an RTX 4050):
- **Mixed Precision:** Utilizes bfloat16 and TF32 Tensor Cores.
- **Gradient Checkpointing:** Recomputes forward passes during backpropagation to reduce VRAM consumption by approximately 40%.
- **Gradient Accumulation:** Enables large effective batch sizes on a single GPU.
- **WSD (Warmup-Stable-Decay) Learning Rate Schedule:** Supports multi-phase training by holding the learning rate at a peak for a stable exploration phase before initiating a steep cosine decay (controlled via the --stable_iters parameter).
## Repository Structure
```text
reproduce_glm5/
βββ app.py # FastAPI backend server + static web UI hosting
βββ train_glm5.py # Core training loop, model architecture & sampling
βββ export_model.py # Utility to strip optimizer states for fast inference
βββ requirements.txt # Python dependencies
βββ README.md # Documentation & usage guide
βββ docs/ # Detailed documentation & guides
β βββ llm_training_guide.md
βββ scripts/ # Data tokenization & dataset preparation scripts
β βββ dataprep_pretrain.py
β βββ dataprep_phase3.py
βββ static/ # Production web frontend (HTML/CSS/JS)
β βββ index.html
βββ data/ # Tokenized dataset files (.bin / .json)
βββ out_glm5/ # Model checkpoints & inference weights
```
## Educational Guide
For individuals new to LLM pretraining, learning rates, loss curves, and scaling laws, an included beginner guide is available:
[LLM Training Guide for Beginners](docs/llm_training_guide.md)
## Usage
### Data Preparation
```bash
# Tokenize and prepare pretraining dataset
python scripts/dataprep_pretrain.py
```
### Installation
```bash
pip install -r requirements.txt
```
### Training
To train the model on a single GPU using the WSD schedule (holding the learning rate stable for 217,000 steps), execute the following command:
```bash
python train_glm5.py \
--data_dir ./data \
--batch_size 6 \
--gradient_accumulation_steps 3 \
--max_iters 110000 \
--lr_decay_iters 260000 \
--warmup_iters 1500 \
--stable_iters 217000 \
--eval_interval 2000 \
--eval_iters 200 \
--log_interval 100
```
### Generation / Sampling
To sample text from the best trained checkpoint:
```bash
python train_glm5.py --eval_only --ckpt out_glm5/ckpt_best.pt --prompt "The future of AI is"
```
## Model Exporting & Production API Deployment
### 1. Export Lightweight Inference Model
Training checkpoints contain optimizer states required for resuming (~1.4 GB). To prepare the model for cloud serving, strip the optimizer state down to an inference-only checkpoint (~240 MB):
```bash
python export_model.py --input_ckpt ckpt_best.pt --output_ckpt model_inference.pt
```
### 2. Launch FastAPI Server
Run the FastAPI production server using Uvicorn:
```bash
uvicorn app:app --reload --port 8000
```
The server automatically pre-loads the model into memory on startup and serves requests via CPU inference.
### 3. API Usage & Documentation
FastAPI provides an interactive OpenAPI / Swagger UI documentation page out of the box. Open `http://localhost:8000/docs` in a browser to test endpoints interactively.
#### Example REST API Call (`POST /generate`):
```bash
curl -X POST "http://127.0.0.1:8000/generate" \
-H "Content-Type: application/json" \
-d '{
"prompt": "In conclusion,",
"max_new_tokens": 100,
"temperature": 0.8,
"top_k": 50,
"seed": 42
}'
```
#### Example Response:
```json
{
"prompt": "In conclusion,",
"generated_text": "In conclusion, the development of modern neural network architectures...",
"num_tokens": 103,
"inference_time_sec": 1.42
}
```
## License
MIT License
|