Baichuan-13B學習與實戰(zhàn)
發(fā)布日期:2023/7/28 9:47:10 瀏覽量:
-
Baichuan-13B學習與實戰(zhàn)
- Baichuan
- 論文地址:
- Github 代碼:
- baichuan-inc/Baichuan-13B:https://github.com/baichuan-inc/Baichuan-13B
- mark1879/Baichuan-13B-Finetuning:https://github.com/mark1879/Baichuan-13B-Finetuning
- 模型:
- 官方微調(diào)過(指令對齊):https://huggingface.co/baichuan-inc/Baichuan-13B-Chat
- 預訓練大模型(未經(jīng)過微調(diào)):https://huggingface.co/baichuan-inc/Baichuan-13B-Base
- 體驗網(wǎng)站:
一、前言
1.1 Baichuan 介紹
Baichuan-13B 是由百川智能繼 Baichuan-7B 之后開發(fā)的包含 130 億參數(shù)的開源可商用的大規(guī)模語言模型,在權威的中文和英文 benchmark 上均取得同尺寸最好的效果。Baichuan-13B 有如下幾個特點:
- 更大尺寸、更多數(shù)據(jù):Baichuan-13B 在 Baichuan-7B 的基礎上進一步擴大參數(shù)量到 130 億,并且在高質量的語料上訓練了 1.4 萬億 tokens,超過 LLaMA-13B 40%,是當前開源 13B 尺寸下訓練數(shù)據(jù)量最多的模型。支持中英雙語,使用 ALiBi 位置編碼,上下文窗口長度為 4096。
- 同時開源預訓練和對齊模型:預訓練模型是適用開發(fā)者的“基座”,而廣大普通用戶對有對話功能的對齊模型具有更強的需求。因此本次開源同時發(fā)布了對齊模型(Baichuan-13B-Chat),具有很強的對話能力,開箱即用,幾行代碼即可簡單的部署。
- 更高效的推理:為了支持更廣大用戶的使用,本次同時開源了 int8 和 int4 的量化版本,相對非量化版本在幾乎沒有效果損失的情況下大大降低了部署的機器資源門檻,可以部署在如 Nvidia 3090 這樣的消費級顯卡上。
- 開源免費可商用:Baichuan-13B 不僅對學術研究完全開放,開發(fā)者也僅需郵件申請并獲得官方商用許可后,即可以免費商用。
1.2 軟件資源
- CUDA 11.7
- Python 3.10
- pytorch 1.13.1+cu117
1.3 硬件要求
- LoRA 顯存:>= 32G
- QLoRA 顯存:>= 12G
二、環(huán)境搭建
2.1 下載代碼
$ git clone https://github.com/mark1879/Baichuan-13B-Finetuning.git
$ cd Baichuan-13B-Finetuning
2.2 構建環(huán)境
$ conda create -n py310_chat python=3.10 # 創(chuàng)建新環(huán)境
$ source activate py310_chat # 激活環(huán)境
2.3 安裝依賴
$ pip install -r requirements.txt
三、Baichuan-13B 大模型
3.1 Baichuan-13B 大模型 介紹
baichuan-13B 大模型 包含 兩種:
- 第一種:Baichuan-13B-Chat 官方微調(diào)過(指令對齊)
- 第二種:Baichuan-13B-Base 預訓練大模型(未經(jīng)過微調(diào))
3.2 Baichuan-13B 大模型 下載
# 在根目錄 /data 下 保存大模型
cd /data
git lfs install
# 官方微調(diào)過(指令對齊)
git clone https://huggingface.co/baichuan-inc/Baichuan-13B-Chat
# 預訓練大模型(未經(jīng)過微調(diào))
#git clone https://huggingface.co/baichuan-inc/Baichuan-13B-Base
四、Baichuan-13B 模型 LoRA 微調(diào)
4.1 準備訓練數(shù)據(jù)
data 目錄下存儲了訓練數(shù)據(jù),可根據(jù)業(yè)務需要自行準備數(shù)據(jù),數(shù)據(jù)格式如下:
- instruction:任務指令,不能為空。
- input:任務輸入,可為空。如果不為空,項目內(nèi)部處理訓練數(shù)據(jù)時,會將 instruction、input 拼接在一起作為任務的輸入。
- output:任務輸出,不能為空。
[
{
"instruction": "什么是三原色?",
"input": "",
"output": [
"三原色是紅、藍、黃。這些顏色被稱為原色,因為它們不能通過混合其他顏色來創(chuàng)建,所有其他顏色都可以通過將它們按不同比例組合而成。在用于光的加色系統(tǒng)中,原色是紅色、綠色和藍色 (RGB)。",
"紅色、黃色和綠色。"
]
},
{
"instruction": "寫一段關于一個人特點的描述",
"input": "姓名:阿比蓋爾\n喜歡的東西:動作電影、法國菜、熱衷于商業(yè)",
"output": "阿比蓋爾是一個冒險的靈魂,喜歡看動作電影和吃法國美食。她對商業(yè)充滿熱情,并努力培養(yǎng)。她閱讀投資新聞,密切關注股市。每當有機會出現(xiàn),阿比蓋爾總是迅速行動,不會猶豫利用她的商業(yè)知識。她是那種喜歡經(jīng)歷商業(yè)起伏、善于追求交易并與志同道合的人交流的人。"
}
]
4.2 Baichuan-13B 模型 LoRA 微調(diào)
運行命令
CUDA_VISIBLE_DEVICES=0 python finetune_lora.py
--do_train
--model_name_or_path /data/Baichuan-13B-Chat
--dataset_dir data
--dataset alpaca_gpt4_zh
--output_dir baichuan_lora_checkpoint
--source_prefix ""
--max_source_length 256
--max_target_length 512
--per_device_train_batch_size 1
--gradient_accumulation_steps 1
--lr_scheduler_type cosine
--logging_steps 10
--save_steps 1000
--learning_rate 5e-5
--num_train_epochs 1.0
--plot_loss
--fp16
--lora_target W_pack
--lora_rank 8
- 參數(shù)介紹:
- CUDA_VISIBLE_DEVICES=0: 單卡運行;
- do_train: 是否執(zhí)行訓練。
- model_name_or_path: 預訓練模型路徑。
- dataset_dir: 訓練數(shù)據(jù)存儲目錄。
- dataset: 訓練數(shù)據(jù)集名稱,可在 data/dataset_info.json 中增加自定義數(shù)據(jù)集。
- output_dir: 微調(diào)后的模型保存路徑。
- source_prefix: 訓練時每個輸入序列添加的前綴,可為空。
- max_source_length: 輸入序列的最大長度,即 source_prefix + instruction + input 的長度。
- max_target_length: 輸出序列的最大長度,即 output 的長度。
- per_device_train_batch_size: 用于訓練的批處理大小??筛鶕?jù) GPU 顯存大小自行設置。
- gradient_accumulation_steps: 梯度累加次數(shù)。
- logging_steps: 多少步輸出一次 log。
- save_steps: 多少步保存一次參數(shù)。
- learning_rate: AdamW 優(yōu)化器的初始學習率。
- num_train_epochs: 訓練輪數(shù)(若非整數(shù),則最后一輪只訓練部分數(shù)據(jù))
- plot_loss: 微調(diào)后繪制損失函數(shù)曲線,圖片保存在 output_dir 中 。
- fp16: 使用半精度(混合精度)訓練。
- lora_target: 大模型內(nèi)將要進行 LoRA 微調(diào)的模塊名稱。
- lora_rank: LoRA 微調(diào)中的秩大小。
五、Baichuan-13B 模型 LoRA 微調(diào)后模型測試
運行命令
CUDA_VISIBLE_DEVICES=0 python finetune_lora.py
--do_eval
--model_name_or_path /data/Baichuan-13B-Chat
--checkpoint_dir baichuan_lora_checkpoint
--dataset_dir data
--dataset alpaca_gpt4_zh_test
--output_dir baichuan_lora_eval_result
--per_device_eval_batch_size 4
--predict_with_generate
- 參數(shù)介紹:
- CUDA_VISIBLE_DEVICES=0: 單卡運行。
- do_eval: 是否執(zhí)行測試。
- model_name_or_path: 預訓練模型路徑。
- checkpoint_dir: 微調(diào)模型路徑。
- dataset_dir: 測試數(shù)據(jù)存儲目錄。
- dataset: 測試數(shù)據(jù)集名稱,可在 data/dataset_info.json 中增加自定義數(shù)據(jù)集。
- output_dir: 測試結果保存路徑。
- per_device_eval_batch_size: 測試數(shù)據(jù)的批處理大小??筛鶕?jù) GPU 顯存大小,自行設置。
- predict_with_generate: 是否生成序列用于計算 ROUGE 或 BLEU 分數(shù)。
六、Baichuan-13B 模型 部署
python cli_demo.py
--model_name_or_path baichuan-inc/Baichuan-13B-Chat
--checkpoint_dir baichuan_lora_checkpoint
- 參數(shù)介紹:
- model_name_or_path: 預訓練模型路徑。
- checkpoint_dir: 微調(diào)模型路徑。
填坑筆記
參考
- baichuan-inc/Baichuan-13B:https://github.com/baichuan-inc/Baichuan-13B
- mark1879/Baichuan-13B-Finetuning:https://github.com/mark1879/
- 官方微調(diào)過(指令對齊):https://huggingface.co/baichuan-inc/Baichuan-13B-Chat
- 預訓練大模型(未經(jīng)過微調(diào)):https://huggingface.co/baichuan-inc/Baichuan-13B-Base
馬上咨詢: 如果您有業(yè)務方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術,還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 聯(lián)系人:石先生/雷先生