
BabyGpt以Karpathy的NG-Video講座和Mingpt的直覺為基礎,提供了GPT的工作模型,該模型在較小的規模上(256和16個Out通道,5層GPT,5層GPT,微調)。 BabyGpt是由一個Toygpt建造的,該玩具是從頭開始了解變壓器的。正如您將在下面看到的那樣,它已被縮小。訪問筆記本。我們從簡單的語言模型,注意機制和最終BabyGpt的變壓器擴展到變形金剛。雖然Toygpt是通過定量分離變壓器的所有層來構建的。在BabyGpt中,注意機制是手動實施的。構建較小的GPT的目的是了解更精細的變壓器功能。
要訓練小型模型,我們正在使用微小的故事。您可以從擁抱臉上下載權重。我們將Max_iters設置為Tesla T4上的5000。對於OG模型,我們使用256個OUT通道。
| 模型 | 上下文長度 | n_layers | n_head | n_embd | 火車損失 | 瓦爾損失 | 參數 | 數據 |
|---|---|---|---|---|---|---|---|---|
| 15m | 16 | 4 | 4 | 16 | 2.4633 | 2.4558 | 13k | 故事15m.bin |
| 42m | 32 | 8 | 8 | 32 | 2.3772 | 2.3821 | 1.01m | 故事42m.bin |
| Babygpt原始 | 64 | 8 | 8 | 256 | 1.3954 | 1.5959 | 637萬 | 數據 |
注意: - 目前正在省略110m。公羊炸毀了.. !!
如果您想了解變形金剛從頭開始工作的煩惱,則此路線圖將指導您。我們從實施簡單的語言模型BigRam和ngram開始,然後從那裡開始努力,直至構建變形金剛,從頭開始,然後再用babygpt。

我們也實施了低級近似值以及對BabyGpt的LIT-LAMA。我們終於訓練模型並生成令牌。
低等級近似提高了參數效率(壓縮技術)。添加了一個lora_model.py(在256個頻道上)。我們收到大約2的參數降低。一切,我們需要做的就是計算等級參數並相應地計算注意力。在Lora筆記本中,根據Chinchilla紙進行了拖鞋的估計。
量化也已在洛拉模型上進行。還添加了拖鞋的計算。對於256個頻道的BabyGpt型號,我們將獲得0.407 PETA拖鞋。在Lora筆記本中,我們添加了量化。就尺寸降低而言,我們目前的降低為1.3。
Lit-Lalama模型的插入已移植到BabyGpt(基於Llama-1版)。您可以在此處找到筆記本 - > llama_implementation。運行該模型,也添加了MFU。 llamapython llama_model_v1.py 。下面提供了培訓和生成令牌。
注意: - 我們已端口build_rope_cache() , apply_rope()和RMSNorm()來自版本1。我們也不使用版本1權重或檢查點(這些都適用於較大的型號7b,13b,65b等)。您可以將權重和舊羊毛拉瑪下載到自己的版本中。
我們已經將Llama2通過Meta移植到Babygpt中。您可以在llamapython llama2.py上找到實現。我們還提供了與模型一起計算的拖鞋。
計算K,V緩存的拖鞋是要計算的拖船是:-2 * 2 * num_layers *(embedded_dim) ^2。在Kipply的博客MFU中查找有關如何計算內存和計算的更多信息已添加到Llama2
注意: - 我們不使用Meta的原始Llama重量。我們還為70B使用任意值。您可以使用自己的權重將其移植到自己的型號中。
已經完成了使用句子的令牌化。我們正在導出一個tokenizer.bin 。在llamapython tokenizer.py中運行它(添加了元件)。我們可以使用.bin文件進行進一步推斷。
我們需要有效的LLMS內存使用量。硬件加速器使用一種稱為硬件翻牌用途的技術,用於在內存使用和計算之間有效折衷。這通常是使用在給定設備上觀察到的觸發器與其理論峰值拖失lop的比率進行的。 MFU是觀察到的吞吐量(每秒標記)的比率,相對於在峰值觸發器上運行的系統的理論最大吞吐量。特斯拉T4的理論峰值矩陣約為8.1 tflops。因此,我們計算了Llama Trainer模型的MFU。請參閱在駱駝訓練下的教練筆記本上。我們將獲得322萬參數的MFU:0.0527723427%。當然,隨著參數數量的增加,這當然會增加。對於530b參數模型,A100 GPU的MPU約為30%。我們使用棕櫚紙的B節進行參考。
LLM需要許多GPU才能運行,我們需要找到減少這些要求的方法,同時保留模型的性能。已經開發了試圖縮小模型大小的各種技術,您可能已經聽說過量化和蒸餾。已經發現,我們可以使用2字節BF16/FP16半精度獲得幾乎相同的推理結果,而不是使用4字節FP32精度,將模型大小減半。
為了補充這一點,引入了8位量化。該方法使用四分之一的精度,因此僅需要模型大小的1/4!但這不是僅僅掉下一半的碎片就可以做到了。這個主題還有很多。看擁抱面部量化。
您可以看到有關如何執行駱駝定量化的量子。您可以查看初學者量化介紹的量化筆記本。已經完成了不同的基準測試。對於EX: - 在GPU上,BFLOAT16上的7B參數模型將大約需要15GB。 BabyGpt將花費大約幾千字節.. ! ! ! quantization.py已從lit-lalama repo獲得。還添加了使用句子的令牌。可以從Tokenizer.Model執行不同的重量操作
對於培訓後的量化,我們能夠將模型大小降低幾乎4倍。
model_fp = BabyGPTmodel(config)
model_fp.eval()
model_int8 = torch.ao.quantization.quantize_dynamic(
model_fp, # the original model
{torch.nn.Linear}, # a set of layers to dynamically quantize
dtype=torch.qint8)
/// number of parameters: 3222637
12.9688 MB
3.4603 MB ////
注意:僅用於量化,我們使用的是一個大約322萬參數的較大模型
BabyGptModel和量化模型已經完成了性能基準測試。以下是結果。
。
它已被添加到量子文件夾中的量化筆記本上。
BabyGPT
├── bigram_lm.py
├── ngram_lm.py
├── model.py
├── Lora_model.py
├── Llama_model.py
├── Attention
│ ├── dot product attention.py
│ ├── multi headed attention.py
│ ├── cross attention.py
│ ├── spatial attention.py
├── Notebook
│ ├── Dot product attention
│ ├── multiheaded attention
│ ├── gpt from scratch
│ ├── spatial transformer
│ ├── babyGPT
│ ├── LoRa
│ ├── llama_implementation
│ ├── mixed precision
├── Train
| ├── babygpt_trainer.py
| ├── llama_trainer.py
├── transformers
| ├── transformer_model.py
│ ├── babyGPT.py
├── Quant
│ ├── quantization.py
│ ├── quantization notebook
│ ├── tokenizer.model
│ ├── tokenizer.vocab
│ ├── tokenizer.py
│ ├── model.pth
│ ├── quant.md
├── llama
│ ├── llama2.py
│ ├── llama_model_v1.py
│ ├── tokenizer.py
│ ├── tokenizer.vocab
│ ├── tokenizer.bin
│ ├── tokenizer.model
├── text.txt
├── trainer.ipynb
├── requirements.txt
克隆回購併運行以下內容:
! git clone https://github.com/soumyadip1995/BabyGPT.git
運行Bigram和Ngram語言模型。 python bigram_lm.py和python ngram_lm.py 。
運行來自變形金剛文件夾的babygpt transformerspython babygpt.py 。
運行簡單的變壓器模型python transformer_model.py
運行低級近似模型python LoRa_model.py
運行Llama Model llamapython llama_model_v1.py
運行Llama2 llamapython llama2.py
從注意文件夾中運行不同的注意機制。
已經添加了非常初步的自動混合精度。 fp16/fp32可以通過啟用CUDA的GPU來實現。 Pytorch的autocast()和gradscalar()的組合用於混合精度。在Pytorch教程中查看更多內容。不幸的是,GPU在培訓期間爆炸了,而CPU現在只支持BFLOAT16。需要很長時間的訓練。如果有人能改善它,那就太棒了。檢查混合精密筆記本。
如果您想開始使用BabyGpt和Llama,但不想經歷有關Transformer型號的所有了解的所有麻煩,則可以簡單地從火車文件夾中運行代碼開始。
訓練和生成Babygpt模型和Llama模型的文本。運行trainpython babygpt_trainer.py和trainpython llama_trainer.py從火車文件夾中。
兩者都接受了Tesla T4 GPU的培訓。您可以根據自己的意願增加或降低max_iters的值。需要幾分鐘才能訓練。
您可以在教練筆記本中看到兩個模型的結果。
參數= 3.22 m
``` number of parameters: 3222381 ```
step 0: train loss 4.6894, val loss 4.6895
step 500: train loss 2.1731, val loss 2.1832
step 1000: train loss 1.7580, val loss 1.8032
step 1500: train loss 1.5790, val loss 1.6645
step 2000: train loss 1.4482, val loss 1.5992
step 2500: train loss 1.3538, val loss 1.5874
step 3000: train loss 1.2574, val loss 1.5971
.
.
.
step 9000: train loss 0.5236, val loss 2.4614
step 9500: train loss 0.4916, val loss 2.5494
step 10000: train loss 0.4680, val loss 2.6631
step 10500: train loss 0.4448, val loss 2.6970
step 10999: train loss 0.4341, val loss 2.7462
Detroit, revior myself 'til I confused to get the big clead Mastles
Slaughterhouse on the blue, that's when he pine I'm hop with the cowprinton
robaly I want to a lox on my tempt
But now we can't never find a gift killed broke
Big before anyone could ever hear the first as I was cooped chill
But i this o for a big star
I said get chased up!
(Hello darkness, my old friend)[Eminem:]
If my legacy I acged buving in the tub (might what?)
I would know one [*Barrns, worried :]
Yeah, so kon bitch, it's
似乎該模型在末尾有點收斂。也許這將需要更多的修改。吐一些eminem喲..:微笑:
數據文件夾包含文本文檔,該文本具有歌詞,其中包括Eminem的所有歌曲。
| 筆記本 | 描述 |
|---|---|
| 點產品的關注 | COLAB |
| 多重註意 | COLAB |
| GPT從頭開始 | COLAB(約860K參數) |
| 空間變壓器 | COLAB |
| babygpt | COLAB(16,256頻道) |
| 洛拉 | COLAB(256個頻道) |
| babygpt的lit-lalama | COLAB(Lit-lalama的16個頻道) |
| Babygpt和Llama的培訓師 | COLAB(Babygpt的16個頻道,256個淡紫色的頻道) |
text.txt基於Eminem的Stan。
許可已更新為包括Facebook Research/Llama,Lit-Lalama和IST-DAS實驗室,您可以在GNU,Apache和MIT下使用它。