当前位置:   article > 正文

CHATGLM3应用指南(三)——模型微调_chatglm3微调如何自制数据集

chatglm3微调如何自制数据集

CHATGLM3的本地部署可以见博客:CHATGLM3应用指南(一)——本地部署_chatglm3需要多大内存-CSDN博客

一、微调数据集制作

数据集的形式如下图所示:

 可使用下面代码对数据集格式调整

  1. #! /usr/bin/env python
  2. print('!!!!!')
  3. import json
  4. from collections import Counter
  5. from argparse import ArgumentParser
  6. import os
  7. parser = ArgumentParser()
  8. parser.add_argument("--path", type=str, required=True)
  9. args = parser.parse_args()
  10. print(args.path)
  11. print('!!!!!')
  12. with open(args.path ,encoding="utf-8") as f:
  13. data = [json.loads(line) for line in f]
  14. train_examples = [{
  15. "prompt": x['content'],
  16. "response": x['summary'],
  17. } for x in data]
  18. os.makedirs("formatted_data", exist_ok=True)
  19. with open("formatted_data/EE_term_define_2.jsonl", "w",encoding="utf-8") as f:
  20. for e in train_examples:
  21. f.write(json.dumps(e, ensure_ascii=False) + "\n")

二、微调模型的训练

运行finetune_pt.sh文件,使用命令

sh finetune_pt.sh

二、微调模型的推理

(1)在终端输入“jupyter notebook”

跳转到浏览器的jupyter 

(2)创建以下的.ipynb文件

  1. import argparse
  2. from transformers import AutoConfig, AutoModel, AutoTokenizer
  3. import torch
  4. import os
  5. # parser = argparse.ArgumentParser()
  6. # parser.add_argument("--pt-checkpoint", type=str, default=r"D:\Jupyter_file\ChatGLM3\chatgalm3-6b\finetune_demo\output\advertise_gen_pt-20231206-201809-128-2e-2\checkpoint-1000", help="The checkpoint path")
  7. # parser.add_argument("--model", type=str, default=r"D:\Jupyter_file\ChatGLM3\chatgalm3-6b", help="main model weights")
  8. # parser.add_argument("--tokenizer", type=str, default=None, help="main model weights")
  9. # parser.add_argument("--pt-pre-seq-len", type=int, default=128, help="The pre-seq-len used in p-tuning")
  10. # parser.add_argument("--device", type=str, default="cuda")
  11. # parser.add_argument("--max-new-tokens", type=int, default=128)
  12. args={
  13. 'pt_checkpoint':r"D:\Project\ChatGLM3\finetune_demo\output\advertise_gen_pt-20231206-201809-128-2e-2\checkpoint-1000",
  14. 'model':r"D:\Project\LLM\Model\llm\chatglm3",
  15. 'tokenizer':None,
  16. 'pt-pre-seq-len':128,
  17. 'device':"cuda",
  18. 'max_new_tokens':128
  19. }
  20. if args['tokenizer'] is None:
  21. args['tokenizer'] = args['model']
  22. if args['pt_checkpoint']:
  23. tokenizer = AutoTokenizer.from_pretrained(args['tokenizer'], trust_remote_code=True)
  24. config = AutoConfig.from_pretrained(args['model'], trust_remote_code=True, pre_seq_len=128)
  25. model = AutoModel.from_pretrained(args['model'], config=config, trust_remote_code=True)
  26. prefix_state_dict = torch.load(os.path.join(args['pt_checkpoint'], "pytorch_model.bin"))
  27. new_prefix_state_dict = {}
  28. for k, v in prefix_state_dict.items():
  29. if k.startswith("transformer.prefix_encoder."):
  30. new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
  31. model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
  32. else:
  33. tokenizer = AutoTokenizer.from_pretrained(args['tokenizer'], trust_remote_code=True)
  34. model = AutoModel.from_pretrained(args['model'], trust_remote_code=True)
  35. model = model.to(args['device'])
  36. while True:
  37. prompt = input("Prompt:")
  38. inputs = tokenizer(prompt, return_tensors="pt")
  39. inputs = inputs.to(args['device'])
  40. response = model.generate(input_ids=inputs["input_ids"], max_length=inputs["input_ids"].shape[-1] + args['max_new_tokens'])
  41. response = response[0, inputs["input_ids"].shape[-1]:]
  42. print("Response:", tokenizer.decode(response, skip_special_tokens=True))

(3)修改“pt_checkpoint”为自己训练好的微调模型的“output”文件夹,修改“model”为chatglm3—6b底座模型的存放路径。

(4)确认所使用的内核,如果不对应,可以点击“内核” —>“更换内核”(5)点击运行,等待一段时间后,在prompt输入提示词,即可出现回答。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/680887
推荐阅读
相关标签
  

闽ICP备14008679号