【AI落地应用实战】DAMODEL深度学习平台部署+本地调用ChatGLM-6B解决方案
ChatGLM-6B是由清华大学和智谱AI开源的一款对话语言模型,基于 General Language Model (GLM)架构,具有 62亿参数。该模型凭借其强大的语言理解和生成能力、轻量级的参数量以及开源的特性,已经成为在学术界和工业界引起了广泛关注。
本篇将介绍使用DAMODEL深度学习平台部署ChatGLM-6B模型,然后通过Web API的形式使用本地代码调用服务端的模型进行对话。
一、DAMODEL-ChatGLM-6B服务端部署
DAMODEL(丹摩智算)是专为AI打造的智算云,致力于提供丰富的算力资源与基础设施助力AI应用的开发、训练、部署。目前给新用户提供了近100小时的免费4090算力可供使用。
1.1、实例创建
首先进入DAMODEL控制台,点击资源-GPU云实例,点击创建实例:

进入创建页面后,首先在实例配置中首先选择付费类型为按量付费,其次选择单卡启动,然后选择需求的GPU型号,本次实验可以选择选择:按量付费–GPU数量1–NVIDIA-GeForc-RTX-4090,该配置为60GB内存,24GB的显存。

继续往下翻,配置数据硬盘的大小,每个实例默认附带了50GB的数据硬盘,本次创建可以就选择默认大小50GB,可以看到,平台提供了一些基础镜像供快速启动,镜像中安装了对应的基础环境和框架,这里选择PyTorch1.13.1的框架启动,也可以选择PyTorch2.1.2版本启动。

点击创建密钥对,输入自定义的名称,创建好密钥对后,选择刚刚创建好的密钥对,并点击立即创建,等待一段时间后即可启动成功!

1.2、模型准备
启动环境后,打开终端,用git 克隆https://github.com/THUDM/ChatGLM-6B.git项目,若遇到github连接超时,可以选择离线下载并上传到项目中。
cd /home/aistudio/work/
git clone https://github.com/THUDM/ChatGLM-6B.git
成功克隆项目后,会显示如下文件夹:

其次cd进入该文件夹,使用pip安装项目依赖:pip install -r requirements.txt,可以看到DAMODEL平台环境依赖的下载安装速度可以达到18MB/s以上,非常迅速,等待片刻显示如下Successfully installed则说明依赖安装完成!

依赖安装成功后,我们需要引入模型文件,比较方便的是,DAMODEL(丹摩智算)提供了数据上传功能,用户有20GB免费存储空间,该空间被挂载到实例的/root/shared-storage目录,跨实例共享。
这里首先点击文件存储,点击上传文件。

然后下载Hugging Face上的ChatGLM-6B预训练模型,也可以进入魔塔社区选择https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files里的所有文件进行下载

然后将下载下来的模型文件及配置进行上传并解压,上传时尽量保持该界面首页显示,等待上传成功后再进行其他操作。

1.3、模型启动
上传好预训练模型及解压后,我们就可以去启动python脚本运行了,ChatGLM-6B提供了cli_demo.py和web_demo.py两个文件来启动模型,第一个是使用命令行进行交互,第二个是使用本机服务器进行网页交互。
由于要使用本地模型启动,所以我们需要把从Hugging Face Hub加载改为本地路径加载,打开cli_demo.py文件,将这两行代码改为从本地文件目录加载预训练模型。

然后在终端输入python cli_demo就可以成功启动模型了,在cli_demo.py中,main函数启动一个无限循环,等待用户输入。用户可以输入文本与模型进行对话,或输入"clear"清空对话历史并清除屏幕,或输入"stop"退出程序。对于正常的对话输入。
启动模型后的效果如下图所示:

也可以在终端输入python web_demo.py,通过Web界面与模型进行交互。

不过由于Jupyter的限制,无法直接打开访问服务器的127.0.0.1:7860网页端交互界面,这里可以利用MobaXterm建立ssh隧道,实现远程端口到本机端口的转发。首先打开tunneling,新建SSH通道,填入ssh的相关配置,并将7860通道内容转发到本机,点击start开始转发:


转发成功后,就可以成功在网页与模型进行交互了,效果如下:

二、通过Web API实现本地使用
2.1、启动服务
通过以上步骤,我们成功启动了ChatGLM-6B模型,并可以在服务器的JupyterLab中进行对话,下面我们将其部署为API服务,然后在本地进行使用。
同样ChatGLM-6B模型为我们提供了api.py文件,它实现了一个基于FastAPI框架API服务,其接收一个HTTP POST请求,该请求体包含文本生成所需的参数,如prompt(提示文本)、history(对话历史)、max_length(生成文本的最大长度)、top_p(采样时的累积概率阈值)和temperature(采样时的温度参数,影响生成文本的随机性)。在接收到请求后,该服务使用预训练的模型和分词器(tokenizer)来生成一个响应文本,并更新对话历史。随后生成的响应文本、更新后的对话历史、状态码(固定为200)和当前时间戳被打包成一个JSON对象并返回给客户端。
我们可以直接在终端cd进入ChatGLM-6B文件夹,运行api.py文件:
cd ChatGLM-6B
python api.py
显示如下提示则说明启动成功!

2.2、开放端口
其次需要为本地访问开放对应的端口,首先需要点击访问控制,进入端口开放页面。

然后点击添加端口,输入端口号,并点击确定开放:

点击确认开放端口后,平台会给出访问链接,将其复制以便后续使用

做完以上这些步骤后,服务器端就已经部署好了,接下来测试本地调用效果!
2.3、使用PostMan测试功能
打开PostMan,新建一个Post,将刚刚复制的网址粘贴到url栏,然后在Body中填入相应的内容。

Body示例内容如下:
{ "prompt": "你好,你是谁?", "max_length": 512, "top_p": 0.9, "temperature": 0.7
}
点击send后,显示以下response则说明成功!

2.4、本地代码使用功能
测试完成后,下面开始转到本地开发,以下是一个基础的单轮对话功能示例代码:
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部署好的模型进行交互。对于正常的对话输入,程序将用户的输入作为prompt,连同当前的对话历史记录conversation_history、最大生成长度max_length、top_p和temperature等参数一起发送到指定的API URL。然后,它检查API的响应状态码。如果状态码为200,表示请求成功,程序将打印出API返回的响应内容和更新后的对话历史记录,并更新conversation_history列表。
以下是一个多轮对话的示例代码:
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":breakif query.strip() == "clear":history = []os.system(clear_command)print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")continueprompt = querydata = { "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)
运行的效果如下:

除了常规的4090显卡和P40显卡,DAMODEL(丹摩智算)上线了H800系列显卡,基于最新Ampere架构,7纳米制程,80GB显存,拥有10240个CUDA核心和320个Tensor核心强势登陆。
# 体验链接:
https://damodel.com/register?source=1D5686A0
# 代金券:
damodelkele
相关文章:
【AI落地应用实战】DAMODEL深度学习平台部署+本地调用ChatGLM-6B解决方案
ChatGLM-6B是由清华大学和智谱AI开源的一款对话语言模型,基于 General Language Model (GLM)架构,具有 62亿参数。该模型凭借其强大的语言理解和生成能力、轻量级的参数量以及开源的特性,已经成为在学术界和工业界引起了广泛关注。 本篇将介…...
英伟达开始引领下一波浪潮:物理AI
这可能会是AI技术形态的一个转折点,大模型的下一个形态,不再是人和模型一轮一轮的即时问答了。 当地时间 7 月 29 日,在美国丹佛举行的第 51 届 SIGGRAPH 计算机图形学会议上,英伟达创始人、CEO 黄仁勋与 Meta 创始人、CEO 马克・扎克伯格进…...
SQLServer设置端口
在SQL Server中设置端口是一个涉及多个步骤的过程,这些步骤旨在确保数据库服务器能够在新指定的端口上安全、高效地运行。以下是对SQL Server设置端口的详细阐述,包括默认端口、更改端口的步骤、验证更改以及相关的安全考虑。 一、SQL Server默认端口 …...
诊断技巧分享 | 用WPS500压力传感器测试空调压力波形?
最近收到咨询,问我们WPS500压力传感器能不能测汽车的空调压力波形?如果可以的话,应该怎么测? 是可以的。WPS500压力传感器的最大测试压力是34.5 bar,匹配对应的管子的接头,可以测试空调的动态波形。 要做这…...
W1R3S靶机全通详细教程
文章目录 w1r3s主机发现主机扫描 端口扫描tcp端口扫描UDP扫描漏洞扫描 攻击面分析FTP渗透匿名登录 web渗透目录爆破 cuppa cms文件包含漏洞getshell提权 w1r3s 引言 近些日子看红笔大佬的靶机精讲视频时,他的一句话让我感受颇深,很多视频在讲解时&…...
GitHub Revert Merge Commit的现象观察和对PR的思考
文章目录 前言Pull Request 为什么会是这样?Pull Request Branch的差异 ?Two Dot Diff和Three Dot Diff 老生常谈: Merge 和 Rebasegit mergegit rebase Revert Main分支中的一个Merge Commit现象描述解决方案: Revert Feature分支中的一个Merge Commi…...
使用JavaFx Fxml笔记
使用JavaFx Fxml实现账号密码登录 HelloApplication.java:package com.example.dr295cmonth7;import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.Scene; i…...
友盟U-APM——优秀的前端性能监控工具
在数字化转型浪潮的推动下,移动应用已成为企业连接用户、驱动业务增长的核心载体。然而,随着应用复杂度的日益提升,用户对于应用性能稳定性的期待也水涨船高。面对应用崩溃、卡顿、加载缓慢等频发问题,如何确保应用的流畅运行,成为产研团队亟待解决的关键挑战。在此背景下,友盟…...
人工智能与机器学习原理精解【10】
文章目录 数值优化基础理论线性模型基本形式特性应用学习算法 向量输入的二次函数的凸性概述二次函数的一般形式凸函数的定义分析二次函数的凸性注意 详细解释向量输入的二次函数的凸性分析一、二次函数的一般形式二、凸函数的定义三、二次函数的Hessian矩阵四、判断二次函数的…...
TypeScript 简介
文档 typeScript官网中文文档:https://www.tslang.cn/index.html中文文档(简洁点):https://typescript.bootcss.comMDN 前言 JavaScript 引入编程社区已有 20 多年,如今已成为有史以来使用最广泛的跨平台语言之一。JavaScript 最初是一种用…...
什么是知识库?为什么我需要一个?
在互联网的历史上,知识库的定义已经多次改变。最初,它是一个术语,用于描述任何比常见关系“数据库”更先进的复杂数据存储系统。 现在,随着 SaaS 的出现,知识库一词有了更多不同的含义。 根据定义,知识库…...
MySQL学习(16):视图
视图是一种虚拟临时表,并不真正存储数据,它的作用就是方便用户查看实际表的内容或者部分内容 1.视图的使用语法 (1)创建 create view 视图名称 as select语句; #视图形成的虚拟表就来自于select语句所查询的实际表,…...
android13关机按钮 去掉长按事件 去掉启动到安全模式 删除关机长按
总纲 android13 rom 开发总纲说明 目录 1.前言 2.界面效果 3.问题分析 4.代码修改 5.编译替换运行 6.彩蛋 1.前言 在Android操作系统中,关机按钮通常具有多种功能,包括短按关机、长按启动语音助手或重启设备等。在某些情况下,用户或设备管理员可能希望自定义关机按…...
递归求数组和
...
MySQL数据库介绍
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、数据库介绍 1、什么是数据库 数据库就是一个存放计算机数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织…...
向量数据库性能测试工具(VectorDBBench.com)性价比排名
排名 向量数据库(不同硬件配置) 价格/性能比 QP$(每百万次查询所花费的价格)中型数据集, OpenAI 无标量过滤 QP$(每百万次查询所花费的价格)中型数据集, OpenAI 低标量过滤 QP$(每百万次查询所花费的价格)中型数据集, OpenAI 高标量过滤 QP$(每百万次查询所花费的价…...
2024年的AI人工智能风口是Python?一篇文章告诉你为什么!
Python是一种面向对象的、解释型的、通用的、开源的脚本编程语言,它之所以非常流行,我认为主要有三点原因: 1.Python 简单易用,学习成本低,看起来非常干净; 2.Python 标准库和第三库众多,功能…...
使用SpringBoot集成CAS、应用场景和示例代码
Spring Boot与CAS集成可以为应用程序提供单点登录(SSO)功能,CAS(Central Authentication Service)是一种单点登录协议,用于通过一个中央认证服务器来进行认证,从而使用户可以通过一次登录访问多…...
python爬取某财富网
点赞的人太多了。我只能修改一下代码… 感觉不对劲啊、 过程: 点击底部的第3页,第5页,网页刷新了,但是顶部的url地址没有变。那么就是 动态加载, 就是 XHR. 直接请求api. 实验代码如下: import requestsheaders {…...
Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析过程)
Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析过程) 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
