Skip to content

Commit

Permalink
optimize rdma metrics and podwebhook docs
Browse files Browse the repository at this point in the history
Signed-off-by: tao.yang <[email protected]>
  • Loading branch information
ty-dc committed Nov 5, 2024
1 parent 364fb54 commit bb07705
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 123 deletions.
180 changes: 90 additions & 90 deletions docs/usage/install/ai/get-started-sriov-zh_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb

对于 Mellanox 网卡,可下载 [NVIDIA OFED 官方驱动](https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/) 进行主机安装,执行如下安装命令

```
```shell
mount /root/MLNX_OFED_LINUX-24.01-0.3.3.1-ubuntu22.04-x86_64.iso /mnt
/mnt/mlnxofedinstall --all
```
Expand All @@ -87,7 +87,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb

本示例环境中,宿主机上接入了 mellanox ConnectX 5 VPI 网卡,查询 RDMA 设备,确认网卡驱动安装完成

```
```shell
$ rdma link
link mlx5_0/1 state ACTIVE physical_state LINK_UP netdev ens6f0np0
link mlx5_1/1 state ACTIVE physical_state LINK_UP netdev ens6f1np1
Expand All @@ -96,21 +96,21 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb

确认网卡的工作模式,如下输出表示网卡工作在 Ethernet 模式下,可实现 RoCE 通信

```
```shell
$ ibstat mlx5_0 | grep "Link layer"
Link layer: Ethernet
```

如下输出表示网卡工作在 Infiniband 模式下,可实现 Infiniband 通信

```
```shell
$ ibstat mlx5_0 | grep "Link layer"
Link layer: InfiniBand
```

如果网卡没有工作在预期的模式下,请输入如下命令,确认网卡支持配置 LINK_TYPE 参数,如果没有该参数,请更换支持的网卡型号

```
```shell
$ mst start
# check the card's PCIE
Expand All @@ -130,21 +130,21 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb

a. 开启 helm 安装选项: `--set driver.rdma.enabled=true --set driver.rdma.useHostMofed=true`,gpu-operator 会安装 [nvidia-peermem](https://network.nvidia.com/products/GPUDirect-RDMA/) 内核模块,启用 GPUDirect RMDA 功能,加速 GPU 和 RDMA 网卡之间的转发性能。可在主机上输入如下命令,确认安装成功的内核模块

```
```shell
$ lsmod | grep nvidia_peermem
nvidia_peermem 16384 0
```

b. 开启 helm 安装选项: `--set gdrcopy.enabled=true`,gpu-operator 会安装 [gdrcopy](https://developer.nvidia.com/gdrcopy) 内核模块,加速 GPU 显存 和 CPU 内存 之间的转发性能。可在主机上输入如下命令,确认安装成功的内核模块

```
```shell
$ lsmod | grep gdrdrv
gdrdrv 24576 0
```

4. 若希望 RDMA 系统工作在独占模式下,请设置主机上的 RDMA 子系统为 exclusive 模式,使得容器能够独立使用 RDMA 设备过程,避免与其他容器共享

```
```shell
# Check the current operating mode (the Linux RDMA subsystem operates in shared mode by default):
$ rdma system
netns shared copy-on-fork on
Expand All @@ -164,7 +164,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb

1. 使用 helm 安装 Spiderpool,并启用 SR-IOV 组件

```
```shell
helm repo add spiderpool https://spidernet-io.github.io/spiderpool
helm repo update spiderpool
kubectl create namespace spiderpool
Expand All @@ -176,7 +176,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb

完成后,安装的组件如下

```
```shell
$ kubectl get pod -n spiderpool
operator-webhook-sgkxp 1/1 Running 0 1m
spiderpool-agent-9sllh 1/1 Running 0 1m
Expand All @@ -192,7 +192,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb

使用如下命令,查询主机上网卡设备的 PCIE 信息。确认如下输出的设备号 [15b3:1017] 出现在 [sriov-network-operator 支持网卡型号范围](https://github.com/k8snetworkplumbingwg/sriov-network-operator/blob/master/deployment/sriov-network-operator-chart/templates/configmap.yaml)

```
```shell
$ lspci -nn | grep Mellanox
86:00.0 Infiniband controller [0207]: Mellanox Technologies MT27800 Family [ConnectX-5] [15b3:1017]
86:00.1 Infiniband controller [0207]: Mellanox Technologies MT27800 Family [ConnectX-5] [15b3:1017]
Expand All @@ -202,7 +202,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
SRIOV VF 数量决定了一个网卡能同时为多少个 POD 提供网卡,不同型号的网卡的有不同的最大 VF 数量上限,Mellanox 的 ConnectX 网卡常见型号的最大 VF 上限是 127 。
如下示例,设置每个节点上的 GPU1 和 GPU2 的网卡,每个网卡配置出 12 个 VF 设备。请参考如下,为主机上每个亲和 GPU 的网卡配置 SriovNetworkNodePolicy,这样,将有 8 个 SRIOV resource 以供使用。

```
```shell
# 对于 ethernet 网络,设置 LINK_TYPE=eth, 对于 Infiniband 网络,设置 LINK_TYPE=ib
$ LINK_TYPE=eth
$ cat <<EOF | kubectl apply -f -
Expand Down Expand Up @@ -250,7 +250,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
创建 SriovNetworkNodePolicy 配置后,每个节点上将会启动 sriov-device-plugin ,负责上报 VF 设备资源
```
```shell
$ kubectl get pod -n spiderpool
operator-webhook-sgkxp 1/1 Running 0 2m
spiderpool-agent-9sllh 1/1 Running 0 2m
Expand All @@ -267,7 +267,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
创建 SriovNetworkNodePolicy 配置后,SR-IOV operator 会顺序地在每一个节点上驱逐 POD,配置网卡驱动中的 VF 设置,然后重启主机。因此,会观测到集群中的节点会顺序进入 SchedulingDisabled 状态,并被重启。
```
```shell
$ kubectl get node
NAME STATUS ROLES AGE VERSION
ai-10-1-16-1 Ready worker 2d15h v1.28.9
Expand All @@ -277,7 +277,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
所有节点完成 VF 配置的过程,可能需要数分钟,可以观察 sriovnetworknodestates 中的 status 是否进入 Succeeded 状态,表示配置完成
```
```shell
$ kubectl get sriovnetworknodestates -A
NAMESPACE NAME SYNC STATUS DESIRED SYNC STATE CURRENT SYNC STATE AGE
spiderpool ai-10-1-16-1 Succeeded Idle Idle 4d6h
Expand All @@ -287,7 +287,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
对于配置成功的节点,可查看 node 的可用资源,包含了上报的 SR-IOV 设备资源
```
```shell
$ kubectl get no -o json | jq -r '[.items[] | {name:.metadata.name, allocable:.status.allocatable}]'
[
{
Expand Down Expand Up @@ -337,7 +337,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
(2) 对于 Ethernet 网络,请为所有的 GPU 亲和的 SR-IOV 网卡配置 [SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni) 配置,并创建对应的 IP 地址池 。 如下例子,配置了 GPU1 亲和的网卡和 IP 地址池
```
```shell
$ cat <<EOF | kubectl apply -f -
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderIPPool
Expand Down Expand Up @@ -371,7 +371,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
> 注:支持自动为应用注入 RDMA 网络资源,参考 [基于 Webhook 自动为应用注入 RDMA 网络资源](#基于-webhook-自动注入-rdma-网络资源)
```
```shell
$ helm repo add spiderchart https://spidernet-io.github.io/charts
$ helm repo update
$ helm search repo rdma-tools
Expand Down Expand Up @@ -430,7 +430,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
可进入任一一个 POD 的网络命名空间中,确认具备 9 个网卡
```
```shell
$ kubectl exec -it rdma-tools-4v8t8 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@rdma-tools-4v8t8:/# ip a
Expand Down Expand Up @@ -485,7 +485,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
main 路由中,确保了 calico 网络流量、ClusterIP 流量、本地宿主机通信等流量都会从 calico 网卡转发
```
```shell
root@rdma-tools-4v8t8:/# ip r show table main
default via 169.254.1.1 dev eth0
172.16.11.0/24 dev net1 proto kernel scope link src 172.16.11.10
Expand All @@ -505,7 +505,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
确认具备 8 个 RDMA 设备
```
```shell
root@rdma-tools-4v8t8:/# rdma link
link mlx5_27/1 state ACTIVE physical_state LINK_UP netdev net2
link mlx5_54/1 state ACTIVE physical_state LINK_UP netdev net1
Expand All @@ -518,7 +518,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
开启一个终端,进入一个 Pod 启动服务
```
```shell
# see 8 RDMA devices assigned to the Pod
$ rdma link
Expand All @@ -528,7 +528,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
开启一个终端,进入另一个 Pod 访问服务:
```
```shell
# You should be able to see all RDMA network cards on the host
$ rdma link
Expand All @@ -542,7 +542,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
1. 在 UFM 主机上创建通信所需要的证书:
```
```shell
# replace to right address
$ UFM_ADDRESS=172.16.10.10
$ openssl req -x509 -newkey rsa:4096 -keyout ufm.key -out ufm.crt -days 365 -subj '/CN=${UFM_ADDRESS}'
Expand All @@ -560,7 +560,7 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
2. 在 kubernetes 集群上,创建 ib-kubernetes 所需的通信证书。把 UFM 主机上生成的 ufm.crt 文件传输至 kubernetes 节点上,并使用如下命令创建证书
```
```shell
# replace to right user
$ UFM_USERNAME=admin
Expand All @@ -578,15 +578,15 @@ Spiderpool 使用了 [sriov-network-operator](https://github.com/k8snetworkplumb
3. 在 kubernetes 集群上安装 ib-kubernetes
```
```shell
git clone https://github.com/Mellanox/ib-kubernetes.git && cd ib-kubernetes
$ kubectl create -f deployment/ib-kubernetes-configmap.yaml
kubectl create -f deployment/ib-kubernetes.yaml
```
4. 在 Infiniband 网络下,创建 Spiderpool 的 SpiderMultusConfig 时,可配置 pkey,使用该配置创建的 POD 将生效 pkey 配置,且被 ib-kubernetes 同步给 UFM
```
```shell
$ cat <<EOF | kubectl apply -f -
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderMultusConfig
Expand All @@ -612,7 +612,7 @@ Spiderpool 为了简化 AI 应用配置多网卡的复杂度,支持通过 anno
1. 使用 webhook 自动注入 RDMA 网络资源,需要安装 Spiderpool 时指定开启 webhook 自动注入网络资源功能:
```shell
helm install spiderpool spiderchart/spiderpool --set spiderpoolController.podResourceInject.enabled=true
helm upgrade --install spiderpool spiderpool/spiderpool --namespace spiderpool --create-namespace --reuse-values --set spiderpoolController.podResourceInject.enabled=true
```
> - 默认关闭 webhook 自动注入网络资源功能,需要用户手动开启。
Expand All @@ -623,71 +623,71 @@ Spiderpool 为了简化 AI 应用配置多网卡的复杂度,支持通过 anno
(1) 对于 Infiniband 网络,请为所有的 GPU 亲和的 SR-IOV 网卡配置 [IB-SRIOV CNI](https://github.com/k8snetworkplumbingwg/ib-sriov-cni) 配置,并创建对应的 IP 地址池 。 如下例子,配置了 GPU1 亲和的网卡和 IP 地址池
```shell
$ cat <<EOF | kubectl apply -f -
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderIPPool
metadata:
name: gpu1-net11
spec:
gateway: 172.16.11.254
subnet: 172.16.11.0/16
ips:
- 172.16.11.1-172.16.11.200
---
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderMultusConfig
metadata:
name: gpu1-sriov
namespace: spiderpool
annotations:
cni.spidernet.io/rdma-resource-inject: gpu-ibsriov
spec:
cniType: ib-sriov
ibsriov:
resourceName: spidernet.io/gpu1sriov
rdmaIsolation: true
ippools:
ipv4: ["gpu1-net91"]
EOF
```
> - `cni.spidernet.io/rdma-resource-inject: gpu-ibsriov` 固定的 key,value 为用户自定义。
> - `resourceName``ippools` 必须配置,否则 Pod 无法成功注入网络资源。
```shell
$ cat <<EOF | kubectl apply -f -
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderIPPool
metadata:
name: gpu1-net11
spec:
gateway: 172.16.11.254
subnet: 172.16.11.0/16
ips:
- 172.16.11.1-172.16.11.200
---
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderMultusConfig
metadata:
name: gpu1-sriov
namespace: spiderpool
annotations:
cni.spidernet.io/rdma-resource-inject: gpu-ibsriov
spec:
cniType: ib-sriov
ibsriov:
resourceName: spidernet.io/gpu1sriov
rdmaIsolation: true
ippools:
ipv4: ["gpu1-net91"]
EOF
```
> - `cni.spidernet.io/rdma-resource-inject: gpu-ibsriov` 固定的 key,value 为用户自定义。
> - `resourceName``ippools` 必须配置,否则 Pod 无法成功注入网络资源。
(2) 对于 Ethernet 网络,请为所有的 GPU 亲和的 SR-IOV 网卡配置 [SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni) 配置,并创建对应的 IP 地址池 。 如下例子,配置了 GPU1 亲和的网卡和 IP 地址池
```
$ cat <<EOF | kubectl apply -f -
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderIPPool
metadata:
name: gpu1-net11
spec:
gateway: 172.16.11.254
subnet: 172.16.11.0/16
ips:
- 172.16.11.1-172.16.11.200
---
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderMultusConfig
metadata:
name: gpu1-sriov
namespace: spiderpool
labels:
cni.spidernet.io/rdma-resource-inject: gpu-sriov
spec:
cniType: sriov
sriov:
resourceName: spidernet.io/gpu1sriov
enableRdma: true
ippools:
ipv4: ["gpu1-net11"]
EOF
```
> - `cni.spidernet.io/rdma-resource-inject: gpu-sriov` 固定的 key,value 为用户自定义。
> - `resourceName``ippools` 必须配置,否则 Pod 无法成功注入网络资源。
```shell
$ cat <<EOF | kubectl apply -f -
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderIPPool
metadata:
name: gpu1-net11
spec:
gateway: 172.16.11.254
subnet: 172.16.11.0/16
ips:
- 172.16.11.1-172.16.11.200
---
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderMultusConfig
metadata:
name: gpu1-sriov
namespace: spiderpool
labels:
cni.spidernet.io/rdma-resource-inject: gpu-sriov
spec:
cniType: sriov
sriov:
resourceName: spidernet.io/gpu1sriov
enableRdma: true
ippools:
ipv4: ["gpu1-net11"]
EOF
```
> - `cni.spidernet.io/rdma-resource-inject: gpu-sriov` 固定的 key,value 为用户自定义。
> - `resourceName``ippools` 必须配置,否则 Pod 无法成功注入网络资源。
3. 创建应用时,添加注解: `cni.spidernet.io/rdma-resource-inject: gpu-sriov`,这样 Spiderpool 自动为 Pod 添加 8 个 GPU 亲和网卡的网卡,用于 RDMA 通信,并配置 8 种 RDMA resources 资源:
Expand Down
Loading

0 comments on commit bb07705

Please sign in to comment.