japi/apps/rmbg/app.py
jingrow 4a906d87fb feat: 实现批处理队列机制和性能优化
主要改进:
1. 实现队列批处理机制(方案B)
   - 添加异步队列收集多个独立请求
   - 后台任务定期批量处理,提升吞吐量5-15倍
   - 支持队列启动/关闭生命周期管理

2. 优化批处理性能
   - 并行保存图片(从串行改为并行)
   - 智能批处理决策(<=batch_size*2时一次性处理)
   - 自动降级机制(显存不足时自动分批处理)

3. 显存优化
   - 实现FP16半精度推理,显存占用减少约50%
   - 优化显存清理策略(批处理前后主动清理)
   - 设置PYTORCH_CUDA_ALLOC_CONF减少碎片化

4. 配置优化
   - 添加队列相关配置(收集间隔、超时等)
   - 调整batch_size默认值为8(适配BiRefNet模型)

性能提升:
- 13张图片处理时间:12秒 → 6.7秒(提升44%)
- GPU利用率:40-60% → 80-95%
- 显存占用:15.5GB → 8GB(FP16模式)
2025-11-23 15:01:43 +08:00

34 lines
727 B
Python

from fastapi import FastAPI
from settings import settings
from api import router, service
app = FastAPI(
title="Remove Background",
description="图片去背景",
version="1.0.0"
)
# 注册路由
app.include_router(router)
@app.on_event("startup")
async def startup_event():
"""应用启动时初始化队列批处理机制"""
if settings.enable_queue_batch:
await service._start_queue_processor()
@app.on_event("shutdown")
async def shutdown_event():
"""应用关闭时清理资源"""
await service.cleanup()
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"app:app",
host=settings.host,
port=settings.port,
reload=settings.debug
)