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