使用官網例子finetune百川2,微調腳本如下
模型為baichuan_chat_13B_v1
export CUDA_VISIBLE_DEVICES=1
hostfile=""
deepspeed --hostfile=$hostfile baichuan_fineturn/fine-tune/fine-tune.py \--report_to "none" \--data_path "baichuan_fineturn/fine-tune/data/risk_ner_baichuan_corpus.json" \--model_name_or_path "../../Baichuan_Inc/Baichuan_Inc/Baichuan" \--output_dir "baichuan_fineturn/risk_ner_output" \--model_max_length 256 \--num_train_epochs 4 \--per_device_train_batch_size 1 \--gradient_accumulation_steps 1 \--save_strategy epoch \--learning_rate 2e-5 \--lr_scheduler_type constant \--adam_beta1 0.9 \--adam_beta2 0.98 \--adam_epsilon 1e-8 \--max_grad_norm 1.0 \--weight_decay 1e-4 \--warmup_ratio 0.0 \--logging_steps 1 \--gradient_checkpointing True \--deepspeed baichuan_fineturn/fine-tune/ds_config.json \--bf16 True \--tf32 False \--use_lora True
微調需要什么數據?
格式如下,放在微調腳本data_path對應的路徑下。單輪可自行修改conversations。
[{"id": "5633","conversations": [{"from": "human","value": "寫一篇介紹科技的文章,從科技的誕生開始寫起。\n"},{"from": "gpt","value": "\n科技在人類歷史中扮演著重要的角色。自古以來,人們就通過發明各種工具來提高生產力和生活質量。從最初的石器到現在的高科技設備,科技的發展讓人類的生活變得更加便利和豐富。科技的誕生和發展是一個漫長的過程,需要經歷許多階段和創新點,本文將從科技的誕生開始介紹。\n在人類史上,最早使用簡單工具的人類成員是原始人。他們利用石頭、木棍和樹枝等自然資源制作工具,幫助他們獵殺動物、分割食物和建造庇護所。數千年后,人類發明了青銅器,這是人類歷史上的一次重大進步。青銅器為人們提供了強有力的武器和精細的工具,也為人類歷史上的貿易活動打開了新的道路。\n隨著時代的變遷,人們的需求越來越多樣化。發明家們不斷努力創新,推出了許多發明,例如紙、印刷和火藥。這一時期,被稱為“軍事技術革命”的時期,為人類社會的進步奠定了基礎。\n19世紀初,抽水馬車等蒸汽機技術的發明導致了第一次工業革命的出現。這種新的技術重塑了世界的面貌,建立了現代化的工業經濟。20世紀后半期,電子技術和計算機技術的出現改變了人們的生活方式。如今,隨著科技不斷發展,越來越多的新技術不斷涌現,例如人工智能、機器人技術和虛擬現實技術等。這些技術正在逐漸改變我們的世界,也讓我們對未來充滿了期待。\n"},{"from": "human","value": "從你所寫的科技文章中提取出更多有關于“軍事技術革命”的細節。\n"},{"from": "gpt","value": "“軍事技術革命”是18世紀末19世紀初的一場技術變革。隨著科技的發展,建立了現代化的工業經濟。這種新的技術重塑了世界的面貌,也為人類社會的進步奠定了基礎。這場技術變革的主要成就是:\n1.火炮技術的發展:在“軍事技術革命”時期,各種不同類型的火炮被發明出來,例如榴彈炮、加農炮以及火箭彈等。這些新型火炮配合著新型彈藥一同使用,使得火力的威力得到了大幅度提升。\n2.水力紡織機和機器棉紗機的發明:這些機器的出現使得紡織業得到了革命性發展,通過機器生產的產品比手工制作的更加優越。這種先進的生產技術幫助大大提高了生產效率,促進了商品生產的發展。\n3.蒸汽機的發明:蒸汽機的出現使得燃料轉化為能量的效率大大提高,為以后機器化生產奠定了基礎。在19世紀40年代,蒸汽機被大規模地應用于鐵路、海運和礦井,從而為人類社會的進步帶來了極大的貢獻。\n這場技術變革的成果不僅體現在軍事領域,也滲透到了各個方面的社會生活之中,成為人類歷史重要的一部分。"}]},{"id": "27531","conversations": [{"from": "human","value": " 幫我生成一段關于夏天的五句話。\n"},{"from": "gpt","value": " 可以的。夏天,陽光燦爛,綠葉成蔭,花香滿徑。人們穿著輕便的衣服,在海灘上縱情嬉戲,享受著炎炎夏日的無限快樂。\n"},{"from": "human","value": " 繼續幫我生成一段描述音樂的文章。\n"},{"from": "gpt","value": " 好的。音樂是人類創造的最美之聲,有著獨特的魅力。音樂可以讓人們忘卻憂愁,放松身心,甚至成為我們精神上的朋友。同時,音樂是一種語言,可以通過音符和節奏,傳達出情感和思想。\n"},{"from": "human","value": " 請給我列舉一些個人成長的建議。\n"},{"from": "gpt","value": " 當然。要不斷學習新知識,拓寬自己的視野。要注意練習自己的能力和技能,嘗試不同的事情,增長自己的經驗。要勇于承認自己的錯誤,并從中吸取經驗教訓。最重要的是,要堅持追求自己的夢想,不要輕易放棄,要有信心和毅力。\n"},{"from": "human","value": " 幫我回答一個封閉式問題,中國的首都是哪里?\n"},{"from": "gpt","value": " 中國的首都是北京。"}]}
]
如何使用微調后的模型?
將基礎模型的generation_config.json拷貝到checkpoint_path下,然后執行如下代碼即可。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig
import copycheckpoint_path = "baichuan_fineturn/risk_ner_output"
tokenizer = AutoTokenizer.from_pretrained(checkpoint_path, revision="v2.0", use_fast=False, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(checkpoint_path, revision="v2.0", device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True)#.to(device)
model.generation_config = GenerationConfig.from_pretrained(checkpoint_path, revision="v2.0")
query = "風險控制條款通過對資產設置監控指標來監控風險。一條風控條款中可能有多個監控指標,每個監控指標都明確監控著對應的一類或多類資產。\n\n現有風險控制條款如下,請識別抽取出上述風險控制條款中監控指標,閾值,閾值方向,資產四種字段,并分行輸出。注意,要求是原文字段。\n\n風險控制條款: 投資管理人可根據專業判斷形成久期策略,但組合久期原則上不得高于300年,計算口徑僅包括波動類固定收益資產,穩定類固定收益資產不計算久期"
messages = [{"role": "user", "content": query}
]
g_config=copy.deepcopy(model.generation_config)
g_config.do_sample=False
response = model.chat(tokenizer, messages, generation_config=g_config)
print(response)
- 如果有baichuan_tokenizer相關的報錯,修改第三方庫/opt/app-root/lib64/python3.9/site-packages/transformers/models/auto/tokenization_auto.py,讓它的from_pretrained里的trust_remote_code = True
- messages里一定得設成"role": "user"而不是“human”