GPT-2 124M GitHub 代ç è®ç» | AIçæåç¿»è¯
é®é¢ï¼ åºäº lzwjava/zz ä¸çè®ç»ç¬è®°åé
ç½®/èæ¬ï¼æä¾GPT-2 124Må¨GitHub代ç ä¸è®ç»è¿è¡çå
¨é¢ææ¯æ»ç»ã
GPT-2 124M å¨ GitHub 代ç ä¸çè®ç» ââ å ¨é¢æ»ç»
1. æµæ°´çº¿æ¦è§
䏿®µå¼æµæ°´çº¿ï¼å
¨é¨å¨ lzwjava/zz ä¸èªå®ä¹æå»ºï¼
codeparrot/github-code (HuggingFace)
â download_github_code.py
38 个 parquet åçï¼å
± 1126 个ï¼ï¼çº¦ 27 GB
â tokenize_github_code.py
282 个 .npy åçï¼éè¿ tiktoken ä½¿ç¨ GPT-2 BPEï¼
140 个è®ç»åç + 1 个éªè¯åç
â train.py + config/train_github_code_124m.py
nanoGPT è®ç»å¾ªç¯ï¼427k æ¥
æ°æ®éï¼ codeparrot/github-code æ¯ä¸ä¸ªå¤§è§æ¨¡å¼æºä»£ç æ°æ®éãä½ ä¸è½½äº 1126 个 parquet åçä¸ç 38 个ï¼è¦ç约 140 亿 tokenï¼åå¸å¨ 140 个è®ç»åçä¸ãéªè¯åçæ¯ 1 个æä»¶ââå¾å¯è½æ¯ä¿ççè¯è¨æåçç´¢å¼ï¼æä¾äºä¸ä¸ªå¹²åçã类似åå¸å¤ (OOD) çéªè¯ä¿¡å·ã
2. æ¨¡åæ¶æ
æ å GPT-2 124M ââ æªä½ä¿®æ¹ï¼
åæ°éå·®å¼ï¼å½åç 1.24亿 ä¸ æ»åæ°é 1.63亿ï¼ï¼åµå
¥è¡¨å¤§å°ä¸º 50257 à 768 â 3860ä¸ åæ°ï¼ä¸è®¡å
¥â124Mâæ ç¾ãååä¼ æä¸ºæ åå æ transformerï¼token + ä½ç½®åµå
¥ â 12 个ä»
è§£ç 卿³¨æåå â LM å¤´ï¼æéä¸åµå
¥ç»å®ï¼ãbias=False éµå¾ª GPT-3 论æçåç°ï¼å³åç½®å¨å¤§è§æ¨¡ä¸ä¸å¿
è¦ã
3. è®ç»é ç½®
æ¹æ¬¡å ä½ï¼
micro_batch = 4 个åºå à 1024 token = 4096 token
grad_accum = 8
æææ¹æ¬¡å¤§å° = 4096 à 8 = 32768 token/æ¥
32768 token/æ¥ä¸ Karpathy å¨ nanoGPT Shakespeare/OpenWebText è¿è¡ä¸ä½¿ç¨çæææ¹æ¬¡å¤§å°ç¸åââ对äºå GPU æ¥è¯´æ¯ä¸ä¸ªå¯é çéæ©ã
ä¼åå¨ï¼GPT-3 飿 ¼ AdamWï¼ï¼
lr = 6e-4 # å³°å¼å¦ä¹ ç
min_lr = 6e-5 # éè¿ä½å¼¦è°åº¦ 10 åè¡°å
warmup_iters = 2000 # 线æ§é¢ç
max_iters = 427000
lr_decay_iters = 427000 # æ´ä¸ªè¿è¡æé´å®å
¨ä½å¼¦è¡°å
weight_decay = 0.1
beta1, beta2 = 0.9, 0.95 # GPT-3 é»è®¤å¼
grad_clip = 1.0
ä½å¼¦è¡°å贯穿å
¨é¨ 427k æ¥ââå¦ä¹ çå¨ç»ææ¶æ°å¥½è¾¾å° min_lrï¼è¿æ¯æ ååæ³ï¼æ å·å´é¶æ®µï¼ãè¿æ£æ¯ GPT-3/Chinchilla 飿 ¼è¿è¡çåæ³ã
Chinchilla æ¡æ¶ï¼
Chinchilla 对 124M åæ°çæä¼è®ç»é约为 25 亿 tokenãä½ å¨ 140 亿 token ä¸è®ç»ï¼è¿ç¸å¯¹äºæ´ç´ Chinchilla æ¯ä¾æ¯çº¦ 5.6 åçè¿åº¦è®¡ç®ãè¿æ¯ä¸ºäºæ¨çæçèææä¸ºä¹ââä¸ä¸ªè¿åº¦è®ç»çè¾å°æ¨¡å卿塿¶è¿è¡å¾æ´å¿«ï¼âLlama å²å¦âï¼ãä½ä¹æå³çè®ç»åææ¢¯åº¦ä¿¡å·åå¼±ï¼è¿è§£éäºä¸ºä»ä¹ä½ å¨çº¦ 7 䏿¥åçå° val_loss å¢å ã
4. 硬件ä¸ååé
| ææ | å¼ |
|---|---|
| GPU | RTX 4070 12GB |
| æ¾åä½¿ç¨ | ~5050 MiB |
| åè | ~208W |
| 温度 | ~65°C |
| æ¯æ¥æ¶é´ | å¹³å ~636 ms/æ¥ï¼ç¨³æ 621 ms |
| ååé | ~51900 token/ç§ |
| MFU | 14.44% |
MFU åæï¼ å¨ RTX 4070 ä¸è¿è¡ nanoGPT ä¸ä½¿ç¨ torch.compile æ¶ï¼14.44% çæ¨¡å FLOP å©ç¨ç对äºå个æ¶è´¹çº§ GPU æ¥è¯´æ¯å
¸åçãRTX 4070 çç论 BF16 ååé约为 165 TFLOPSãGPT-2 124M çåå+ååä¼ æå¤§çº¦éè¦ 6 à N à D = 6 à 140 亿 à 1.63 亿 â 1.37 à 10^19 æ» FLOPsãä¸å³°å¼ MFU çå·®è·ç±ä»¥ä¸åå è§£éï¼
- å å带宽饱åï¼æ¿æ´»å¼ãä¼åå¨ç¶æï¼
- ç¼è¯æ¥éª¤é´ç Python å¼é
- æ¯ 1000 æ¥è¿è¡è¯ä¼°/æ£æ¥ç¹ I/O
torch.compile é
å BF16 卿¤åæ¥äºå
³é®ä½ç¨ï¼å¦åä½ å¯è½ä¼å¾å° 8-10% ç MFUã
5. æå¤±æ²çº¿ä¸è¿æååæ
æå¤±ä»ç¬¬ 70k æ¥å°ç¬¬ 427k æ¥å¢å æ¯å
³é®ä¿¡å·ãä¿åç ckpt.pt æ¯æç»æ¥æ°ï¼èéæä½³ val_lossââä½ åºå½é载大约第 60-80k æ¥çæ£æ¥ç¹ä»¥è·å¾æä½³æ¨¡åãä¸ç§ best_val_loss æ£æ¥ç¹ä¿åçç¥ï¼ä»
å¨ val_loss æ¹åæ¶ä¿åï¼æ¬å¯ä»¥ææå°è¿ä¸ç¹ã
为ä»ä¹ val_loss å¨è®ç»æå¤±ä¸éçæ åµä¸åèå¢å ï¼ å ¸åçè¿æå + å¦ä¹ çè¡°å导è´çåå¸åç§»ï¼
- éçå¦ä¹ çéè¿ä½å¼¦è¡°åè³ 6e-5ï¼ä¼å卿¥é¿åå°
- 模åè¶æ¥è¶è®°å¿ 140 个è®ç»åçä¸çç¡®å token åºå
- é£ 1 个éªè¯åç䏿¨¡åæå¦å 容åºç°å离ââæ¨¡åè¿äºç´§å¯å°æåäºè®ç»åå¸
- ç±äº
dropout=0.0ï¼é¤äºæéè¡°å夿²¡ææ£åå
å¨çº¦ 5.6 å Chinchilla æ¶åºç°ç忣è¯å®ï¼å¨æ¤æ°æ®é大å°ä¸ï¼æ¨¡åå¨ç¬¬ 70k æ¥å·¦å³å·²ç»é¥±åãå©ä½ç 357k æ¥æ¯æ¢¯åº¦ä¸éå¨è®°å¿åèéæ³åä¸çåªåã
6. æ»è®¡ç®é¢ç®
æ» token æ°ï¼140 亿
计ç®éï¼åå+ååï¼ï¼~6 à 140 亿 à 1.63 亿 = 1.37 à 10^19 FLOPs
å®é
æ¶é´ï¼75.4 å°æ¶
GPU å°æ¶ï¼75.4 GPU å°æ¶ï¼RTX 4070ï¼
RTX 4070 TDPï¼200Wï¼å®é
ï¼208W
è½èï¼75.4h à 0.208 kW â 15.7 kWh
ä¸ GPT-2 åå§è®ç»å¯¹æ¯ï¼OpenAI ä½¿ç¨ 256 个 TPU v3 è®ç» GPT-2 1.5Bãä½ ç¨ä¸åæ¶è´¹çº§ GPU å¨ 3 天å è®ç»äº 124Mãç¸å¯¹ææ¬è¯´æäºè®¡ç®èµæºå¦ä½å徿°ä¸»åã
7. 模åå®é å¦å°çä¸è¥¿
å¨ val_loss ~2.08ï¼æä½³ï¼æ¶ï¼æ¨¡åçæç代ç å ·æï¼
- æ£ç¡®ç缩è¿ç»æï¼PythonãJavaScript 模å¼ï¼
- åçç彿°ç¾åååéå
- åºæ¬çæ§å¶æµï¼
if/else,for,returnï¼
å¨ val_loss 3.47ï¼æç»ï¼æ¶ï¼çæè´¨é卿ªè§ä»£ç ä¸å®é 䏿´å·®ï¼å°½ç®¡ç»è¿äºæ´å¤è®ç»æ¥éª¤ââæ¨¡åå åçè®ç»æ°æ®ä¸éªè¯åçä¹é´çåå¸å·®è·æ¯çå®åå¨çã
8. ç»éªæè® / ä¸ä¸æ¥
å½åè¿è¡ç峿¶ä¿®å¤ï¼
# å¨ train.py 䏿·»å ï¼ä»
å¨ val_loss æ¹åæ¶ä¿åæ£æ¥ç¹
if val_loss < best_val_loss:
best_val_loss = val_loss
torch.save(checkpoint, 'ckpt_best.pt')
对äºä¸ä¸æ¬¡è¿è¡ââä¿®å¤è¿æåï¼
-
å¨ç¬¬ ~80k æ¥æå忢 ââ ä½ æ 140 亿 tokenï¼ä½æ¨¡åå¨çº¦ 25 亿ï¼Chinchillaï¼æ¶é¥±åãå缩ç¸åçå¦ä¹ çè°åº¦ï¼è®ç»è³ 80k æ¥ï¼çº¦ 26 亿 tokenï¼ã
-
æ·»å dropout ââ
dropout=0.1å°åç¼è¿æåï¼ä½ä¼æå¤±çº¦ 5% çååéã -
æ´å¤éªè¯å¤æ ·æ§ ââ 1 个éªè¯åçä¿¡å·å¼±ãä½¿ç¨ 3-5 ç§ä¸åè¯è¨çåçä½ä¸ºéªè¯éï¼ä»¥ææè¯è¨ç¹å®çè¿æåã
-
æ©å¤§è§æ¨¡ ââ ä½ ç¨äº GPT-2 760M ç AMI MI300X å¯ä»¥å¨çº¦ 6-8 å°æ¶å 以 Chinchilla æä¼æ¹å¼è®ç»è¿ä¸ª 124M 模åãæè ç¨å®å¨è¿ä¸ª 140 亿 token æ°æ®éä¸è®ç»ä¸ä¸ª 760M 模åï¼
6 à 140 亿 à 7.6 亿 â 6.4 à 10^19 FLOPsââ å¨ MI300X ä¸çº¦é 12-15 å°æ¶ï¼èå¨ 4070 ä¸åéè¦æ°æã -
æ£ç¡®è¯ä¼° ââ å¨ HumanEval 代ç çæ®µä¸çå°æåº¦æç®åè¡¥å ¨ä¸ç pass@k å¯ä»¥æä¾è¶ è¶ val_loss çå ·ä½ä»£ç è´¨éææ ã
æ»ç»ï¼ 宿´ç端å°ç«¯è®ç»ã75 å°æ¶ï¼140 亿 tokenï¼æ¶è´¹çº§ç¡¬ä»¶ï¼èªå®ä¹æµæ°´çº¿ãçæ£çèå©å¨äºåºç¡è®¾æ½ ââ ä¸è½½ â åè¯ â è®ç» â æ£æ¥ç¹åæ£å¸¸å·¥ä½ã模åå¨ç¬¬ ~70k æ¥è¾¾å°å³°å¼ï¼val_loss 2.08ï¼ï¼åæé忝å¨åºå®æ°æ®éä¸è®ç»å° Chinchilla ç 5.6 å䏿 æ£ååæ åµä¸çé¢æç»æãä¸ä¸æ¬¡è¿è¡ï¼æå忢 + å缩è°åº¦ = å¨ 1/5 çæ¶é´å è·å¾æ´å¥½ç模åã
