使用官网例子finetune百川2,微调脚本如下
模型为baichuan_chat_13B_v1
bash
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。
bash
[
{
"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下,然后执行如下代码即可。
python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig
import copy
checkpoint_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"