文章目录

  • ChatGLM-Med
    • 推理过程
    • 微调过程
  • HuaTuo
    • 配置环境
    • 模型下载
    • 推理过程
    • 微调过程

如何基于领域知识对类ChatGPT模型进行微调,以提升类ChatGPT模型在领域的问答效果?
有下面两个模型,一起来看看微调后的效果如何。
ChatGLM-Med: 基于中文医学知识的ChatGLM模型微调
HuaTuo:基于中文医学知识的LLaMA微调模型

ChatGLM-Med

使用模型:ChatGLM-6B
所用微调数据集:医学知识图谱和GPT3.5 API构建的中文医学指令数据集。

环境准备:因为该项目使用的是ChatGLM-6B模型,因此环境也与ChatGLM-6B模型的环境一致,我这里之前微调过,所以直接使用chatglm-6b的conda环境。可以参考此文。

文件准备:将项目和模型文件下载下来

git clone https://github.com/SCIR-HI/Med-ChatGLM.git

模型文件下载:
该项目已经提供了训练微调好的模型参数,直接通过百度云盘链接或Google云盘链接下载即可。

我这里将模型文件下载到 /data/sim_chatgpt/ChatGLM-Med/ 下。

修改 infer.py 文件中的文件加载路径,如下:

import torch
from transformers import AutoTokenizer, AutoModel
from modeling_chatglm import ChatGLMForConditionalGeneration
tokenizer = AutoTokenizer.from_pretrained("/data/sim_chatgpt/ChatGLM-Med/", trust_remote_code=True)
model = ChatGLMForConditionalGeneration.from_pretrained("/data/sim_chatgpt/ChatGLM-Med").half().cuda()
while True:a = input("请输入您的问题:(输入q以退出)")if a.strip() == 'q':exit()response, history = model.chat(tokenizer, "问题:" + a.strip() + '\n答案:', max_length=256, history=[])print("回答:", response)

运行报错

推理过程

python infer.py


解决办法
修改 modeling_chatglm.py 文件的831行,975行,如下:
MASK, gMASK = 150000, 150001

修改后成功运行

微调过程

安装evaluate包

pip install evaluate
pip install wandb

修改要运行文件中的model_name_or_path,修改为 /data/sim_chatgpt/chatglm-6b,如下:

vi scripts/sft_medchat.sh
wandb online
exp_tag="chatglm_tuning"python run_clm.py \--model_name_or_path /data/sim_chatgpt/chatglm-6b \--per_device_train_batch_size 8 \--per_device_eval_batch_size 8 \--train_file ./data/train.txt \--max_seq_length 256 \--output_dir ./output/ \--do_train \--logging_steps 30 \--log_file ./log/$exp_tag \--gradient_accumulation_steps 2 \--learning_rate 5e-5 \--group_by_length False \--num_train_epochs 3 \--lr_scheduler_type linear \--warmup_ratio 0.1 \--logging_dir ./log \--logging_steps 10 \--save_strategy epoch \--seed 2023 \--remove_unused_columns False \--torch_dtype auto \--adam_epsilon 1e-3 \--report_to wandb \--run_name $exp_tag

执行命令

sh scripts/sft_medchat.sh


尝试调小batch_size,将per_device_train_batch_size改为1试下,仍然cuda of memory,放弃。

官方是在一张A100-SXM-80GB显卡上进行了微调训练,根据经验,训练显存建议选择32G及以上。

HuaTuo

使用模型:LLaMA-7B
所用微调数据集:医学知识图谱和GPT3.5 API构建的中文医学指令数据集

配置环境

创建新的 conda 环境:huatuo,并安装所需的包

conda create -n huatuo python==3.9
pip install -r requirements.txt

模型下载

LoRA权重可以通过百度网盘或Huggingface下载:

1、对LLaMA进行指令微调的LoRA权重文件
2、对Alpaca进行指令微调的LoRA权重文件。

我这里将文件下载的文件都放在:/data/sim_chatgpt/huatuo 下。

#1.对LLaMA进行指令微调的LoRA权重文件
#基于医学知识库
lora-llama-med/- adapter_config.json   # LoRA权重配置文件- adapter_model.bin   # LoRA权重文件#基于医学文献
lora-llama-med-literature/- adapter_config.json   # LoRA权重配置文件- adapter_model.bin   # LoRA权重文件#2. 对Alpaca进行指令微调的LoRA权重文件
#基于医学知识库
lora-alpaca-med-alpaca/- adapter_config.json   # LoRA权重配置文件- adapter_model.bin   # LoRA权重文件#基于医学知识库和医学文献
lora-alpaca-med-alpaca-alldata/- adapter_config.json   # LoRA权重配置文件- adapter_model.bin   # LoRA权重文件
##

推理过程

以基于医学知识库为例,修改 ./scripts/infer.sh 中的路径如下:

运行基于医学知识库的命令即可

bash ./scripts/infer.sh


其他几个类似:

#基于医学知识库
bash ./scripts/infer.sh#基于医学文献
#单轮
bash ./scripts/infer-literature-single.sh#多轮
bash ./scripts/infer-literature-multi.sh

微调过程

llama模型文件路径:/data/sim_chatgpt/llama-7b-hf/models–decapoda-research–llama-7b-hf/snapshots/5f98eefcc80e437ef68d457ad7bf167c2c6a1348
修改要运行文件中模型文件路径

vi scripts/finetune.sh
exp_tag="e1"
python finetune.py \--base_model '/data/sim_chatgpt/llama-7b-hf/models--decapoda-research--llama-7b-hf/snapshots/5f98eefcc80e437ef68d457ad7bf167c2c6a1348' \--data_path './data/llama_data.json' \--output_dir './lora-llama-med-'$exp_tag \--prompt_template_name 'med_template' \--micro_batch_size 128 \--batch_size 128 \--wandb_run_name $exp_tag

运行文件

sh scripts/finetune.sh

报错:显存不足

官方在一张A100-SXM-80GB显卡上进行了训练,训练总轮次10轮,耗时约2h17m。batch_size=128的情况下显存占用在40G左右。预计3090/4090显卡(24GB显存)以上显卡可以较好支持,根据显存大小来调整batch_size。

基于ChatGLM-Med与HuaTuo的微调部署相关推荐

  1. 国产chatgpt:基于chatGLM微调nlp信息抽取任务

    文章目录 一.传统nlp做信息抽取 二.什么是零样本和少样本 1. 零样本和少样本的概念: 2. 零样本和少样本的应用场景: 3. 零样本和少样本在大模型时代的优势和意义: 4. 相比传统NLP,零样 ...

  2. 基于YOLO的目标检测界面化部署实现(支持yolov1-yolov5、yolop、yolox)

    基于YOLO的目标检测界面化部署实现(支持yolov1-yolov5.yolop.yolox) 代码下载地址:下载地址 安装 操作系统:Win10.Win7.Ubuntu16.04(其他操作系统没有测 ...

  3. 基于suse linux系统的cacti系统部署——rpm包方式

    豆丁 http://www.docin.com/p-191889788.html rpm包方式:啊扬--沙迳:2010-12-1:更改:2011/5/16:一.Cacti的简介(来源:网络):Cact ...

  4. 基于Cobbler实现多版本系统批量部署

    前言 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的.记得前面我们探究了基于PXE实现系统全自动 ...

  5. 基于centos6的mysql5.7.13主从部署(一)

    基于centos6的mysql5.7.13主从部署(一) 一.实验环境: 两台主机安装Centos6.7 32位操作系统: 两台Linux安装同一版本的MySQL,这里使用mysql5.7.13: m ...

  6. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  7. Puppet基于Master/Agent模式实现LNMP平台部署

    前言 随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的.繁琐的工作利用自动化处理.前期我们介绍了运维自动化工具ansible的简单应 ...

  8. K8S——关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署)

    K8S--关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署) 一.yaml文件编写流程 二.证书自签 一.yaml文件编写流程 rbac.yaml---->secret.yaml- ...

  9. OpenShift 4 - Knative教程(2) 基于Revision/Tag/Traffic实现蓝绿部署和恢复发布

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.10环境中验证 文章目录 基于Revision/Tag/Traffic实现蓝绿部署和恢复发布 基于R ...

最新文章

  1. VScode配置anaconda虚拟环境+运行
  2. java环境变量javac不能成功 win7_Java开发:Java环境搭建
  3. 题目1164:旋转矩阵
  4. mysql建表语句主键自增_MYSQL索引-上
  5. c++编程例子_如何开始厉害的C语言编程?大神都是这样开始的!
  6. 数据结构-循环单链表之魔术师发牌问题
  7. SpringMVC+MyBatis 返回时间格式转换的解决方案
  8. 用Java求s=a+aa+aaa+.....+aaa...a的值
  9. Doc命令之 cd,(跳转到别的盘符)。
  10. 虚拟机文件系统混乱,导致编译失败
  11. 计算机应用技术辅助设计方向课程,AutoCAD计算机辅助设计课程标准.doc
  12. 电脑怎么分成两个屏幕,显示不同的内容
  13. 导出微信添加的自定义表情(动图)
  14. 在vue项目中使用骨架屏
  15. CIP4和JDF,您知道多少?(转)
  16. 电脑假死卡的动不了_win10电脑突然卡死动不了怎么办 四种方法快速解决电脑卡死...
  17. XP系统电脑因“未激活”无法登录进入桌面,而输入序列号后提示“已激活”,以此死循环
  18. OpenCV开发笔记(五十九):红胖子8分钟带你深入了解分水岭算法(图文并茂+浅显易懂+程序源码)
  19. stm32f4 RTC实时时钟解析
  20. 【java】关于java编程语言开发

热门文章

  1. CUDA Graph图详解
  2. Adobe Lightroom2023:完美的数字照片管理和处理软件
  3. 通过学MySQL学活架构设计,举一反十
  4. 理解Node类型——不应被忽视的 nodeType、nodeName、nodeValue
  5. 主码求法,范式判断,最小函数依赖求法
  6. 命令提示符窗口中的快捷键及其使用说明
  7. C#使用163的SMTP服务器发送邮件
  8. 售前工程师的快速成长经验
  9. 初中生学Android开发,安卓手机软件学习推荐(几款适合中学生学习的软件)
  10. OpenCV版本向下兼容