Retinaface+CurricularFace 人脸识别服务 Kubernetes StatefulSet 部署实战
在将训练好的人脸识别模型投入线上服务时,单机部署往往难以应对流量压力,而普通 Deployment 又面临状态丢失风险。对于 Retinaface+CurricularFace 这类有状态服务,Kubernetes 的 StatefulSet 是更稳妥的选择。本文将介绍如何从零搭建一个高可用、可扩展的人脸识别服务集群。
1. 为什么选择 StatefulSet 部署人脸识别服务?
人脸识别模型服务具有模型文件大、加载时间长、需要持久化存储以及服务发现需稳定等特点。若使用普通的 Deployment,Pod 重启后可能被调度到不同节点,导致存储丢失和网络标识变更。StatefulSet 则提供了稳定的网络标识(如 face-recognition-0)、有序的部署扩展以及每个 Pod 独立的持久化存储。
下图展示了两者在有状态服务场景下的核心区别:
graph TD A[人脸识别服务需求] --> B{选择部署方式}
B --> C[Deployment]
B --> D[StatefulSet]
C --> C1[无状态服务]
C --> C2[Pod 名称随机]
C --> C3[存储随 Pod 删除]
C --> C4[适合 Web 前端]
D --> D1[有状态服务]
D --> D2[Pod 名称固定]
D --> D3[存储持久化]
D --> D4[适合数据库/模型服务]
E[Retinaface+CurricularFace] --> F[模型文件大]
E --> G[加载时间长]
E --> H[需要持久存储]
F --> D
G --> D
H --> D
2. 环境准备与镜像说明
2.1 镜像环境配置
我们使用的镜像已预置完整的推理环境,无需手动安装 PyTorch 或 CUDA。基础配置如下:
- 基础镜像: Ubuntu 20.04
- Python 版本: 3.11.14
- 深度学习框架: PyTorch 2.5.0 + CUDA 12.1
- 算法: Retinaface(检测) + CurricularFace(识别)
- 工作目录: /root/Retinaface_CurricularFace
镜像内包含预训练模型、优化过的推理脚本及完整 Python 环境,开箱即用。
2.2 本地测试验证
部署前建议在本地验证镜像功能,提前发现环境问题。
# 1. 拉取镜像
docker pull your-registry/retinaface-curricularface:latest
# 2. 运行容器并进入
docker run -it --gpus all your-registry/retinaface-curricularface:latest bash
# 3. 激活环境并测试
cd /root/Retinaface_CurricularFace
conda activate torch25
python inference_face.py
正常输出应包含特征提取结果和相似度得分,这验证了 GPU 驱动、CUDA 及模型文件的完整性。
3. Kubernetes StatefulSet 部署配置
3.1 创建命名空间和存储
首先创建独立命名空间,并配置持久化存储以保存日志和临时文件。
# 1-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name:

