AI服务器DevOps配置:用Ansible批量管好GPU推理节点
先想清楚要解决什么问题
AI服务器和普通Web服务器的差别在于:GPU驱动、CUDA版本、容器运行时三者必须匹配,任何一台机器版本不一致,推理任务就可能报错或性能异常。
手工逐台配置在两三台时还能应付,节点一多就会变成重复劳动和版本漂移。
所以AI服务器DevOps配置的核心目标很朴素:把每台机器的环境写成代码,做到一条命令重复部署、结果可核对。
本文以Ansible加Docker为方案,适合节点在3台以上、系统为Ubuntu 22.04或相近版本、已经能SSH登录的场景。
如果你只有单机,也可以只取剧本中的安装部分参考。
准备阶段:先把控制端和清单搭好
控制端只需要一台能SSH到所有GPU节点的Linux机器,不要求装显卡驱动。
sudo apt update && sudo apt install -y ansible
ansible --version
在项目目录下建立清单文件 inventory.ini,按角色分组:
[gpu_nodes]
ai-node01 ansible_host=192.168.1.11
ai-node02 ansible_host=192.168.1.12
[gpu_nodes:vars]
ansible_user=ops
ansible_ssh_private_key_file=~/.ssh/ai_ops
先做连通性检查,确认密钥和sudo权限都没问题:
ansible gpu_nodes -i inventory.ini -m ping
ansible gpu_nodes -i inventory.ini -m shell -a "nvidia-smi -L" --become
第二条命令能列出每台机器的GPU型号,说明驱动已就位;
若报 command not found,说明驱动还没装,需要先补驱动再进入下一步。不要跳过这一步,否则后面容器里看不到显卡,排查成本会高很多。
核心操作:用剧本固化安装与部署
第一步:统一安装容器运行时
编写 playbooks/base.yml,用官方脚本安装Docker并配置NVIDIA容器工具包:
- hosts: gpu_nodes
become: true
tasks:
- name: 安装基础依赖
apt:
name: [ca-certificates, curl, gnupg]
state: present
update_cache: true
- name: 安装nvidia-container-toolkit
shell: |
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
> /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-get update && apt-get install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
执行:
ansible-playbook -i inventory.ini playbooks/base.yml
第二步:下发推理服务并验证
用模板把镜像版本和端口写成变量,避免每台机器手改。
在 group_vars/gpu_nodes.yml 中定义:
infer_image: "your-registry/infer-server:1.0.0"
infer_port: 8000
剧本中用 docker_container 模块启动,并加 device_requests 让容器拿到GPU。
部署完成后立刻做健康检查:
ansible gpu_nodes -i inventory.ini -m shell \
-a "docker ps --format '{{.Names}} {{.Status}}'"
curl -s http://192.168.1.11:8000/health
预期结果是容器状态为 Up,健康接口返回正常状态码。
任何一台不一致,就单独用 --limit ai-node02 重跑该节点,而不是全量重来。
容易踩的坑
- 驱动版本与容器镜像不匹配:镜像里的CUDA版本高于宿主机驱动支持范围时,容器启动会报
CUDA driver version is insufficient。升级驱动前先确认镜像要求的驱动下限。 - 重启Docker会中断在线推理:
base.yml里重启了docker服务,生产节点应放到维护窗口执行,或先摘除流量。 - 清单里混入非GPU机器:健康检查会因为
nvidia-smi失败而中断整批任务,建议按角色分组,不要图省事全塞进一个组。 - 密钥和仓库凭据写进剧本:私钥、镜像仓库密码应放在Ansible Vault或环境变量中,不要提交到版本库。
怎么确认配置真的生效
除了看容器状态,建议固定三项核对:每台机器 nvidia-smi -L 输出的GPU数量一致、容器内 nvidia-smi 可正常执行、健康接口返回内容一致。
把这三项写进一个检查剧本,每次发布后跑一遍,配置漂移就能在早期被发现。
常见疑问
没有GPU的机器也要装nvidia-container-toolkit吗? 不需要。
这套配置只针对推理节点,控制端和普通业务节点分开管理即可。
Ansible和Kubernetes该选哪个? 节点少、以单机容器部署为主时,Ansible更轻;
需要弹性调度、多副本和自动扩缩容时,再考虑Kubernetes这类编排平台。
剧本执行到一半失败怎么办? Ansible任务本身是幂等的,修好报错原因后重跑同一剧本即可,已完成的步骤不会重复破坏环境。
AI服务器DevOps配置的价值不在于工具多新,而在于每次扩容或重装都能得到一致的GPU环境。
先把清单、基础剧本和健康检查这三件事做扎实,再考虑加监控和灰度发布。