admin 管理员组

文章数量: 887021

ChatGLM:win11部署大模型实例并正常启动、ChatGLM2-6B 模型基于 P-Tuning v2 的微调

  • 一. anconda
      • 1. anconda安装
      • 2. 环境变量配置
      • 3. 使用过程中的问题
        • 已经解决的问题
          • 环境方面
          • 1. cmd/powershell/anaconda prompt提示“系统找不到指定的路径”
            • 2. 一直卡在loading applications或弹出There is an instance of anaconda navigator alr
          • 使用方面
          • 3. 无法加载文件C:\Users\xxx\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本
          • 4. ValueError: greenlet.greenlet size以及keras保存的h5模型加载时出现“AttributeError: ‘str‘ object
          • 5. ERROR: Could not build wheels for pycocotools which use PEP 517
          • 6. Pycharm无法debug
        • 未解决的问题
          • 1. assert last_idx is not None
          • 2. Invoke-Expression ,Invoke-Expression -Command $activateCommand或power shell激活虚拟环境报错失
      • 4. 其他博主遇到的问题
          • 1. Unable to create process using ‘D:\Anaconda3\python.exe D:\Anaconda3\Scripts\conda-s
          • 2. conda 安装过程中无法激活 python 虚拟环境问题
          • 3. An unexpected error has occurred. Conda has prepared the above report
        • 4. UnsatisfiableError: The following specifications were found to be incompa
          • 5. Installing multiqc on Conda produces "UnsatisfiableError:"
      • 4. 目前可以做到的
  • 二. CUDA、cuDNN
      • CUDA、cuDNN 安装以及环境变量配置
  • 三. ChatGLM2-6B部署以及使用
    • 一. ChatGLM2-6B部署
      • 创建虚拟环境
      • ChatGLM2-6B下载
      • 安装依赖
      • 修改对应的py文件
    • 二. ChatGLM2-6B使用
      • 1. 开始运行web_demo(Pycharm右键run)所遇到的问题
          • 1. cannot import name ‘Doc‘ from ‘typing_extensions‘
            • 问题描述
            • 问题原因
            • 解决方案
          • 2. ImportError: cannot import name ‘_illegal’ from 'sympy.core.numbers’错
            • 3. DLL load failed while importing _imaging: 找不到指定的模块的解决方法 Python 文件命名引发的“module has no attribute“错误
            • 4. python 报错 ModuleNotFoundError: No module named ‘chardet‘ 解决方法
            • 5. chatglm2-b部署报错问题‘Textbox‘ object has no attribute ‘style‘
            • 6. RuntimeError: CUDA out of memory. Tried to allocate 128.00 MiB (GPU 0; 8.00 GiB total capacity; 1
            • 7. AssertionError: Unsupported bit-width
            • 8. AssertionError: Torch not compiled with CUDA enabled
            • 9. 如果和GCC有关
      • 2. 正式开始运行web_demo(Pycharm右键run)
      • 3. 正式开始运行web_demo2
      • 4. api.py的问题
  • 四. ChatGLM2-6B 模型基于 P-Tuning v2 的微调
      • Web_Demo启动!
      • API启动!




咳咳,工作需要,我一个Unity程序员去做AI相关的研究。从一开始的调用文心一言接口到现在自己部署ChatGLM2-6B并且通过Api调用。记录一下这个过程。

首先要保证自己的显卡有6G。这是最基础的要求,说白了就是GTX1060或者1660。玩AI都是用N卡,哎~我的6700XT… 期待战未来。

首先,先安装python,版本的话,在写这个文章的时候我用的是3.8.0。够用就好,太新怕有莫名其妙的BUG。

一. anconda

anconda不同版本、不同系统、不同配置 会产生 各种 奇葩问题,这里只说明笔者遇到的一些问题,文中没有涉及到的请自行百度

1. anconda安装

笔者版本:Anaconda3-2019.03-Windows-x86_64

Python&aconda系列:Anacond、Miniconda的下载安装配置教程详解 中的 一. Anacond下载安装配置教程详解

2. 环境变量配置

3. 使用过程中的问题

已经解决的问题
环境方面
1. cmd/powershell/anaconda prompt提示“系统找不到指定的路径”

这种问题多出现于 aconda 卸载重装时 和之前安装的路径不是同一路径

Python&aconda系列:cmd/powershell/anaconda prompt提示“系统找不到指定的路径”(亲测有效)

2. 一直卡在loading applications或弹出There is an instance of anaconda navigator alr

Python&aconda系列:启动Anaconda,一直卡在loading applications或弹出There is an instance of anaconda navigator alr

使用方面
3. 无法加载文件C:\Users\xxx\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本

python&anconda系列:无法加载文件C:\Users\xxx\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本

4. ValueError: greenlet.greenlet size以及keras保存的h5模型加载时出现“AttributeError: ‘str‘ object

python&anconda 系列:ValueError: greenlet.greenlet size以及keras保存的h5模型加载时出现“AttributeError: ‘str‘ object

5. ERROR: Could not build wheels for pycocotools which use PEP 517

python&anconda 系列:ERROR: Could not build wheels for pycocotools which use PEP 517的N中解决方法

6. Pycharm无法debug

python&anconda 系列:Pycharm在debug问题的N种解决方案(一般程序、web方向、人工智能方向)

Python系列:pycharm 远程连接服务器并且debug, 支持torch.distributed.launch debug

未解决的问题
1. assert last_idx is not None

Python&aconda系列:关于Anaconda:conda在Powershell上激活(assert last_idx is not None)

2. Invoke-Expression ,Invoke-Expression -Command $activateCommand或power shell激活虚拟环境报错失

python&anconda系列:Invoke-Expression ,Invoke-Expression -Command $activateCommand或power shell激活虚拟环境报错失

4. 其他博主遇到的问题

1. Unable to create process using ‘D:\Anaconda3\python.exe D:\Anaconda3\Scripts\conda-s

Python&aconda系列:Unable to create process using ‘D:\Anaconda3\python.exe D:\Anaconda3\Scripts\conda-s

2. conda 安装过程中无法激活 python 虚拟环境问题

Python&aconda系列:【python环境搭建】conda 安装过程中无法激活 python 虚拟环境问题

3. An unexpected error has occurred. Conda has prepared the above report

Python&aconda系列:conda踩坑记录1.An unexpected error has occurred. Conda has prepared the above report

4. UnsatisfiableError: The following specifications were found to be incompa

Python&aconda系列:conda踩坑记录2.UnsatisfiableError: The following specifications were found to be incompa

5. Installing multiqc on Conda produces “UnsatisfiableError:”

Python&aconda系列:conda踩坑总结(deeptools 篇)

4. 目前可以做到的

powershell Prompt和 pycharm Timinal都会报错,暂时无解

Prompt可以正常使用

也就是说现在有一个窗口可以正常切换环境、下载等东西,其他的目前也可以正常使用

二. CUDA、cuDNN

CUDA、cuDNN 安装以及环境变量配置

python&anconda系列(亲测有效):window11系统CUDA、cuDNN 安装以及环境变量配置

三. ChatGLM2-6B部署以及使用

一. ChatGLM2-6B部署

创建虚拟环境

首先创建虚拟环境!

按照上面步骤安装完了anaconda之后,按住win + R输入cmd。输入以下命令,新建一个名字为ChatGLM2B的环境。

这里的版本都可以自定义,这就是anaconda厉害的地方,只要你输入的正确,他都会把你下载下来,不需要管地址,这里–name 后面跟着的参数就是虚拟环境的名字,python==版本号

conda create --name ChatGLM2B python==3.8.10

这里的创建了一个叫amalaawei的虚拟环境。

这里创建到的一半的时候会出现一个选择,输入y以继续。就是安装一些必要的环境包。

看到最后是这样的说明成功了。下面还很贴心的提示了如何使用:

conda activate amalaawei(虚拟环境名)----------这句代码的意思就是激活这个虚拟环境,意思就是选中,在多个虚拟环境之间切换的时候,就可以根据激活不同的虚拟环境来达到选择的目的。


这里我记录几句刚学的conda咒语。

  • conda activate [虚拟环境的名称] 激活某一个虚拟环境

  • conda env list 查看虚拟环境列表

  • conda remove --name [虚拟环境的名称] --all 删除虚拟环境

可以看到我在激活虚拟环境后,前面会有一个括号,说明已经进入到虚拟环境了。

ChatGLM2-6B下载

主角登场!ChatGLM2-6B 链接:GitHub - THUDM/ChatGLM2-6B: ChatGLM2-6B: An Open Bilingual Chat LLM | 开源双语对话语言模型

根据下图操作下载zip。

下载好后就解压咯,放哪都可以,看你心情。在ChatGLM2-6B文件夹下创建一个文件夹叫model,用于等等存放模型使用。

打开链接把所有模型文件都下载下来放在model中。

THUDM/chatglm2-6b at main (huggingface.co)

暂时没有找到一次性打包下载,只能一个一个的这样下载(因为此网涉及到科学上网,所以建议只下载除模型外的东西,模型下载请访问 清华大学云盘 (tsinghua.edu),如果条件不具备科学上网,那么请访问https://download.csdn/download/weixin_54626591/88668707或者私信或者底下评论)

当然这里要是用的6GB的显卡的话,建议下载量化模型。链接在下面:

清华大学云盘 (tsinghua.edu)

这里我选用的是chatglm2-6b-int4,这已经是最小的了- -。

当然这种方法只是其中一种,还有一种是用git lfs下载大文件。但是我觉得吧,对新手来说步骤越简单越好。万一网络不给力呢,是吧~

把huggingface、清华大学云盘 中下载的所有文件都放在 新创建的文件夹model里面

安装依赖

接下来呢,使用命令行进入到ChatGLM2-6B文件夹。我这里是放在D盘,我做个演示。

就是这么简单,然后接着在虚拟环境下安装依赖,记得要先进入虚拟环境哦,不记得了的去上面看如何进入~

pip install -r requirements.txt

在一系列的加载下载以后

最后出现了Successfully 就算成功。

修改对应的py文件

我有的小伙伴一定会疑问,为什么我不用web_demo.py,而用demo2,因为不知道为啥我用web_demo发送问题以后没有响应,有懂的小伙伴可以留言告诉我哈。

进入ChatGLM2-6B文件夹下找到web_demo2.py打开,你用啥打开就行,我这里用的是vscode。

这里其他py文件同理,只要路径指向没错就好了。

然后将这里的路径“THUDM/chatglm2-6b”改成自己存放模型的路径。

这里有的人说要根据显存进行量化。这个就根据自己的需要选择啦。

# 6G 
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(4).cuda()
# 10G 
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(8).cuda()

二. ChatGLM2-6B使用

1. 开始运行web_demo(Pycharm右键run)所遇到的问题

不知道是不是没按照 requirements 这个文件下载,记着明明安按照这个文件下载了

下面是跑不起来遇到的各种问题

有可能问题会循环,可能安装了一个包,这个包相关的依赖也会安装,如果已有环境与依赖有冲突,之前安装的包可能被卸载

1. cannot import name ‘Doc‘ from ‘typing_extensions‘
问题描述

在运行ChatGLM2-6B大语言模型和使用P-Tuning训练的时候,出现如下错误

cannot import name 'Doc' from 'typing_extensions'
问题原因

因为安装的typing_extensions版本不正确,需要重新安装

解决方案

运行: pip install typing_extensions==4.8.0

如果出现: Requirement already satisfied: typing_extensions==4.8.0 in /xxx

需要运行: pip install typing_extensions==4.8.0 --force-reinstall
–force-reinstall参数会先缷载再重新安装

2. ImportError: cannot import name ‘_illegal’ from 'sympy.core.numbers’错

根据提供的引用内容,出现ImportError: cannot import name ‘_illegal’ from 'sympy.core.numbers’错误可能是由于sympy库版本不兼容或安装不完整导致的。解决此问题的方法是重新安装或升级sympy库。

你可以尝试以下解决方案:
卸载sympy库:

pip uninstall sympy

重新安装sympy库:

pip install sympy

如果上述方法无效,可以尝试升级sympy库:

pip install --upgrade sympy

请注意,确保你的Python环境中没有其他与sympy库相关的问题,例如依赖项缺失或其他冲突的库。

3. DLL load failed while importing _imaging: 找不到指定的模块的解决方法 Python 文件命名引发的“module has no attribute“错误
DLL load failed while importing _imaging: 找不到指定的模块的解决方法

卸载当前版本,安装6.2.1版本

pip uninstall pillow
pip install pillow==6.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/****

Python 文件命名引发的"module has no attribute"错误
保存py文件命名时,一定要注意,不能与导入的模块重名

因为import dgl,会先在当前目录下查找有没有dgl模块,即dgl.py文件。找到了就导入,也就是说这里导入的就是自己。自然就无法使用turtle模块的对象。

4. python 报错 ModuleNotFoundError: No module named ‘chardet‘ 解决方法

报错信息

ModuleNotFoundError: No module named 'chardet'

通过如下命令安装chardet模块:

pip install chardet

运行上面的命令后如果出现以下错误,多数被墙

手动下载chardet模块,下载地址如下:

https://github.com/chardet/chardet

通过命令行进入到chardet目录,执行setup.py文件进行安装,命令如下:

python setup.py install

安装结束后,查看是否已经安装成功

pip list
5. chatglm2-b部署报错问题‘Textbox‘ object has no attribute ‘style‘

我们在部署chatglm2-b的时候可能出现’Textbox’ object has no attribute 'style’的问题

这是因为安装的第三方库gradio版本太高,降低版本即可。

pip uninstall gradio
pip install gradio==3.50.0

安装3.50.0或者3.49.0都可以。

6. RuntimeError: CUDA out of memory. Tried to allocate 128.00 MiB (GPU 0; 8.00 GiB total capacity; 1

说明你显卡不够,需要改web_demo文件里面的内容

# 6G 
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(4).cuda()
# 10G 
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(8).cuda()

同样适用于web_demo2文件

7. AssertionError: Unsupported bit-width

可能有的小伙伴显卡的内存是8G或其他,然后自动做聪明改成了以下内容

# 8G 
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(6).cuda()

然后会报这个错,其实只能是4或8,源码里有写,否则会报错

同样适用于web_demo2文件

8. AssertionError: Torch not compiled with CUDA enabled

这是最后一个问题,也是令很多人特别头疼的一个问题

Python&anconda系列(亲测有效):安装pytorch以及报错AssertionError: Torch not compiled with CUDA enabled解决方法

Python&aconda系列:Torch not compiled with CUDA enabled 报错的归纳总结

9. 如果和GCC有关

C系列:Windows中安装GCC详细教程

2. 正式开始运行web_demo(Pycharm右键run)

出页面了,但是提出了问题,回答空白

笔者猜测可能和科学上网有点儿关系

只是一闪,还是空白(这是笔者尝试了好多次抓的截图),可能笔者用的是免费的科学上网工具吧

3. 正式开始运行web_demo2

使用demo2.py需要先安装依赖。

pip install streamlit streamlit-chat

然后通过命令行去启动!

streamlit run web_demo2.py

总体感觉不如chatgpt

4. api.py的问题

使用api.py需要先安装依赖

pip install fastapi uvicorn

然后python api.py启动!启动成功以后,可以使用Postman等工具进行测试。


AttributeError: 'Textbox' object has no attribute 'style'. Did you mean: 'scale'

当启动web_demo.py出现上面这个错误的时候,其实是gradio的问题,版本太高了。个人猜测可能是pip默认安装最新版本,新版本中api有变化,所以识别不了。

所以只需要卸载当前版本,安装旧版就好了哈。

pip uninstall gradio
pip install gradio==3.39.0

四. ChatGLM2-6B 模型基于 P-Tuning v2 的微调

公司做技术储备,今天来分享一下微调的流程,当然也算是自己加深印象。


除了安装ChatGLM2-6B的依赖之外,还需要安装以下依赖:

pip install rouge_chinese nltk jieba datasets transformers[torch] -i https://pypi.douban.com/simple/

在ChatGLM2-6B文件夹下进入ptuning文件夹。

里面有train.json、dev.json,这两个json文件,都用同一份数据就好了。

格式如下:

这里的prompt和response是自定义的Key主键,在train.sh中会有表现。

但是呢,官方提供的shell脚本,在Windows下不能直接使用。

根据一个大佬的做法,把代码改成Bat使用,改写成如下:

可以看到红框中圈出的部分就是刚才json数据中使用到的主键Key

将–train_file与validation_file的路径改成自己本地json文件的路径。

–model_name_or_path改为自己的离线模型路径。

–output_dir 改为自己预想的训练模型后的输出路径。

都改好了以后就运用train.bat。就会自动开始微调了。

完成后,就可以进行推理了。

打开ptuning文件夹下的evaluate.sh设置相应的参数,这里由于Windows下不支持shell,依旧改成bat进行运行。

–validation_file改成自定义的json路径

–test_file改成自定义的json路径

–model_name_or_path 的路径改为模型的本地路径。

–ptuning_checkpoint 的路径改为训练好的微调模型的路径。

运行这个evaluate.bat,完成以后


说实话好像推理这个步骤无所谓。

Web_Demo启动!

全都完成以后呢复制一个web_demo.sh,改成web_demo.bat。

将路径改为自己的本地路径。

–model_name_or_path的路径改为本地模型路径。

–ptuning_checkpoint的路径就是微调后的模型的路径。

OK了以后呢就可以运行web_demo.bat了,启动!

然后等一等就会弹出网页端,就可以进行测试啦。

API启动!

返回ChatGLM2-6B文件夹,复制一个api.py进行修改。

修改成如下这样:

其实就是在原来的基础上加上微调模型。

这样就可以通过api进行调用啦。用法在上一篇文章有说到,需要的小伙伴自己查阅哈。







WongVin

ChatGLM2-6B部署及使用

ChatGLM2-6B 模型基于 P-Tuning v2 的微调

本文标签: 模型 实例 系列 python amp