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

Qwen3-32B-Chat实战教程:基于FastAPI封装Qwen3 API并添加请求审计日志

Qwen3-32B-Chat实战教程:基于FastAPI封装Qwen3 API并添加请求审计日志

1. 教程概述

本教程将指导您如何基于FastAPI框架封装Qwen3-32B-Chat模型的API服务,并添加请求审计日志功能。通过本教程,您将学会:

  • 如何快速部署Qwen3-32B-Chat私有镜像
  • 使用FastAPI构建RESTful API服务
  • 实现API请求的审计日志记录
  • 优化大模型API服务的性能与稳定性

本教程特别针对RTX 4090D 24GB显存环境优化,采用CUDA 12.4和驱动550.90.07,确保最佳推理性能。

2. 环境准备与快速部署

2.1 硬件与镜像要求

确保您的环境满足以下要求:

  • GPU:RTX 4090D 24GB显存(必须)
  • 内存:≥120GB
  • CPU:10核心以上
  • 系统盘:50GB
  • 数据盘:40GB

2.2 一键启动API服务

使用预置镜像中的启动脚本快速部署:

# 进入工作目录 cd /workspace # 启动API服务 bash start_api.sh

服务启动后,您可以通过以下地址访问:

  • API文档:http://localhost:8001/docs
  • 默认端口:8001

3. FastAPI基础封装

3.1 创建FastAPI应用

首先创建一个基础的FastAPI应用来封装Qwen3模型:

from fastapi import FastAPI from pydantic import BaseModel from transformers import AutoModelForCausalLM, AutoTokenizer app = FastAPI() # 加载模型 model_path = "/workspace/models/Qwen3-32B" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained( model_path, torch_dtype="auto", device_map="auto", trust_remote_code=True ) class ChatRequest(BaseModel): prompt: str max_length: int = 512 temperature: float = 0.7 @app.post("/chat") async def chat_completion(request: ChatRequest): inputs = tokenizer(request.prompt, return_tensors="pt").to("cuda") outputs = model.generate( **inputs, max_length=request.max_length, temperature=request.temperature ) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return {"response": response}

3.2 测试API接口

启动服务后,您可以使用curl测试API:

curl -X POST "http://localhost:8001/chat" \ -H "Content-Type: application/json" \ -d '{"prompt":"你好,介绍一下你自己","max_length":200}'

4. 添加审计日志功能

4.1 实现日志中间件

为API添加请求审计日志功能:

import time from fastapi import Request import logging # 配置日志 logging.basicConfig( filename='api_audit.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) @app.middleware("http") async def audit_log(request: Request, call_next): start_time = time.time() # 记录请求信息 client_ip = request.client.host method = request.method path = request.url.path response = await call_next(request) # 计算处理时间 process_time = time.time() - start_time # 记录审计日志 log_data = { "client_ip": client_ip, "method": method, "path": path, "status_code": response.status_code, "process_time": f"{process_time:.3f}s" } logging.info(f"API请求审计 - {log_data}") return response

4.2 增强的日志记录

在聊天接口中添加详细的请求/响应日志:

@app.post("/chat") async def chat_completion(request: ChatRequest): # 记录请求 logging.info(f"请求内容: {request.prompt[:100]}... (长度:{len(request.prompt)})") inputs = tokenizer(request.prompt, return_tensors="pt").to("cuda") outputs = model.generate( **inputs, max_length=request.max_length, temperature=request.temperature ) response = tokenizer.decode(outputs[0], skip_special_tokens=True) # 记录响应 logging.info(f"响应内容: {response[:100]}... (长度:{len(response)})") return {"response": response}

5. 性能优化与生产部署

5.1 启用批处理支持

修改API以支持批处理请求:

from typing import List class BatchChatRequest(BaseModel): prompts: List[str] max_length: int = 512 temperature: float = 0.7 @app.post("/batch_chat") async def batch_chat_completion(request: BatchChatRequest): inputs = tokenizer(request.prompts, return_tensors="pt", padding=True).to("cuda") outputs = model.generate( **inputs, max_length=request.max_length, temperature=request.temperature ) responses = [tokenizer.decode(output, skip_special_tokens=True) for output in outputs] return {"responses": responses}

5.2 添加速率限制

使用FastAPI的中间件添加API速率限制:

from fastapi.middleware import Middleware from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware from slowapi import Limiter from slowapi.util import get_remote_address limiter = Limiter(key_func=get_remote_address) app.state.limiter = limiter @app.post("/chat") @limiter.limit("10/minute") async def chat_completion(request: ChatRequest): # 原有实现...

5.3 生产环境部署建议

对于生产环境,建议:

  1. 使用NGINX作为反向代理
  2. 配置SSL/TLS加密
  3. 启用Gunicorn或多进程部署
  4. 监控GPU显存使用情况
  5. 定期轮转审计日志

示例Gunicorn启动命令:

gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8001 main:app

6. 总结与进阶建议

通过本教程,您已经学会了:

  1. 如何快速部署Qwen3-32B-Chat私有镜像
  2. 使用FastAPI构建RESTful API服务
  3. 实现API请求的审计日志功能
  4. 进行性能优化和生产部署准备

进阶建议

  • 考虑添加用户认证和授权
  • 实现API密钥管理
  • 添加更详细的性能监控
  • 考虑模型量化以降低显存占用
  • 定期更新模型和依赖库

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

http://www.jsqmd.com/news/508718/

相关文章:

  • ESRGAN实战:如何用Python快速提升模糊图片分辨率(附完整代码)
  • 深耕舞韵育新芽,逐梦新程启芳华——湖南四海舞蹈2025年成果回顾与2026年发展展望 - 企业推荐官【官方】
  • OpenEMS完整指南:掌握开源能源管理系统的实用技巧
  • 基于可信域链式跳转的高级钓鱼攻击分析与防御架构
  • 分支循环语句
  • 2026年混合机厂家实力推荐榜:螺带/三维/二维/W型/锥形混合机,高效搅拌技术解析与选购指南 - 品牌企业推荐师(官方)
  • Phi-3-mini-128k-instruct实战:JavaScript异步编程难题智能解答
  • 从Java全栈开发到前端框架实践:一次真实的面试对话
  • RSL10 dongle 驱动识别不到
  • Qwen-Ranker Pro实战教程:结合Milvus/FAISS向量库构建完整RAG
  • 函数式组件 vs 有状态组件:何时使用更高效?
  • 新车提车只靠自己检查,能不能发现新车问题? - 企业推荐官【官方】
  • (119页PPT)年终绩效考核与激励性薪酬设计(附下载方式)
  • ISO 26262实战:用Python自动化生成HARA报告(附ASIL计算工具)
  • 利用CoPaw构建智能内容审核系统:识别违规与敏感信息
  • 统计学入门:样本与总体分布的那些事儿 - 从Z分数到概率的通俗解读
  • 抖音直播数据抓取完整指南:从零开始构建实时监控系统
  • 奋进前行、智创未来,VCAM走进长沙带您感受另一番生意盎然 - 品牌企业推荐师(官方)
  • 基于EtherCAT协议的FPGA与ET1100通信Verilog源码实现及从站方案
  • 零基础小白也能玩转SD3.5!保姆级ComfyUI部署教程来了
  • 广州三维动画制作|企业展会宣传片拍摄,2026黄金档期抢先锁定 - 企业推荐官【官方】
  • Flux.1-Dev深海幻境模型数据库集成:使用MySQL管理海量生成结果与元数据
  • 瑜伽博主内容增产利器:雯雯的后宫Z-Image-瑜伽女孩批量生成配图实战案例
  • Vue动态高度展开收起组件:平滑过渡与自适应布局实战
  • 闭区间套定理可视化教程:用Python动态演示收敛过程
  • 神经符号AI:开启科学发现的“可解释”新范式
  • 仿muduo库的Tcp服务器以及其应用层Http协议支持
  • Qwen3-32B-Chat效果对比:不同batch_size下RTX4090D吞吐量与延迟变化曲线
  • VCAM不负众望,闪耀东莞一步步研讨会! - 品牌企业推荐师(官方)
  • 【BKA回归预测】黑翅鸢算法BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量回归预测(多输入单输出)【含Matlab源码 15200期】