分享一个寒假在家和同学做的一个聊天机器人,拥有医生,老师,律师三种角色。大家感兴趣的可以在github上自取。简简单单当个课设也行。
1、提示词设计
{
"description": "Template used by SFTTrainer.",
"prompt_input": "### Human:{instruction}\n{input}\n### Assistant: ",
"prompt_no_input": "### Human:{instruction}\n### Assistant: ",
"response_split": "### Assistant:"
}
2、加载参数
# 创建 parser 并指定数据类
parser = HfArgumentParser(
(model_config, train_config, lora_config, data_config)
)
# 从命令行解析参数到数据类
(
model_args,
train_args,
lora_args,
data_args,
) = parser.parse_args_into_dataclasses()
args = argparse.Namespace(
**vars(model_args), **vars(train_args), **vars(lora_args), **vars(data_args)
)
if args.xformers: # 开启xformers设置
from llama_xformers_attn_monkey_patch import replace_llama_attn_with_xformers_attn
replace_llama_attn_with_xformers_attn()
device_map = "auto"
# world_size = int(os.environ.get("WORLD_SIZE", 1))
# ddp = world_size != 1
# if ddp:
# device_map = {"": int(os.environ.get("LOCAL_RANK") or 0)}
compute_dtype = (
torch.float16
if args.fp16
else (torch.bfloat16 if args.bf16 else torch.float32)
)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=compute_dtype,
)
3、模型导入
# 模型导入
model = AutoModelForCausalLM.from_pretrained(
pretrained_model_name_or_path=args.base_model,
cache_dir=args.cache_dir,
device_map=device_map,
trust_remote_code=args.trust_remote_code,
quantization_config=bnb_config,
# use_auth_token=args.use_auth_token,
)
# lora_config设置导入
peft_config = LoraConfig(
r=args.r,
lora_alpha=args.lora_alpha,
target_modules=args.lora_target_modules,
lora_dropout=args.lora_dropout,
bias=args.lora_bias, # 将其设置为"none",以仅训练权重参数而不是偏差
task_type="CAUSAL_LM",
)
后续请大家直接下载代码文件看吧~~