丹摩征文活动 | ChatGLM-6B:揭秘6B级模型部署,从0到1的实用指南对比传统方法!
目录ChatGLM-6B:揭秘6B级模型部署,从0到1的实用指南对比传统方法!1 ChatGLM-6B 前世今生2 体验感想3 服务端实例部署4 准备模型5 模型启动6 Web API 实现本地使用7 开放端口8 使用 PostMan 测试9 本地代码使用功能 ChatGLM-6B:揭秘6B级模型部署,从0到1的实用指南对比传统方法! 1 ChatGLM-6B 前世今生 ChatGLM-6B,是
目录
- ChatGLM-6B:揭秘6B级模型部署,从0到1的实用指南对比传统方法!
- 1 ChatGLM-6B 前世今生
- 2 体验感想
- 3 服务端实例部署
- 4 准备模型
- 5 模型启动
- 6 Web API 实现本地使用
- 7 开放端口
- 8 使用 PostMan 测试
- 9 本地代码使用功能
ChatGLM-6B:揭秘6B级模型部署,从0到1的实用指南对比传统方法!
1 ChatGLM-6B 前世今生
ChatGLM-6B,是由清华大学和智谱 AI 共同推出的,它基于先进的General Language Model (GLM)架构,拥有62亿个参数。
这一模型因其卓越的自然语言处理能力和相对轻量的架构设计,在学术界和工业界引发了广泛的兴趣。
2 体验感想
在实际应用中,可以借助DAMODEL深度学习平台,轻松地将ChatGLM-6B模型部署到我们的项目中。
作为一名Java开发者,我可以够通过Web API的方式与这个强大的语言模型进行交互是极具吸引力的,这样不仅实现了高效通信,还使得集成过程变得更加简便和灵活。
DAMODEL平台提供了用户友好的界面和详细的文档指导,这使得部署过程对Java开发者而言相对简单,即使缺乏深度学习的深厚背景,也能顺利完成。完成部署后,我们可以通过配置Web API端点,实现本地Java应用与服务端模型的无缝对接。
在Java项目中,使用HTTP客户端(例如Apache HttpClient或OkHttp)调用这些API,便可以轻松地将自然语言理解和生成能力集成到现有应用中。无论是用于智能客服、文本生成,还是语言翻译,ChatGLM-6B都展现出强大的潜力。
3 服务端实例部署
DAMODEL(丹摩智算)以其对AI需求的精准定位和强大的计算能力,成为了我的首选。这个智算云平台专为人工智能而生,为开发者提供了丰富的计算资源和强大的基础设施支持,使得AI应用的开发、训练和部署变得更加便捷和高效。
(1)登录DAMODEL控制台,导航至资源选项并选择GPU实例。接着,通过点击“创建实例”按钮,开始我的新项目设置。
(2)在设置页面中,首先确定实例的付费模式。对于短期项目,按需付费或按天计费是理想选择;而对于长期使用,订阅月套餐则更为划算。
(3)建议选择按需付费模式,配置1块NVIDIA GeForce RTX 4090 GPU,其配备60GB内存和24GB显存。默认50GB的数据硬盘容量对于入门而言已足够。
(4) 在设置实例时,我会挑选需要的镜像,平台已备好基础镜像以便快速启动。通过勾选框架选项,我可以轻松选择安装已配置好环境的PyTorch 2.4.0镜像。
(5)为了确保安全访问,我会生成一个密钥对。自定义命名后,选择系统自动创建,并将生成的私钥下载到我的电脑,修改后缀为.pem,以便后续进行本地连接。
(6)生成密钥对后,挑选刚刚创建的密钥对,然后点击立即创建。稍等片刻,实例即可成功启动,方便我尽快开始项目开发。
4 准备模型
(1)环境启动完成后,我会打开终端,使用git克隆ChatGLM-6B项目。如果连接GitHub超时,我可以切换到gitcode站点,或者下载代码后离线上传至项目中。这样可以确保项目顺利进行。
cd /home/aistudio/work/
git clone https://github.com/THUDM/ChatGLM-6B.git
# 如果遇见github因为网络问题导致失败,可选择gitcode站点进行下载
# git clone https://gitcode.com/applib/ChatGLM-6B.git
(2)成功克隆项目后,会显示如下文件夹:
(3)进入该文件夹,使用 pip 安装项目依赖:
pip install -r requirements.txt
(4)在DAMODEL平台上,我发现环境依赖的下载和安装速度非常快,竟然能达到每秒18MB以上,效率极高。这让我节省了大量时间,只需稍等片刻,当界面显示“Successfully installed”消息时,就表示所有依赖都已顺利安装完成。
(5)在成功安装依赖后,接下来需要导入模型文件。幸运的是,DAMODEL(丹摩智算)平台为用户提供了数据上传功能,并且赠送了20GB的免费存储空间。这些存储空间会被挂载到实例的/root/shared-storage目录,并且可以在不同实例间共享。首先,用户需要进入文件存储界面,然后选择上传文件。
(6)需要获取ChatGLM-6B的预训练模型。为此,可以访问Hugging Face网站进行下载,操作简单且资源丰富。此外,用户还有另一种选择,就是进入魔塔社区,从Chatglm3-6B项目中挑选所有相关文件进行下载。
(7)随后,将下载的模型文件和配置进行上传并解压。在上传过程中,建议保持当前界面在首页显示,确保上传的顺利完成。待上传成功后,再继续进行其他操作。这种步骤可以避免不必要的错误,确保文件管理高效。
5 模型启动
(1)在成功上传并解压预训练模型后,我们便可以运行Python脚本了。ChatGLM-6B提供了两个重要文件:cli_demo.py
和web_demo.py
。前者用于命令行交互,而后者则支持通过本地服务器进行网页交互。由于需要利用本地模型运行,需要将代码中的Hugging Face Hub加载路径替换为本地路径。
(2)在终端中键入python cli_demo.py
,即可成功启动模型。在cli_demo.py
中,main
函数会启动一个无限循环,等待用户的输入。用户可以键入文本与模型展开对话,也可以输入"clear"来清除对话记录并刷新屏幕,或者输入"stop"来退出程序。
通过这种交互方式,用户可以直接与模型进行自然对话,实现即时的反馈和响应。这种设计使得Java开发人员在测试和调整模型时更加直观,提供了便捷而高效的体验。启动后的交互效果如下图所示,展示了模型的实时对话能力。
(3)在终端输入python web_demo.py
,通过 Web 界面与模型进行交互。
(4)由于Jupyter环境的限制,无法直接访问127.0.0.1:7860的网页交互界面。为解决这个问题,可以使用MobaXterm来建立SSH隧道,以实现远程端口到本地端口的转发。具体步骤是,首先打开MobaXterm的tunneling功能,然后新建一个SSH通道。在配置中输入相关的SSH信息,并将远程的7860端口映射到本地端口。最后,点击“start”按钮开始端口转发。
这种方法允许Java开发者在受限环境下,依然能够顺利访问和调试远程资源,为开发工作增添了极大的便利性。
(5)转发成功后,就可以成功在网页与模型进行交互了。
6 Web API 实现本地使用
(1)ChatGLM-6B模型提供了一个名为api.py
的文件,它基于FastAPI框架构建,能够处理HTTP POST请求。请求体中包含文本生成所需的参数,如提示文本(prompt)、对话历史(history)、生成文本的最大长度(max_length)、累积概率阈值(top_p)和温度参数(temperature),这些参数影响生成文本的内容和随机性。
cd ChatGLM-6B
python api.py
(2)当API接收到请求时,它会利用预训练的模型和分词器生成响应文本,同时更新对话历史。响应的内容,更新后的对话历史,状态码(恒为200),以及当前时间戳会一并被打包成JSON对象返回给客户端。
这种方式极大地简化了与模型的交互,使Java开发人员能够轻松集成和使用生成的文本功能。要运行这个API服务,只需在终端中进入ChatGLM-6B文件夹,并执行api.py
文件即可。
7 开放端口
(1)需要为本地访问配置相应的端口权限。导航到访问控制设置,进入端口配置页面,确保所需端口已开放。
(2)点击添加端口,输入端口号,并点击确定。
(3)点击确认开放端口后,平台会给出访问链接,将其复制以便后续使用。
服务器端就已经部署完成,测试本地调用效果。
8 使用 PostMan 测试
启动Postman,创建一个新的POST请求,将之前复制的URL粘贴到地址栏中。在Body部分,输入所需的请求内容,即可进行接口测试。
9 本地代码使用功能
(1)在测试结束后,我们将切换到本地开发环境。下面提供了一段示例代码,用于实现基础的单轮对话功能。
import requests
import json
# API的URL
# 即刚刚复制的访问链接
api_url = "http://cqbiq6nhri0c73eq3cv0-8000.agent.damodel.com"
data = {
"prompt": "你好,你是谁?",
"max_length": 500,
"top_p": 0.9,
"temperature": 1.0
}
# 发送POST请求
response = requests.post(api_url, json=data)
# 检查响应状态码
if response.status_code == 200:
result = response.json()
print("Response:", result['response'])
print("Updated History:", result['history'])
print("Time:", result['time'])
else:
print("Failed to get response from the API. Status code:", response.status_code)
print(response.text)
(2)在此基础上,我们可以构建一个简单的对话系统,利用ChatGLM-6B模型,通过命令行在本地与已部署的DAMODEL模型进行交互。用户输入的文本会被用作提示词,与当前对话历史conversation_history
、以及诸如最大生成长度max_length
、参数top_p
和temperature
等配置一起发送到特定API的URL。
程序会在发送请求后检查API的响应状态码。如果返回200,即请求成功,则输出API返回的内容,并将更新后的对话历史添加到conversation_history
中。这种方式能够让Java开发者更方便地实现多轮对话功能,快速迭代开发过程。
(3)以下是一段示例代码,演示如何实现多轮对话。与模型进行连续交互时,这段代码能够灵活处理用户输入和模型响应,使得对话更加流畅自然。通过这种结构化的代码,开发者可以更快地在项目中集成和优化对话系统功能,提升用户体验和交互效率。
import requests
import json
api_url = "http://cqbiq6nhri0c73eq3cv0-8000.agent.damodel.com"
conversation_history = []
print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")
while True:
query = input("\n用户:")
if query.strip() == "stop":
break
if query.strip() == "clear":
history = []
os.system(clear_command)
print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")
continue
prompt = query
data = {
"prompt": prompt,
"history": conversation_history,
"max_length": 5000,
"top_p": 0.9,
"temperature": 0.9
}
response = requests.post(api_url, json=data)
if response.status_code == 200:
result = response.json()
print("Response:", result['response'])
print("Updated History:", result['history'])
conversation_history = result['history']
else:
print("Failed to get response from the API. Status code:", response.status_code)
print(response.text)
(4)本地运行的效果。
更多推荐
所有评论(0)