ChatGPT 本地部署及搭建
Posted 孟郎郎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ChatGPT 本地部署及搭建相关的知识,希望对你有一定的参考价值。
这篇简要说下清华开源项目 ChatGLM 本地部署的详细教程。清华开源项目 ChatGLM-6B 已发布开源版本,这一项目可以直接部署在本地计算机上做测试,无需联网即可体验与 AI 聊天的乐趣。
项目地址:GitHub - THUDM/ChatGLM-6B: ChatGLM-6B:开源双语对话语言模型 | An Open Bilingual Dialogue Language Model
官网介绍:
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,更多信息请参考我们的博客。
为了方便下游开发者针对自己的应用场景定制模型,我们同时实现了基于 P-Tuning v2 的高效参数微调方法 (使用指南) ,INT4 量化级别下最低只需 7GB 显存即可启动微调。
不过,由于 ChatGLM-6B 的规模较小,目前已知其具有相当多的局限性,如事实性/数学逻辑错误,可能生成有害/有偏见内容,较弱的上下文能力,自我认知混乱,以及对英文指示生成与中文指示完全矛盾的内容。请大家在使用前了解这些问题,以免产生误解。更大的基于 1300 亿参数 GLM-130B 的 ChatGLM 正在内测开发中。
第一步,本地安装 Python
这一步暂略,可以自行下载安装 Python 环境。
Python 下载地址:Download Python | Python.org
注意:安装 >9 以上版本,建议安装 10。
第二步,下载项目程序包
地址见上面的项目地址,直接下载下来并解压。我这里解压到 E:\\chatGPT\\ 下。
第三步,下载模型包 chatglm
下载地址:https://huggingface.co/THUDM/chatglm-6b/tree/main
官网介绍:
ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用了和 ChatGLM 相同的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。
注意:下载后放到第二步程序包下,自行创建目录 chatglm-6b,如下:
第四步,下载依赖包
Window + R 快捷键打开运行窗口,输入 cmd 打开控制台命令行,进入到程序目录下。
分别执行如下两条命令:
pip install -r requirements.txt
pip install gradio
注意:如果执行有报错,请查阅文章末尾的错误处理。
等待依赖包下载成功,结果如下:
第五步,运行网页版 demo
执行如下命令,运行网页版本的 demo,如下:
python web_demo.py
程序会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。最新版 Demo 实现了打字机效果,速度体验大大提升。注意,由于国内 Gradio 的网络访问较为缓慢,启用 demo.queue().launch(share=True, inbrowser=True)
时所有网络会经过 Gradio 服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为 share=False
,如有需要公网访问的需求,可以重新修改为 share=True
启动。
执行结果如下:
注意:如果执行提示信息和上图对不上,请查阅文章末尾的错误处理。
第七步,测试网页版程序
浏览器打开地址 并访问,输入问题,可以看到 ChatGLM 会给予回复。
Very Good!查看电脑性能,感觉 CPU 和内存都要爆掉了 ^ ^
第八步,运行命令行 Demo
执行如下命令,运行命令行版本的 demo,如下:
python cli_demo.py
程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复,输入 clear
可以清空对话历史,输入 stop
终止程序。
错误一:下载依赖包超时
E:\\chatGPT\\ChatGLM-6B-main>pip install -r requirements.txt
Collecting protobuf<3.20.1,>=3.19.5
Downloading protobuf-3.20.0-cp310-cp310-win_amd64.whl (903 kB)
---------------------------------------- 903.8/903.8 kB 4.0 kB/s eta 0:00:00
Collecting transformers==4.27.1
Downloading transformers-4.27.1-py3-none-any.whl (6.7 MB)
----------- ---------------------------- 2.0/6.7 MB 5.4 kB/s eta 0:14:29
ERROR: Exception:
Traceback (most recent call last):
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\urllib3\\response.py", line 438, in _error_catcher
yield
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\urllib3\\response.py", line 561, in read
data = self._fp_read(amt) if not fp_closed else b""
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\urllib3\\response.py", line 527, in _fp_read
return self._fp.read(amt) if amt is not None else self._fp.read()
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\cachecontrol\\filewrapper.py", line 90, in read
data = self.__fp.read(amt)
File "D:\\Python\\Python310\\lib\\http\\client.py", line 465, in read
s = self.fp.read(amt)
File "D:\\Python\\Python310\\lib\\socket.py", line 705, in readinto
return self._sock.recv_into(b)
File "D:\\Python\\Python310\\lib\\ssl.py", line 1274, in recv_into
return self.read(nbytes, buffer)
File "D:\\Python\\Python310\\lib\\ssl.py", line 1130, in read
return self._sslobj.read(len, buffer)
TimeoutError: The read operation timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\cli\\base_command.py", line 160, in exc_logging_wrapper
status = run_func(*args)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\cli\\req_command.py", line 247, in wrapper
return func(self, options, args)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\commands\\install.py", line 419, in run
requirement_set = resolver.resolve(
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\resolver.py", line 92, in resolve
result = self._result = resolver.resolve(
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\resolvelib\\resolvers.py", line 481, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\resolvelib\\resolvers.py", line 348, in resolve
self._add_to_criteria(self.state.criteria, r, parent=None)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\resolvelib\\resolvers.py", line 172, in _add_to_criteria
if not criterion.candidates:
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\resolvelib\\structs.py", line 151, in __bool__
return bool(self._sequence)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\found_candidates.py", line 155, in __bool__
return any(self)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\found_candidates.py", line 143, in <genexpr>
return (c for c in iterator if id(c) not in self._incompatible_ids)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\found_candidates.py", line 47, in _iter_built
candidate = func()
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\factory.py", line 206, in _make_candidate_from_link
self._link_candidate_cache[link] = LinkCandidate(
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\candidates.py", line 297, in __init__
super().__init__(
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\candidates.py", line 162, in __init__
self.dist = self._prepare()
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\candidates.py", line 231, in _prepare
dist = self._prepare_distribution()
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\resolution\\resolvelib\\candidates.py", line 308, in _prepare_distribution
return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\operations\\prepare.py", line 491, in prepare_linked_requirement
return self._prepare_linked_requirement(req, parallel_builds)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\operations\\prepare.py", line 536, in _prepare_linked_requirement
local_file = unpack_url(
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\operations\\prepare.py", line 166, in unpack_url
file = get_http_url(
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\operations\\prepare.py", line 107, in get_http_url
from_path, content_type = download(link, temp_dir.path)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\network\\download.py", line 147, in __call__
for chunk in chunks:
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\cli\\progress_bars.py", line 53, in _rich_progress_bar
for chunk in iterable:
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_internal\\network\\utils.py", line 63, in response_chunks
for chunk in response.raw.stream(
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\urllib3\\response.py", line 622, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\urllib3\\response.py", line 560, in read
with self._error_catcher():
File "D:\\Python\\Python310\\lib\\contextlib.py", line 153, in __exit__
self.gen.throw(typ, value, traceback)
File "D:\\Python\\Python310\\lib\\site-packages\\pip\\_vendor\\urllib3\\response.py", line 443, in _error_catcher
raise ReadTimeoutError(self._pool, None, "Read timed out.")
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
E:\\chatGPT\\ChatGLM-6B-main>
可以看到错误信息提示超时,应该是网络问题,可以尝试在命令中加上超时时间设置的参数,命令修改后如下:
pip --default-timeout=1688 install -r requirements.txt
问题二:又一次实时下载模型包
当运行程序时,如果提示信息中看到又一次下载模型包,而没有使用第三步提前准备的模型包时,需要把模型包复制到程序运行时的缓存目录中,缓存路径可能如下:
C:\\Users\\用户目录\\.cache\\huggingface\\hub\\models--THUDM--chatglm-6b\\snapshots\\fb23542cfe773f89b72a6ff58c3a57895b664a23
模型包拷贝到该目录后再次运行程序即可。
Good Luck!
ChatGPT:chatGPT本地部署运行和接口调用
文章目录
从 github 下载
https://github.com/acheong08/ChatGPT
环境配置
conda 创建虚拟环境
- 我选择用
anaconda
先配一个专属的环境
conda create -n chatgpt python=3.6
# 激活虚拟环境 conda activate 如果不行就用 source activate
conda activate chatgpt
# source activate chatgpt
官方步骤配置环境
- 按照 官方给出的步骤 配置环境
安装 revChatGPT
- 这个过程强烈 建议使用手机开热点下载 不然可能非常慢
# 如果你在 conda 的虚拟环境中执行这步,pip3 可以用 pip 代替
pip3 install revChatGPT --upgrade
# pip install revChatGPT --upgrade
更改 config.json.example -> config.json
将 config.json 移动到 revChatGPT
路径下
cookie 信息写入 config.json
- 个人推荐采用
第二种方式
,因为第一种我运行了多次都是访问错误。因为chatgpt
不对中国大陆提供服务,用邮箱和密码登录的方式很容易被拒绝,但是用session token
的话就没问题了
方式1:使用账号密码作为登录的方法
- 没有 chatGPT 账号的话,先注册一个注册的流程可以参考 一元钱注册 chatGPT账号
- 将自己的账号和密码分别写入
config.json
的字段
方式2: 使用 session_token 作为登录方法
-
打开浏览器,没有 chatGPT 账号的话,先注册一个注册的流程可以参考 一元钱注册 chatGPT账号
-
如果已经注册的话,先登录你的账号:
-
右键,打开检查:
-
Application -> Cookies
-
将
__Secure-next-auth.session-token
中的内容复制到config.json
中的session_token
-
将
config.json
文件中的字段给改成如下形式(Authorization)字段不需要填写:
方式3:使用 Access Token
作为登录方式
- 这种方式只有前两种都失败才使用
- 需要手动刷新 session
- 详细可以 参考:
运行 main.py
- 如果直接运行出现 package 错误的话:
- 改成下面这行,把前面的 revChatGPT 去掉即可
- 运行成功之后的样子
- 在
you
这里输入内容即可,输入内容要两次enter
才会给返回值
通过API 调用
- 官方给出的 开发文档
以上是关于ChatGPT 本地部署及搭建的主要内容,如果未能解决你的问题,请参考以下文章
人工智能AI想要搭建“真本地”的永远免费-真正属于自己的ChatGPT吗?国产开源版 ChatGLM:保姆级上手教程!