Coder Social home page Coder Social logo

wangrongsheng / medqa-chatglm Goto Github PK

View Code? Open in Web Editor NEW
281.0 5.0 41.0 21.19 MB

🛰️ 基于真实医疗对话数据在ChatGLM上进行LoRA、P-Tuning V2、Freeze、RLHF等微调,我们的眼光不止于医疗问答

Home Page: https://www.wangrs.co/MedQA-ChatGLM/

Python 100.00%
chatglm-6b chatgpt dataset fine-tuning freeze huggingface large-language-models llms lora medical rlhf transformer

medqa-chatglm's Introduction

Note

欢迎关注我们最新的工作:CareLlama (关怀羊驼),它是一个医疗大语言模型,同时它集合了数十个公开可用的医疗微调数据集和开放可用的医疗大语言模型以促进医疗LLM快速发展:https://github.com/WangRongsheng/CareLlama

MedQA-ChatGLM 1

1 使用的数据为cMedQA2

资源

项目 数据集 底座模型
ChatMed Consult 包含50w+在线问诊+ChatGPT回复,TCM中医药诊疗数据集未公开 LLaMA-7B
ChatDoctor HealthCareMagic-100k 包含100k+真实患者与医生对话数据集,icliniq-10k 包含10k+患者与医生对话数据集,GenMedGPT-5k 包含5k+由GPT生成的医患对话数据集 LLaMA-7B
Med-ChatGLM Huatuo-dataHuatuo-liver-cancer ChatGLM-6B
Huatuo-Llama-Med-Chinese Huatuo-dataHuatuo-liver-cancer LLaMA-7B
DoctorGLM CMD.MedDialog 、ChatDoctor项目数据集 ChatGLM-6B
MedicalGPT-zh 数据未开源 ChatGLM-6B
Dr.LLaMA LLaMA
Medical_NLP 2 - -
CMCQA 3 - -
QiZhenGPT - -
LLM-Pretrain-FineTune - -
PMC-LLaMA - LLaMA-7B
BianQue - -
medAlpaca - LLaMA-7B
MedicalGPT - -
LLM-Pretrain-FineTune - -
ShenNong-TCM-LLM - -
Sunsimiao - -
CMLM-ZhongJing - -
ZhongJing - -
Ming - -
DISC-MedLLM - -

使用

1. 安装环境

pip install -r requirements.txt

2. 微调

2.1 LoRA

CUDA_VISIBLE_DEVICES=0 python MedQA-ChatGLM/finetune.py \
                              --do_train \
                              --dataset merged-cMedQA \
                              --finetuning_type lora \
                              --output_dir ./med-lora \
                              --per_device_train_batch_size 32 \
                              --gradient_accumulation_steps 256 \
                              --lr_scheduler_type cosine \
                              --logging_steps 500 \
                              --save_steps 1000 \
                              --learning_rate 5e-5 \
                              --num_train_epochs 10.0 \
                              --fp16

2.2 Freeze微调

CUDA_VISIBLE_DEVICES=0 python MedQA-ChatGLM/finetune.py \
                              --do_train \
                              --dataset merged-cMedQA \
                              --finetuning_type freeze \
                              --output_dir ./med-freeze \
                              --per_device_train_batch_size 32 \
                              --gradient_accumulation_steps 256 \
                              --lr_scheduler_type cosine \
                              --logging_steps 500 \
                              --save_steps 1000 \
                              --learning_rate 5e-5 \
                              --num_train_epochs 10.0 \
                              --fp16

2.3 P-Turning V2

CUDA_VISIBLE_DEVICES=1 python MedQA-ChatGLM/finetune.py \
                              --do_train --dataset merged-cMedQA \
                              --finetuning_type p_tuning \
                              --output_dir ./med-p_tuning \
                              --per_device_train_batch_size 32 \
                              --gradient_accumulation_steps 256 \
                              --lr_scheduler_type cosine \
                              --logging_steps 500 \
                              --save_steps 1000 \
                              --learning_rate 5e-5 \
                              --num_train_epochs 10.0 \
                              --fp16

更多参数信息,可以查看docs/参数详解.md .

多GPU分布式训练:

# 配置分布式参数
accelerate config

# 分布式训练
accelerate launch src/finetune.py \
                  --do_train \
                  --dataset Huatuo,CMD,MedDialog,guanaco,cognition \
                  --finetuning_type lora \
                  --output_dir med-lora \
                  --per_device_train_batch_size 16 \
                  --gradient_accumulation_steps 4 \
                  --lr_scheduler_type cosine \
                  --logging_steps 10 \
                  --save_steps 1000 \
                  --learning_rate 5e-5 \
                  --num_train_epochs 3.0 \
                  --fp16 \
                  --ddp_find_unused_parameters False \ # 分布式训练时,LoRA微调需要添加防止报错
                  --plot_loss

3. 推理

3.1 可视化

CUDA_VISIBLE_DEVICES=0 python MedQA-ChatGLM/web_demo.py \
                              --checkpoint_dir med-lora/
                                              (med-freez/)
                                              (med-p_tuning/)

3.2 命令行

CUDA_VISIBLE_DEVICES=0 python MedQA-ChatGLM/infer.py \
                              --checkpoint_dir med-lora/
                                              (med-freez/)
                                              (med-p_tuning/)

4. 合并(可选)

合并模型:

CUDA_VISIBLE_DEVICES=0 python MedQA-ChatGLM/export_weights.py \
                              --finetuning_weights_path ./med-lora \
                              --save_weights_path ./save_lora

加载合并模型:

CUDA_VISIBLE_DEVICES=0 python MedQA-ChatGLM/load_export_weights.py \
                              --save_weights_path ./save_lora

结果

微调方式 模型权重 训练时长 训练轮次
LoRA MedQA-ChatGLM-LoRA 28h 10
P-Tuning V2 MedQA-ChatGLM-PTuningV2 27h 10
Freeze MedQA-ChatGLM-Freeze 28h 10
训练设置

* 实验是在Linux系统,A100 (1X, 80GB)上进行的

免责声明

本项目相关资源仅供学术研究之用,严禁用于商业用途。使用涉及第三方代码的部分时,请严格遵循相应的开源协议。模型生成的内容受模型计算、随机性和量化精度损失等因素影响,本项目无法对其准确性作出保证。本项目数据集绝大部分由模型生成,即使符合某些医学事实,也不能被用作实际医学诊断的依据。对于模型输出的任何内容,本项目不承担任何法律责任,亦不对因使用相关资源和输出结果而可能产生的任何损失承担责任。

参考

  1. https://github.com/zhangsheng93/cMedQA2
  2. https://github.com/zhangsheng93/cMedQA
  3. https://github.com/hiyouga/ChatGLM-Efficient-Tuning
  4. https://github.com/jackaduma/ChatGLM-LoRA-RLHF-PyTorch
  5. https://github.com/THUDM/ChatGLM-6B

medqa-chatglm's People

Contributors

wangrongsheng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

medqa-chatglm's Issues

list' object has no attribute 'keys'

LoRA微调模型是报错:
CUDA_VISIBLE_DEVICES=0 python MedQA-ChatGLM/finetune.py
--do_train
--dataset merged-cMedQA
--finetuning_type lora
--output_dir ./med-lora
--per_device_train_batch_size 32
--gradient_accumulation_steps 256
--lr_scheduler_type cosine
--logging_steps 500
--save_steps 1000
--learning_rate 5e-5
--num_train_epochs 10.0
--fp16
报错信息,如下:
with error <class 'AttributeError'>: 'list' object has no attribute 'keys'
ValueError: Not able to read records in the JSON file
DatasetGenerationError: An error occurred while generating the dataset

Train split 时候报错

05/16/2023 13:54:41 - INFO - datasets.builder - Generating train split
Generating train split: 0 examples [00:00, ? examples/s]05/16/2023 13:54:44 - ERROR - datasets.packaged_modules.json.json - Failed to read file '/root/.cache/huggingface/datasets/downloads/13b7313f9ce080a2697c9d786e3007888f44a89cdeab298bb587b2255a14216e' with error <class 'AttributeError'>: 'list' object has no attribute 'keys'
Traceback (most recent call last):                      
  File "/root/autodl-tmp/MedQA-ChatGLM/med_venv/lib/python3.10/site-packages/datasets/builder.py", line 1858, in _prepare_split_single
    for _, table in generator:
  File "/root/autodl-tmp/MedQA-ChatGLM/med_venv/lib/python3.10/site-packages/datasets/packaged_modules/json/json.py", line 146, in _generate_tables
    raise ValueError(f"Not able to read records in the JSON file at {file}.") from None
ValueError: Not able to read records in the JSON file at /root/.cache/huggingface/datasets/downloads/13b7313f9ce080a2697c9d786e3007888f44a89cdeab298bb587b2255a14216e.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/root/autodl-tmp/MedQA-ChatGLM/MedQA-ChatGLM/finetune.py", line 88, in <module>
    main()
  File "/root/autodl-tmp/MedQA-ChatGLM/MedQA-ChatGLM/finetune.py", line 22, in main
    dataset = prepare_data(model_args, data_args)
  File "/root/autodl-tmp/MedQA-ChatGLM/MedQA-ChatGLM/utils/common.py", line 309, in prepare_data
    raw_datasets = load_dataset(dataset_info.dataset_name, cache_dir=model_args.cache_dir)
  File "/root/autodl-tmp/MedQA-ChatGLM/med_venv/lib/python3.10/site-packages/datasets/load.py", line 1797, in load_dataset
    builder_instance.download_and_prepare(
  File "/root/autodl-tmp/MedQA-ChatGLM/med_venv/lib/python3.10/site-packages/datasets/builder.py", line 890, in download_and_prepare
    self._download_and_prepare(
  File "/root/autodl-tmp/MedQA-ChatGLM/med_venv/lib/python3.10/site-packages/datasets/builder.py", line 985, in _download_and_prepare
    self._prepare_split(split_generator, **prepare_split_kwargs)
  File "/root/autodl-tmp/MedQA-ChatGLM/med_venv/lib/python3.10/site-packages/datasets/builder.py", line 1746, in _prepare_split
    for job_id, done, content in self._prepare_split_single(
  File "/root/autodl-tmp/MedQA-ChatGLM/med_venv/lib/python3.10/site-packages/datasets/builder.py", line 1891, in _prepare_split_single
    raise DatasetGenerationError("An error occurred while generating the dataset") from e
datasets.builder.DatasetGenerationError: An error occurred while generating the dataset

下载完dataset以后一开始split就报错。看了下下载到的dataset的jsonl文件,里面全部都是unicode转义符,或许是跟这个有关?
代码commit id:0a08f1ec708293922e137c93aa587455321c2808

训练阶段没有做验证

你好,阅读代码后发现,在训练阶段好像是没有配置相关的验证集计算loss阶段,这样会造成在训练集上过拟合吗?难道是因为大模型一般不会过拟合,所以验证的意义不大吗?

MedQA-ChatGLM一些拓展

  1. 动态绑定lora回答或者解绑lora回答,with model.disable_adapter()
  2. 模型微调、奖励模型训练、RLHF三个过程中,模型微调和RLHF可以使用相同的数据,奖励函数训练可以使用默认的数据集进行;

how it works?

I want to use local data to fine-tune the mode by using ChatGLM , like this , how to works?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.