首页 > 其他分享 >API服务的快速搭建和测试

API服务的快速搭建和测试

时间:2024-01-02 13:36:48浏览次数:40  
标签:torch json API 测试 DEVICE post history response 搭建


API服务的快速搭建和测试

使用Python的FastAPI迅速搭建一个简单API

from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModel
import uvicorn, json, datetime
import torch

# 设置CUDA设备信息
DEVICE = "cuda"
DEVICE_ID = "0"
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICE

# 清理CUDA缓存的函数
def torch_gc():
    if torch.cuda.is_available():
        with torch.cuda.device(CUDA_DEVICE):
            torch.cuda.empty_cache()
            torch.cuda.ipc_collect()

# 创建FastAPI应用
app = FastAPI()

# 定义POST请求的处理函数
@app.post("/")
async def create_item(request: Request):
    global model, tokenizer

    # 从请求中获取JSON数据
    json_post_raw = await request.json()
    json_post = json.dumps(json_post_raw)
    json_post_list = json.loads(json_post)
    
    # 从JSON数据中提取必要的参数
    prompt = json_post_list.get('prompt')
    history = json_post_list.get('history')
    max_length = json_post_list.get('max_length')
    top_p = json_post_list.get('top_p')
    temperature = json_post_list.get('temperature')
    
    # 调用模型生成聊天响应
    response, history = model.chat(tokenizer,
                                   prompt,
                                   history=history,
                                   max_length=max_length if max_length else 2048,
                                   top_p=top_p if top_p else 0.8,
                                   temperature=temperature if temperature else 0.8)
    
    # 获取当前时间
    now = datetime.datetime.now()
    time = now.strftime("%Y-%m-%d %H:%M:%S")
    
    # 构建响应对象
    answer = {
        "response": response,
        "history": history,
        "status": 200,
        "time": time
    }
    
    # 构建日志信息
    log = "[" + time + "] " + '", prompt:"' + prompt + '", response:"' + repr(response) + '"'
    print(log)
    
    # 调用函数清理CUDA缓存
    torch_gc()
    
    # 返回响应
    return answer

# 主程序入口
if __name__ == '__main__':
    # 加载模型和分词器
    tokenizer = AutoTokenizer.from_pretrained("../base_model/chatglm3-6b", trust_remote_code=True)
    model = AutoModel.from_pretrained("../base_model/chatglm3-6b", trust_remote_code=True).cuda()
    model.eval()
    
    # 启动FastAPI应用
    uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)

使用Python调用API

import requests

# 定义请求URL
url = "http://实际API服务地址:8000"

# 定义请求头
headers = {
    "Content-Type": "application/json"
}

# 定义请求体数据
data = {
    "prompt": "你好",
    "history": []
}

# 发送POST请求
response = requests.post(url, headers=headers, json=data)

# 打印响应
print(response.text)


标签:torch,json,API,测试,DEVICE,post,history,response,搭建
From: https://blog.51cto.com/u_15718612/9068247

相关文章

  • 【C++】STL 容器 - set 集合容器 ③ ( set 集合容器常用 api 简介 | 删除元素 | 删除
    文章目录一、删除元素1、删除指定值的元素-erase函数2、删除指定迭代器位置的元素-erase函数3、删除指定迭代器范围的元素-erase函数4、删除集合中的所有元素-clear函数一、删除元素1、删除指定值的元素-erase函数在C++语言的STL标准模板库中,set集合容......
  • 【C++】STL 容器 - set 集合容器 ② ( set 集合容器常用 api 简介 | 使用迭代器进行正
    文章目录一、set集合容器遍历1、使用迭代器进行正向迭代与反向迭代2、代码示例二、set集合容器插入元素1、插入单个元素-insert函数2、插入多个元素-insert函数3、插入指定迭代器范围的元素-insert函数一、set集合容器遍历1、使用迭代器进行正向迭代与反向迭代std:......
  • 【C++】STL 容器 - list 双向链表容器 ② ( list 常用 api 简介 | 首尾 添加 / 删除
    文章目录一、元素操作1、首尾添加/删除元素2、获取首尾元素二、迭代器遍历容器1、正向迭代与反向迭代2、代码示例一、元素操作1、首尾添加/删除元素list双向链表容器提供了push_back、pop_back、push_front和pop_front等一系列用于操作列表元素的成员函数,函......
  • 【C++】STL 容器 - list 双向链表容器 ③ ( list 常用 api 简介 | 中间位置 插入 / 删
    文章目录一、list双向链表容器的中间位置插入元素1、在指定位置插入1个元素-insert函数2、在指定位置插入n个相同元素-insert函数3、中间位置插入另一个容器的指定范围内的元素-insert函数二、list双向链表容器的中间位置删除元素1、删除容器中所有元素......
  • 【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队
    一、前言性能测试之于软件系统,是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线,系统能力设计工作与性能测试工作,既有先后之顺序,亦有相互之影响。以上,在性能测试的场景决策,架构分析、流量分析、压测实施和剖解调优等主要环节中,引发对于系统能力底盘夯实和测试策......
  • 使用容器快速在阿里云 ECS 多节点上搭建 Citus 12.1 集群
    阿里云ECS机器节点这里我们使用两台同一区域的ECS机器。机器配置:2核2G。(ps:阿里云99元一年的活动)一台安装coordinator(协调器),这里内网IP为172.18.60.11一台安装worker,这里内网IP为172.18.60.12操作系统两台机器分别安装了厂商的AlibabaCloudLinux3系统......
  • 软件测试的八大特性有哪些?
    软件测试是软件开发过程中重要的一环,其目的是发现软件中存在的问题,并提供解决方案。因此,软件测试的八大特性对于保证软件的质量和稳定性至关重要。1、功能性是指软件是否按照需求文档和设计文档正确实现功能,是软件测试最基本的要求。2、性能效率是指软件在不同负载下的响应速度、吞......
  • 单元测试2-gmock及MOCK_METHOD学习
    转自:https://www.cnblogs.com/welkinwalker/archive/2011/11/29/2267225.html,https://www.cnblogs.com/pugang/p/9500352.html1.介绍#include<gmock/gmock.h>#include<string>classFooInterface{public:virtual~FooInterface(){}public:......
  • java基础知识点API之String详解--String基础看它就够了
    一:概述java中的String在java.lang包下,使用时可以直接使用不需要进行导包。字符串在日常使用中非常多,例如之前的变量定义。二:详细说明<1>JDK-帮助文档中对Strng类的介绍<2>字符串常量的创建,字符串常量在创建之后,它们的值不能被更改,但是可以被共享。publicstaticvoidmain(String[......
  • 在Python中,部署API接口通常涉及使用一个Web框架,将你的Python代码转换为可以通过HTTP请
    使用Gunicorn运行Flask应用相对简单。首先,确保已经安装了Gunicorn和Flask(如果还没有安装的话)。步骤:步骤1:安装Gunicornpipinstallgunicorn步骤2:准备你的Flask应用确保你的Flask应用(比如 app.py 文件)已经创建并且可以通过Flask的开发服务器运行。步骤3:使......