上一篇分享了如何在笔记本搭建自己的大模型,可是对个人真正有用的还是垂直领域的专用模型。比如医学,法律,军事等。医学对每个人都有用,本来可以百度查,可是百度自己把自己污染了。 所以搭建自己的医学大模型很有必要。基于这个考虑,我在github上找到了QiZhenGPT来搭建医学大模型,实现自己的私人医生。
启真医学大模型坚持“数据+知识双轮驱动”的技术路线,通过大模型技术和医学知识库的紧密结合,融合医疗应用场景中的实际需求,从医学数据治理、医学推理、医患问答、病历自动生成、临床决策辅助支持系统等方面开展迭代研发,助力大模型技术在医疗行业的落地和应用实践.本身支持Chinese-LLaMA-Plus-7B、CaMA-13B、ChatGLM-6B模型,其中基于Chinese-LLaMA-Plus-7B效果最好,本篇只是验证搭建过程,为了模型处理方便,选择ChatGLM-6B。下面是具体的搭建过程。github上原作者介绍的很简单:
- 环境安装;
pip install -r requirements.txt
-
获取ChatGLM-6B,详情见这里;
-
下载LoRA,将模型下载并放在lora目录下;
-
修改
gradio_chatglm_demo.py
里的模型位置参数; -
启动demo;
python gradio_chatglm_demo.py
git clone GitHub - CMKRG/QiZhenGPT: QiZhenGPT: An Open Source Chinese Medical Large Language Model|一个开源的中文医疗大语言模型
搭建过开源项目的读者,看到这里都会会心一笑。如果如此简单就搭建成功,那我这篇文章就没有了意义。
下面是基于阿里云服务器搭建。环境linux ,conda(如何申请与搭建这些环境,网上很多就不在赘述)。具体步骤如下:
1)下载代码
cd QiZhenGP
2)搭建虚拟环境
conda create -n qzgpt python=3.10
source activate
conda activate qzgpt
3)调整requirements.txt
增加:
pyqt5==5.12.2
opencv-python
spyder==5.1.5
google-auth==1.7.2
google-auth-oauthlib==0.4.2
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.7.0
tb-nightly==2.11.0a20220906
4)安装依赖:pip install -r requirements.txt
5)报错处理,如果报找不到。直接在requirements.txt删除找不到的包。然后分别安装。我这里分别用以下命令安装了 conda install -c intel mkl_random,conda install -c intel mkl-service,conda install absl-py
6)下载模型,调整gradio_chatglm_demo.py中的base_model_path = 'chatglm-6b/'
lora_model_path = 'lora/'
终于到了激动人心的启动时刻了。执行python gradio_chatglm_demo.py。报错:
File "/mnt/workspace/QiZhenGPT/gradio_chatglm_demo.py", line 18, in <module>
model = model.eval()
File "/home/pai/envs/qzgpt/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1930, in eval
return self.train(False)
File "/home/pai/envs/qzgpt/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1911, in train
module.train(mode)
File "/home/pai/envs/qzgpt/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1911, in train
module.train(mode)
File "/home/pai/envs/qzgpt/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1911, in train
module.train(mode)
[Previous line repeated 4 more times]
File "/home/pai/envs/qzgpt/lib/python3.10/site-packages/peft/tuners/lora.py", line 322, in train
self.weight.data += (
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!
这个就有点要命了。网上搜索了一大堆全是废话。也问了通义千问与文心一言,基本的答案就是翻译一下原文,不解决根本问题。后面多方分析,从报错位置上看。还是model.eval()函数的问题,首先弄清eval()函数的含义,是启动预估模式。那要解决用gpu训练的事,必须在前面解决。根据这个与网上的答案。增加import torch device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = model.to(device)。增加完成后,再次启动。启动成功。界面如下:
可能搭建看起来好像很轻松 ,实际整整搞了14个小时 。当看到启动界面的时候,又感觉回到了3年前,搞定一个技术难题的兴奋。至此,基于大模型的私人医生搭建成功。山静似太古,日长如小年,下篇再见。