首页 > 其他分享 >聊聊ChatGLM-6B医疗数据微调

聊聊ChatGLM-6B医疗数据微调

时间:2024-03-16 09:55:07浏览次数:29  
标签:6B instruction 治疗 output args 聊聊 ChatGLM input model

转载请注明出处: https://www.cnblogs.com/zhiyong-ITNote/

参考了多个医疗大模型,如扁鹊灵心等,重新思考了下微调的方案以及数据集的格式;基于ChatGLM/其它LLM整合多种微调方法的非官方实现的框架,审视其数据集格式,以及调试效果,进行微调。
最终基于liucongg/ChatGLM-Finetuning开源框架成功的微调出来我想要的结果。

服务器环境

阿里云PAI平台

开源库下载

在服务器上通过git一键下载即可:
image.png
image.png

ChatGLM-6B下载

直接在服务器上,通过魔塔社区的sdk下载代码一键下载即可:
image.png
我加了一句代码打印出下载地址,然后通过mv命令拷贝到指定路径下。

#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('ZhipuAI/ChatGLM-6B')
print(model_dir)

指令数据集准备

数据集的格式严格参考开源库的格式,这里的格式直接参考/data/xxx.json数据格式即可。

{"instruction": "一名年龄在70岁的女性,出现了晕厥、不自主颤抖、情绪不稳等症状,请详细说明其手术治疗和术前准备。", "input": "", "output": "该病需要进行电极导线、脉冲发生器和永久心脏起搏器置入术,并需要使用镇静药物和局麻对病人进行手术治疗。术前准备包括1-3天的时间进行术前检查和生活方式的调整。"}
{"instruction": "一个患者的卵巢小细胞癌转移至其它部位,是否有必要进行手术治疗?", "input": "", "output": "当卵巢小细胞癌转移至其它部位时,手术治疗的效果可能不理想,因此一般不推荐进行手术治疗。针对转移病灶,可以采用化疗、放疗等治疗手段进行综合治疗。"}
{"instruction": "一位60岁男性患者由于肝动脉瘤出现肝功能异常,具体表现为黄疸,该如何诊治?", "input": "", "output": "该患者可能出现了肝动脉瘤并发症之一的梗阻性黄疸,需要进行腹部平片、彩色多普勒超声、CTA、动脉造影等检查后确定诊断,治疗方面应按照病因治疗,如若为肝动脉炎、动脉粥样硬化等病因,应该采取手术治疗,而若是单纯的肝动脉瘤,可以进行介入治疗或手术治疗。"}
{"instruction": "患者男,28岁,关节部位红肿疼痛,排尿困难,近期有过微生物感染史。请问可能患的是什么疾病?如何治疗?", "input": "", "output": "可能患有反应性关节炎。治疗方案可以采用沙利度胺、泼尼松等药物。同时还要注意休息和饮食。"}
{"instruction": "一名患者因腹胀、纳差等症状就诊,检查发现肝大、腹水及肝功能损害,诊断为肝淀粉样变性,请问该患者应该接受哪些治疗方案?", "input": "", "output": "该患者应该接受弥漫性系膜硬化、苯丙氨酸氮芥等治疗方案。"}
{"instruction": "治疗方法上有何不同", "input": "", "output": "急性非ST段抬高型心肌梗死的治疗主要是通过改善生活方式和控制危险因素来预防,紧急情况下可能需要静脉注射血栓溶解药物;而自身免疫性肝炎的治疗则包括药物治疗和手术治疗,如激素、免疫抑制剂、肝移植等"}
{"instruction": "一位中年男性感染了军团杆菌,导致出现了弥漫性血管内凝血、充血性心力衰竭等并发症,应该怎样进行辅助检查和诊断?", "input": "", "output": "首先应该做特殊实验室检查和血常规和生化检查,进一步的辅助诊断可考虑X线检查,X线胸片检查、化验检查、血清学检查以及实验室检查等方法。"}
{"instruction": "胆管癌和偏头痛的主要症状有何区别?", "input": "", "output": "胆管癌的主要症状包括黄疸、肝肿大等消化系统症状,而偏头痛的主要症状是头部疼痛。"}
{"instruction": "胡女士出现了黄疸、恶心、呕吐等症状,可能患了什么疾病?", "input": "", "output": "胡女士可能患有胆道张力低下综合征。建议尽快到内科进行检查,并进行西医和中医治疗。"}
{"instruction": "一位妊娠31周孕妇在家中自行服用草药,随后出现呕吐、腹痛、恶心、疲劳、皮肤瘙痒、黄疸等症状,血液检查显示血清转氨酶升高,交叉免疫电泳检测显示未见明显异常。 ", "input": "", "output": "可能是由于在未咨询医生的情况下自行服用草药导致的急性妊娠期肝内胆汁淤积症。建议及时就医,如需紧急治疗可在医生指导下使用胆酸螯合剂、皮质激素等药物,并密切监测胎儿状态与身体其他部位不适情况。"}

开始训练,按文档准备好脚本 run.sh;根据自己的服务器卡数选择即可,修改模型路径,数据集参数即可。
image.png
脚本内容:
image.png
生成的文件:
image.png
image.png

合并Lora参数文件

需要将Lora微调后的参数文件与原模型参数文件合并,执行脚本即可。

python merge_lora.py

当然要替换下里面的路径参数。最终生成的参数文件:
image.png

推理

执行脚本predict.py文件即可,但里面的代码有些问题,用修改后的即可,同样需要修改路径参数

# -*- coding:utf-8 -*-
# @project: ChatGLM-Finetuning
# @filename: predict
# @author: 刘聪NLP
# @zhihu: https://www.zhihu.com/people/LiuCongNLP
# @contact: [email protected]
# @time: 2023/12/6 20:41
"""
    文件说明:
            
"""
import argparse
import torch
from model import MODE
import os
# 启用CUDA
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

def parse_args():
    parser = argparse.ArgumentParser()
    # Model
    parser.add_argument("--device", type=str, default="0", help="")
    parser.add_argument("--mode", type=str, default="glm", help="")
    parser.add_argument("--model_path", type=str, default="/mnt/workspace/demos/ChatGLM-Finetuning/output-glm/epoch-2-step-262", help="")
    parser.add_argument("--max_length", type=int, default=500, help="")
    parser.add_argument("--do_sample", type=bool, default=True, help="")
    parser.add_argument("--top_p", type=float, default=0.8, help="")
    parser.add_argument("--temperature", type=float, default=0.8, help="")
    return parser.parse_args()


def predict_one_sample(instruction, input, model, tokenizer, args):
    result, _ = model.chat(tokenizer, instruction + input, max_length=args.max_length, do_sample=args.do_sample,
                           top_p=args.top_p, temperature=args.temperature)
    return result


if __name__ == '__main__':
    args = parse_args()
    model = MODE[args.mode]["model"].from_pretrained(args.model_path, device_map="auto",
                                                     torch_dtype=torch.float16)
    tokenizer = MODE[args.mode]["tokenizer"].from_pretrained(args.model_path)
    instruction = "一位年轻女性患者出现了风团性斑块、丘疹等症状,请问此病可以由哪些科室进行治疗?"
    input = ""
    r = predict_one_sample(instruction, input, model, tokenizer, args)
    print(r)

返回结果:
image.png

总结

liucongg/ChatGLM-Finetuning开源库提供了Lora指令微调的方式,其逻辑主要还是编写了一套新的train代码,支持指令的微调。

转载请注明出处: https://www.cnblogs.com/zhiyong-ITNote/

image

标签:6B,instruction,治疗,output,args,聊聊,ChatGLM,input,model
From: https://www.cnblogs.com/zhiyong-ITNote/p/18075307

相关文章

  • 聊聊大模型的微调实现及其应用
    微调框架概述模型的微调有多种方式,对于入门的来说,一般都是基于官方的文档微调;最近发现很多开源库,其目的就是支持应用多种微调策略来微调模型,简化模型的微调门槛。比如 ChatGLM-Efficient-Tuning、LLaMA-Factory。其架构逻辑如下:最近试玩了这两个框架,个人觉得蛮好的,先不说实际的......
  • 聊聊大模型的应用及微调
    转载出处:https://www.cnblogs.com/zhiyong-ITNote微调框架概述模型的微调有多种方式,对于入门的来说,一般都是基于官方的文档微调;最近发现很多开源库,其目的就是支持应用多种微调策略来微调模型,简化模型的微调门槛。比如ChatGLM-Efficient-Tuning、LLaMA-Factory。其架构逻辑......
  • 无线电模块ODIN-W263-06B专为物联网网关应用而设计,QN9080-001-M17Y支持蓝牙和NFC的模
    本篇文章主要介绍三款无线模块:无线电模块ODIN-W263-06B专为物联网网关应用而设计,QN9080-001-M17Y支持蓝牙和NFC的模块,RS9116W-DB00-AB1多协议无线模块——明佳达1、ODIN-W2系列:具有Wi-Fi和蓝牙双模式(蓝牙BR/EDR和蓝牙低能耗v4.2)描述:ODIN-W2是一款紧凑而强大的独立多无线电模块......
  • 聊聊大模型的微调实现及其应用
    转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote微调框架概述模型的微调有多种方式,对于入门的来说,一般都是基于官方的文档微调;最近发现很多开源库,其目的就是支持应用多种微调策略来微调模型,简化模型的微调门槛。比如ChatGLM-Efficient-Tuning、LLaMA-Factory。其架......
  • Langchain-ChatGLM源码解读(一)-文档数据上传
    一、简介Langchain-ChatGLM 相信大家都不陌生,近几周计划出一个源码解读,先解锁langchain的一些基础用法。文档问答过程大概分为以下5部分,在Langchain中都有体现。上传解析文档文档向量化、存储文档召回query向量化文档问答今天主要讲langchain在上传解析文档时是怎么实......
  • Langchain-ChatGLM源码解读(二)-文档embedding以及构建faiss过程
    一、简介Langchain-ChatGLM 相信大家都不陌生,近几周计划出一个源码解读,先解锁langchain的一些基础用法。文档问答过程大概分为以下5部分,在Langchain中都有体现。上传解析文档文档向量化、存储文档召回query向量化文档问答今天主要讲langchain在文档embedding以及构建fa......
  • 容器集群实现多机多卡分布式微调大模型chatglm2-6b(deepseed + LLaMA + NCCL)
    环境信息2台物理机(187.135,187.136),各两张p4显卡,安装好docker=20.10.0,安装好nvidia驱动(driverversion=470.223.02,cudaversion=11.4)构造容器集群(dockerswarm187.136节点作为manager节点,187.135节点作为worker节点)[root@host-136~]#dockerswarminit--advertise-addr......
  • sqlserver删除指定列失败,对象'DF__MailResour__star__7D5BD6B2' 依赖于 列'star'
    参考的原文链接:1、https://www.cnblogs.com/dengzt2011/archive/2012/12/09/2810063.html              altertabletable_namedropcolumn column_name sqlserver删除指定列失败时,报告消息如下:消息5074,级别16,状态1,第1行对象'DF__MailResou......
  • 线上跑chatGLM实践
    预先准备本笔记为参加DataWhale的线上学习——进行GLM、SD部署在完成驱动云平台注册后,免费获得168算力金,使用免费算力金进行ai平台部署在平台内进行部署https://platform.virtaicloud.com/项目服务器配置创建项目后,选择添加镜像在此选择PyTorch2.0.1Conda3.9的镜像通过......
  • ChatGLM3本机部署
    环境配置参照官方说明,创建虚拟python环境,并安装所需部署包。说明https://github.com/THUDM/ChatGLM3/blob/main/composite_demo/README.md本地模型加载1、先按照官方指引,将模型下载在本地。2、修改模型加载地址。MODEL_PATH和TOKENIZER_PATH,都修改注意:通过修改client.py......