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

前言

参考了多个医疗大模型,如扁鹊灵心等,重新思考了下微调的方案以及数据集的格式;基于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: logcongcong@gmail.com
# @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

最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

五、面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的信息,ChatGLM-6B-INT4和ChatGLM-6B是两个不同的模型ChatGLM-6B-INT4是ChatGLM-6B模型的一个变种,它使用了INT4量化技术,可以在保持相对较高的模型性能的同时,减少模型的存储空间和计算资源需求。因此,ChatGLM-6B-INT4相对于ChatGLM-6B来说,具有更小的模型体积和更高的推理效率。 #### 引用[.reference_title] - *1* [ChatGLM-6B-INT4部署](https://blog.csdn.net/weixin_43890157/article/details/131614431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [本地部署 ChatGLM-6B](https://blog.csdn.net/engchina/article/details/130527699)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【ChatGLM】使用ChatGLM-6B-INT4模型进行P-Tunning训练记录及参数讲解](https://blog.csdn.net/sinat_14840559/article/details/131124471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值