🚀 全量微調自定義大語言模型
本項目基於Meta-Llama-3.1-8B架構實現了一個自定義訓練的語言模型。與之前使用高秩適配器的版本不同,該模型採用全量微調的方式,以增強其在各種任務中的學習能力。
🚀 快速開始
環境安裝
pip install -U transformers accelerate trl wandb wheel packaging peft bitsandbytes liger-kernel flash_attn
訓練命令
python sft_14.py \
--run_name="llama3.1-8b-continued2" \
--model_name_or_path="meta-llama/Meta-Llama-3.1-8B" \
--dataset_name="mlfoundations/dclm-baseline-1.0-parquet,mlabonne/FineTome-100k" \
--report_to="wandb" \
--optim="adamw_bnb_8bit" \
--lr_scheduler_type="cosine" \
--max_steps=100000 \
--max_seq_length=64000 \
--learning_rate=0.00001 \
--attn_implementation="flash_attention_2" \
--save_strategy="steps" \
--save_steps 50 \
--save_total_limit=10 \
--per_device_train_batch_size=1 \
--per_device_eval_batch_size=1 \
--gradient_accumulation_steps=8 \
--logging_steps=1 \
--num_train_epochs=1 \
--push_to_hub \
--hub_model_id="ericflo/Llama-3.1-8B-ContinuedTraining2-FFT" \
--hub_strategy="all_checkpoints" \
--gradient_checkpointing \
--use_liger=true \
--packing=true \
--torch_dtype="bfloat16" \
--output_dir="continuedtraining2_output"
✨ 主要特性
- 全量微調:更新所有模型參數,以實現全面學習。
- 8位AdamW優化器:使用
adamw_bnb_8bit
進行內存高效訓練。
- Flash Attention 2:實現
flash_attention_2
以加快訓練速度。
- 梯度檢查點:支持在有限GPU內存下進行訓練。
- Liger和打包技術:利用
use_liger=true
和packing=true
進行高效數據處理。
- BFloat16精度:使用
bfloat16
以平衡精度和性能。
📦 安裝指南
pip install -U transformers accelerate trl wandb wheel packaging peft bitsandbytes liger-kernel flash_attn
💻 使用示例
中間填充(FIM)功能使用示例
FIM允許模型在給定前綴和後綴的情況下完成文本,這對於代碼補全、文本填充和上下文感知生成等任務特別有用。
要使用FIM功能,請使用特殊標記來構造輸入:
<|fim_start|>
:標記FIM輸入的開始
<|fim_marker|>
:將前綴與後綴分開
<|fim_gen|>
:指示生成內容應開始的位置
<|fim_end|>
:標記FIM輸入的結束
示例FIM輸入:
<|fim_start|>{前綴}<|fim_marker|>{後綴}<|fim_gen|>
模型將生成內容替換<|fim_gen|>
,填充前綴和後綴之間的中間部分。
反向預測和指令反向翻譯示例
此技術通過訓練模型預測對話或文本的前一部分來增強其上下文理解能力,也稱為指令反向翻譯。
工作原理:
- 給模型一段對話或文本片段。
- 要求它預測此片段之前的內容。
- 此過程有助於模型理解上下文、對話流程和思想的邏輯進展。
優點:
- 提高上下文理解能力
- 增強保持連貫、上下文合適對話的能力
- 更好地掌握文本中的因果關係
示例用例:
輸入:
人類:感謝你提供關於巴黎的信息。你能推薦一些那裡受歡迎的旅遊景點嗎?
任務:預測此對話中的上一次交流。
可能的模型輸出:
人類:法國的首都是什麼?
助手:法國的首都是巴黎。它被稱為“光之城”,以其藝術、文化和歷史地標而聞名。
人類:感謝你提供關於巴黎的信息。你能推薦一些那裡受歡迎的旅遊景點嗎?
Meta - FIM示例
<|fim_start|>人類:今天天氣怎麼樣?
助手:很抱歉,我無法獲取即時天氣信息。你能提供一下你的位置嗎?<|fim_marker|>人類:謝謝你提供關於巴黎的信息。你能推薦一些那裡受歡迎的旅遊景點嗎?<|fim_gen|>人類:我在法國巴黎。
助手:啊,巴黎!雖然我不能提供即時天氣信息,但我可以告訴你,巴黎的氣候通常比較溫和。我建議你查看當地的天氣網站或應用程序以獲取最新信息。
人類:這是個好主意,謝謝。既然我們在談論巴黎,你能告訴我一些著名的地標嗎?
助手:當然可以!巴黎以其標誌性的地標而聞名。以下是一些著名的地標:
1. 埃菲爾鐵塔
2. 盧浮宮博物館
3. 巴黎聖母院大教堂
4. 凱旋門
5. 聖心大教堂<|fim_end|>
在這個示例中,模型需要理解並生成一個連貫的對話,使其適合給定的起點和終點之間。
📚 詳細文檔
模型概述
- 開發者:Eric Florenzano
- 模型類型:大語言模型(LLM)
- 語言:英語,在代碼相關任務中專注於Python
- 許可證:Apache - 2.0
- 基礎模型:meta - llama/Meta - Llama - 3.1 - 8B
獨特的訓練方法
該模型直接在高質量數據集的混合上進行訓練,用於通用文本、代碼補全任務以及指令遵循。主要特點包括:
- 全量微調:與之前的LoRA方法不同,此版本使用全量微調來更新所有模型參數。
- 多樣化的數據集混合:結合預訓練和指令數據集,以實現全面的語言理解。
- 多格式指令調整:在ChatML和Llama Chat模板之間交替使用,以實現靈活的指令遵循。
- 上下文數據前綴:使用源信息來解決訓練期間的數據不平衡問題。
- 中間填充(FIM)訓練:納入FIM任務,以增強上下文理解能力。
訓練數據
該模型在多種高質量數據源的混合上進行訓練:
- FineTome - 100k:用於通用語言任務的高質量指令調整數據。
- dclm - baseline - 1.0 - parquet:蘋果的預訓練語料庫,用於文本補全/預測。
- 英語、西班牙語和法語維基百科:用於廣泛的語言理解。
- Starcoder:專注於Python的高質量代碼數據集,用於代碼補全任務。
訓練過程
上述已給出安裝和訓練命令相關內容。
評估
任務 |
版本 |
過濾器 |
少樣本數量 |
指標 |
值 |
標準誤差 |
tinyBenchmarks |
N/A |
|
|
|
|
|
- tinyArc |
0 |
none |
25 |
acc_norm |
↑ |
0.5821 |
- tinyGSM8k |
0 |
flexible - extract |
5 |
exact_match |
↑ |
0.4989 |
|
|
strict - match |
5 |
exact_match |
↑ |
0.4867 |
- tinyHellaswag |
0 |
none |
10 |
acc_norm |
↑ |
0.8307 |
- tinyMMLU |
0 |
none |
0 |
acc_norm |
↑ |
0.6651 |
- tinyTruthfulQA |
0 |
none |
0 |
acc |
↑ |
0.4991 |
- tinyWinogrande |
0 |
none |
5 |
acc_norm |
↑ |
0.7558 |
預期用途
該模型旨在用於以下方面:
- 文本補全和生成
- 代碼補全(特別是Python)
- 指令遵循
- 通用語言理解
- 上下文感知文本填充(使用FIM)
侷限性和偏差
- 模型可能表現出訓練數據中存在的偏差。
- 它缺乏超出訓練數據的即時知識。
- 在沒有人工監督的情況下,不應將其用於關鍵決策。
技術規格
- 基礎模型:meta - llama/Meta - Llama - 3.1 - 8B
- 訓練方法:全量微調
- 庫:Hugging Face Transformers和TRL
🔧 技術細節
本模型採用全量微調的方式對Meta-Llama-3.1-8B架構進行訓練,在訓練過程中運用了多種先進技術,如8位AdamW優化器、Flash Attention 2、梯度檢查點等,以提高訓練效率和性能。同時,通過多樣化的數據集混合、多格式指令調整、上下文數據前綴和FIM訓練等方法,增強了模型的語言理解和上下文處理能力。
📄 許可證
本模型使用Apache - 2.0許可證。
聯繫信息
如需諮詢有關此模型的問題,請通過模型倉庫聯繫Eric Florenzano。