[README] [?HF Repo] [?網頁端]
中文| English
雅意大模型在百萬級人工構造的高品質領域資料上進行指令微調得到,訓練資料涵蓋媒體宣傳、輿情分析、公共安全、金融風控、城市治理等五大領域,上百種自然語言指令任務。雅意大模型從預訓練初始化權重到領域模型的迭代過程中,我們逐步增強了它的中文基礎能力和領域分析能力,並增加了多輪對話和部分插件能力。同時,經過數百名用戶內測過程中持續不斷的人工回饋優化,我們進一步提升了模型效能和安全性。
透過雅意大模型的開源為促進中文預訓練大模型開源社群的發展,貢獻自己的一份力量,透過開源,與每位合作夥伴共建雅意大模型生態。
News: 雅意大模型已開源基於LLaMA 2 的中文最佳化模型版本,探索適用於中文多領域任務的最新實踐。
模型名稱 | ?HF模型標識 | 下載地址 |
---|---|---|
YAYI -7B | wenge-research/ YAYI -7b | 模型下載 |
YAYI -7B-Llama2 | wenge-research/ YAYI -7b-llama2 | 模型下載 |
YAYI -13B-Llama2 | wenge-research/ YAYI -13b-llama2 | 模型下載 |
git clone https://github.com/wenge-research/YAYI.git
cd YAYI
conda create --name YAYI python=3.8
conda activate YAYI
pip install -r requirements.txt
其中torch
和transformers
版本不建議低於建議版本。
模型權重(7b版本)已在我們的Huggingface 模型倉庫開源,歡迎下載使用。以下是一個簡單呼叫YAYI -7b
進行下游任務推理的範例程式碼,可在單張A100/A800/3090 等GPU運行,使用FP16精度推理時約佔用20GB 記憶體:
from transformers import AutoTokenizer , AutoModelForCausalLM , GenerationConfig
import torch
YAYI _7b_path = "wenge-research/ YAYI -7b"
tokenizer = AutoTokenizer . from_pretrained ( YAYI _7b_path )
model = AutoModelForCausalLM . from_pretrained ( YAYI _7b_path , device_map = "auto" , torch_dtype = torch . bfloat16 )
prompt = "你好"
formatted_prompt = f"<|System|>: n A chat between a human and an AI assistant named YAYI . n YAYI is a helpful and harmless language model developed by Beijing Wenge Technology Co.,Ltd. n n <|Human|>: n { prompt } n n <| YAYI |>:"
inputs = tokenizer ( formatted_prompt , return_tensors = "pt" ). to ( model . device )
eos_token_id = tokenizer ( "<|End|>" ). input_ids [ 0 ]
generation_config = GenerationConfig (
eos_token_id = eos_token_id ,
pad_token_id = eos_token_id ,
do_sample = True ,
max_new_tokens = 100 ,
temperature = 0.3 ,
repetition_penalty = 1.1 ,
no_repeat_ngram_size = 0
)
response = model . generate ( ** inputs , generation_config = generation_config )
print ( tokenizer . decode ( response [ 0 ]))
請注意,模型訓練時添加了special token <|End|>
作為結束符,因此上述程式碼GenerationConfig
裡將eos_token_id
設定為該結束符對應的token id。基於LlaMA2 指令微調模型的推理程式碼稍有不同,請參考我們的Huggingface 模型倉庫中的對應版本。
本專案基於deepspeed
框架進行模型訓練,配置完環境後執行對應腳本即可開始訓練。支援指令資料全參數微調、指令資料LoRA微調、多輪對話資料全參數微調、多輪對話資料LoRA微調。
資料格式:參考data/ YAYI _train_example.json
,採用Alpaca 專案的jsonline 資料格式,每行一條json 數據,由"instruction"
、 "input"
、 "output"
三個欄位組成。其中"instruction"
和"input"
為指令輸入, "output"
為輸出答案。
執行說明:執行以下指令即可開始全參數微調雅意大模型。此指令支援單機多卡訓練,如需配置多機多卡訓練,可參考deepspeed 官方文件。建議使用4*A100(80G) 以上硬體配置。
deepspeed --num_gpus=8
--module training.trainer
--data-path ./data/ YAYI _train_example.json
--input-model ./checkpoints/ YAYI -7b
--deepspeed ./config/deepspeed_zero2_bf16.json
--epochs 2
--local-output-dir ./checkpoints
--per-device-train-batch-size 8
--per-device-eval-batch-size 8
--logging-steps 1
--save-steps 100
--save-total-limit 10
--eval-steps 100
--warmup-steps 100
--test-size 400
--lr 5e-6
--seed 515
資料格式:同上,參考data/ YAYI _train_example.json
。
運作說明:LoRA 是一種低資源高效微調方法,單卡可訓練百億參數模型。本專案主要基於peft
實現LoRA 微調,執行以下命令即可開始LoRA 微調雅意大模型。使用單卡A100(80G) 即可完成微調,學習率可調整為較大值。其中, --lora-dim
設定更新矩陣的秩,該值越大,訓練的參數量越大; --lora-module-name
設定LoRA 更新矩陣的模組,可根據模型類型更改。
deepspeed --num_gpus=1
--module training.trainer_lora
--data-path ./data/ YAYI _train_example.json
--input-model ./checkpoints/ YAYI -7b
--deepspeed ./config/deepspeed_zero2_bf16.json
--epochs 2
--local-output-dir ./checkpoints
--per-device-train-batch-size 8
--per-device-eval-batch-size 8
--logging-steps 1
--save-steps 100
--save-total-limit 10
--eval-steps 100
--warmup-steps 100
--test-size 400
--lr 5e-4
--seed 515
--lora-dim 16
--lora-module-name query_key_value
資料格式:參考data/ YAYI _train_example_multi_rounds.json
,是一個標準JSON 文件,每個資料由"system"
和"conversations"
組成,其中"system"
為全域角色設定訊息,可為空字串, "conversations"
是由human 和YAYI兩種角色交替進行的多輪對話內容。
執行說明:執行以下指令即可開始全參數微調雅意大模型,對於多輪對話數據,僅計算模型產生回應的loss。此指令支援單機多卡訓練,如需配置多機多卡訓練,可參考deepspeed 官方文件。建議使用4*A100(80G) 以上硬體配置。
deepspeed --num_gpus=8
--module training.trainer_multi_rounds
--data-path ./data/ YAYI _train_example_multi_rounds.json
--input-model ./checkpoints/ YAYI -7b
--deepspeed ./config/deepspeed_zero2_bf16.json
--epochs 2
--local-output-dir ./checkpoints
--per-device-train-batch-size 8
--per-device-eval-batch-size 8
--logging-steps 1
--save-steps 100
--save-total-limit 10
--eval-steps 100
--warmup-steps 100
--test-size 400
--lr 5e-7
--seed 515
data/ YAYI _train_example_multi_rounds.json
。雅意大模型基於中科聞歌百萬級高品質領域指令微調資料集訓練而來,我們本次開源5w 條訓練資料集,可在我們的Huggingface 資料倉儲下載。資料集主要涵蓋了金融、安全、民意、媒體等幾大領域,我們為各領域任務大部分指令資料添加了離散prompt 前綴,以區分各領域資料。此外,訓練資料中還包含部分安全增強資料、插件能力資料、多輪對話資料等。
基於目前資料和基礎模型訓練所得的SFT模型,在效果上仍有以下問題:
基於上述模型局限性,我們要求開發者僅將我們開源的程式碼、資料、模型及後續用此專案產生的衍生物用於研究目的,不得用於商業用途,以及其他會對社會帶來危害的用途。請謹慎辨別並使用雅意大模型產生的內容,請勿將產生的有害內容傳播至網路。若產生不良後果,由傳播者自負。
本專案僅可應用於研究目的,專案開發者不承擔任何因使用本專案(包含但不限於資料、模型、程式碼等)而導致的危害或損失。詳細請參考免責聲明。
本專案中的程式碼依照Apache-2.0 協定開源,資料採用CC BY-NC 4.0 協議, YAYI系列模型權重的使用則需要遵循Model License。