FastChat 大模型部署推理;Baichuan2-13B-Chat测试、chatglm2-6b测试

参考:
https://github.com/lm-sys/FastChat
https://blog.csdn.net/qq128252/article/details/132759107

##安装
pip3 install "fschat[model_worker,webui]"

模型下载:

##模型下载;huggingface下载慢,可以在modelscope下载:https://modelscope.cn/my/overviewfrom modelscope.models import Model
model = Model.from_pretrained('ZhipuAI/chatglm2-6b', revision='v1.0.9')

1、chatglm2-6b测试

python3 -m fastchat.serve.cli --model-path ./chatglm2-6b --num-gpus 2

在这里插入图片描述

web使用

1)启动控制器

python3 -m fastchat.serve.controller

2)启动模型工作

python3 -m fastchat.serve.model_worker --model-path ./chatglm2-6b --num-gpus 2  --host=0.0.0.0  --port=21002

3)web服务启动

python3 -m fastchat.serve.gradio_web_server

在这里插入图片描述
打开网址查看:
在这里插入图片描述

api服务

1)启动控制器

python3 -m fastchat.serve.controller

2)启动模型工作

python3 -m fastchat.serve.model_worker --model-path ./chatglm2-6b --num-gpus 2  --host=0.0.0.0  --port=21002

3)web服务启动

python3 -m fastchat.serve.api --host 0.0.0.0

4)客户端访问

import requests
import jsonheaders = {"Content-Type": "application/json"}
pload = {"model": "chatglm2-6b","messages": [{"role": "system","content": "AI专家"},{"role": "user","content": "你AI小助手,小名昵称为小乐,你主要擅长是智慧城***过30个字"},{"role": "assistant","content": "好的,小乐很乐意为你服务"},{"role": "user","content": "你能做啥?"}]}
response = requests.post("http://192****:8000/v1/chat/completions", headers=headers, json=pload, stream=True)
print(response.text)

在这里插入图片描述

自己该写自己api、web页面

1)启动控制器

python3 -m fastchat.serve.controller

2)启动模型工作

python3 -m fastchat.serve.model_worker --model-path ./chatglm2-6b --num-gpus 2  --host=0.0.0.0  --port=21002

3)启动 api页面或者web页面
***3-1.api 访问

import requests
import jsonheaders = {"Content-Type": "application/json"}
pload = {"model": "chatglm2-6b","prompt": [["Human","你名字叫****更智慧,让世界更安全"],["Assistant","好的,小杰很乐意为你服务"],["Human","澳门一日游推荐"], ["Assistant", None]],"stop": "###","max_new_tokens": 512,}
response = requests.post("http://192.1***:21002/worker_generate_stream", headers=headers, json=pload, stream=True,timeout=3)
# print(response.text)
for chunk in response.iter_lines(chunk_size=1024,decode_unicode=False, delimiter=b"\0"):if chunk:# print(chunk.decode("utf-8"))data = json.loads(chunk.decode("utf-8"))print(data["text"])# print(data["text"].split(" ")) 

***3-1.web 访问

streamlit run   stream_web.py

stream_web.py

import json
# import torch
import streamlit as st
import requests
# from transformers import AutoModel, AutoTokenizerst.set_page_config(page_title="小*智能")
st.title("小*智能")def get_response(text):headers = {"Content-Type": "application/json"}pload = {"model": "chatglm2-6b","prompt": text,"stop": "###","max_new_tokens": 5000,}print("pload",pload)response = requests.post("http://192****4:21002/worker_generate_stream", headers=headers, json=pload, stream=True)# print(response.text)return responsedef clear_chat_history():del st.session_state.messagesst.session_state.history1 = [st.session_state.history1[0]]  # 保留初始记录def init_chat_history():with st.chat_message("assistant", avatar='🤖'):st.markdown("您好,我是小*智能助手,很高兴为您服务🥰")if "messages" in st.session_state:for message in st.session_state.messages:avatar = '🧑‍💻' if message["role"] == "user" else '🤖'with st.chat_message(message["role"], avatar=avatar):st.markdown(message["content"])else:st.session_state.messages = []return st.session_state.messages# 初始化变量
if 'history1' not in st.session_state:st.session_state.history1 = [["Human","你名字****界更安全"],["Assistant","好的,小杰很乐意为你服务"]]
# 初始化 session_state
if "enter_pressed" not in st.session_state:st.session_state.enter_pressed = Falsedef main():# model, tokenizer = init_model()messages = init_chat_history()print("history1:",st.session_state.history1)if prompt := st.chat_input("Shift + Enter 换行, Enter 发送"):with st.chat_message("user", avatar='🧑‍💻'):st.markdown(prompt)messages.append({"role": "user", "content": prompt})print(f"[user] {prompt}", flush=True)with st.chat_message("assistant", avatar='🤖'):placeholder = st.empty()st.session_state.history1.append(["Human",prompt])st.session_state.history1.append(["Assistant",None])print("history1:",st.session_state.history1)results = get_response(st.session_state.history1)for chunk in results.iter_lines(chunk_size=1024,decode_unicode=False, delimiter=b"\0"):if chunk:# print(chunk.decode("utf-8"))response = json.loads(chunk.decode("utf-8"))["text"]# print(response) placeholder.markdown(response[(len(prompt)+1):])print(prompt,response[(len(prompt)+1):])st.session_state.history1[-1][1] =response[(len(prompt)+1):]messages.append({"role": "assistant", "content": response[(len(prompt)+1):]})print(json.dumps(messages, ensure_ascii=False), flush=True)st.button("清空对话", on_click=clear_chat_history)if __name__ == "__main__":main()

在这里插入图片描述

2、Baichuan2-13B-Chat测试

##运行命令:python3 -m fastchat.serve.cli --model-path ./Baichuan2-13B-Chat --num-gpus 4

在这里插入图片描述

1)ValueError: Tokenizer class BaichuanTokenizer does not exist or is not currently imported. 2)offload报错,ValueError: The current device_map had weights offloaded to the disk. Please provide an offload_folder for them.也需要增加

按照报错信息需要更改:
/site-packages/fastchat/serve/inference.py

增加trust_remote_code=True
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的抽象类(看这篇就够了)

在Java中,抽象类(Abstract Class)是一种不能被实例化的类,它通常用于作为其他类的基类,提供一些通用的行为和结构。以下是关于Java抽象类的一些重要信息: 定义抽象类: 使用 abstract 关键字来定…

安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

执行上下文,js、React、HTML中的this

目录 执行上下文属性:变量对象、this,作用域链 变量对象是与执行上下文相关的数据作用域,存储:变量、函数声明 执行上下文生命周期 创建:生成变量对象、创建函数作用域,建立作用域链、确定this的指向 …

勒索病毒最新变种.mallab勒索病毒来袭,如何恢复受感染的数据?

导言: 在当今数字化时代,.mallab勒索病毒以其险恶的特性和神秘的名称引起了广泛关注。为了更深入了解这种威胁,我们需要揭示.mallab勒索病毒背后的神秘面纱,了解它的运作方式以及预防它的方法。如果受感染的数据确实有恢复的价值…

【python学习第9节笔记,面向对象(继承,封装,多态),zip函数,with语句】

文章目录 一,面向对象(继承,封装,多态)1.1封装1.2继承/派生1.3多态1.3.1纯虚函数 二,zip函数三,with语句 一,面向对象(继承,封装,多态&#xff09…

代码随想录day50:动态规划

123.买卖股票的最佳时期II 规则改成最多买卖两次:即0,1,2次 1.定义dp数组:本题一共有五种状态:初始状态,第一次持有股票,第一次卖出股票,第二次持有股票,第二次卖出股票…

经典文献阅读之--EGO-Planner(无ESDF的四旋翼局部规划器)

0. 简介 作为局部规划器而言,当机器人或无人机想要避开动态障碍物时。局部规划器就显得尤为重要了。其中基于梯度的规划器被广泛用于四旋翼无人机的局部规划,其中欧几里得符号距离场(ESDF)对于评估梯度幅度和方向至关重要。然而&…

ARINC825规范简介

ARINC825规范简介 机载CAN网络通用标准 ARINC825规范全称为机载CAN网络通用标准(The General Standardization of CAN for Airborne Use)。顾名思义,ARINC825规范是建立在CAN物理网络基础上的高层规范。CAN网络使用共享的双绞电缆传输数据&…

电压放大器在无损探伤中的应用研究

电压放大器是一种常见的电子设备,其主要作用是将低电平信号转换为高电平信号。在无损探伤中,电压放大器被广泛应用于信号增益和分析,以便更好地检测表面或内部缺陷。下面安泰电子Aigtek将详细介绍电压放大器在无损探伤中的应用研究。 电压放大…

动态分配的内存位置在哪里?

在C++中,动态分配的内存位于称为堆(Heap)的内存区域。以下是一些关于堆和其他相关内存区域的基本信息: 堆(Heap): 这是一个用于动态内存分配的内存区域。使用new(C++)或malloc(C)等函数从堆中分配内存,并使用delete(C++)或free(C)释放这些内存。堆的大小通常受…

分析训练速度慢

一、分析GPU nvidia-smi二、分析CPU使用率 htop查看cpu96个核的使用率 三、分析磁盘IO apt-get install iotop iotop分析GPU和CPU都没有使用完,瓶颈在磁盘IO。 四、磁盘IO瓶颈解决方法 1、拼成一张图片, 2、多张图内存拼在一起, 3、增大磁…

二、vue2脚手架-组件化开发

| vue中的图片打包后会转换为base64格式 组件的使用 1.创建组件:component文件夹中创建HelloWorld.vue文件 2.在app.vue中引入组件 组件间的通信/传值(常用) 一、prop父传子 1.App.vue中的引入组件中创建需要传递的数据 2.在子组件中接…

车厂造手机旗舰版售价6899,不只是个“车钥匙”

大伙应该发现了这两年的一个奇怪现象:造手机的跑去造车,而车厂又跑来造手机。 这也好解释,毕竟别人碗里的更香、别人老氵…板先挑衅是吧? 昨日,蔚来在其创新科技日活动中正式发布了传闻已久的手机产品 NIO Phone 。 …

掌动智能兼容性测试有哪些优势

兼容性测试为企业带来市场竞争优势,并提高用户满意度。在软件开发过程中,将兼容性测试作为一个重要的环节,将为企业的成功和用户满意度打下坚实的基础。那么,掌动智能兼容性测试的具体优势是什么?下面,就来看看具体介…

Linux下压缩和解压缩

在Linux下,您可以使用多种命令来进行文件和目录的压缩和解压缩操作。以下是一些常见的压缩和解压缩命令: tar:tar命令可用于创建和提取tar压缩文件。例如,要创建一个名为archive.tar的.tar文件,可以使用以下命令&#…

mdobus ASCII转CAN OPEN JAE1939协议网关

Modbus RTU协议转换网关是一种常见的设备,用于将Modbus RTU协议转换为其他通信协议。而CANopen是一种基于CAN总线的通信协议,主要用于工业自动化和控制系统中。本文将介绍Modbus RTU协议转换网关如何支持CANopen协议,以及该功能的应用场景和优…

【1】ElementUI 组件实际应用===》按钮的使用

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。个人B站主页热爱技术的小郑 ,视频内容主要是对应文章的视频讲解形式。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘…

【JAVA EE】详解单点登录

作者简介 目录 1.概述 2.实现方案 2.1.分散鉴权 2.2.集中鉴权 1.概述 SSO,即进行一次认证,然后就可以访问所有子系统。很明显SSO只是一种具象化的目标而已,目前业内为了实现单点登录、统一鉴权,提出了一系列的打法。比如直接…

golang漏洞扫描工具,看看自己项目有没有坑

最近发现 Go 官方自己推出了新的工具,作用是漏洞管理,告诉你已报告的漏洞,并告知你应该如何升级到什么版本。 版本要求是:Go > 1.18 go install golang.org/x/vuln/cmd/govulnchecklatest进入项目目录govulncheck ./...输出如…

vim基本操作

功能: 命令行模式下的文本编辑器。根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。使用方式:vim filename 如果已有该文件,则打开它。 如果没有该文件,则打开个一个新的文件,并命名为filename 模式…