模型概述
模型特點
模型能力
使用案例
🚀 Llama-3-6B模型
本項目推出了全球首個具有60億參數的Llama-3基礎模型。該模型是prince-canuma/Llama-3-6B-v0的預訓練版本,它採用了一種名為降階循環(downcycling)的技術,從Meta-Llama-3-8B創建而來。該模型在來自fineweb的10億個英文文本標記上進行了持續預訓練,在評估集上取得了令人矚目的成果:
- 損失率:2.4942
🚀 快速開始
使用以下代碼開始使用該模型:
from transformers import AutoModelForCausalLM, AutoConfig, AutoTokenizer
# 加載模型、配置和分詞器
model_name = "prince-canuma/Llama-3-6B-v0.1"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
inputs = tokenizer(
[
"Who created Python?"
], return_tensors = "pt")
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 200)
輸出:
<|begin_of_text|>Who created Python? What is Python used for? What is the difference between Python 2 and Python 3? What is the difference between Python and Python 3?
Python is a programming language that was created by Guido van Rossum in 1991. It is a widely used language for web development, data science, and machine learning. Python is also used for creating software applications and games.
Python is a powerful language that is easy to learn and use. It has a large library of built-in functions and packages that make it easy to write code. Python is also a very popular language for web development, with many popular web frameworks such as Django and Flask being written in Python.
Python is also used for data science and machine learning. It has a large library of packages for data analysis, machine learning, and artificial intelligence. Python is also used for creating software applications and games.
Python 2 and Python 3 are two different versions of the Python language. Python 2 was the original version of the
✨ 主要特性
- 基於Llama-3架構,具有60億參數,在英文文本任務上表現出色。
- 通過降階循環技術,從Llama-3-8B創建而來,可進一步進行預訓練和微調。
- 可用於多種自然語言處理任務,如編碼輔助、檢索增強生成(RAG)、函數調用等。
📦 安裝指南
文檔未提及安裝步驟,故跳過該章節。
💻 使用示例
基礎用法
from transformers import AutoModelForCausalLM, AutoConfig, AutoTokenizer
# 加載模型、配置和分詞器
model_name = "prince-canuma/Llama-3-6B-v0.1"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
inputs = tokenizer(
[
"Who created Python?"
], return_tensors = "pt")
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 200)
高級用法
文檔未提及高級用法示例,故跳過該部分。
📚 詳細文檔
模型描述
這是一個🤗 Transformers模型的模型卡片,已推送到Hugging Face Hub。該模型卡片是自動生成的。
- 開發者:Prince Canuma
- 贊助方:General
- 模型類型:Llama
- 許可證:Llama-3
- 預訓練基礎模型:prince-canuma/Llama-3-6B-v0
模型來源
- 倉庫:https://github.com/Blaizzy/Coding-LLMs-from-scratch/tree/main/Llama-3
- 視頻:https://youtube.com/playlist?list=PLDn_JsyofyfTH5_5V1MNb8UYKxMl6IMNy&si=5Y4cm-6wrMOD1Abr
用途
你可以使用此模型創建指令和聊天版本,用於各種用例,如編碼助手、檢索增強生成(RAG)、函數調用等。
侷限性
該模型繼承了基礎模型的一些侷限性,以及在創建過程中產生的一些額外侷限性,例如:
- 編碼和數學能力有限:根據基準測試,該模型需要在代碼和數學數據上進行更多的預訓練/微調,才能在推理任務中表現出色。
- 語言侷限性:該模型僅在英文數據上進行了持續預訓練。如果計劃將其用於多語言用例,建議進行微調或繼續預訓練。
🔧 技術細節
降階循環
圖1. 降階循環工作流,詳情見arxiv.org/abs/2404.08634。
降階循環是一種允許從大型預訓練模型的檢查點創建不同大小的新大語言模型(LLM)的技術。具體做法是,選取一個參考模型(如Llama-3-8B),複製其32層中的24層的權重,以及嵌入層和預測頭的權重。然後,初始化一個具有24層的較小目標模型,並加載這些預訓練權重。
這個新模型很可能仍然能夠輸出清晰可讀的內容,但要使其表現良好,需要繼續進行預訓練。
圖2. 未繼續預訓練的降階模型與參考模型對比。
訓練數據
為了進行持續預訓練,從Huggingface的FineWeb CC-Main-2024-10切片中提取了10億個標記。
訓練超參數
訓練過程中使用了以下超參數:
屬性 | 詳情 |
---|---|
學習率 | 0.0002 |
訓練批次大小 | 2 |
評估批次大小 | 2 |
隨機種子 | 42 |
分佈式類型 | 多GPU |
設備數量 | 4 |
梯度累積步數 | 8 |
總訓練批次大小 | 64 |
總評估批次大小 | 8 |
優化器 | Adam(β1=0.9,β2=0.999,ε=1e-08) |
學習率調度器類型 | 餘弦 |
學習率調度器熱身步數 | 100 |
訓練輪數 | 2 |
查看Axolotl配置
Axolotl版本:0.4.0
base_model: prince-canuma/Llama-3-6B-v0.1
model_type: AutoModelForCausalLM
tokenizer_type: AutoTokenizer
load_in_8bit: false
load_in_4bit: true
strict: false
datasets:
- path: prince-canuma/fineweb-CC-MAIN-2024-10-1B-en
type: completion
split: train
dataset_prepared_path: last_run_prepared
val_set_size: 0.001
output_dir: ./llama-3-6b
save_safetensors: true
adapter: qlora
lora_model_dir:
sequence_len: 8192
sample_packing: false
pad_to_sequence_len: false
lora_r: 128
lora_alpha: 128
lora_dropout: 0.05
lora_target_modules:
lora_target_linear: true
lora_fan_in_fan_out:
wandb_project: llama-3-6b
wandb_entity:
wandb_watch:
wandb_name:
wandb_log_model:
gradient_accumulation_steps: 8
micro_batch_size: 2
num_epochs: 2
optimizer: paged_adamw_32bit
lr_scheduler: cosine
learning_rate: 2e-4
train_on_inputs: false
group_by_length: false
bf16: auto
fp16:
tf32: false
gradient_checkpointing: true
early_stopping_patience:
resume_from_checkpoint:
local_rank:
logging_steps: 1
xformers_attention:
flash_attention: true
warmup_steps: 100
evals_per_epoch: 4
eval_table_size:
save_steps: 4000
debug:
deepspeed:
weight_decay: 0.0
fsdp:
fsdp_config:
special_tokens:
pad_token: "<|reserved_special_token_0|>"
訓練結果
進行了3次不同的實驗。由於預算限制,在這些實驗中使用了QLoRA而不是全量微調。
- v0:進行了1000步的測試,以檢查模型在QLoRA參數下是否會有所改進。
- v1:調整了QLoRA參數(秩和α)。
- v2:這是主要實驗,在FineWeb的10億個標記上進行了2個輪次的訓練。
所有詳細信息可在我的Wandb儀表盤上找到:https://wandb.ai/prince-canuma/llama-3-6b?nw=nwuserprincecanuma
 圖3. Wandb上的實驗訓練損失圖表。
總體指標:
訓練損失 | 輪次 | 步數 | 驗證損失 |
---|---|---|---|
7.1562 | 0.0 | 1 | 7.1806 |
2.7339 | 0.25 | 5867 | 2.6266 |
2.6905 | 0.5 | 11734 | 2.5872 |
2.6134 | 0.75 | 17601 | 2.5549 |
2.532 | 1.0 | 23468 | 2.5235 |
2.5319 | 1.25 | 29335 | 2.5067 |
2.3336 | 1.5 | 35202 | 2.4968 |
2.3486 | 1.75 | 41069 | 2.4942 |
框架版本
- PEFT 0.10.0
- Transformers 4.40.0.dev0
- Pytorch 2.2.0+cu121
- Datasets 2.15.0
- Tokenizers 0.15.0
硬件
- 使用JarvisLabs的4塊RTX6000顯卡(由General Catalyst贊助,感謝Viet)
評估
基準測試
- Hellaswag:用於研究基於常識的推理的數據集。
- ARC:來自3至9年級科學考試的多項選擇題問答數據集。
- MMLU:包含57項任務的測試,用於衡量文本模型的多任務準確性。
- TruthfulQA:用於衡量模型傳播網上常見虛假信息傾向的測試。
- Winogrande:用於常識推理。
- GSM8k:多樣化的小學算術應用題,用於衡量模型解決多步數學推理問題的能力。
結果
圖4. Llama-3-8B、Llama-3-6B和Llama-3-6B(持續預訓練)的性能比較。
在10億個標記上進行2個輪次的預訓練在各個方面都產生了積極影響。新的基礎模型現在與參考模型(Llama-3-8B)具有競爭力,同時體積小了1.3倍。
圖5. Llama-3-8B、Llama-2-13B、Yi-1.5-6B和Llama-3-6B的性能比較。
Llama-3-6B在其類別內的模型中具有競爭力,並且在6個不同的基準測試中,與自身大小2倍的模型相比也不遜色。
總結與未來方向
本次實驗取得了成功!使用這種技術,我將能夠構建許多變體。這是我計劃創建的眾多新基礎模型中的第一個。
接下來,我計劃探索不同的數據混合方式,並進行全量微調,所有這些都將有助於開發其他小型模型以及更大、更強大的模型。
📄 許可證
本模型使用Llama-3許可證。
引用
BibTeX
@misc{prince2024downcycling,
title={Efficient LLM Downcycling: Generating Diverse Model Sizes from Pretrained Giants},
author={Prince Canuma},
year={2024},
}
參考文獻
@misc{komatsuzaki2023sparse,
title={Sparse Upcycling: Training Mixture-of-Experts from Dense Checkpoints},
author={Aran Komatsuzaki and Joan Puigcerver and James Lee-Thorp and Carlos Riquelme Ruiz and Basil Mustafa and Joshua Ainslie and Yi Tay and Mostafa Dehghani and Neil Houlsby},
year={2023},
eprint={2212.05055},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@misc{sanyal2024pretraining,
title={Pre-training Small Base LMs with Fewer Tokens},
author={Sunny Sanyal and Sujay Sanghavi and Alexandros G. Dimakis},
year={2024},
eprint={2404.08634},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
致謝
我衷心感謝社區提供的寶貴專業知識和堅定支持。
此外,我要感謝General Catalyst(GC)的Viet為我提供了急需的計算資源。
這是我迄今為止最具雄心的項目,如果沒有出色的開源機器學習社區,這是不可能實現的!
開發者們,我期待看到並聽到你們創建的創新微調模型和應用程序。
用戶們,我很高興瞭解你們的使用體驗和用例。
感謝你們的關注和支持!



