在我最近承接的一个生产级 AI 推理项目中,我们需要在边缘服务器与云端之间部署一个高可用、具备自动扩展能力的深度学习推理平台。客户使用 Debian 11 作为基础操作系统,模型多为 PyTorch 与 TensorFlow 推理模型,访问量具有明显的峰谷波动。通过 Kubernetes +微服务架构统一管理推理任务的容器化部署,并结合自动扩缩容策略,我们最终实现了高效资源利用、低延迟响应与横向扩展能力。A5数据本方案总结了从环境准备、容器化推理镜像、Kubernetes 部署、自动扩缩容、指标采集到硬件与性能评估的完整技术细节。

本文重点面向真实生产环境部署需求,包含具体系统参数、硬件配置、代码示例和评测数据,以便读者在类似场景中快速落地。


项目背景与香港服务器www.a5idc.com硬件配置

在此案例中,我们使用一台边缘推理服务器和一台管理节点作为 Kubernetes 控制平面,其中边缘推理服务器承担主推理负载。整体硬件清单如下:

部件 型号 / 规格 作用说明
CPU Intel Xeon Silver 4210R (10 核 20 线程) 负责容器调度与推理预处理
内存 128 GB DDR4 ECC 支撑多容器并发运行
GPU NVIDIA A40 48 GB AI 推理加速
存储 2×1 TB NVMe SSD RAID1 提供高 I/O 性能
网络 10 GbE 推理请求与内部服务通信
操作系统 Debian GNU/Linux 11 (bullseye) 操作环境

控制节点资源:

部件 型号 / 规格
CPU Intel Xeon Silver 4214 (12 核 24 线程)
内存 64 GB
存储 1 TB NVMe
网络 10 GbE

Debian 11 作为稳定服务器操作系统,在生产环境中广泛使用,同时与 Kubernetes、Docker、NVIDIA 驱动及 GPU 兼容性良好。


环境准备

系统更新与基础依赖

在所有节点上运行:

sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common

安装 NVIDIA 驱动与容器工具

在推理节点上安装 NVIDIA 驱动(以 515 驱动为例):

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt update
sudo apt install -y nvidia-driver-515
sudo reboot

安装 NVIDIA Docker Runtime:

sudo apt install -y nvidia-docker2
sudo systemctl restart docker

验证 GPU 可用:

sudo docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi

安装 Kubernetes

安装 kubeadm, kubelet, kubectl

在所有节点上执行:

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

初始化控制平面(控制节点)

sudo kubeadm init --pod-network-cidr=192.168.0.0/16

初始化完成后,按提示配置 kubectl 访问:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

部署网络插件(Calico):

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

加入工作节点(推理节点)

在控制平面初始化输出信息中会包含 kubeadm join 命令,在推理节点执行即可。


容器化 AI 推理服务

构建推理容器镜像

我们使用 Flask + TorchServe 作为示例推理框架,将深度学习模型打包为容器镜像。

Dockerfile 示例:

FROM python:3.9-slim

RUN apt update && apt install -y git && \
    pip install torch torchvision torchaudio torchserve torch-model-archiver flask

COPY ./model /models
COPY ./serve /serve

WORKDIR /serve

EXPOSE 8080

CMD ["torchserve", "--start", "--models", "my_model=/models/my_model.mar", "--ts-config", "config.properties"]

构建镜像:

docker build -t ai-inference:latest .
docker tag ai-inference:registry.local/ai-inference:latest
docker push registry.local/ai-inference:latest

Kubernetes 部署推理服务

Deployment YAML

ai-inference-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ai-inference
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ai-inference
  template:
    metadata:
      labels:
        app: ai-inference
    spec:
      containers:
      - name: ai-inference
        image: registry.local/ai-inference:latest
        resources:
          limits:
            nvidia.com/gpu: 1
            cpu: "2000m"
            memory: "8Gi"
        ports:
        - containerPort: 8080
        env:
        - name: MODEL_NAME
          value: "my_model"

Service 暴露

ai-inference-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: ai-inference-svc
spec:
  selector:
    app: ai-inference
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

自动扩缩容设计

Metrics Server 安装

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

验证 Metrics Server:

kubectl top nodes

Horizontal Pod Autoscaler

创建 HPA 依据 CPU 与 GPU 利用率:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: ai-inference-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: ai-inference
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60

对于 GPU 指标扩缩容 Kubernetes 本身不直接支持,我们结合 Prometheus Adapter 采集 NVIDIA DCGM 指标并生成自定义指标,用于 HPA。

Prometheus 与 NVIDIA DCGM 集成

部署 dcgm-exporter

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: dcgm-exporter
spec:
  selector:
    matchLabels:
      name: dcgm-exporter
  template:
    metadata:
      labels:
        name: dcgm-exporter
    spec:
      containers:
      - name: dcgm-exporter
        image: nvidia/dcgm-exporter:2.3.1-2.6.15-ubuntu20.04
        ports:
        - containerPort: 9400
        resources:
          limits:
            nvidia.com/gpu: 1

配置 Prometheus 抓取指标,并通过 Prometheus Adapter 暴露给 Kubernetes。


推理性能评测

在完成部署和自动扩缩容配置后,我们对推理性能进行评估,主要关注以下指标:

负载场景 GPU 利用率 平均延迟 (ms) 吞吐量 (requests/s) Pod 数
空载 5% 10 50 1
中等负载 45% 25 500 3
峰值负载 90% 40 900 6

测试工具:自定义压力测试脚本(使用 ab):

ab -n 10000 -c 200 http://<LoadBalancerIP>/

从对比数据可以看出,在高并发请求下,自动扩缩容策略使 Pod 数从 1 自动增加到 6,通过 GPU 共享与调度响应峰值负载,将平均延迟控制在 40ms 以内。


监控与告警

Grafana 仪表盘

部署 Grafana 并结合 Prometheus:

kubectl apply -f grafana-deployment.yaml

导入 GPU 利用率、CPU、内存、Pod 状态等监控面板。

告警规则示例

groups:
- name: ai-inference-alerts
  rules:
  - alert: HighGPULoad
    expr: dcgm_gpu_utilization > 85
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "GPU 利用率过高"
      description: "GPU 利用率连续 2 分钟超过 85%"

结语

通过A5数据以上步骤,我们在 Debian 11 环境下搭建了一个支持 Kubernetes 管理的深度学习微服务架构,实现了 AI 推理任务的自动扩展能力。整个系统在硬件层采用高性能 GPU 加速器,在 Kubernetes 级别利用 HPA 与自定义指标实现智能调度和扩缩容,并通过 Prometheus + Grafana 实现全面监控。

本方案不仅适用于边缘推理集群,也可扩展至云端混合部署场景,读者可以根据具体业务需求调整资源策略与监控指标,实现高可用、弹性扩展的 AI 推理平台。欢迎根据自身环境继续扩展,例如引入 Istio 做服务网格监控、使用 KEDA 对事件驱动扩缩容、集成服务熔断与灰度发布等。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐