主题
uat2-gpu 集群: 122.36 节点修复 + HAMi 部署 + AMD GPU 测试
日期: 2026-08-17 集群: uat2-gpu (4节点 RKE2 HA) | szb122035/36/37 + szb122009 K8s 版本: v1.35.6+rke2r1 HAMi 版本: v2.6.1
1. 122.36 节点标签修复
问题
122.36 节点缺少 worker 角色标签,仅有 control-plane,etcd。
修复
bash
kubectl label node szb122036.local node-role.kubernetes.io/worker=true结果
| 节点 | 角色 | Internal-IP |
|---|---|---|
| szb122009 | worker | 192.168.122.9 |
| szb122035 | control-plane,etcd,worker | 192.168.122.35 |
| szb122036.local | control-plane,etcd,worker | 192.168.122.36 |
| szb122037.local | control-plane,etcd,worker | 192.168.122.37 |
所有节点 ExternalIP 均为
<none>(内网部署正常现象)。
2. 122.9 AMD GPU 检测
访问方式
122.9 SSH 未开启,通过 K8s API + 特权 Pod 检测。
GPU 硬件信息
| 属性 | 值 |
|---|---|
| PCI 地址 | 0000:04:00.0 |
| Vendor/Device | 1002:744C (AMD) |
| Subsystem | 1DA2:471E (Sapphire) |
| GPU 型号 | AMD Radeon RX 7900 XTX |
| VRAM | 24 GB GDDR6 |
| GPU 最大频率 | 2371 MHz (boost) |
| 驱动 | amdgpu (kernel module) |
| KFD | /dev/kfd ✓ (ROCm 兼容) |
| DRI | card1, renderD128 |
| 待机功耗/温度 | 17W / 36°C |
3. HAMi v2.6.1 部署
Harbor 镜像
| 镜像 | Tag |
|---|---|
cnrancher/mirrored-projecthami-hami | v2.6.1 |
cnrancher/mirrored-projecthami-kube-scheduler | v1.35.4 |
cnrancher/mirrored-liangjw-kube-webhook-certgen | v1.1.1 |
部署命令
bash
# 手动创建 TLS Secret(因 webhook job 在 122.9 无法连接 K8s API 10.43.0.1:443)
openssl req -x509 -newkey rsa:2048 \
-keyout tls.key -out tls.crt -days 3650 -nodes \
-subj "/CN=hami-scheduler.hami-system.svc" \
-addext "subjectAltName=DNS:hami-scheduler.hami-system.svc,DNS:127.0.0.1"
kubectl create ns hami-system
kubectl -n hami-system create secret tls hami-scheduler-tls \
--cert=tls.crt --key=tls.key
# Helm 安装
helm install hami /root/hami/hami -n hami-system \
-f /root/hami/hami-values.yaml \
--kubeconfig /etc/rancher/rke2/rke2.yaml \
--kube-insecure-skip-tls-verify --no-hooksValues Override (hami-values.yaml)
yaml
version: "v2.6.1"
scheduler:
kubeScheduler:
image: 192.168.122.156:30000/cnrancher/mirrored-projecthami-kube-scheduler
imageTag: "v1.35.4"
extender:
image: "192.168.122.156:30000/cnrancher/mirrored-projecthami-hami"
patch:
enabled: false
nodeSelector:
node-role.kubernetes.io/control-plane: "true"
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
devicePlugin:
image: "192.168.122.156:30000/cnrancher/mirrored-projecthami-hami"
monitorimage: "192.168.122.156:30000/cnrancher/mirrored-projecthami-hami"
deviceSplitCount: 1
nvidianodeSelector:
gpu: "on"
tolerations:
- operator: ExistsHAMi Device Plugin AMD 兼容性问题
HAMi v2.6.1 device plugin 仅含 NVIDIA 二进制,在 AMD 节点上 CrashLoopBackOff:
Detected non-NVML platform: could not load NVML library
Incompatible platform detected解决: 移除 122.9 的 gpu=on 标签,手动 patch 节点注册 amd.com/gpu 资源。
4. AMD GPU 资源注册
bash
# 移除 gpu=on 标签
kubectl label node szb122009 gpu-
# 手动 patch 节点
kubectl patch node szb122009 --type=merge --subresource=status \
-p '{"status":{"capacity":{"amd.com/gpu":"1"},
"allocatable":{"amd.com/gpu":"1"}}}'⚠️ 手动 patch 在 kubelet 重启后会丢失,建议部署
rocm/k8s-device-plugin实现持久化。
5. GPU 功能验证
测试 Pod(特权 + GPU 设备挂载)
yaml
apiVersion: v1
kind: Pod
metadata:
name: amd-gpu-test
spec:
nodeName: szb122009
tolerations: [{operator: Exists}]
containers:
- name: test
image: 192.168.122.156:30000/cnrancher/mirrored-projecthami-hami:v2.6.1
command: ["/bin/sh", "-c", "sleep 3600"]
securityContext: {privileged: true}
resources:
limits: {amd.com/gpu: "1"}
volumeMounts:
- {name: dev-dri, mountPath: /dev/dri}
- {name: dev-kfd, mountPath: /dev/kfd}
- {name: host-sys, mountPath: /host-sys, readOnly: true}
volumes:
- {name: dev-dri, hostPath: {path: /dev/dri}}
- {name: dev-kfd, hostPath: {path: /dev/kfd}}
- {name: host-sys, hostPath: {path: /sys}}验证结果 ✅
/dev/dri/card1 ✓ (226:1)
/dev/dri/renderD128 ✓ (226:128)
/dev/kfd ✓ (235:0)
VRAM Total: 25,753,026,560 bytes (24 GB) ✓
KFD GPU ID: 45442 ✓
GPU Clock: 500MHz / 2371MHz (boost) ✓
Mem Clock: 456MHz / 772MHz / 1249MHz ✓
Power: 17W (idle), Temp: 36°C ✓6. 小模型测试(待完成)
当前限制
- 无互联网访问,无法拉取 ROCm 推理镜像(rocm/pytorch, ollama:rocm 等)
- Harbor 中无 ML 推理框架镜像
后续步骤
Step 1: 在有网机器拉取并推送镜像:
bash
docker pull ollama/ollama:0.6.8-rocm
docker tag ollama/ollama:0.6.8-rocm 192.168.122.156:30000/cnrancher/ollama:rocm
docker push 192.168.122.156:30000/cnrancher/ollama:rocmStep 2: 部署 Ollama Pod(注意 HSA_OVERRIDE_GFX_VERSION=11.0.0 for RX 7900 XTX/gfx1100):
yaml
apiVersion: v1
kind: Pod
metadata:
name: ollama-amd
spec:
nodeName: szb122009
tolerations: [{operator: Exists}]
containers:
- name: ollama
image: 192.168.122.156:30000/cnrancher/ollama:rocm
securityContext: {privileged: true}
env:
- {name: HSA_OVERRIDE_GFX_VERSION, value: "11.0.0"}
- {name: OLLAMA_HOST, value: "0.0.0.0:11434"}
resources:
limits: {amd.com/gpu: "1"}
volumeMounts:
- {name: dev-dri, mountPath: /dev/dri}
- {name: dev-kfd, mountPath: /dev/kfd}
volumes:
- {name: dev-dri, hostPath: {path: /dev/dri}}
- {name: dev-kfd, hostPath: {path: /dev/kfd}}Step 3: 测试小模型:
bash
kubectl exec ollama-amd -- ollama pull qwen2.5:3b
kubectl exec ollama-amd -- ollama run qwen2.5:3b "你好,请介绍一下自己"7. 集群最终状态
| 节点 | 角色 | IP | GPU |
|---|---|---|---|
| szb122009 | worker | 192.168.122.9 | 1× RX 7900 XTX (24GB) |
| szb122035 | CP,Etcd,Worker | 192.168.122.35 | - |
| szb122036.local | CP,Etcd,Worker | 192.168.122.36 | - |
| szb122037.local | CP,Etcd,Worker | 192.168.122.37 | - |
HAMi: scheduler ✅ running on 122.35 | device-plugin ⚠️ NVIDIA-only (AMD 节点需单独部署)
8. 已知限制与后续步骤
- HAMi Device Plugin 不支持 AMD: 需部署
rocm/k8s-device-plugin实现amd.com/gpu自动注册 - 手动 Patch 不持久: kubelet 重启后需重新 patch,建议部署 AMD device plugin
- 122.9 SSH 不可达: 所有操作需通过 K8s API
- 无互联网: 无法获取 ROCm 推理镜像,需通过离线方式导入
- 清理: 临时文件
/root/hami/、debug pod、临时证书
命令速查
bash
# 重新 patch GPU 资源
kubectl patch node szb122009 --type=merge --subresource=status \
-p '{"status":{"capacity":{"amd.com/gpu":"1"},"allocatable":{"amd.com/gpu":"1"}}}'
# HAMi 升级
helm -n hami-system upgrade hami /root/hami/hami -f /root/hami/hami-values.yaml \
--kubeconfig /etc/rancher/rke2/rke2.yaml --kube-insecure-skip-tls-verify9. vLLM vGPU 部署方案
架构
- vLLM Pod 1: DeepSeek-R1-Distill-Qwen-1.5B (~3GB VRAM, 15% GPU)
- vLLM Pod 2: Qwen2.5-3B-Instruct (~6GB VRAM, 30% GPU)
- Open WebUI: 前端界面 (CPU only)
部署文件
vllm-deploy/
├── Dockerfile # vLLM + ROCm 镜像构建
├── build-and-push.sh # 构建并推送镜像
├── deploy.sh # 一键部署脚本
├── vllm-deepseek.yaml # DeepSeek 部署
├── vllm-qwen.yaml # Qwen 部署
├── open-webui.yaml # Open WebUI 部署
└── README.md # 详细文档快速开始
- 在有外网机器上构建镜像:
cd vllm-deploy && ./build-and-push.sh - 在 122.37 上部署:
cd vllm-deploy && ./deploy.sh - 访问 Open WebUI:
http://192.168.122.9:30080
注意事项
- vLLM 对 AMD RDNA3 (gfx1100) 支持为实验性
- 使用
HSA_OVERRIDE_GFX_VERSION=11.0.0启用兼容模式 - 通过 vLLM
--gpu-memory-utilization实现 vGPU 内存隔离 - 手动 patch 的 GPU 资源在 kubelet 重启后需重新注册
详见 vllm-deploy/README.md