【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用

系列篇章💥

No.文章
1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践
2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人
3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用
4【Qwen2部署实战】Ollama上的Qwen2-7B:一键部署大型语言模型指南
5【Qwen2部署实战】llama.cpp:一键部署高效运行Qwen2-7b模型
6【Qwen2部署实战】部署高效AI模型:使用vLLM进行Qwen2-7B模型推理

目录

  • 系列篇章💥
  • 引言
  • 一、环境准备
    • 1、镜像选择
    • 2、环境配置
  • 二、模型下载
    • 1、模型下载脚本示例
  • 三、代码准备
    • 1、FastAPI 应用代码示例
  • 四、API 部署
  • 五、API 测试
    • 1、使用curl调用API
    • 2、使用python的requests库调用API
  • 结语


引言

在人工智能的快速发展中,大型语言模型(LLM)逐渐成为研究和应用的新宠。它们在自然语言处理(NLP)领域的广泛应用,如文本生成、翻译、摘要等任务中展现出了卓越的性能。Qwen2-7B作为其中的一个代表,不仅因其强大的能力受到关注,更因其开源的特性,让广大研究者和开发者能够自由地使用和创新。本文将详细介绍在AutoDL平台上部署Qwen2-7B模型,并利用FastAPI框架创建API服务的全流程。

一、环境准备

首先,我们需要在AutoDL平台租赁一台配备RTX 3090/24G显存的显卡机器。选择适合的镜像,这里我们选择的是PyTorch-2.1.0-3.10(ubuntu20.04)-12.1,这个镜像为我们后续的操作提供了必要的基础环境。
在这里插入图片描述

1、镜像选择

  • PyTorch版本: 2.1.0
  • 操作系统: Ubuntu 22.04
  • CUDA版本: 12.1

2、环境配置

通过JupyterLab访问服务器,并打开终端进行环境配置。使用以下命令更换pip源以加速依赖包的下载:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

这一步是必要的,因为默认的pip源在国外,对于国内用户来说,访问速度较慢,更换为清华大学的镜像源可以显著提高下载速度。

接着,安装所需的依赖包:

pip install fastapi==0.104.1 uvicorn==0.24.0.post1 requests==2.25.1 modelscope==1.11.0 transformers==4.41.0 streamlit==1.24.0 sentencepiece==0.1.99 accelerate==0.24.1 transformers_stream_generator==0.0.4

在这里插入图片描述

这些依赖包含了构建Web服务的FastAPI框架、用于提供服务的Uvicorn ASGI服务器,以及其他与模型加载和运行相关的库。

二、模型下载

利用modelscope库的snapshot_download函数下载Qwen2-7B-Instruct模型
也可以采用git下载 git clone https://www.modelscope.cn/qwen/Qwen2-7B-Instruct.git

1、模型下载脚本示例

import torch
from modelscope import snapshot_download# snapshot_download函数用于下载模型
model_dir = snapshot_download('qwen/Qwen2-7B-Instruct',  # 模型名称cache_dir='/root/autodl-tmp',  # 缓存目录revision='master'  # 版本号
)

在这里插入图片描述

执行该脚本将从modelscope下载Qwen2-7B-Instruct模型,并保存到指定的缓存目录中。
在这里插入图片描述

注意:检查文件大小,确认是否下载完整

三、代码准备

/root/autodl-tmp路径下创建fastapi_Demo.py文件,编写FastAPI应用代码,用于加载模型并提供API服务。

1、FastAPI 应用代码示例

from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
import uvicorn
import json
import datetime
import torch# 设置设备参数
DEVICE = "cuda"  # 使用CUDA
DEVICE_ID = "0"  # CUDA设备ID,如果未设置则为空
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICE  # 组合CUDA设备信息# 清理GPU内存函数
def torch_gc():if torch.cuda.is_available():  # 检查是否可用CUDAwith torch.cuda.device(CUDA_DEVICE):  # 指定CUDA设备torch.cuda.empty_cache()  # 清空CUDA缓存torch.cuda.ipc_collect()  # 收集CUDA内存碎片# 创建FastAPI应用
app = FastAPI()# 处理POST请求的端点
@app.post("/")
async def create_item(request: Request):global model, tokenizer  # 声明全局变量以便在函数内部使用模型和分词器json_post_raw = await request.json()  # 获取POST请求的JSON数据json_post = json.dumps(json_post_raw)  # 将JSON数据转换为字符串json_post_list = json.loads(json_post)  # 将字符串转换为Python对象prompt = json_post_list.get('prompt')  # 获取请求中的提示messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}]# 调用模型进行对话生成input_ids = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)model_inputs = tokenizer([input_ids], return_tensors="pt").to('cuda')generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512)generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]now = datetime.datetime.now()  # 获取当前时间time = now.strftime("%Y-%m-%d %H:%M:%S")  # 格式化时间为字符串# 构建响应JSONanswer = {"response": response,"status": 200,"time": time}# 构建日志信息log = "[" + time + "] " + '", prompt:"' + prompt + '", response:"' + repr(response) + '"'print(log)  # 打印日志torch_gc()  # 执行GPU内存清理return answer  # 返回响应# 主函数入口
if __name__ == '__main__':# 加载预训练的分词器和模型model_name_or_path = '/root/autodl-tmp/qwen/Qwen2-7B-Instruct'tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, use_fast=False)model = AutoModelForCausalLM.from_pretrained(model_name_or_path, device_map="auto", torch_dtype=torch.bfloat16)# 启动FastAPI应用# 用6006端口可以将autodl的端口映射到本地,从而在本地使用apiuvicorn.run(app, host='0.0.0.0', port=6006, workers=1)  # 在指定端口和主机上启动应用	

以上代码首先设置了使用CUDA的设备参数,并定义了一个清理GPU内存的函数torch_gc。然后创建了一个FastAPI应用,并定义了一个处理POST请求的端点,用于接收用户的输入提示,并利用加载的模型生成回答。最后,启动了Uvicorn服务器来运行我们的FastAPI应用。

四、API 部署

通过在终端执行以下命令,启动FastAPI应用:

cd /root/autodl-tmp
python fastapi_Demo.py

执行该命令后,如果一切配置正确,你将看到应用启动成功的日志信息。
在这里插入图片描述

五、API 测试

一旦API服务启动,我们可以通过curl或python的requests库进行测试调用。

1、使用curl调用API

curl -X POST "http://127.0.0.1:6006" \-H 'Content-Type: application/json' \-d '{"prompt": "你好"}'

这条命令通过curl工具向我们的API发送一个POST请求,并附带了一个简单的输入提示“你好”。
在这里插入图片描述

2、使用python的requests库调用API

这段Python脚本定义了一个函数get_completion,它使用requests库向API发送POST请求,并打印出返回的回答。

import requests
import jsondef get_completion(prompt):headers = {'Content-Type': 'application/json'}data = {"prompt": prompt}response = requests.post(url='http://127.0.0.1:6006', headers=headers, data=json.dumps(data))return response.json()['response']response=get_completion('你好')
response

输出:

'你好!很高兴能为你提供帮助。有什么我可以为你做的吗?'

问题:你是谁?

response=get_completion('你是谁?')
response

输出:

'我是阿里云开发的一款超大规模语言模型,我叫通义千问。'

问题:AI大模型是什么?

response=get_completion('AI大模型是什么?')
response

输出:

'AI大模型指的是使用大规模数据和计算资源训练的深度学习模型。这些模型通常包含数以百万计或数以十亿计的参数,可以处理复杂的数据结构和任务,如自然语言处理、图像识别、语音识别等。它们能够从大量数据中学习到通用的表示和规律,并在各种下游任务上取得出色的表现。由于其强大的泛化能力和可扩展性,AI大模型在近年来吸引了广泛的关注和研究。'

问题:通义千问这个名字是什么意思?

response=get_completion('通义千问这个名字是什么意思?')
Response

输出:

'“通义千问”这个名字蕴含了阿里云大模型的几个关键特性。首先,“通义”二字取自“通达明智”,意在表达模型能够帮助用户获得知识、理解概念、解决疑惑,提供智慧和洞察力。同时,“通义”也意味着模型具有广泛适用性和跨领域的通用性,能够理解和回答各种主题的问题。\n\n其次,“千问”代表了模型的强大问答能力。它经过大量训练,能够处理和回应包括但不限于历史、科学、技术、艺术、文化等众多领域内的问题,并且能够持续学习和进化,不断提升其回答问题的质量和准确性。\n\n综上所述,“通义千问”不仅体现了阿里云大模型在知识广度和深度上的优势,也寓意着其致力于为用户提供全面、准确、有启发性的信息和支持。'

结语

通过本文的介绍,我们成功地在AutoDL平台上部署了Qwen2-7B-Instruct模型,并通过FastAPI创建了一个高效的API服务。这不仅展示了开源大模型的强大能力,也为开发者提供了一种快速部署和调用大型语言模型的方法。随着技术的不断进步,我们期待开源大模型在未来能够更加深入地融入到我们的学习和工作中,推动人工智能技术的进一步发展。

在这里插入图片描述
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

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

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

相关文章

电脑恢复技巧:如何在 Windows 10 中恢复删除的文件夹

丢失文件和文件夹是一件非常可怕的事情,尤其是当你不知情的情况下删除它们时。别撒谎。我们知道你也经历过这种情况,而且你也知道我们在说什么! 我们都曾有过这样的经历,而且大多数人很快就会再次经历。在 Windows 中&#xff0c…

从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图)

一、前言 最近想实现AVM拼接,看了不少博客和论文,不过比较愚钝,一直没能很好理解原理,尤其是怎么在实现时把下文式1与式2中Z1和Z2消除的,所以严谨的推导了一下对应的公式,如有不对,水平有限&am…

Qt Group与华为合作开发OpenHarmony版本,打造无缝跨设备操作系统

在华为开发者大会2024上,跨平台软件开发和质量保证工具的领先供应商 Qt Group(Nasdaq, Helsinki: QTCOM)荣幸地宣布成为OpenHarmony生态系统合作伙伴。这是继近几年华为采用Qt开发框架和自动化测试工具Squish的商业许可后,Qt Grou…

Elasticsearch集群部署(下)

目录 上篇:Elasticsearch集群部署(上)-CSDN博客 七. Filebeat 部署 八. 部署Kafka 九. 集群测试 链接:https://pan.baidu.com/s/1AFXSmDdY5xBb7g35ipKoaw?pwdfa9m 提取码:fa9m 七. Filebeat 部署 为什么用 F…

搭建基础库~

前言 项目中会用到工具库、函数库以及一些跟框架绑定的组件,如果这些基础模块每个项目都实现一套,维护起来那真的头大,你说呢😉 搭建流程 准备工作 创建文件夹myLib、安装Git以及pnpm 目录大概就系这样子: myLib ├…

Vue跨域获取ip和ip位置城市等归属地信息

由于端口设置与查询服务器不一致,所以不能直接从ip138网上抓取,只能跨域查询。实现跨域查询,简单的方法是使用jsonp方式,只支持get请求,同时也需要查询的服务器支持jsonp。这时找到了腾讯位置服务。参考文章&#xff0…

Appium Inspector介绍和使用

一、什么是Appium Inspector 官方介绍:Overview - Appium Inspector 检查器的主要目的是提供应用程序页面源代码的检查功能。它主要用于测试自动化开发,但也可用于应用程序开发 - 或者如果只是想查看应用程序的页面源代码! 从本质上讲&…

API Object设计模式

API测试面临的问题 API测试由于编写简单,以及较高的稳定性,许多公司都以不同工具和框架维护API自动化测试。我们基于seldom框架也积累了几千条自动化用例。 •简单的用例 import seldomclass TestRequest(seldom.TestCase):def test_post_method(self…

vue3项目图片压缩+rem+自动重启等plugin使用与打包配置

一、Svg配置 每次引入一张 SVG 图片都需要写一次相对路径,并且对 SVG 图片进行压缩优化也不够方便。 vite-svg-loader插件加载SVG文件作为Vue组件,使用SVGO进行优化。 插件网站https://www.npmjs.com/package/vite-svg-loader 1. 安装 pnpm i vite-svg…

步进电机(STM32+28BYJ-48)

一、简介 步进电动机(stepping motor)把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号,步进电动机前进一步,故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备&…

DOM 中包含哪些重要方法

1. alert 带有指定消息的警告框 alert("hello world"); 2. confirm 带有确定和取消的对话框,点击确定返回 true,点击取消返回 false confirm("你好吗"); 3. prompt 显示一个提示框,允许用户输入文本,点击…

CST电磁仿真创建独特的天线

在日益无线化的世界中,一切都取决于天线,从我们用于医疗保健、工作和娱乐的智能设备到将我们从一个地方带到另一个地方的车辆。它们如此融入我们的日常生活,以至于我们大多数人甚至没有想到它们——即使想到了,我们也会想象屋顶上…

ubnutu20.04-vscode安装leetcode插件流程

1.在vscode插件商城选择安装leetcode 2.安装node.js 官网下载一个版本安装流程: ①tar -xvf node-v14.18.0-linux-x64.tar.xz ①sudo ln -s /app/software/nodejs/bin/npm /usr/local/bin/ ②ln -s /app/software/nodejs/bin/node /usr/local/bin/ 查看版本&…

nginx的LNMP构建+discuz论坛

一、LNMP: L:linux 操作系统 N:nginx前端页面的web服务 P:PHP,是一种开发动态页面的编程语言,解析动态页面,起到中间件的作用(在nginx和数据库的中间),在中…

横截面数据回归

横截面数据回归 一些笔记 观测值一定要比参数值多 p值<0.05,拒绝H0. 参数显著&#xff0c;不能说明模型对 AIC与BIC准则&#xff0c;越小越好的指标值AIC 回归分析一定要进行残差的正态性检验。所有的残差都大于0&#xff0c;小于0&#xff0c;都不正常。残差正常应该是分…

小学校园“闲书”交易平台的设计与实现-计算机毕业设计源码04282

小学校园“闲书”交易平台的设计与实现 摘 要 小学校园“闲书”交易平台是为了解决小学生之间的书籍交流和阅读兴趣培养而设计的。该平台通过使用现代技术手段&#xff0c;如移动应用开发和互联网技术&#xff0c;构建了一个功能齐全的交易平台。平台支持用户注册与登录&#x…

应用于空气和液体抑菌的静态UVC LED抑菌模组-WH-UVC001-VO

WH-UVC001-VO是一款用于空气和液体抑菌的静态UVC LED抑菌模组。适用于带水箱、密闭的腔体结构。可安装于顶部、侧壁及底部&#xff0c;出光面符合IP65的防水要求&#xff0c;即使安装于水箱底部也不用担心漏水。 使用的UVC LED的波长范围为260-280nm&#xff0c;具有优良高效的…

JavaScrip——switch类型

目录 任务描述 相关知识 严格相等 switch语句 编程要求 任务描述 北美五大湖的名称和面积如下&#xff1a; 名称面积(平方公里)Superior82414Huron59600Michigan58016Erie25744Ontario19554 本关任务&#xff1a;根据面积判断湖泊的名字。 相关知识 上一关讲解的是拥…

Java项目:基于SSM框架实现的网上医院预约挂号系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的网上医院预约挂号系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

Linux静态库的制作

Linux操作系统支持的函数库分为&#xff1a; 静态库&#xff0c;libxxx.a&#xff0c;在编译时就将库编译进可执行程序中。 优点&#xff1a;程序的运行环境中不需要外部的函数库。 缺点&#xff1a;可执行程序大 动态库&#xff0c;又称共享库&#xff0c;libxxx.so&a…