|
|
8e363d201e
|
更新rmbg路由前缀为/api/v1/tools/rmbg
|
2026-01-03 04:18:22 +08:00 |
|
|
|
207731fd1e
|
更新rmbg路由前缀为/tools/rmbg
|
2026-01-02 20:04:16 +08:00 |
|
|
|
46c2265ab0
|
rmbg增加免费端点/file/free
|
2025-12-20 12:06:36 +00:00 |
|
|
|
0cffb65490
|
fix: 修复GPU内存泄漏问题 - 使用专门的CUDA线程执行CUDA操作
问题根源:
- PyTorch的CUDA操作不是线程安全的,在ThreadPoolExecutor中使用run_in_executor执行CUDA操作会导致内存泄漏
- 即使设置了设备上下文,多线程CUDA上下文混乱仍会导致内存无法正确释放
解决方案:
1. 为每个GPU创建专门的CUDA执行线程,完全避免在ThreadPoolExecutor中执行CUDA操作
2. 分离CUDA执行器和IO执行器:
- io_executor: 用于IO操作(保存文件、打开图片等)
- 专门的CUDA线程: 用于所有CUDA操作
3. 使用call_soon_threadsafe在线程和asyncio之间正确传递结果
技术细节:
- 每个GPU有独立的CUDA线程,确保CUDA上下文隔离
- CUDA操作通过队列传递到专门的线程执行
- 符合PyTorch官方文档和社区最佳实践
效果:
- 第一次运行GPU内存正常增加(模型加载)
- 后续多次运行GPU内存不再持续增加
- 内存泄漏问题已完全解决
参考:
- PyTorch GitHub issue #44156
- NVIDIA官方多线程CUDA最佳实践
|
2025-12-17 19:11:07 +00:00 |
|
|
|
57bfa17ac7
|
refactor: 实现严格的流水线式方案,每GPU独立worker处理队列
- 架构重构:为每个GPU启动独立的队列处理worker,避免worker间竞争
- 单卡batch收集:每个worker只收集batch_size个请求,不再乘以GPU数量
- 设备绑定:每个worker固定绑定自己的model和device,不再轮询调度
- 处理逻辑:直接使用worker的model/device进行批处理,移除多GPU拆分逻辑
- 降级处理:OOM时使用当前worker的model/device进行单张处理
- 资源管理:更新cleanup方法,正确停止所有worker任务
- API更新:修复已弃用的PYTORCH_CUDA_ALLOC_CONF和torch_dtype参数
优势:
- 避免worker之间竞争和批次冲突
- 资源隔离,每个worker只使用自己的GPU
- 负载均衡,多worker并行处理提高吞吐量
- 易于扩展,GPU数量变化时自动调整worker数量
|
2025-12-16 16:39:33 +00:00 |
|
|
|
0757566f0e
|
引入 num_devices 缓存在模型加载时一次性确定 GPU 数量,并基于该值直接计算全局批大小(移除原先批次大小额外 ×2 的隐式放大逻辑,由配置与设备数共同控制整体批规模)。
|
2025-12-16 14:25:53 +00:00 |
|
|
|
fbcb614c73
|
feat(rmbg): 统一全局 batcher,支持 batch 接口跨用户合批
- 扩展 QueueItem,增加 url_str、batch_index 元信息,便于批量请求结果映射
- 重写 _process_batch_queue_items,直接对统一队列做 GPU 批推理,并行保存图片,减少 IO 阻塞
- 重写 process_batch:下载后将每张图片作为 QueueItem 推入全局队列,从全局 batcher 获取结果并按完成顺序流式返回
- 调整 _collect_batch_items,在高并发场景下允许收集最多 2x batch_size 的任务,提升 GPU 利用率
- 修正批处理流式返回中的 Future 管理逻辑,避免 asyncio.wait 与 dict/set 混用导致的异常
|
2025-12-16 14:07:36 +00:00 |
|
|
|
530e7c8961
|
抠图后更新为保存为png格式,处理速度更快
|
2025-12-15 16:24:44 +00:00 |
|
|
|
cc0198c9b0
|
增加多GPU并发支持
|
2025-12-15 15:59:42 +00:00 |
|
|
|
c5df876f4a
|
更新图片保存位置,增加pyproject.toml
|
2025-12-15 15:44:33 +00:00 |
|
|
|
cd2a6ea74c
|
优化rmbg抠图服务:改用WebP格式减小文件体积并增加超时时间
|
2025-12-07 06:13:23 +08:00 |
|
|
|
46845e5f57
|
fix(rmbg): 修复队列模式下process_image返回类型不一致问题
- 修复remove_background和remove_background_from_file方法中,队列模式返回dict但代码尝试调用save方法的问题
- 在调用处添加类型检查,兼容队列模式(返回dict)和非队列模式(返回Image)
- 修复process_batch降级处理中的相同问题
修复前错误: 'dict' object has no attribute 'save'
|
2025-12-07 05:34:33 +08:00 |
|
|
|
409802d5d7
|
删除rmbg调试日志
|
2025-12-07 03:36:31 +08:00 |
|
|
|
696a48fedb
|
重构rmbg为完全本地版离线模式
|
2025-12-07 03:12:11 +08:00 |
|
|
|
b0e889f839
|
重构rmbg为流水线模式
|
2025-11-24 00:49:12 +08:00 |
|
|
|
7f03cc24e3
|
fix(rmbg): 将 on_event 迁移到 lifespan 事件处理器以消除弃用警告
|
2025-11-23 16:33:12 +08:00 |
|
|
|
0e1a99d975
|
优化GPU推理性能:复用转换器并减少不必要的显存清理
- 复用 ToPILImage() 转换器,避免循环中重复创建对象
- 移除批处理前不必要的显存清理(批处理会重用显存)
- 移除批处理后的 gc.collect(),减少阻塞开销
- 保留单张处理的 gc.collect(),确保及时释放内存
预期性能提升:3-8%
|
2025-11-23 16:22:31 +08:00 |
|
|
|
9e259e7344
|
优化rmbg服务的保存图片逻辑,提高效率
|
2025-11-23 15:57:42 +08:00 |
|
|
|
cecd617104
|
feat(rmbg): 添加批处理性能统计功能
- 记录下载图片、GPU推理、保存图片各阶段的耗时
- 输出详细的性能统计信息,包括:
* 图片总数、成功/失败数量
* 批处理次数和每批图片数
* 各阶段耗时及占比
* 总耗时、平均每张耗时、每批平均耗时
- 使用统一的日志格式输出统计信息
|
2025-11-23 15:48:33 +08:00 |
|
|
|
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 |
|
|
|
5552b30958
|
优化rmbg,删除未使用的变量
|
2025-11-23 05:14:25 +08:00 |
|
|
|
10fb6084f5
|
优化rmbg并发逻辑,实测并发生效
|
2025-11-23 04:58:58 +08:00 |
|
|
|
474ce6f5db
|
重构rmbg支持异步并发任务
|
2025-11-23 03:23:44 +08:00 |
|
|
|
ba4a57849d
|
feat(rmbg): 添加图片URL返回功能,移除base64字段
- 添加保存图片到jfile/files目录的功能
- 返回结果从image_content改为image_url
- 添加save_dir和download_url配置项
- 大幅减少返回数据大小,提升传输性能
- file和batch接口均支持返回图片URL
|
2025-11-21 01:34:31 +08:00 |
|
|
|
b3818a9ab1
|
feat(rmbg): 将file接口改为流式返回,统一接口风格
- 将file上传接口从一次性返回改为流式返回
- 使用StreamingResponse和NDJSON格式,与batch接口保持一致
- 提升用户体验,减少响应等待时间
- 统一两种接口的返回格式
|
2025-11-21 00:29:34 +08:00 |
|
|
|
f0a434ec2e
|
更新jingrow系统api接口
|
2025-06-27 20:16:13 +08:00 |
|
|
|
5cfae7aafe
|
更新图片中转API地址
|
2025-05-20 19:27:06 +08:00 |
|
|
|
4be051e459
|
japi 微服务版
|
2025-05-12 02:39:56 +08:00 |
|