大模型运维框架,覆盖环境搭建→数据准备→模型部署→监控运维→成本优化→安全合规全流程,适配 GPU 集群 + Kubernetes 架构,可直接落地。
前提条件
- 硬件:至少 1 台带 NVIDIA GPU(≥16GB 显存,推荐 A10/A100)的服务器节点,集群网络互通。
- 软件:Docker、Kubernetes(1.24+)、NVIDIA Container Toolkit、Helm 3.x。
- 权限:服务器 root 权限、K8s cluster-admin 权限。
步骤 1:基础环境搭建(2 天)
目标:构建支持 GPU 调度的 K8s 集群 + 运维工具链
1.1 节点初始化与 GPU 驱动配置
- 关闭防火墙、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 docker3.验证 GPU 可用性:
docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi # 输出 GPU 信息即配置成功1.2 K8s 集群 GPU 调度配置
- 部署 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 数据管理(训练 / 推理数据)
- 部署 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 模型版本管理
- 部署 MLflow(模型实验与版本管理):
bash
运行
helm install mlflow bitnami/mlflow -n mlflow --create-namespace --set service.type=NodePort - 模型训练 / 微调流程:
- 用 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 测试)。
- 用 Hugging Face Transformers + LoRA 微调模型,记录参数到 MLflow:
步骤 3:模型部署与推理优化(2 天)
目标:低延迟、高吞吐的模型在线推理服务,支持弹性扩缩容
3.1 模型优化
- 量化压缩:用 GPTQ/ AWQ 对模型做 INT8 量化,减少显存占用 50% 以上:
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")- 推理引擎选择:推荐 vLLM/TensorRT-LLM,相比原生 Transformers 提升吞吐量 3-10 倍。
3.2 容器化打包模型
- 编写 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"] - 构建并推送镜像到私有仓库:
bash
运行
docker build -t <registry>/llm-llama2-7b-vllm:v1 . docker push <registry>/llm-llama2-7b-vllm:v1
3.3 K8s 部署推理服务
- 编写 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 - 部署并验证:
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)
- 配置 vLLM/DCGM 指标暴露:vLLM 内置 Prometheus 指标,DCGM 采集 GPU 温度、功耗等硬件指标。
- 导入 Grafana 仪表盘:
- 大模型推理监控:导入 vLLM 官方仪表盘
- GPU 监控:导入 NVIDIA DCGM 仪表盘
- 核心监控指标:
指标类别 关键指标 告警阈值 推理性能 推理延迟(p95)、吞吐量(tokens/s)、错误率 延迟 > 5s / 错误率 > 1% GPU 状态 GPU 利用率、显存占用、温度 利用率 > 90% 持续 5min / 温度 > 85℃
4.2 数据与模型监控
- 部署 Evidently AI(数据漂移检测):
bash
运行
pip install evidently - 编写数据漂移检测脚本,定期对比生产输入数据与训练数据分布:
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}") - 模型退化监控:每周用 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
- 资源调度优化:
- 离线微调任务使用 Spot 实例,降低成本 50%-70%。
- 在线推理任务使用预留实例,结合 HPA 弹性伸缩。
- 模型分层部署:
- 高频简单请求(如问答)用小模型(如 LLaMA2-7B),复杂请求(如代码生成)用大模型(如 LLaMA2-70B)。
- 成本归因分析:用 Kubecost 按业务线 / 模型 / 用户统计成本,优化资源分配。
步骤 6:安全与合规(持续执行)
目标:满足数据隐私与内容合规要求
- 数据安全:
- 传输加密:所有服务启用 TLS 1.3。
- 存储加密:模型与数据存储用 AES-256 加密。
- 访问控制:用 K8s RBAC + OPA 限制模型服务访问权限。
- 内容合规:
- 部署内容审核模型(如 BERT 文本分类),过滤违规生成内容。
- 记录推理日志,留存 6 个月以上,满足监管审计要求。
- 漏洞扫描:每周用 Trivy 扫描容器镜像漏洞,及时更新依赖。
日常运维流程(SOP)
| 场景 | 操作步骤 |
|---|---|
| 模型版本更新 | 1. 测试环境部署新版本 2. 执行 A/B 测试对比性能 3. 灰度发布(先 10% 流量) 4. 全量切换 |
| 故障处理 | 1. 查看 Grafana 监控定位瓶颈 2. 重启异常 Pod 或扩容 3. 回滚至稳定版本(若故障无法解决) 4. 复盘故障原因,优化监控规则 |
| 定期维护 | 每周:模型性能基准测试、数据漂移检测 每月:成本审计、安全漏洞扫描 每季度:模型重新微调、架构优化 |