堪比ChatGPT的ChatGLM-6B开源本地化语言模型
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,使用了基于 General Language Model (GLM)
架构的技术,拥有 62 亿参数。该模型结合了模型量化技术,使用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用类似于 ChatGPT 的技术,对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,并经过监督微调、反馈自助、人类反馈强化学习等技术的加持,ChatGLM-6B 已经能够生成相当符合人类偏好的回答。如果您想针对自己的应用场景定制模型,我们还实现了基于 P-Tuning v2
的高效参数微调方法,INT4 量化级别下最低只需 7GB 显存即可启动微调。
然而,由于 ChatGLM-6B 的规模较小,我们已知其具有相当多的局限性。这些局限性包括事实性/数学逻辑错误、可能生成有害/有偏见内容、较弱的上下文能力、自我认知混乱以及可能生成与中文指示完全矛盾的内容。在使用 ChatGLM-6B 之前,请了解这些问题,以免产生误解。同时,我们正在内测开发基于 1300 亿参数 GLM-130B 的 ChatGLM,该模型将具有更强的能力和更低的误差率。
新版提醒
您正在浏览的当前教程为旧版,现ChatGLM-6B已更新至ChatGLM2-6B版本,拥有更快的速度和更好的逻辑能力,强烈建议您跳过本篇教程,直接阅读下文。
GitHub
项目开源地址:https://github.com/THUDM/ChatGLM-6B
部署教程
下载
如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键
后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。
首先我们需要确认一个工作目录,用来存放ChatGLM-6B的相关文件。本站所选择的目录为D盘的根目录下openai.wiki文件夹,完整路径为:D:\openai.wiki。
1.检测D盘是否在openai.wiki,没有则创建该文件夹。
if not exist D:\openai.wiki mkdir D:\openai.wiki
2.强制切换工作路径为D盘的openai.wiki文件夹。
cd /d D:\openai.wiki
3.拉取Github仓库文件夹,将下载至openai.wiki文件夹。
git clone https://github.com/THUDM/ChatGLM-6B.git
注意:如果您无法完成第3步,执行后报错或者无法下载,可以下载该文件将其解压至D:\openai.wiki即可。
环境安装
为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。
在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。
conda create -p D:\openai.wiki\ChatGLM-6B\MyENV python=3.8
执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?
提示,我们直接按下回车即可。
初始化Conda环境,避免后续可能报错。
conda init cmd.exe
激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。
conda activate D:\openai.wiki\ChatGLM-6B\MyENV
为避免出现问题,我们再次强制切换至ChatGLM-6B的项目路径,确保一切可以正常安装。
cd /d D:\openai.wiki\ChatGLM-6B
PyTorch
在安装PyTorch之前,您需要先前往官网(PyTorch)查看自己应该安装哪个版本。
请您像下图一样按顺序选择即可,依次选择Stable->Windows->Conda->Python->CUDA 11.8。
其中的Stable其实就是稳定版的PyTorch,Preview(Nightly)是每天更新的预览测试版,可能存在未知Bug,所以最好选择Stable版本。
如果您看到的不是CUDA 11.8,而是CUDA 11.9或更高的版本也没关系,只要前缀是CUDA即可。
在您按顺序选择好之后,复制下面的<Run this Command>的内容即可,例如本站所得到的为:
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
将您所复制的代码直接粘贴至CMD窗口内执行,此时将会自动安装PyTorch和对应版本的CUDA,因为PyTorch比较大,所以等待时间会比较长,请不要中断该操作。
注意:一定要复制你自己得到的,尽量不要直接使用本站所给出的示例命令行!
安装ChatGLM-6B项目的相关依赖库,此步骤可能需要稍等几分钟才能够安装完成。
pip install -r requirements.txt
如果遇到类似于以下的报错提示,那么代表您没有安装正确版本的PyTorch和CUDA,请观看本文中上方关于PyTorch安装的部分。如果没有报错可忽略此部分内容,继续往下观看。
Running setup.py install for sentencepiece ... error error: subprocess-exited-with-error × Running setup.py install for sentencepiece did not run successfully. │ exit code: 1 ╰─> [15 lines of output] running install C:\Users\openA\AppData\Local\Programs\Python\Python311\Lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. warnings.warn( running build running build_py creating build creating build\lib.win-amd64-cpython-311 creating build\lib.win-amd64-cpython-311\sentencepiece copying src\sentencepiece/__init__.py -> build\lib.win-amd64-cpython-311\sentencepiece copying src\sentencepiece/_version.py -> build\lib.win-amd64-cpython-311\sentencepiece copying src\sentencepiece/sentencepiece_model_pb2.py -> build\lib.win-amd64-cpython-311\sentencepiece copying src\sentencepiece/sentencepiece_pb2.py -> build\lib.win-amd64-cpython-311\sentencepiece running build_ext building 'sentencepiece._sentencepiece' extension error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: legacy-install-failure × Encountered error while trying to install package. ╰─> sentencepiece note: This is an issue with the package mentioned above, not pip. hint: See above for output from the failure.
为确保transformers版本正确,重新执行一遍下面这行命令。
pip install transformers==4.26.1
GUI依赖
我们已经完成了环境的安装,但是目前直接运行大概率是会报错的,所以需要安装以下依赖库。
Gradio
WebUI的GUI界面依赖库,该库可以让您可视化交互使用ChatGLM-6B。
pip install gradio
Streamlit
安装Streamlit依赖库可以实现打印机效果,非常建议安装。
pip install streamlit
pip install streamlit-chat
模型安装
为了保证可以正常使用,非常强烈建议您直接下载我站所提供的模型文件,本站长因为从清华源下载而缺少config.json文件报错困扰良久,又因为modeling_chatglm.py文件版本不是最新而导致stream_chat报错,为了避免您折腾出更多错误,所以希望您尽量下载本站提供的模型文件。
官网下载
官方下载地址:https://huggingface.co/THUDM/chatglm-6b
将下载后的所有文件放置在项目目录内,分别修改cli_demo.py|web_demo.py|web_demo2.py三个文件内的第6行和第7行内容,将”THUDM/chatglm-6b”替换为你的模型文件夹路径。
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
网盘下载
本站已整理好模型相关路径,下载该压缩包之后,将会得到一个名为THUDM的文件夹,将其移动至D:\openai.wiki\ChatGLM-6B目录下即可,无需修改任何文件。
模型移动后的目录结果应该如下:
D:\openai.wiki\ChatGLM-6B └─.github └─examples └─limitations └─MyENV └─ptuning └─resources └─THUDM //下载的模型文件夹 └─chatglm-6b //模型目录名称
使用教程
显存设置
查看显存
在使用之前,您需要了解自己的显卡内存是多少?不然肯定是会报错的,那么如何查看自己的显存是多少呢?我们可以同时按下键盘上的Ctrl+Alt+Del
键,打开任务管理器,然后按步骤如下图所示,查看显存。
- 点击
性能
选项卡 - 点击
GPU
类别 - 查看
专用GPU内存
设置显存
我们的启动文件有三种,下面的内容会介绍三种启动方式有什么不同,我们以cli_demo.py
为例,教您如何设置显存,其它两种文件的修改方式与该方式完全一致,不做单独介绍。
我们打开D:\openai.wiki\ChatGLM-6B\cli_demo.py
文件,可以看到第7行内容如下:
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
我们需要在.half().cuda()
的中间添加一个参数,名称为.quantize()
,括号中可以填写参数。
如果您的显存为6G
左右,可以使用4 Bit量化
,.quantize()
的参数为4
,也就是.half().quantize(4).cuda()
。
直接复制下面的内容,替换cli_demo.py
文件的第7行即可。
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(4).cuda()
如果您的显存为10G
左右,可以使用8 Bit量化
,.quantize()
的参数为8
,也就是.half().quantize(8).cuda()
。
直接复制下面的内容,替换cli_demo.py
文件的第7行即可。
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(8).cuda()
如果您看不懂,那就将cli_demo.py
|web_demo.py
|web_demo2.py
这三个文件的第7行都替换成上面的内容即可。
启动方式
我们一共有3种启动方式,分别是目录中的cli_demo.py
|web_demo.py
|web_demo2.py
三个文件,三种启动方式对应着3种UI界面。
cli_demo
启动方式
请在CMD中如下命令,强制切换工作路径:
cd /d D:\openai.wiki\ChatGLM-6B
执行如下命令行,激活Conda中的ChatGLM-6B虚拟环境。
conda activate D:\openai.wiki\ChatGLM-6B\MyENV
启动cli_demo.py,该步骤需要载入模型,然后自动载入对话交互界面,请耐性等待五分钟左右,等待时间因电脑性能而定。
python cli_demo.py
注意:第一次问答时需要载入模型算法,所以需要等待较长的时间,但是从第二次对话开始,速度将会得到极大的提升。
界面展示
cli界面是通过在命令行之内直接交互来进行问答的,界面如下:
完整内容如下:
欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序 用户:AI是什么? ChatGLM-6B:AI是人工智能(Artificial Intelligence)的缩写,指计算机系统通过模拟人类思维和学习的方式,实现智能的扩展和提升 。其可以通过机器学习、自然语言处理、计算机视觉、智能对话等技术实现各种智能化的应用,例如语音识别、图像识别、智能推荐、自动驾驶等。AI技术是计算机科学和工程领域的一个分支,也是当前全球科技发展的重要方向之一。 用户:如何通过Python编写一个网页爬虫,请给出相应代码。 ChatGLM-6B:要编写一个网页爬虫,需要使用Python中的网络编程库(如Requests)和BeautifulSoup库(用于HTML解析)。下面是一个使用Requests和BeautifulSoup库编写的简单网页爬虫示例,可以从指定的网页中提取所有标题标签的内容: ```python import requests from bs4 import BeautifulSoup # 指定要爬取的网页链接 url = 'https://www.example.com/index.html' # 发送HTTP GET请求,获取网页内容 response = requests.get(url) # 使用BeautifulSoup库解析网页内容 soup = BeautifulSoup(response.content, 'html.parser') # 获取所有标题标签的内容 titles = soup.find_all('h1') # 输出所有标题标签的内容 print(titles) ``` 在这个示例中,我们首先使用Requests库发送HTTP GET请求,获取网页内容。然后,我们使用BeautifulSoup库将网页内容解析为HTML文 档,并获取所有标题标签(h1)的内容。最后,我们将所有标题标签的内容输出到控制台中。 当然,这个示例只是一个简单的网页爬虫,实际的爬虫需要考虑到更多的因素,如反爬虫措施、爬虫程序的可执行性、数据隐私等。需要根据实际情况进行相应的调整。 用户:胃肠难受应该吃点什么药? ChatGLM-6B:胃肠难受时,应该先去医院或诊所就诊,确定病因并获得适当的治疗建议。不同的病因和病情需要使用不同的治疗方法,例如消化不良可能需要服用抗酸药和益生菌,而急性胃炎则需要使用胃黏膜保护剂和抗生素。 如果医生认为你的症状是由其他因素引起的,他们可能会建议你服用一些非处方药,例如止痛药、抗抑郁药或胃动力药,但请注意,这些药物的使用也需要根据个体情况和医生的建议来确定。 请遵循医生或药剂师的建议,不要自行购买或使用药物。
web_demo
启动方式
请在CMD中如下命令,强制切换工作路径:
cd /d D:\openai.wiki\ChatGLM-6B
执行如下命令行,激活Conda中的ChatGLM-6B虚拟环境。
conda activate D:\openai.wiki\ChatGLM-6B\MyENV
启动web_demo.py,该步骤需要载入模型,然后自动载入对话交互界面,请耐性等待五分钟左右,等待时间因电脑性能而定。
python web_demo.py
等待片刻之后,将会自动打开一个网页,地址为:http://127.0.0.1:7860,之后就可以正常使用啦。
注意:第一次问答时需要载入模型算法,所以需要等待较长的时间,但是从第二次对话开始,速度将会得到极大的提升。
界面展示
web_demo界面是通过在Web网页中进行交互问答的,界面如下:
web_demo2
启动方式
请在CMD中如下命令,强制切换工作路径:
cd /d D:\openai.wiki\ChatGLM-6B
执行如下命令行,激活Conda中的ChatGLM-6B
虚拟环境。
conda activate D:\openai.wiki\ChatGLM-6B\MyENV
启动web_demo2.py,该步骤需要载入模型,然后自动载入对话交互界面,请耐性等待五分钟左右,等待时间因电脑性能而定。
streamlit run web_demo2.py --server.port 6006
首先次启动可能看到需要您填写Email的地址,这里填写之后将会自动接收到关于Streamlit的广告,我们直接不输入任何内容,按下回车即可跳过。
(D:\openai.wiki\ChatGLM-6B\MyENV) D:\openai.wiki\ChatGLM-6B>streamlit run web_demo2.py --server.port 6006 Welcome to Streamlit! If you’d like to receive helpful onboarding emails, news, offers, promotions, and the occasional swag, please enter your email address below. Otherwise, leave this field blank. Email:
等待片刻之后,将会自动打开一个网页,地址为:http://localhost:6006,之后就可以正常使用啦。
注意:第一次问答时需要载入模型算法,所以需要等待较长的时间,但是从第二次对话开始,速度将会得到极大的提升。
界面展示
web_demo2界面是通过在Web网页中进行交互问答的,界面如下:
使用案例
编程
欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序 用户:帮我用Python写一个爬虫 ChatGLM-6B:当然可以!下面是一个使用Python编写的简单爬虫,它使用requests库和BeautifulSoup库来获取网页上的数据。 ```python import requests from bs4 import BeautifulSoup # 获取目标网页 url = 'https://www.example.com' response = requests.get(url) # 解析网页 soup = BeautifulSoup(response.text, 'html.parser') # 获取要获取的数据 data = soup.find('div', {'class': 'data'}).text print(data) ``` 在这个例子中,我们使用requests库来获取目标网页,然后使用BeautifulSoup库来解析网页并获取数据。最后,我们将获取的数据打印 出来。 当然,爬虫并不是一次性的,它可以多次使用。每次爬取后,我们可以保存网页并清理浏览器缓存,以确保每次爬取都能得到最新的数据。 希望这可以帮助您开始编写自己的爬虫!
用户:用C++控制台写一个批处理文件命名的脚本 ChatGLM-6B:以下是使用C++控制台脚本编写批处理文件的示例代码: ```c++ #include <iostream> #include <string> using namespace std; int main() { string filename; cout << "Enter file name: "; cin >> filename; // Check if file already exists bool exists = false; if (filename.empty()) { cout << "No such file or directory.\n"; exists = true; } else { string path = FileNamePath(filename); int i = path.find_last_of("."); if (i != string::npos) { i = path.find_last_of(".."); } if (i != string::npos) { string full_path = path.substr(0, i) + ".txt"; if (Fileexists(full_path)) { cout << "File already exists.\n"; exists = true; } else { cout << "File does not exist.\n"; } } } if (!exists) { cout << "Create file if does not exist.\n"; } return 0; } string FileNamePath(string filename) { string path = filename; int len = path.length(); int j = 0; for (int i = 0; i < len; i++) { if (path[i] == ',') { j++; path[i] = path[j]; } } path[j] = '\0'; return path; } ``` 这个脚本首先要求用户输入要命名的文件名。然后,它使用字符串处理函数`FileNamePath`查找该文件名是否存在于指定的路径中。如果该文件名不存在,脚本会要求用户创建该文件。如果该文件名已存在,脚本会在控制台输出提示信息,并使用字符串处理函数`FileNamePath`将该文件名转换为指定的路径,以便创建该文件。 请注意,这只是一个示例,具体实现可能因编程语言和操作系统而异。
写作
用户:写一篇赞美祖国的诗词 ChatGLM-6B:祖国啊,你的山川湖海, 是灵魂的象征,思想的结晶; 你的历史和文化, 是智慧的宝藏,心灵的港湾。 你的人民勤劳勇敢, 为了祖国的统一而奋斗不止; 你的文化丰富多彩, 为世界文化作出贡献,不可磨灭。 你的旗帜高高飘扬, 象征着忠诚和信仰, 你的英雄事迹历久弥新, 激励着后浪不断前行。 祖国啊,你的儿女想念你, 在内心深处呼唤着你; 你的未来需要你的儿女, 需要你的智慧和力量,为你加油! 祖国啊,你是我们的母亲, 让我们继承你的传统, 为建设你的伟大事业, 我们的未来更加美好,更加辉煌!
用户:2020年的汽车行业有哪些大新闻? ChatGLM-6B:2020年对于汽车行业来说是一个重要的年份,发生了许多大新闻,以下是其中一些重要的事件: 1. COVID-19疫情对全球汽车生产和运输造成了重大影响。许多汽车制造商和供应商采取了应急措施,增加了生产线和物流能力,以满足 疫情下的需求。 2. 美国汽车制造商特斯拉公司股价经历了一次重大波动,其市值在短时间内蒸发了数百亿美元。这引起了全球投资者的担忧,也促使特 斯拉开始调整其业务战略和商业模式。 3. 汽车制造商之间的竞争变得更加激烈,一些公司开始推出更具创新和智能的电动汽车和自动驾驶技术,以争夺消费者的市场份额。 4. 一些汽车制造商开始在全球范围内推出自动驾驶技术,包括谷歌自动驾驶汽车、福特和通用等公司。这些技术的发展引起了公众的关 注,也引发了关于自动驾驶技术的伦理和法律问题的讨论。 5. 一些汽车制造商开始推出共享汽车服务,例如特斯拉的电动汽车共享计划,以及美国一些城市出现的租车公司。这种新的商业模式吸 引了消费者,但也引发了关于传统汽车行业的反思。 这些是2020年汽车行业发生的一些重要事件,它们对于汽车行业的发展产生了深远的影响。
总结
我们已经完成了所有必要的安装步骤,也学会了如何启动ChatGLM-6B
进行交互,其实从个人角度来看,该模型已经足够智能,可以完成大部分工作。
常见错误
显存不足
(D:\openai.wiki\ChatGLM-6B\MyENV) D:\openai.wiki\ChatGLM-6B>python web_demo.py Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision. Explicitly passing a `revision` is encouraged when loading a configuration with custom code to ensure no malicious code has been contributed in a newer revision. Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision. Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████| 8/8 [01:39<00:00, 12.43s/it] Traceback (most recent call last): File "D:\openai.wiki\ChatGLM-6B\web_demo.py", line 5, in <module> model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda() File "D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\torch\nn\modules\module.py", line 905, in cuda return self._apply(lambda t: t.cuda(device)) File "D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\torch\nn\modules\module.py", line 797, in _apply module._apply(fn) File "D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\torch\nn\modules\module.py", line 797, in _apply module._apply(fn) File "D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\torch\nn\modules\module.py", line 797, in _apply module._apply(fn) [Previous line repeated 2 more times] File "D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\torch\nn\modules\module.py", line 820, in _apply param_applied = fn(param) File "D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\torch\nn\modules\module.py", line 905, in <lambda> return self._apply(lambda t: t.cuda(device)) torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 32.00 MiB (GPU 0; 11.00 GiB total capacity; 10.24 GiB already allocated; 0 bytes free; 10.25 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
解决方法
修改cli_demo.py和web_demo.py中的第7行,添加显存限定。
原内容
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
修改后
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(8).cuda()
ChatGLMForConditionalGeneration
(D:\openai.wiki\ChatGLM-6B\MyENV) D:\openai.wiki\ChatGLM-6B>python cli_demo.py Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision. Explicitly passing a `revision` is encouraged when loading a configuration with custom code to ensure no malicious code has been contributed in a newer revision. Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision. Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████| 8/8 [00:26<00:00, 3.37s/it] 欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序 用户:AI是什么? Traceback (most recent call last): File "D:\openai.wiki\ChatGLM-6B\cli_demo.py", line 57, in <module> main() File "D:\openai.wiki\ChatGLM-6B\cli_demo.py", line 42, in main for response, history in model.stream_chat(tokenizer, query, history=history): File "D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\torch\nn\modules\module.py", line 1614, in __getattr__ raise AttributeError("'{}' object has no attribute '{}'".format( AttributeError: 'ChatGLMForConditionalGeneration' object has no attribute 'stream_chat'
解决方法
下载本站提供的模型文件,覆盖您原本的文件,将会解决该问题。
问一下cpu部署怎么弄
@天体运行 在安装PyTorch的时候选择CPU版本
请问一下,如果服务器上有多张卡,如何指定使用哪张卡?
@tmp 抱歉,知识盲区了,从来没用过一张卡以上,所以还真不清楚。
@tmp CUDA_VISIBLE_DEVICES=1表示只用第二张卡
总报这个是怎么回事,安装了也报
ImportError: This modeling file requires the following packages that were not found in your environment: icetk. Run `pip install icetk`
@tmp centos7 系统
@tmp 这个错误提示说明你需要在你的环境中安装 icetk 这个包,否则无法导入相关模块。可以尝试在终端中运行
pip install icetk
命令来安装该包。如果要安装在其他目录,那个6b的模型文件的目录要改哪些
@9841 直接改成目录的绝对路径也可以
你好,源网站中没看到cli_demo.py|web_demo.py|web_demo2.py,这三个文件
@Haochen 我刚去看了一遍,明明有啊。
我安装的时候报错了,就是您说的没有安装正确版本的PyTorch和CUDA的错误,我的版本是 NVIDIA CUDA 12.0.149 driver,选择了CUDA 11.8。
@emii 你是在Conda环境里面安装的吗?如果是直接安装电脑里,是不行的哦。
所以缺少config.json文件是咋解决呢😂,用的清华源装到一半才看到这帖子
@SeeU 下载我所提供的模型覆盖你自己的文件就好啦
大佬,请问提示缺少config.json该咋解决?清华源装到一半出这个报错😂
Traceback (most recent call last):
File “G:\GLM AI\ChatGLM-6B\web_demo.py”, line 6, in
model = AutoModel.from_pretrained(“.\\model”, trust_remote_code=True).half().quantize(4).cuda()
File “C:\Users\86183\.conda\envs\chatglmEnv\lib\site-packages\transformers\models\auto\auto_factory.py”, line 466, in from_pretrained
return model_class.from_pretrained(
File “C:\Users\86183\.conda\envs\chatglmEnv\lib\site-packages\transformers\modeling_utils.py”, line 2646, in from_pretrained
) = cls._load_pretrained_model(
File “C:\Users\86183\.conda\envs\chatglmEnv\lib\site-packages\transformers\modeling_utils.py”, line 3019, in _load_pretrained_model
raise RuntimeError(f”Error(s) in loading state_dict for {model.__class__.__name__}:\n\t{error_msg}”)
RuntimeError: Error(s) in loading state_dict for ChatGLMForConditionalGeneration:
size mismatch for transformer.word_embeddings.weight: copying a param with shape torch.Size([150528, 4096]) from checkpoint, the shape in current model is torch.Size([130528, 4096]).
You may consider adding `ignore_mismatched_sizes=True` in the model `from_pretrained` method.
请问这个咋办呀
@chiya 不应该啊,这个错误提示显示在加载预训练模型时出现了形状不匹配的问题,可能是因为预训练模型的权重参数形状与当前模型不匹配。您可以尝试在from_pretrained()方法中添加ignore_mismatched_sizes=True参数来忽略形状不匹配的问题。
model = AutoModel.from_pretrained(".\\model", trust_remote_code=True, ignore_mismatched_sizes=True).half().quantize(4).cuda()
这样,模型在加载预训练模型时就会忽略形状不匹配的问题,但是这样可能会导致模型性能下降。
按道理来说这种问题应该是不会出现的,建议重新看教程再布置一遍,或者下载本站所提供的模型,然后将直接解压到项目目录,不要自己改动和模型相关的任何东西。
@chiya 可以调整config.json文件中参数130528为150528
ChatGLM-6B-INT4已经部署成功,这个过程中学到了不少知识,谢谢大神这么详尽的教程。
@lucky 不客气哈,感谢支持。
错误如下:
Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision.
Traceback (most recent call last):
File “D:\openai.wiki\ChatGLM-6B\cli_demo.py”, line 6, in
tokenizer = AutoTokenizer.from_pretrained(“THUDM/chatglm-6b”, trust_remote_code=True)
File “C:\Users\admin\AppData\Local\Programs\Python\Python39\lib\site-packages\transformers\models\auto\tokenization_auto.py”, line 642, in from_pretrained
tokenizer_class = get_class_from_dynamic_module(
File “C:\Users\admin\AppData\Local\Programs\Python\Python39\lib\site-packages\transformers\dynamic_module_utils.py”, line 363, in get_class_from_dynamic_module
final_module = get_cached_module_file(
File “C:\Users\admin\AppData\Local\Programs\Python\Python39\lib\site-packages\transformers\dynamic_module_utils.py”, line 237, in get_cached_module_file
modules_needed = check_imports(resolved_module_file)
File “C:\Users\admin\AppData\Local\Programs\Python\Python39\lib\site-packages\transformers\dynamic_module_utils.py”, line 134, in check_imports
raise ImportError(
ImportError: This modeling file requires the following packages that were not found in your environment: icetk. Run `pip install icetk`
@Q 先执行一下
pip install icetk
试试执行python cli_demo.py
提示
Traceback (most recent call last):
File “D:\openai.wiki\ChatGLM-6B\cli_demo.py”, line 4, in
from transformers import AutoTokenizer, AutoModel
ModuleNotFoundError: No module named ‘transformers’
另外,那个CUDA 我选11.7才安装成功
@一步步复制 关于CUDA的版本,要根据自己的显卡型号来确定哈。
Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision.
Traceback (most recent call last):
File “D:\openai.wiki\ChatGLM-6B\cli_demo.py”, line 6, in
tokenizer = AutoTokenizer.from_pretrained(“THUDM/chatglm-6b”, trust_remote_code=True)
File “D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\transformers\models\auto\tokenization_auto.py”, line 686, in from_pretrained
tokenizer_class = get_class_from_dynamic_module(
File “D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\transformers\dynamic_module_utils.py”, line 388, in get_class_from_dynamic_module
return get_class_in_module(class_name, final_module.replace(“.py”, “”))
File “D:\openai.wiki\ChatGLM-6B\MyENV\lib\site-packages\transformers\dynamic_module_utils.py”, line 157, in get_class_in_module
module = importlib.import_module(module_path)
File “D:\openai.wiki\ChatGLM-6B\MyENV\lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File “”, line 1050, in _gcd_import
File “”, line 1027, in _find_and_load
File “”, line 992, in _find_and_load_unlocked
File “”, line 241, in _call_with_frames_removed
File “”, line 1050, in _gcd_import
File “”, line 1027, in _find_and_load
File “”, line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named ‘transformers_modules.THUDM/chatglm-6b’
求助求助
@aizy 补充:用cli运行的
@aizy 初步来看,是transform的版本不对造成的。
@aizy 从错误信息来看,问题出在试图加载模型时找不到对应的模块。
大概率是模型路径问题,检查一下路径是否正确。
File “C:\Users\zhoux\miniconda3\lib\site-packages\transformers\utils\hub.py”, line 380, in cached_file
raise EnvironmentError(
OSError: D:\openai.wiki\ChatGLM-6B does not appear to have a file named config.json. Checkout ‘https://huggingface.co/D:\openai.wiki\ChatGLM-6B/None’ for available files.启动不了出错帮看一下怎么回事都按一步步来的
@落夜秦雨 好像是模型问题,找不到config.json。
@PhiltreX 弄好了现在出现cli_demo启动时提示AttributeError: module ‘collections’ has no attribute ‘Callable’怎么回事而web_demo跟web_demo2启动就没问题正常使用
@落夜秦雨 这通常是由于 Python 版本过低导致的,因为 collections.Callable 是在 Python 3.3 版本中引入的。
你的Python是什么版本啊?
@PhiltreX 我的python是3.109 64-bit
@落夜秦雨 哦我升级一下版本
@落夜秦雨 可是你这个报错是Python的版本问题,重新部署一下吧。
@PhiltreX The following packages will be DOWNGRADED:
pytorch 2.0.1-py3.11_cuda11.7_cudnn8_0 –> 2.0.1-py3.11_cuda11.8_cudnn8_0
torchaudio 2.0.2-py311_cu117 –> 2.0.2-py311_cu118
torchvision 0.15.2-py311_cu117 –> 0.15.2-py311_cu118
安装自动选择版本
CUDA版本错了重新安装试试
Could not find module ‘nvcuda.dll’ (or one of its dependencies). Try using the full path with constructor syntax.是为啥呀
@yiyi 是不是没安装CUDA啊
能在linux系统里部署吗
@飞跃 乌班图理论上可以
重新部署后出现这个问题了请问该怎么操作(D:\openai.wiki\ChatGLM-6B\MyENV) D:\openai.wiki\ChatGLM-6B>python cli_demo.py
Traceback (most recent call last):
File “D:\openai.wiki\ChatGLM-6B\cli_demo.py”, line 5, in
import readline
ModuleNotFoundError: No module named ‘readline’
@落夜秦雨 安装pyreadline模块。在命令行中运行以下命令:pip install pyreadline。这个模块是readline模块的一个替代品,可以在 Windows 上使用。
@PhiltreX 清华这个开源问题很多啊除了第一次部署网页版能用,后面起码3-4次重新部署都不成功总有新问题出现
@落夜秦雨 不太理解,第一次能用了,为什么后面还要重新部署呢。
TypeError:不能直接创建描述符。如果此调用来自_pb2.py文件,则您生成的代码已过期,必须使用protoc>=3.19.0重新生成。如果你不能立即再生你的质子,其他一些可能的解决办法是:1。将protobuf软件包降级至3.20.x或更低。2.设置PROTOCOL_BUFFERS_PYTHON_ECTION=PYTHON(但这将使用纯PYTHON解析,速度会慢得多)。更多信息:https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-更新,老大怎么弄protobuf删除不了也降级不了,安装低版本提示没有包
@落夜秦雨 这个错误提示说明你的代码生成工具 protoc 版本过低,不能正确处理你的 .proto 文件。你需要升级 protoc 版本,或者降级 protobuf 软件包来解决这个问题。
如果你遇到了无法删除或降级 protobuf 软件包的问题,可以尝试以下方法:
使用 pip install –force-reinstall protobuf==3.20 命令来强制重新安装 protobuf 软件包。这可能会覆盖之前安装的版本,解决依赖问题。
如果你不能立即升级或降级 protobuf 软件包,可以尝试设置环境变量 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python 来使用纯 Python 解析器,这可能会导致性能下降,但是可以暂时解决问题。
另外,你可以尝试手动下载和安装 protobuf 3.20 软件包。你可以在 protobuf 的官方网站(https://developers.google.com/protocol-buffers)或者 PyPI(https://pypi.org/project/protobuf/)上找到相应的安装包。
无论你选择哪种方法,都需要重新生成你的 .proto 文件来更新你的代码。你可以使用新版本的 protoc 工具来重新生成代码,确保你的代码能够正确地使用最新版本的 protobuf 软件包。
@PhiltreX 谢谢
老大发个一键部署包给我们小白用,我都折腾起码一个礼拜了都以失败告终
@落夜秦雨 一键装包可能存在各种各样的暗病,所以本站一直没有提供。
终于一路顺畅重新部署完毕原来是python版本问题创建Conda虚拟环境时指定python=3.8版本
conda create -p E:\openai.wiki\ChatGLM-6B\MyENV python=3.8
@落夜秦雨 抱歉,忘记写指定版本了,现已修正。
@PhiltreX 我也是看了你的Anaconda|Miniconda|基础命令使用教程里布有创建环境时指定python版本试了一下才成功的,不过最后还会提示pip install pyreadline,pip install icetk这两个模块。也要谢谢你写的这么详细连没基础都能部署
@落夜秦雨 不客气哈,问题解决了就好。
今天部署官方已经量化好的4G大小int4模型时遇到最后提示RuntimeError: Internal: [MASK] is already defined无法启动请问怎么回事怎么解决,int8模型也是无法启动。老大出个教程
@落夜秦雨 关于MASK部分,大概率可能是因为模型的问题引起的,在今天之前有成功运行过吗?还是首次无法启动?
@PhiltreX 按你的教程能跟提供的模型是没问题的能成功运行,就是官方提供的网盘里有chatglm-6b-int4跟chatglm-6b-int8这两个官方量化过的模型就是不成功提示RuntimeError: Internal: [MASK] is already defined。这是清华网盘https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2F&mode=list。这是Hugging Face网站的连接https://huggingface.co/THUDM/chatglm-6b/tree/int4
@落夜秦雨 本想部署官方量化过的模型做个对比,也为后期官方可能的更新做准备
奇怪了第一部署成功时还能识别跟描述图片虽然只能web_demo2浏览器模式运行,后面重新部署怎么就不能识别图片了
@落夜秦雨 更新啦更新啦,别折腾这个了,赶紧去看看新版本。
https://openai.wiki/chatglm2-6b.html
@PhiltreX 哦