您的位置:首页 > 健康 > 美食 > 邯郸开发网站有哪些_网站前端设计招聘_济南seo网站排名关键词优化_百度上海总部

邯郸开发网站有哪些_网站前端设计招聘_济南seo网站排名关键词优化_百度上海总部

2025/1/8 7:58:33 来源:https://blog.csdn.net/zxm317122667/article/details/144976152  浏览:    关键词:邯郸开发网站有哪些_网站前端设计招聘_济南seo网站排名关键词优化_百度上海总部
邯郸开发网站有哪些_网站前端设计招聘_济南seo网站排名关键词优化_百度上海总部

97e3723e4257feefb38ca7a6c3e3f49e.jpeg

最近在自己电脑上尝试着部署了下大模型,仅用此篇流水账记录一下。

f7844d18729412270abacf83480ea5b5.gif

环境准备

电脑 是 16寸 Mac M2 Pro,运行时内存是 16 GB。Mac 并没有独立显存,GPU 显存是和系统内存共享。  

模型 选择的是 ChatGLM-6B ,它基本可以说是 10B 以下级别模型中性能最强之一。并且 ChatGLM-6B 有一个强点,就是在中英文切换对话方面表现突出。

语言 选择 Python,使用的是 3.12.2 版本,目前大多数大模型的推理过程都是用 Python 语言实现。conda 版本是 24.4.0,主要用来创建虚拟环境。下载 模型主体使用的是 modelscope,它比使用 git clone 下载模型快很多。

35c6f40d86d2cea0a76aaa9392576f44.gif

大模型资源准备

conda 安装

在 Terminal 中通过如下命令下载并安装 conda

curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
sh Miniconda3-latest-MacOSX-arm64.sh

安装好 conda 之后,就可以在 Terminal 里创建一个虚拟环境了。

conda create -n chatglm3 python=3.12.2

创建好虚拟环境之后,通过如下命令激活创建的环境

conda activate chatglm3

你会在 Terminal 中看到环境由 base 转换为 chatglm3,如下:

acceae46c7b9c3a56327a4ac2d83bf84.png

最后通过 conda 安装开发需要的软件,命令如下

conda install pytorch torchvision torchaudio -c pytorch-nightly

这样基本的开发环境就算是配好了。顺便说下使用 conda 创建虚拟环境的最大好处就是 环境隔离。虚拟环境可以将项目的依赖隔离开来,避免与电脑系统的全局Python环境产生冲突。

下载模型 ChatGLM-6B

通常情况下是可以通过 git 命令来下载模型主体文件的

git clone https://huggingface.co/THUDM/chatglm3-6b

但是上述命令在国内很有可能下载不成功,或者下载很慢。我个人建议使用 ModelScope 下载的。

使用如下命令安装 ModelScope

pip install modelscope -U

然后创建一个 下载模型的 python 文件 model_download.py, 拷贝如下代码

from modelscope import snapshot_download
model_dir = snapshot_download("ZhipuAI/chatglm3-6b", revision = "v1.0.0")

模型默认保存在如下路径:

~/.cache/modelscope/hub/ZhipuAI/ChatGLM3-6B/

b6f5ff2c72bf6268f41aeba5c93d0b8e.gif

把玩大模型

环境配置好,模型也下载好。接下来就可以看下大模型能带来哪些体验了。

大模型聊天

大模型最常用也最简单的使用场景就是搭建一个chatbot。实现很简单,创建 glm_test.py 文件,代码如下:

import os
import platform
from transformers import AutoTokenizer, AutoModelMODEL_PATH = os.environ.get('MODEL_PATH', '大模型下载绝对路径')
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)# 创建 model 实例
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True, device_map="auto", offload_folder="offload").eval()
# 调用 model.chat 方法获取大模型返回的结果
response, history = model.chat(tokenizer, "你好", history=[])print(response)

执行上述代码,结果如下

e2919d2306bad3f4350f623d9fa15aa1.png

可以看到,通过 Transformer 库直接调用 model.chat 方法就能获取大模型的返回结果。

另外,还可以将上下文保存在 history 中,再重新传给大模型。这样大模型就自带记忆功能了。 如下代码:

import os
import platform
from transformers import AutoTokenizer, AutoModelMODEL_PATH = os.environ.get('MODEL_PATH', '大模型的绝对路径')
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).to('mps')response, history = model.chat(tokenizer, "你好", history=[])
print(response)response, history = model.chat(tokenizer, "我的名字叫Jiang", history=history)
response, history = model.chat(tokenizer, "我是谁 ?", history=history)
print(response)

最终执行结果如下:

6b616323325db4a9d6c32103b972ccef.png

简单 Prompt

除了简单的聊天功能之外,基于简单的 Prompt Engineering 可以让大模型提供更高阶点的功能。

实现信息提取

通过 Prompt,大模型可以对一定的信息进行提取,并按照要求返回特定格式。添加如下 Prompt:

import os
import platform
from transformers import AutoTokenizer, AutoModelMODEL_PATH = os.environ.get('MODEL_PATH', '大模型绝对路径')
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).to('mps')content="""ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,
基于 General Language Model (GLM) 架构,具有 62 亿参数。
手机号 18888888888
结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。
ChatGLM-6B 使用了较 ChatGPT 更为高级的技术,针对中文问答和对话进行了优化。
邮箱 123456789@qq.com
经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,
账号:root 密码:123456
62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,更多信息请参考我们的博客。
"""prompt='从上文中,提取"信息"(keyword,content),包括:"手机号"、"邮箱"、"账号"、"密码"等类型的实体,输出json格式内容'input ='{}\n\n{}'.format(content,prompt)
print(input)response, history = model.chat(tokenizer, input, history=[])
print(response)

最终执行结果如下:

44c73e154e62b952cac2217b4c13342f.png

实现 domain 理解

大模型既能做到信息提取,也能够对内容进行一定程度的理解与Mapping。就如同传统 NLU 返回的 Semantic 格式一样,基于大模型也能返回响应的格式,并且大模型的理解能力在传统 NLU 之上。添加如下 Prompt:

import os
import platform
from transformers import AutoTokenizer, AutoModelMODEL_PATH = os.environ.get('MODEL_PATH', '大模型绝对路径')
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).to('mps')content="打开空调"prompt="""
从上文中判断其所属的领域,并返回相应的domain。
所有跟空调相关的都返回domain=AC。比如我说'打开空调', 你就返回domain=AC。所有和车控操作相关的都返回domain=car_control。
比如我说打开车窗,你就返回domain=car_control。
目前你只能返回AC和car_control这2个domain,不要返回其它的domain匹配结果。示例输入:
打开空调。
温度设置为22度。
将座椅加热调到最高。
关闭车窗。
空调风速调至最大。示例输出:
domain=AC
domain=AC
domain=car_control
domain=car_control
domain=AC
"""print(prompt)input ='{}\n\n{}'.format(content,prompt)
response, history = model.chat(tokenizer, input, history=[])print("用户输入:" + content)
print("response: ", response)content="空调风速调高"
response, history = model.chat(tokenizer, input, history=[])
print("用户输入:" + content)
print("response: ", response)content="打开天窗"
response, history = model.chat(tokenizer, input, history=[])
print("用户输入:" + content)
print("response: ", response)

最终执行结果如下:

0441a3a931b51b244c77865fa85767ec.png

可以看出,"打开空调"和"空调风速调高"这两句输入,大模型都返回了相应的 domain 。

注意:针对 "打开天窗" 大模型返回的也是 AC。很明显这是错误的,正确结果应该是 car_control。这就说明,虽然大模型理解力很强,但是还需要配合更加完善的 Prompt Engineering,甚至是 Fine Tuning。才能将大模型的潜力充分发挥。

如果你喜欢本文
长按二维码关注

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com