LLMOps大模型云原生部署落地实操:从零搭建可运行的环境
开始前需要准备什么
在动手之前,先确认你手头有这些资源,缺一不可:
- 一台或多台Linux服务器(推荐Ubuntu 22.04或CentOS 7.9),每台至少8核CPU、32GB内存、一块支持CUDA的NVIDIA显卡(如A100、V100、RTX 3090)。
- Kubernetes集群(版本≥1.24),可以使用kubeadm手动搭建,或者直接用云厂商的托管集群。
- Docker 和 kubectl 已安装并配置好。
- 已经下载好要部署的大模型文件(例如Llama 2或ChatGLM的权重),或准备好直接从Hugging Face拉取的网络环境。
如果你对Kubernetes基础不熟,建议先跟着官方文档搭一个单节点集群练手;
生产环境务必做高可用。
第一步:让Kubernetes节点识别GPU
要让Pod使用GPU,节点上必须安装NVIDIA驱动和nvidia-container-toolkit。
SSH登录每一台GPU节点:
# 安装NVIDIA驱动(以Ubuntu为例)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
然后部署NVIDIA设备插件到集群:
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.0/nvidia-device-plugin.yml
检查节点是否已识别GPU:
kubectl describe node <节点名> | grep -A 5 "Capacity"
# 输出中应包含 nvidia.com/gpu: 1 或更多
第二步:把大模型打包成推理服务镜像
用Python编写一个简单的推理API(这里用FastAPI + transformers),模型加载和推理代码略,注意设置环境变量MODEL_PATH。
编写Dockerfile:
FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
构建并推送到镜像仓库:
docker build -t your-registry/llm-inference:1.0 .
docker push your-registry/llm-inference:1.0
第三步:创建Kubernetes部署与服务
编写deployment.yaml,关键部分如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: llm-inference
spec:
replicas: 2
selector:
matchLabels:
app: llm-inference
template:
metadata:
labels:
app: llm-inference
spec:
containers:
- name: inference
image: your-registry/llm-inference:1.0
ports:
- containerPort: 8000
resources:
limits:
nvidia.com/gpu: 1
env:
- name: MODEL_PATH
value: "/models/llama-7b"
volumeMounts:
- name: model-storage
mountPath: /models
volumes:
- name: model-storage
persistentVolumeClaim:
claimName: model-pvc
别忘了先创建PVC或使用HostPath(生产不推荐)。
然后暴露Service:
apiVersion: v1
kind: Service
metadata:
name: llm-inference
spec:
selector:
app: llm-inference
ports:
- port: 80
targetPort: 8000
type: ClusterIP
如果想从集群外访问,再配一个Ingress,或者直接用NodePort。
应用资源:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
常见坑与排错
- Pod一直Pending,Events显示“Insufficient nvidia.com/gpu”:确认节点已安装驱动和设备插件,且节点的GPU未被其他Pod占用。
- Pod启动后CrashLoopBackOff:先看日志
kubectl logs,多半是模型加载内存超限,调低resources.limits.memory或换小模型。 - 请求超时/返回异常:检查Service是否匹配Pod标签,以及Ingress规则是否正确。
如何验证部署成功
用curl或Postman发送推理请求(假设Service IP为10.96.0.10):
curl -X POST http://10.96.0.10/ -H "Content-Type: application/json" -d '{"prompt":"介绍一下LLMOps"}'
返回格式应包含生成的文本。
也可以先用kubectl port-forward svc/llm-inference 8000:80在本地测试。
如果返回结果正常,说明整个LLMOps大模型云原生部署落地实操流程走通。
后续可以接入监控(Prometheus + Grafana)和自动伸缩(HPA)。
如果你在部署过程中遇到其他奇怪的问题,建议先检查节点CUDA版本与PyTorch镜像是否匹配,这是最多人踩的坑。