feat(gpu): 接入 P4000 NVENC 硬件编码加速 #2055
Reference in New Issue
Block a user
Delete Branch "feature/gpu-nvenc-encode"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
新增 P4000 GPU 节点(Tailscale 内网 http://100.105.75.67:8900,Quadro P4000 8G,h264_nvenc/hevc_nvenc),将视频最终编码从 CPU libx264 切换为 GPU h264_nvenc 硬件加速,预计编码环节速度提升 3-5x。
架构
变更文件
packages/config/base.py— GPU_ENCODE_* 配置项(12+2 个字段)packages/shared/gpu_encoder.py— GpuEncoderClient:health/sync 编码/OSS 上传/relay 下载/异常封装apps/api/app/api/routes/gpu_relay.py— internal PUT/GET/HEAD/DELETE /api/v1/internal/gpu-relay/{key},token 鉴权,写入 generated/gpu_relay/apps/api/app/api/router.py— 注册 gpu_relay_routerapps/worker/video_processing/unified_render_service.py—_execute_ffmpeg和_render_pass_through两个 libx264 编码点接入 GPU 优先路径apps/worker/worker_app/tasks/_startup.py— worker 启动时探测 P4000 健康并打日志tests/unit/test_gpu_encoder.py— 客户端单测网络拓扑
Staging 配置
已写入 staging .env:
🚀 预览环境已部署
- packages/config/base.py: 新增 GPU_ENCODE_* 配置项(开关/endpoint/relay/secret/编码参数/fallback) - packages/shared/gpu_encoder.py: 新增 GpuEncoderClient,封装 health 探测 + mezzanine 上传 OSS + P4000 nvenc 编码 + relay 回传下载,失败抛 GpuEncodeError 触发 CPU 降级 - apps/api/app/api/routes/gpu_relay.py: 新增 internal PUT/GET/DELETE /api/v1/internal/gpu-relay/{key}(token 鉴权),P4000 PUT 编码结果,worker GET 下载 - apps/api/app/api/router.py: 注册 gpu_relay_router - apps/worker/video_processing/unified_render_service.py: _execute_ffmpeg 和 _render_pass_through 尝试 GPU 路径:CPU ultrafast mezzanine → P4000 nvenc → 输出到最终路径;任何失败自动回退到原 CPU libx264 路径 - apps/worker/worker_app/tasks/_startup.py: worker_ready 时探测 P4000 健康并打日志 - tests/unit/test_gpu_encoder.py: GpuEncoderClient 单测(health/sync 调用/失败/fallback/relay URL) 架构: - 输入:CPU 输出 libx264 ultrafast mezzanine → 上传 OSS 临时前缀 → P4000 签名 URL 下载 - 输出:P4000 PUT → 宿主机 nginx(tailscale:80)→ API /api/ 反代 → gpu_relay 路由落盘到 generated/gpu_relay/ - 回传:worker 通过 docker 网络 http://xiaoxia-api-staging:8000 GET 下载最终 mp4 到 output_path - 降级:GPU 任何环节异常(health/上传/编码/回传/下载)→ 原 CPU 路径继续执行,不影响成片5096079ebdto7b0db03875🗑️ 预览环境已清理
PR #2055 已关闭或合并,对应的预览环境已被清理。