大模型运维框架,覆盖环境搭建→数据准备→模型部署→监控运维→成本优化→安全合规全流程,适配 GPU 集群 + Kubernetes 架构,可直接落地。

前提条件

  1. 硬件:至少 1 台带 NVIDIA GPU(≥16GB 显存,推荐 A10/A100)的服务器节点,集群网络互通。
  2. 软件:Docker、Kubernetes(1.24+)、NVIDIA Container Toolkit、Helm 3.x。
  3. 权限:服务器 root 权限、K8s cluster-admin 权限。

步骤 1:基础环境搭建(2 天)

目标:构建支持 GPU 调度的 K8s 集群 + 运维工具链

1.1 节点初始化与 GPU 驱动配置

  1. 关闭防火墙、SELinux:
    systemctl stop firewalld && systemctl disable firewalld
    setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

    2.安装 NVIDIA 驱动 + Container Toolkit(以 CentOS 7 为例):

# 安装依赖
yum install -y kernel-devel kernel-headers gcc make
# 安装 NVIDIA 驱动(适配显卡型号,推荐 535+ 版本)
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/535.129.03/NVIDIA-Linux-x86_64-535.129.03.run
chmod +x NVIDIA-Linux-x86_64-535.129.03.run
./NVIDIA-Linux-x86_64-535.129.03.run -s --no-nouveau-check
# 安装 Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | tee /etc/yum.repos.d/nvidia-container-toolkit.repo
yum install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker

3.验证 GPU 可用性:

docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
# 输出 GPU 信息即配置成功

1.2 K8s 集群 GPU 调度配置

  1. 部署 NVIDIA GPU Operator(自动配置 Device Plugin、DCGM 监控):
    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
    helm repo update
    helm install nvidia-gpu-operator nvidia/gpu-operator --namespace gpu-operator --create-namespace

      2.验证 GPU 节点标签:

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.capacity.nvidia\.com/gpu}{"\n"}{end}'
# 输出节点名 + GPU 数量即成功

1.3 部署基础运维工具

工具 作用 部署命令
Prometheus + Grafana 监控指标采集与可视化 helm install prometheus grafana/prometheus -n monitoring --create-namespacehelm install grafana grafana/grafana -n monitoring
Loki + Promtail 日志采集与查询 helm install loki grafana/loki -n monitoringhelm install promtail grafana/promtail -n monitoring
Kubecost 成本监控与归因 helm install kubecost cost-analyzer -n kubecost --create-namespace --repo https://kubecost.github.io/cost-analyzer/helm-charts/

步骤 2:数据与模型版本管理(1 天)

目标:建立可追溯、合规的数据 - 模型版本链路

2.1 数据管理(训练 / 推理数据)

  1. 部署 DVC(数据版本控制工具):

    # 安装 DVC
    pip install dvc[ssh]
    # 初始化数据仓库
    mkdir -p llm-data && cd llm-data
    dvc init && git init

2.数据处理流程:

  • 采集:从业务系统导出对话 / 文档数据,存入 MinIO/S3 存储。
  • 清洗:用 Python 脚本过滤无效数据、敏感信息(如手机号、身份证):
  • import re
    def filter_sensitive(text):
        # 过滤手机号
        text = re.sub(r'1[3-9]\d{9}', '[MASK]', text)
        # 过滤身份证号
        text = re.sub(r'\d{17}[\dXx]', '[MASK]', text)
        return text
    
  • 版本化:用 DVC 追踪数据版本,关联训练任务:
dvc add train_data.jsonl
dvc commit && git add .dvc/ train_data.jsonl.dvc && git commit -m "add train data v1"

2.2 模型版本管理

  1. 部署 MLflow(模型实验与版本管理):

    bash

    运行

    helm install mlflow bitnami/mlflow -n mlflow --create-namespace --set service.type=NodePort
    
  2. 模型训练 / 微调流程:
    • 用 Hugging Face Transformers + LoRA 微调模型,记录参数到 MLflow:

      import mlflow
      mlflow.set_tracking_uri("http://<mlflow-node-ip>:<node-port>")
      with mlflow.start_run(run_name="llama2-7b-lora-finetune"):
          # 记录超参数
          mlflow.log_param("lr", 2e-4)
          mlflow.log_param("batch_size", 8)
          # 训练完成后记录模型
          mlflow.transformers.log_model(pipe, "model")
      
    • 模型版本标记:在 MLflow UI 中标注稳定版本(用于生产)、测试版本(用于 A/B 测试)。

步骤 3:模型部署与推理优化(2 天)

目标:低延迟、高吞吐的模型在线推理服务,支持弹性扩缩容

3.1 模型优化

  1. 量化压缩:用 GPTQ/ AWQ 对模型做 INT8 量化,减少显存占用 50% 以上:
  1. from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig
    model_name = "meta-llama/Llama-2-7b-chat-hf"
    gptq_config = GPTQConfig(bits=8, disable_exllama=True)
    model = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=gptq_config, device_map="auto")
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    # 保存量化后模型
    model.save_pretrained("./llama2-7b-8bit")
    tokenizer.save_pretrained("./llama2-7b-8bit")
    
  2. 推理引擎选择:推荐 vLLM/TensorRT-LLM,相比原生 Transformers 提升吞吐量 3-10 倍。

3.2 容器化打包模型

  1. 编写 Dockerfile(以 vLLM 为例):

    dockerfile

    FROM nvidia/cuda:12.1.0-devel-ubuntu22.04
    RUN pip install vllm transformers
    COPY ./llama2-7b-8bit /model
    EXPOSE 8000
    CMD ["python", "-m", "vllm.entrypoints.api_server", "--model", "/model", "--port", "8000", "--tensor-parallel-size", "1"]
    
  2. 构建并推送镜像到私有仓库:

    bash

    运行

    docker build -t <registry>/llm-llama2-7b-vllm:v1 .
    docker push <registry>/llm-llama2-7b-vllm:v1
    

3.3 K8s 部署推理服务

  1. 编写 Deployment + Service YAML(llm-deployment.yaml):

    yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: llm-llama2-service
      namespace: llm
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: llm-llama2
      template:
        metadata:
          labels:
            app: llm-llama2
        spec:
          containers:
          - name: llm-llama2
            image: <registry>/llm-llama2-7b-vllm:v1
            resources:
              limits:
                nvidia.com/gpu: 1  # 每个实例占用 1 张 GPU
            ports:
            - containerPort: 8000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: llm-llama2-service
      namespace: llm
    spec:
      selector:
        app: llm-llama2
      ports:
      - port: 80
        targetPort: 8000
      type: ClusterIP
    
  2. 部署并验证:

    bash

    运行

    kubectl create namespace llm
    kubectl apply -f llm-deployment.yaml
    # 验证服务可用性
    curl http://llm-llama2-service.llm/v1/completions -H "Content-Type: application/json" -d '{
        "prompt": "Hello, what is LLMOps?",
        "max_tokens": 100
    }'
    

3.4 配置自动扩缩容(HPA)

编写 HPA YAML,基于 GPU 利用率和请求 QPS 扩缩容:

yaml

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: llm-llama2-hpa
  namespace: llm
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: llm-llama2-service
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: nvidia.com/gpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Pods
    pods:
      metric:
        name: http_requests_per_second
      target:
        type: AverageValue
        averageValue: 100m

步骤 4:监控与告警体系搭建(1 天)

目标:覆盖性能、数据、模型、安全的全维度监控

4.1 性能监控(Prometheus + Grafana)

  1. 配置 vLLM/DCGM 指标暴露:vLLM 内置 Prometheus 指标,DCGM 采集 GPU 温度、功耗等硬件指标。
  2. 导入 Grafana 仪表盘:
  3. 核心监控指标:
    指标类别 关键指标 告警阈值
    推理性能 推理延迟(p95)、吞吐量(tokens/s)、错误率 延迟 > 5s / 错误率 > 1%
    GPU 状态 GPU 利用率、显存占用、温度 利用率 > 90% 持续 5min / 温度 > 85℃

4.2 数据与模型监控

  1. 部署 Evidently AI(数据漂移检测):

    bash

    运行

    pip install evidently
    
  2. 编写数据漂移检测脚本,定期对比生产输入数据与训练数据分布:

    python

    运行

    from evidently.report import Report
    from evidently.metrics import DataDriftMetric
    # 加载训练数据和生产数据
    train_data = ... # 训练集特征(如 token 长度、词频)
    prod_data = ...  # 生产集特征
    # 生成漂移报告
    report = Report(metrics=[DataDriftMetric()])
    report.run(reference_data=train_data, current_data=prod_data)
    # 漂移阈值:当漂移分数 > 0.5 时触发告警
    drift_score = report.as_dict()["metrics"][0]["result"]["drift_score"]
    if drift_score > 0.5:
        # 发送告警到钉钉/企业微信
        send_alert(f"Data drift detected! Score: {drift_score}")
    
  3. 模型退化监控:每周用 MMLU/ C-Eval 基准测试集评估模型准确率,当准确率下降 > 5% 时触发重新微调。

4.3 告警配置

在 Prometheus AlertManager 中配置告警规则,触发条件时推送至企业微信 / 钉钉:

yaml

groups:
- name: llm_alerts
  rules:
  - alert: LLMInferenceLatencyHigh
    expr: llm_inference_latency_seconds{p95} > 5
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "推理延迟过高"
      description: "p95 延迟 {{ $value }}s,持续 5 分钟"

步骤 5:成本优化(持续优化)

目标:降低 GPU 资源浪费,控制 TCO

  1. 资源调度优化
    • 离线微调任务使用 Spot 实例,降低成本 50%-70%。
    • 在线推理任务使用预留实例,结合 HPA 弹性伸缩。
  2. 模型分层部署
    • 高频简单请求(如问答)用小模型(如 LLaMA2-7B),复杂请求(如代码生成)用大模型(如 LLaMA2-70B)。
  3. 成本归因分析:用 Kubecost 按业务线 / 模型 / 用户统计成本,优化资源分配。

步骤 6:安全与合规(持续执行)

目标:满足数据隐私与内容合规要求

  1. 数据安全
    • 传输加密:所有服务启用 TLS 1.3。
    • 存储加密:模型与数据存储用 AES-256 加密。
    • 访问控制:用 K8s RBAC + OPA 限制模型服务访问权限。
  2. 内容合规
    • 部署内容审核模型(如 BERT 文本分类),过滤违规生成内容。
    • 记录推理日志,留存 6 个月以上,满足监管审计要求。
  3. 漏洞扫描:每周用 Trivy 扫描容器镜像漏洞,及时更新依赖。

日常运维流程(SOP)

场景 操作步骤
模型版本更新 1. 测试环境部署新版本 2. 执行 A/B 测试对比性能 3. 灰度发布(先 10% 流量) 4. 全量切换
故障处理 1. 查看 Grafana 监控定位瓶颈 2. 重启异常 Pod 或扩容 3. 回滚至稳定版本(若故障无法解决) 4. 复盘故障原因,优化监控规则
定期维护 每周:模型性能基准测试、数据漂移检测 每月:成本审计、安全漏洞扫描 每季度:模型重新微调、架构优化
Logo

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

更多推荐