当前位置: 首页 > news >正文

【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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android Java和Kotlin的目标JVM版本不一致
  • 数据炼金术:在sklearn中进行增量特征合成的秘诀
  • 弱网常见问题
  • 25考研计算机组成原理复习·3.1/3.2 存储器概述/主存储器
  • Hugo 部署与自动更新(Git)
  • c#中Oracle.DataAccess.dll连接数据库的报错处理
  • TiDB系列之:TiCDC同步TiDB数据库数据到Kafka集群Topic
  • Vulnhub靶机-Jangow 1.0.1
  • javaScript中基本数据类型和复杂数据类型数据的存储
  • linux:二进制包安装与源码包安装详解
  • 【计组】第三章和第四章
  • 【考研数学】概率论:4 种方法解答一道题,你觉得哪种方法又快又好呢?
  • postman请求JSON格式,后台@RequestBody实体类接收不到数据
  • 30.x86游戏实战-遍历背包数组
  • Scrapy 爬取旅游景点相关数据(七):利用指纹实现“不重复爬取”
  • ES6指北【2】—— 箭头函数
  • angular2 简述
  • Apache的基本使用
  • Golang-长连接-状态推送
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • react-native 安卓真机环境搭建
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • uni-app项目数字滚动
  • vue 配置sass、scss全局变量
  • vue:响应原理
  • VuePress 静态网站生成
  • 从零搭建Koa2 Server
  • 大主子表关联的性能优化方法
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 悄悄地说一个bug
  • 小程序测试方案初探
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # centos7下FFmpeg环境部署记录
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #1015 : KMP算法
  • #mysql 8.0 踩坑日记
  • (2)STM32单片机上位机
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (7)摄像机和云台
  • (C语言)fgets与fputs函数详解
  • (Java数据结构)ArrayList
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET C# 使用 iText 生成PDF
  • .Net Web项目创建比较不错的参考文章
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径