丹摩征文活动 | ChatGLM-6B部署解析:6B级模型如何以1/10成本实现超大规模AI对话能力?
目录一、ChatGLM-6B 背景二、服务端实例部署三、模型准备四、启动模型五、Web API 实现本地使用六、开放端口七、PostMan 测试八、本地代码使用功能九、体验感想 一、ChatGLM-6B 背景 ChatGLM-6B是一款由清华大学与智谱AI联合开发的创新型语言模型。它采用了前沿的通用语言模型(GLM)架构,内含62亿个参数。凭借其在自然语言处理领域的出色表现和优化的架构设计,该模型
目录
- 一、ChatGLM-6B 背景
- 二、服务端实例部署
- 三、模型准备
- 四、启动模型
- 五、Web API 实现本地使用
- 六、开放端口
- 七、PostMan 测试
- 八、本地代码使用功能
- 九、体验感想
一、ChatGLM-6B 背景
ChatGLM-6B是一款由清华大学与智谱AI联合开发的创新型语言模型。它采用了前沿的通用语言模型(GLM)架构,内含62亿个参数。凭借其在自然语言处理领域的出色表现和优化的架构设计,该模型在学术界和工业界都引起了不小的轰动。
ChatGLM-6B的设计充分考虑了用户的需求,不仅提供了高效的处理能力,还保持了相对较低的资源消耗,这对希望在有限硬件上实现复杂语言任务的开发者来说非常有吸引力。其卓越的性能使得它在各种应用场景中表现出色,从智能客服到文本生成,再到复杂的对话系统,ChatGLM-6B都展现了其强大的适应能力。
二、服务端实例部署
作为一名AI工程师,我发现DAMODEL(丹摩智算)云平台是我的理想选择,因为它精准满足了我的AI需求,并具备强大的计算能力。这个平台专为人工智能开发量身打造,提供丰富的计算资源和坚实的基础设施,极大地方便了AI应用的开发、训练和部署流程。
登录到DAMODEL控制台后,我会导航到资源选项,选择GPU实例,然后通过点击“创建实例”按钮,轻松启动我的新项目设置,整个过程简便高效,提升了我的工作效率。
在配置界面,我首先选择实例的付款方式。对于短期项目,按需或按天计费更为灵活,而长期项目则适合选择月度订阅,以节约成本。
建议采用灵活的按需付费方式,选择NVIDIA GeForce RTX 4090 GPU,具备60GB内存和24GB显存。对于初学者来说,50GB的数据硬盘容量已经满足基本需求。
配置实例时,我会选择合适的镜像,平台已提供基础镜像以便于快速启动。通过框架选项,我可轻松选择预装环境的PyTorch 2.4.0镜像。
为确保安全连接,我创建了一个密钥对。通过自定义名称后,让系统生成,并将私钥下载到电脑,改为.pem格式,方便后续本地连接使用。
创建密钥对后,选择刚生成的密钥对并点击立即启动。只需等待片刻,实例便会启动,让我迅速进入项目开发阶段。
三、模型准备
环境启动后,我将打开终端,通过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
项目克隆成功后,你将看到以下目录结构显示在屏幕上。
进入项目目录后,通过 pip 命令安装所需的依赖库。
pip install -r requirements.txt
在DAMODEL平台上,我体验到超快的依赖下载和安装速度,竟超过每秒18MB。这大大节省了我的时间,仅需片刻,当界面显示“Successfully installed”时,所有依赖便已安装完毕。
依赖安装完毕后,需导入模型文件。值得庆幸的是,DAMODEL平台提供数据上传功能,并赠送20GB免费存储。这些空间挂载于实例的/root/shared-storage目录,并允许不同实例共享。用户需先进入文件存储界面,再选择上传文件。
要获取ChatGLM-6B的预训练模型,你可以访问Hugging Face网站进行下载,操作简单且资源丰富。另一个选择是进入魔塔社区,从Chatglm3-6B项目中选择所需文件进行下载,便捷又高效。
接下来,将下载的模型及配置文件上传并解压。建议保持上传界面在前台,以确保上传顺利完成。上传成功后,再进行其他操作。这一流程能有效减少错误,提升文件管理效率。
四、启动模型
成功上传并解压预训练模型后,你即可运行Python脚本。ChatGLM-6B提供了cli_demo.py
和web_demo.py
两个关键文件,分别用于命令行与网页交互。需将代码中的Hugging Face Hub路径替换为本地路径,以便使用本地模型。
在终端中输入python cli_demo.py
即可启动模型。cli_demo.py
中的main
函数进入无限循环,等待用户输入。用户可通过输入文本与模型对话,输入"clear"清除记录并刷新,输入"stop"则可退出程序。
在终端中使用命令python web_demo.py
,可以通过网页界面与模型进行交互。
在Jupyter环境中,直接访问127.0.0.1:7860的网页界面可能受限。通过MobaXterm建立SSH隧道,可以解决这个问题,实现远程端口的本地转发。打开MobaXterm并创建SSH通道,输入必要的SSH信息,将远程7860端口映射至本地,然后点击“start”以启动端口转发。
一旦端口转发设置成功,即可通过网页界面与模型进行交互。
五、Web API 实现本地使用
ChatGLM-6B模型提供了一个名为api.py
的文件,基于FastAPI构建,用于处理HTTP POST请求。请求体包含文本生成所需的参数,如提示文本、对话历史、最大生成长度、累积概率阈值和温度参数等,这些参数会影响生成结果的内容和随机性。
cd ChatGLM-6B
python api.py
当API接收到请求时,它会调用预训练模型和分词器生成回复,并更新对话历史。生成的文本、更新后的对话历史、状态码(总是200)以及时间戳将被封装成JSON对象返回给客户端。
这种方法大大简化了与模型的交互过程,使Java开发人员能够轻松实现文本生成功能的集成。要启动API服务,只需在终端中导航到ChatGLM-6B目录,然后运行api.py
文件即可。
六、开放端口
要实现本地访问,需配置必要的端口权限。在访问控制设置中找到端口配置选项,确保所需端口已经打开。这一步对于顺畅的网络连接至关重要。
选择“添加端口”选项,输入所需的端口号,然后点击确认。这一步确保你的设置更新成功,为服务运行做好准备。
确认端口开放后,系统会生成一个访问链接。请将该链接复制并保存,以备后续使用和访问服务之需。这样能确保快速连接到平台。
服务端的设置已全部完成,可以开始进行本地调用测试。这有助于确保一切功能正常,并提供平稳的用户体验。
七、PostMan 测试
打开Postman,发起新的POST请求,将刚才保存的URL粘贴到地址栏。在Body区域,输入需要的请求数据,从而顺利进行接口测试。这样确保请求能够正常处理。
八、本地代码使用功能
完成测试后,我们会转移到本地开发环境。以下是一段示例代码,演示如何实现简单的单轮对话功能,帮助你快速上手开发。
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)
基于当前进展,我们可以开发一个基础的对话系统,利用ChatGLM-6B模型,通过本地命令行与已安装的DAMODEL模型进行交互。用户输入的文本会作为提示词,结合对话历史conversation_history
、以及配置项如max_length
、top_p
、temperature
等,传送至API的指定URL。
程序在请求发出后,会检查API的响应码。若返回200,表示请求成功,则会输出返回结果,并将更新的对话历史追加到conversation_history
中。这种方法让Java开发者更轻松地实现多轮对话功能,加速开发进程。
以下是一段示例代码,展示如何实现多轮对话。在连续交互中,这段代码能灵活处理用户输入和模型响应,使对话更流畅。通过这种代码结构,开发人员能更快地在项目中整合和优化对话系统,提高用户体验和交互效率。
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)
在本地执行后的成果展示。通过这种方式,可以直观地检验系统运行效果,确保用户体验达到预期目标。
九、体验感想
作为一名AI工程师,我发现使用DAMODEL深度学习平台来部署ChatGLM-6B模型是一个令人兴奋的体验。
这个平台让复杂的模型部署变得异常简单和高效。通过直观的界面和详细的文档,即便在繁忙的项目进度中,也能快速上手并完成部署。与以往手动配置环境相比,DAMODEL极大地减少了部署所需的时间和精力,让我能够将更多的注意力集中在模型优化和业务逻辑上。
DAMODEL提供的Web API功能使得与ChatGLM-6B的交互更加顺畅。通过这些API,我可以简单地将模型功能集成到现有系统中,无需大幅度修改原有架构。这种灵活性不仅提高了开发效率,也为项目的后续扩展提供了方便。
看到ChatGLM-6B在应用中展现出强大的自然语言处理能力,不仅增强了我们的项目功能,也让我对未来AI技术的应用充满期待。总的来说,这是一段非常有价值和富有成效的工程师体验。
更多推荐
所有评论(0)