【AI提升】如何使用大模型:本机离线和FastAPI服务调用

大模型本身提供的功能,类似于windows中的一个exe小工具,我们可以本机离线调用然后完成具体的功能,但是别的机器需要访问这个exe是不可行的。常见的做法就是用web容器封装起来,提供一个http接口,然后接口在后端调用这个exe来实现需求。同理我们需要一个web容器把大模型封装起来,然后通过API来提供AI服务

这里对比本机离线调用和API服务调用,并通过FastAPI来实现AI的API服务化(LangChain也是通过这些框架提供的API服务)。

一、本机离线调用

看代码:

from transformers import AutoTokenizer, AutoModelMODEL_PATH = 'c:\\ai\\llms\\chatglm3-6b'
TOKENIZER_PATH = 'c:\\ai\\llms\\chatglm3-6b'# 第一步,获取大模型
tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH, trust_remote_code=True)
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True, device_map="auto").eval()
# add .quantize(bits=4, device="cuda").cuda() before .eval() to use int4 model
# must use cuda to load int4 model# 第二步,定义交互过程函数
def chat_handler(query: str):response = model.chat(tokenizer,query,history=None,top_p=1,max_new_tokens=1024,temperature=0.1)print(response, end="", flush=True)# 第三步,实际交互
chat_handler('who are you')

实际调用过程是比较简单的,从大模型指定路径加载大模型,然后就可以通过调用chat实现交互。

看结果:

二、通过FastAPI来封装API服务

OpenAI提供了一个很好的接口规范,其余大模型以及大模型框架在提供接口时都做了类似的兼容处理,包括接口名、传参方式、参数格式等都仿照OpenAI的接口方式,这样可以大幅降低学习成本和模型切换的成本,当你想尝试不同的大模型时不需要做大量的改动。

接下来主要是通过FastAPI来封装我们的AI后台服务器。

2.1 构建服务端

2.1.1 使用工具

这里使用三个工具:

  • FastAPI:FastAPI 是一个快速(高性能)的构建API的Web框架。
  • Uvicorn:Uvicorn 是一款高效的ASGI服务器,主要是为了服务端的高效异步处理。
  • Pydantic:Pydantic 是一款广泛使用的数据校验工具,主要是为了接口参数的规范和校验。

通过使用三个工具,可以快速部署一个后端服务,并且这个服务可以对输入参数进行方便的校验,同时实现高效异步调控

在服务端安装三个工具:

> pip install fastapi uvicorn pydantic

2.1.2 启动服务端的代码

from fastapi import FastAPI
from pydantic import BaseModel
import uvicorn
from transformers import AutoTokenizer, AutoModel, AutoModelForCausalLM# 第一步,加载大模型
model_dir = 'c:\\ai\\llms\\chatglm3-6b'
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModel.from_pretrained(model_dir, device_map="cuda", trust_remote_code=True).eval()# 第二步,创建FastAPI应用实例
app = FastAPI()# 第三步,定义请求类型,与OpenAI API兼容
class ChatCompletionRequest(BaseModel):model: strmessages: listmax_tokens: int = 1024temperature: float = 0.1# 第四步,定义交互函数
def chat_handle(messages: list, max_tokens: int, temperature: float):query = messages[0]["content"]response, history = model.chat(tokenizer,query=query,history=None,top_p=1,max_new_tokens=max_tokens,temperature=temperature)print(response)return response# 第五步,定义路由和处理函数,与OpenAI的API兼容
@app.post("/v1/chat/completions")
async def create_chat_completion(request: ChatCompletionRequest):# 调用自定义的文本生成函数response = chat_handle(request.messages, request.max_tokens, request.temperature)return {"choices": [{"message": {"content": response}}],"model": request.model}# 第六步,启动FastAPI应用,默认端口为8000
if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=9999)

uvicorn.run(app, host="0.0.0.0", port=9999) 这里的host和port注意一下:

  • host="0.0.0.0",表示可以远程访问此服务,host="127.0.0.1",表示只能本地访问。
  • port=9999,默认端口为8000,也可以自定义一个端口。

运行服务:

> python examples/dev_fastapi.py

服务启动输出:

表示服务已经启动。

2.2 客户端调用

2.2.1 通过命令和工具调用

当服务端启动后,可以通过各种客户端工具来调用,比如curl,这里使用postman。

可以看到服务端正确返回了。

查看服务端输出:

2.2.2 通过代码调用

import requests
import json# 定义请求的URL
url = "http://192.168.3.154:9999/v1/chat/completions"# 定义请求头
headers = {'Content-Type': 'application/json'}# 定义请求体
data = {"model": "qwen2-7b","messages": [{"role": "user", "content": "who are you?"}],"max_tokens": 1024,"temperature": 0.5
}
# 将字典转换为JSON格式
data_json = json.dumps(data)# 发送POST请求
response = requests.post(url, headers=headers, data=data_json)# 检查响应状态码
if response.status_code == 200:# 如果响应成功,打印响应内容print(response.json())
else:# 如果响应失败,打印错误信息print(f"Error: {response.status_code}, {response.text}")

运行命令:

> python examples/dev_fastapi_client.py

查看客户端调用结果:

查看服务端输出:

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

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

相关文章

KV260视觉AI套件--PYNQ-DPU-Resnet50

目录 1. 简介 2. 代码解析 3. 全部代码展示 4. 总结 1. 简介 本文以 Resnet50 为例,展示使用 PYNQ 调用 DPU 运行 Resnet50 网络的详细过程,并对其中关键代码做出解释。 PYNQ是一个针对Xilinx Zynq平台的Python开发框架,它允许开发者使…

KEYSIGHT是德科技 E5063A ENA 系列网络分析仪

E5063A ENA 矢量网络分析仪 18GHz 2端口 降低无源射频元器件的测试成本 Keysight E5063A ENA 是一款经济适用的台式矢量网络分析仪,可用于测试简单的无源元器件,例如频率最高达到 18 GHz 的天线、滤波器、电缆或连接器。 作为业界闻名的 ENA 系列…

为什么AI算法工程师要求C++?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「c++的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!能跑出…

VTK- 可视化过程 四种坐标系统

可视化工具包 VTK(Visualization Toolkit),是一种开源的可视化软件系统,主要实现计算机图形学、图像分析、渲染、图像处理等功能。VTK 包含一个 C类库和多个不同语言调用接口层,主要针对2D、3D 图像和可视化用图设计。 VTK设计作为一个工具包,不依赖于特…

学校卫星电子怎么自动校准时间呢

在学校的教室里,卫星电子钟精准地为师生们提供着时间服务,而其自动校准时间的功能令人称奇。那么,学校卫星电子钟是如何实现自动校准时间的呢? 学校卫星电子钟自动校准时间的原理基于卫星导航系统。常见的如北斗卫星导航系统或 GP…

知迪科技惊艳亮相高工智能汽车开发者大会,精彩演讲直击行业痛点、探索未来趋势

6月27-28日,高工智能汽车开发者大会在上海隆重举行,知迪科技受邀携产品与解决方案出席此次大会。 智能汽车已经进入跨域融合新时代。为了进一步降低成本和增强协同,汽车电子架构的设计开始向跨域融合方向演进,并且变革的速度在加快…

java 面试题 - 索引

上脑图,大家要记住!! 看不清,上大图! 这几总结就够用!!

nginx优化和防盗链

1、隐藏版本号 [roottest1 conf]# vim nginx.conf ​ server_tokens off; ​ 2、防盗链 修改用户和所在组 [roottest1 conf]# vim nginx.conf ​ #user nginx nginx; #表示主进程master会有root创建,子进程会有nginx用户来创建。 3、设置页面的缓存时间 主要是…

高考完的假期想学c语言 要注意那些问题?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「c语言的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!其实建议高考完之后好好玩一…

线上问题定位分析宝典——Linux中定位JVM问题常用命令

查询Java进程ID #ps axu | grep java #ps elf | grep java查看机器负载及CPU信息 #top -p 1(进程ID) #top (查看所有进程)获取CPU飙升线程堆栈 1. top -c 找到CPU飙升进程ID; 2. top -Hbp 9702(替换成进程ID) 找到CPU飙升线程ID; 3. $ printf &quo…

Java 7新特性深度解析:提升效率与功能

文章目录 Java 7新特性深度解析:提升效率与功能一、Switch中添加对String类型的支持二、数字字面量的改进三、异常处理(捕获多个异常)四、增强泛型推断五、NIO2.0(AIO)新IO的支持六、SR292与InvokeDynamic七、Path接口…

Transformer拆积木

文章目录 ConceptsEmbeddingEncoderDecoderSelf-Attention matric calculationFinal Linear and Softmax LayerLoss function 参考 学一下已经问鼎中原七年之久的Transformer Concepts 开始拆积木! Embedding Encoder Decoder Self-Attention matric calculati…

【文档+源码+调试讲解】科研经费管理系统

目 录 目 录 摘 要 ABSTRACT 1 绪论 1.1 课题背景 1.2 研究现状 1.3 研究内容 2 系统开发环境 2.1 vue技术 2.2 JAVA技术 2.3 MYSQL数据库 2.4 B/S结构 2.5 SSM框架技术 3 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3 经济可行性 3.1…

虚拟机的网络配置

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️ 每一步都向着梦想靠近,坚持就是胜利的序曲 一 …

俄罗斯ozon运费计算工具,跨境电商ozon物流运费计算工具

OZON平台服装类目卖家而言,如何快速、准确地为产品定价,并有效管理运费成本,直接关系到市场竞争力与利润空间。接下来我们看看俄罗斯ozon运费计算工具,跨境电商ozon物流运费计算工具。 萌啦Ozon定价工具:智能模拟&…

Cesium----加载SuperMap的S3M地形

在原生Cesium中加载S3M地形,需要用到Supermap发布的一个插件:iClient3D-for-WebGL, 在vite vure3,cesium 1.119中进行了实现,注意的点在于需要把SuperMap3D 放置在cesium的Build路径下 然后在代码中直接调用SuperMap3…

windows重装系统

一、下载Ventoy工具,制作启动盘 官网地址:https://www.ventoy.net/cn/download.html 电脑插入用来制作系统盘的U盘,建议大小在8G以上。 双击打开刚解压出来的Ventoy2Disk.exe文件。打开界面如图: 确认U盘,如图&am…

【HICE】基于httpd下的web服务器搭建

1.下载httpd: dnf install httpd -y 2.进入httpd中: cd /etc/httpd cd conf.d 3.编辑一个新的vhost.conf 4.重启httpd服务 systemctl restart httpd 5.关闭防火墙 systemctl stop firewalld setenforce 0 6.文本写入(网页编辑&…

8年经验之谈!自动化测试框架该如何搭建?

前言 最近好多小伙伴都在说接口自动化测试,那么究竟什么是接口自动化测试呢?让我们一起往下看就知道了,首先我们得先弄清楚下面这个问题。 为什么要做(自动化)接口测试? 1、由于现在各个系统的复杂度不断…

准化 | 水系统碳中和标准体系初见成效

2024年5月31日,中华环保联合会发布《团体标准公告 2024年第10号(总第78号)》,批准发布了由中华环保联合会提出并归口的《废水处理温室气体监测技术规程》(T/ACEF 142-2024)、《工业水系统碳排放核算方法与报告指南》(T/ACEF143-20…