本頁面說明如何使用 GPUDirect-TCPXO、GPUDirect-TCPX、gVNIC 和多重網路,在 Google Kubernetes Engine (GKE) Standard 叢集中,盡可能提高高效能 GPU 工作負載的網路頻寬和輸送量。如果您使用 Autopilot 叢集,請參閱「在 Autopilot 模式叢集中盡量提高 GPU 網路頻寬」。
本頁面適用於機器學習 (ML) 工程師和平台管理員,可協助他們處理 ML 工作負載。如要進一步瞭解 Trusted Cloud by S3NS 內容中提及的常見角色和範例工作,請參閱常見的 GKE Enterprise 使用者角色和工作。
人工智慧 (AI)、機器學習和高效能運算 (HPC) 應用程式需要強大的加速功能,才能縮短作業完成時間,進而提升效能。舉例來說,著重於對話式 AI 和圖片生成的機器學習模型需要高擴充性和運算能力。
閱讀本頁內容前,請務必熟悉網路技術,例如網路介面卡 (NIC) 和 TCP,以及加速器技術,例如 NVIDIA Collective Communications Library (NCCL)。
關於 Trusted Cloud GPU 超級電腦
Trusted Cloud 提供專為可擴充的大型模型打造的加速器最佳化超級電腦。這些機器具備下列優點:
- 每部機器搭載八個 NVIDIA B200、H200 或 H100 GPU。
- 主要 NIC 的頻寬最高可達 200 Gbps。
- 次要 NIC (A3 Mega 機器類型最多八個,A3 High 機器類型最多四個),每個 NIC 最多支援 200 Gbps 的頻寬,用於 GPU 資料傳輸。
GKE 工作負載必須使用單一節點上的所有可用 GPU 和所有可用次要 NIC,並使用大量可用頻寬。本文所述解決方案非常適合需要高效能、高處理量和低延遲的工作負載。
充分運用頻寬所需的特性和功能
如要盡量提高 GPU 超級電腦節點的網路頻寬,請使用所有下列功能:
- GPUDirect 網路堆疊:A3 系列機器支援三種網路堆疊,可自訂遠端直接記憶體存取 (RDMA):
- 在 A3 High 機型和 NVIDIA H100 GPU 上,使用 GPUDirect-TCPX 可減少將封包酬載傳輸至 GPU 和從 GPU 傳輸封包酬載所需的額外負擔,與未使用 GPUDirect 的 GPU 相比,這項技術可大幅提升大規模作業的總處理量。
- 在 A3 Mega 機型和 NVIDIA H100 Mega GPU 上,使用 GPUDirect-TCPXO 可進一步提升 GPU 與 VM 的通訊品質。
- 在 A3 Ultra 機器類型和 NVIDIA H200 GPU,以及 A4 機器類型和 NVIDIA B200 GPU 上,利用 GPUDirect RDMA 執行分散式 AI 工作負載,進一步提升輸送量。如要開始使用,請建立自訂的 AI 最佳化 GKE 叢集。
- gVNIC:啟用封包標頭分割、流量導向和緩衝區管理等 GPUDirect 功能。使用 GPUDirect-TCPX 或 GPUDirect-TCPXO 時,必須使用 gVNIC。如要瞭解 gVNIC,請參閱「提高 GPU 節點的網路流量速度」。
- 多重網路:在加速器最佳化機器中新增次要 NIC。每個 NIC 都與各自 VPC 中的獨立子網路相關聯,以避免發生衝突。如要瞭解多網路支援功能,請參閱「為 Pod 設定多網路支援功能」。
- 配置政策:使用資源配置政策,將特定工作負載的所有 GPU 節點放置在實體上相近的伺服器,以盡量減少延遲。詳情請參閱「為 GKE 節點定義緊密放置位置」。
程序大綱
如要一併使用所有這些功能,請按照下列步驟操作:
- 建立虛擬私有雲 (VPC) 和子網路
- 建立 GKE 環境。
- 安裝 GPUDirect 二進位檔和 NCCL 外掛程式
- 部署 NRI 裝置注入器外掛程式
- 部署測試工作負載,驗證 GPUDirect 設定
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
- 請確認您有足夠的 H100 GPU 配額。如要申請更多配額,請參閱 GPU 配額。
需求條件
除非另有說明,否則下列規定適用於 GPUDirect-TCPX 和 GPUDirect-TCPXO。
- GKE 1.27 以上版本支援 GPUDirect-TCPX,且須符合下列條件:
- *
a3-highgpu-8g
機器類型。 - 如果是 GKE 1.27 版,請使用 GKE 修補程式版本 1.27.7-gke.1121000 以上版本。
- 如果是 GKE 1.28 版,請使用 GKE 修補程式版本 1.28.10-gke.1141000 以上版本。
- 如果是 GKE 1.29 版,請使用 GKE 修補程式版本 1.29.5-gke.1121000 以上版本。
- *
GKE 1.28 以上版本支援 GPUDirect-TCPXO,且必須符合下列條件:
a3-megagpu-8g
機器類型。- 如果是 GKE 1.28 版,請使用 GKE 修補程式版本 1.28.9-gke.1250000 以上版本。
- 如果是 GKE 1.29 版,請使用 GKE 修補程式版本 1.29.4-gke.1542000 以上版本。
- 如果是 GKE 1.30 版,請使用 GKE 修補程式版本 1.30.4-gke.1129000 以上版本。
- 如果是 GKE 1.31 版,請使用 GKE 修補程式版本 1.31.1-gke.2008000 以上版本。
- 如果是 GKE 1.32 版,請使用 GKE 修補程式版本 1.32.2-gke.1489001 以上版本。
GKE 節點必須使用 Container-Optimized OS (COS) 節點映像檔。不支援 Ubuntu 和 Windows 節點映像檔。
- GPU 節點必須使用 NVIDIA 驅動程式 535 以上版本。
- 您必須使用 GKE Dataplane V2。
- 如要執行跨多個節點集區的 GPUDirect-TCPX 或 GPUDirect-TCPXO 工作負載,所有節點集區都必須位於相同的 Compute Engine 區域,且必須使用相同的網路集,例如 VPC 和子網路。
限制
限制如下:
- GPUDirect-TCPX 和 GPUDirect-TCPXO 不支援多例項 GPU、GPU 時段共用或 NVIDIA MPS。
- 您無法將 NCCL FastSocket 與 GPUDirect-TCPX 或 GPUDirect-TCPXO 搭配使用。
- GKE 工作負載必須使用單一節點上的所有可用 GPU 和所有可用次要 NIC。多個 Pod 無法在單一節點上使用 GPUDirect-TCPX 或 GPUDirect-TCPXO。
- 您只能使用
a3-highgpu-8g
和a3-megagpu-8g
機器類型。其他 A3 機型則不支援。
建立虛擬私有雲和子網路
在專案中為要新增至節點的每個虛擬 NIC 建立個別的 VPC 網路。每個虛擬私有雲端網路都必須有子網路和防火牆規則,允許內部網路流量。
在專案中為 GPUDirect 建立虛擬私有雲網路,每個網路都包含子網路和防火牆規則。如果是 A3 High 機型,請選擇「GPUDirect-TCPX」分頁;如果是 A3 Mega 機型,請選擇「GPUDirect-TCPXO」分頁,然後完成下列操作:
GPUDirect-TCPXO
為盡量提高頻寬,建議您建立八個新網路。
for N in $(seq 1 8); do gcloud compute networks create PREFIX-net-$N \ --subnet-mode=custom \ --mtu=8244 gcloud compute networks subnets create PREFIX-sub-$N \ --network=PREFIX-net-$N \ --region=REGION \ --range=SUBNET_RANGE gcloud compute firewall-rules create PREFIX-internal-$N \ --network=PREFIX-net-$N \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=SOURCE_RANGE done
更改下列內容:
PROJECT_ID
:您的 Trusted Cloud 專案 ID。REGION
:每個子網路的 Compute Engine 區域。SUBNET_RANGE
:每個子網路的 IP 位址範圍,以 CIDR 標記法表示。這個範例指令會針對八個子網路進行疊代,因此您應使用變數來變更每個子網路的 IP 位址。舉例來說,指定192.168.$N.0/24
,讓第一個子網路使用192.168.1.0/24
,第二個子網路使用192.168.2.0/24
,依此類推。SOURCE_RANGE
:防火牆規則允許連入流量的來源 IP 位址範圍,以 CIDR 標記法表示。例如:192.168.0.0/16
。
GPUDirect-TCPX
為盡量提升頻寬,建議您建立四個新網路。
for N in $(seq 1 4); do gcloud compute networks create PREFIX-net-$N \ --subnet-mode=custom \ --mtu=8244 gcloud compute networks subnets create PREFIX-sub-$N \ --network=PREFIX-net-$N \ --region=REGION \ --range=SUBNET_RANGE gcloud compute firewall-rules create PREFIX-internal-$N \ --network=PREFIX-net-$N \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=SOURCE_RANGE done
更改下列內容:
PROJECT_ID
:您的 Trusted Cloud 專案 ID。REGION
:每個子網路的 Compute Engine 區域。SUBNET_RANGE
:每個子網路的 IP 位址範圍,以 CIDR 標記法表示。這個範例指令會針對四個子網路進行疊代,因此您應使用變數來變更每個子網路的 IP 位址。舉例來說,指定192.168.$N.0/24
,讓第一個子網路使用192.168.1.0/24
,第二個子網路使用192.168.2.0/24
,依此類推。SOURCE_RANGE
:防火牆規則允許連入流量的來源 IP 位址範圍,以 CIDR 標記法表示。例如:192.168.0.0/16
。
確認網路已建立:
gcloud compute networks list
建立 GKE 環境
建立使用多網路功能 (搶先版) 的新 GKE 叢集,並建立具有下列特性的 GPU 節點集區:- 已啟用 gVNIC
- 為每個次要 NIC 指定多重網路子網路
- A3 系列機器,節點搭載 H100 GPU
- 已安裝最新版 NVIDIA 驅動程式
您無法更新現有叢集,改用多重網路。
GPUDirect-TCPXO
選擇支援 GPUDirect-TCPXO 的可用 GKE 版本。 如要列出版本,請執行下列指令:
gcloud container get-server-config \ --format="yaml(validMasterVersions)" \ --region=REGION \ --project=PROJECT_ID
更改下列內容:
REGION
:叢集控制層的運算區域。PROJECT_ID
:您的 Trusted Cloud 專案 ID。
建立叢集:
gcloud beta container clusters create CLUSTER_NAME \ --enable-dataplane-v2 --enable-ip-alias --zone=ZONE \ --enable-multi-networking --cluster-version=VERSION \ --no-enable-autoupgrade \ --project=PROJECT_ID
更改下列內容:
在叢集中建立與您建立的虛擬私有雲網路和子網路對應的 Network 和 GKENetworkParamSet 資源:
kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc1 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc1 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc2 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc2 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc3 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc3 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc4 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc4 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc5 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc5 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc6 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc6 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc7 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc7 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc8 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc8 type: Device --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc1 spec: vpc: PREFIX-net-1 vpcSubnet: PREFIX-sub-1 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc2 spec: vpc: PREFIX-net-2 vpcSubnet: PREFIX-sub-2 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc3 spec: vpc: PREFIX-net-3 vpcSubnet: PREFIX-sub-3 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc4 spec: vpc: PREFIX-net-4 vpcSubnet: PREFIX-sub-4 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc5 spec: vpc: PREFIX-net-5 vpcSubnet: PREFIX-sub-5 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc6 spec: vpc: PREFIX-net-6 vpcSubnet: PREFIX-sub-6 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc7 spec: vpc: PREFIX-net-7 vpcSubnet: PREFIX-sub-7 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc8 spec: vpc: PREFIX-net-8 vpcSubnet: PREFIX-sub-8 deviceMode: NetDevice EOF
這些資源會告知 GKE,以直通模式設定 GPU 流量的 NIC。GKE 不會對這類流量套用使用 eBPF 的內建網路程式設計。
GPUDirect-TCPX
建立叢集:
gcloud beta container clusters create CLUSTER_NAME \ --enable-dataplane-v2 --enable-ip-alias --zone=ZONE \ --enable-multi-networking --cluster-version=VERSION \ --no-enable-autoupgrade \ --project=PROJECT_ID
請替換下列項目: *
CLUSTER_NAME
:新叢集的名稱。 *VERSION
:支援 GPUDirect-TCPX 的 GKE 版本,如「需求條件」一節所述。*ZONE
:叢集的運算可用區。在叢集中建立與您建立的虛擬私有雲網路和子網路對應的 Network 和 GKENetworkParamSet 資源:
kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc1 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc1 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc2 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc2 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc3 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc3 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc4 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc4 type: Device --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc1 spec: vpc: PREFIX-net-1 vpcSubnet: PREFIX-sub-1 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc2 spec: vpc: PREFIX-net-2 vpcSubnet: PREFIX-sub-2 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc3 spec: vpc: PREFIX-net-3 vpcSubnet: PREFIX-sub-3 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc4 spec: vpc: PREFIX-net-4 vpcSubnet: PREFIX-sub-4 deviceMode: NetDevice EOF
這些資源會告知 GKE,以直通模式設定 GPU 流量的 NIC。GKE 不會對這類流量套用使用 eBPF 的內建網路程式設計。
建立 GPU 節點集區
GPUDirect-TCPXO
為 H100 GPU 建立節點集區:
gcloud beta container node-pools create NODE_POOL_NAME \
--zone=ZONE \
--cluster=CLUSTER_NAME \
--project=PROJECT_ID \
--accelerator=type=nvidia-h100-mega-80gb,count=8,gpu-driver-version=LATEST \
--machine-type=a3-megagpu-8g \
--num-nodes=2 \
--additional-node-network network=PREFIX-net-1,subnetwork=PREFIX-sub-1 \
--additional-node-network network=PREFIX-net-2,subnetwork=PREFIX-sub-2 \
--additional-node-network network=PREFIX-net-3,subnetwork=PREFIX-sub-3 \
--additional-node-network network=PREFIX-net-4,subnetwork=PREFIX-sub-4 \
--additional-node-network network=PREFIX-net-5,subnetwork=PREFIX-sub-5 \
--additional-node-network network=PREFIX-net-6,subnetwork=PREFIX-sub-6 \
--additional-node-network network=PREFIX-net-7,subnetwork=PREFIX-sub-7 \
--additional-node-network network=PREFIX-net-8,subnetwork=PREFIX-sub-8 \
--enable-gvnic \
--no-enable-autoupgrade \
--scopes "https://www.googleapis.com/auth/cloud-platform" \
[--placement-policy=POLICY_NAME \
--reservation-affinity=specific \
--reservation=RESERVATION_NAME \
--host-maintenance-interval=PERIODIC]
將 NODE_POOL_NAME
替換為節點集區名稱。
在本範例中,--scopes
「https://www.googleapis.com/auth/cloud-platform」
引數會將節點執行個體的範圍設為 cloud-platform
,方便測試。在實際工作環境中,您可能會想限制範圍,以設定更精細的憑證。
如果使用預留項目,請使用 --placement-policy
、--reservation-affinity
和 --reservation
旗標。指定這些旗標,即可在節點集區中設定政策名稱和預留項目。
如果這項指令失敗,表示專案的 H100 GPU 配額可能不足。請確認配額充足,然後重試指令。
GPUDirect-TCPX
為 H100 GPU 建立節點集區:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--machine-type=a3-highgpu-8g \
--accelerator=type=nvidia-h100-80gb,count=8,gpu-driver-version=LATEST \
--additional-node-network=network=PREFIX-net-1,subnetwork=PREFIX-sub-1 \
--additional-node-network=network=PREFIX-net-2,subnetwork=PREFIX-sub-2 \
--additional-node-network=network=PREFIX-net-3,subnetwork=PREFIX-sub-3 \
--additional-node-network=network=PREFIX-net-4,subnetwork=PREFIX-sub-4 \
--enable-gvnic \
--no-enable-autoupgrade
將 NODE_POOL_NAME
替換為節點集區的名稱。
如果這項指令失敗,表示專案的 H100 GPU 配額可能不足。請確認您有配額,然後重試指令。
建立節點集區後,請確認每個節點都已附加 GPU:
取得叢集中的節點清單:
kubectl get nodes
確認每個 GPU 節點都有八個 GPU:
kubectl describe node NODE_NAME
將
NODE_NAME
替換為要說明的節點名稱。輸出結果會與下列內容相似:
Capacity: ... nvidia.com/gpu: 8 Allocatable: ... nvidia.com/gpu: 8
安裝 GPUDirect 二進位檔並設定 NCCL
本節說明如何根據 A3 機型 (A3 High 適用的 GPUDirect-TCPX、A3 Mega 適用的 GPUDirect-TCPXO) 和特定 NCCL 程式庫版本,使用 DaemonSet 安裝 GPUDirect 二進位檔。
GPUDirect-TCPXO
這個 DaemonSet 會執行下列作業:
- 預先安裝,設定 GPUDirect-TCPXO 相關設定。
- 在節點上安裝 NCCL 程式庫和 GPUDirect-TCPXO 二進位檔。
- 將程式庫和二進位檔儲存在 VM 的
/home/kubernetes/bin/nvidia/lib64
目錄中。根據預設,GKE 會將這個目錄掛接到需要使用 NCCL 和 GPUDirect-TCPXO 的 GPU 容器中的/usr/local/nvidia/lib64
路徑。
如要安裝二進位檔並設定 NCCL,請完成下列步驟:
部署 DaemonSet:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/nccl-tcpxo-installer.yaml
NCCL 外掛程式大約需要兩分鐘才能開始執行。
驗證 DaemonSet Pod 的狀態:
kubectl get pods -n=kube-system -l=name=nccl-tcpxo-installer
輸出結果會與下列內容相似:
# Output nccl-tcpxo-installer-6c2pv 1/1 Running 0 2m11s nccl-tcpxo-installer-qgg82 1/1 Running 0 2m11s
GPUDirect-TCPX
這個 DaemonSet 會執行下列作業:
- 在節點上安裝 NCCL 程式庫和 GPUDirect-TCPX 二進位檔。
- 將程式庫和二進位檔儲存在 VM 的
/home/kubernetes/bin/nvidia/lib64
目錄中。根據預設,GKE 會將這個目錄掛接到需要使用 NCCL 和 GPUDirect-TCPX 的 GPU 容器中/usr/local/nvidia/lib64
路徑。
如要安裝二進位檔並設定 NCCL,請執行下列操作:
部署 DaemonSet:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-tcpx-installer.yaml
NCCL 外掛程式大約需要兩分鐘才能開始執行。
驗證 DaemonSet Pod 的狀態:
kubectl get pods -n=kube-system -l=name=nccl-tcpx-installer
輸出結果會與下列內容相似:
nccl-tcpx-installer-6c2pv 1/1 Running 0 2m11s nccl-tcpx-installer-qgg82 1/1 Running 0 2m11s
部署 NRI 裝置注入器外掛程式
本節說明如何使用 DaemonSet 安裝 NRI 裝置注入器。這兩種 H100 GPU 機型都會安裝相同的 NRI 裝置注入器外掛程式。這個外掛程式會執行下列作業:
- 在搭載 H100 GPU 的節點上啟用節點資源介面 (NRI)。GKE 1.29 以上版本預設會啟用 NRI。
- 部署 NRI 裝置注入器外掛程式容器,將 GPU 裝置注入 Pod 註解指定的容器。
如要安裝外掛程式,請按照下列步驟操作:
部署 DaemonSet:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nri_device_injector/nri-device-injector.yaml
NCCL 外掛程式大約需要兩分鐘才能開始執行。
驗證 DaemonSet Pod 的狀態:
kubectl get pods -n=kube-system -l=name=device-injector
輸出結果會與下列內容相似:
# Output device-injector-md6hb 1/1 Running 0 4h54m device-injector-vh9bm 1/1 Running 0 4h54m
部署測試工作負載
在本節中,您將部署範例工作負載,確認 NCCL 和 GPUDirect-TCPX 或 GPUDirect-TCPXO 運作正常。這個範例工作負載會執行下列作業:
- 部署兩個 Pod,每個 Pod 都會在具有 H100 GPU 的節點中執行。
- 在每個 Pod 中部署 Sidecar 容器,讓這些 Pod 使用 GPUDirect-TCPXO 或 GPUDirect-TCPX。
如要部署這個範例工作負載,請按照下列步驟操作:
GPUDirect-TCPXO
這項工作負載包含名為 tcpxo-daemon 的 Sidecar 容器,可執行服務,讓 Pod 使用 GPUDirect-TCPXO。您必須將這個 Sidecar 容器新增至自有環境中需要使用 GPUDirect-TCPXO 的任何 Pod。如需在資訊清單中新增必要欄位的程式碼片段,請參閱「在資訊清單中新增 GPUDirect」。
使用測試工作負載部署兩個 Pod:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/nccl-test-latest.yaml
Pod 部署完成後,請觸發全體收集測試:
kubectl exec --stdin --tty --container=nccl-test nccl-test-host-1 -- /scripts/allgather.sh nccl-host-1 nccl-host-2
輸出結果會與下列內容相似:
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 0 0 float none -1 0.24 0.00 0.00 0 0.18 0.00 0.00 0 0 0 float none -1 0.19 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 256 4 float none -1 235.2 0.00 0.00 0 235.1 0.00 0.00 0 512 8 float none -1 241.0 0.00 0.00 0 236.1 0.00 0.00 0 1024 16 float none -1 236.3 0.00 0.00 0 233.3 0.00 0.00 0 2048 32 float none -1 234.1 0.01 0.01 0 233.4 0.01 0.01 0 4096 64 float none -1 237.1 0.02 0.02 0 235.3 0.02 0.02 0 8192 128 float none -1 236.2 0.03 0.03 0 235.2 0.03 0.03 0 16384 256 float none -1 236.6 0.07 0.06 0 238.5 0.07 0.06 0 32768 512 float none -1 237.9 0.14 0.13 0 238.8 0.14 0.13 0 65536 1024 float none -1 242.3 0.27 0.25 0 239.4 0.27 0.26 0 131072 2048 float none -1 263.0 0.50 0.47 0 275.1 0.48 0.45 0 262144 4096 float none -1 279.2 0.94 0.88 0 269.9 0.97 0.91 0 524288 8192 float none -1 273.5 1.92 1.80 0 273.5 1.92 1.80 0 1048576 16384 float none -1 315.1 3.33 3.12 0 314.1 3.34 3.13 0 2097152 32768 float none -1 319.2 6.57 6.16 0 311.5 6.73 6.31 0 4194304 65536 float none -1 331.8 12.64 11.85 0 331.3 12.66 11.87 0 8388608 131072 float none -1 356.3 23.54 22.07 0 353.8 23.71 22.23 0 16777216 262144 float none -1 409.1 41.01 38.45 0 405.2 41.40 38.81 0 33554432 524288 float none -1 451.4 74.34 69.69 0 447.7 74.94 70.26 0 67108864 1048576 float none -1 713.4 94.07 88.19 0 713.8 94.01 88.13 0 134217728 2097152 float none -1 1122.1 119.62 112.14 0 1116.3 120.23 112.72 0 268435456 4194304 float none -1 1785.8 150.32 140.92 0 1769.2 151.72 142.24 0 536870912 8388608 float none -1 2859.7 187.74 176.00 0 2852.6 188.20 176.44 0 1073741824 16777216 float none -1 5494.1 195.44 183.22 0 5568.2 192.83 180.78 0 2147483648 33554432 float none -1 10841 198.09 185.71 0 10798 198.88 186.45 0 4294967296 67108864 float none -1 21453 200.21 187.70 0 21490 199.86 187.37 0 8589934592 134217728 float none -1 42603 201.63 189.03 0 42670 201.31 188.73 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 45.7587 #
GPUDirect-TCPX
這項工作負載包含名為 tcpx-daemon 的 Sidecar 容器,可執行服務,讓 Pod 使用 GPUDirect-TCPX。您必須將這個 Sidecar 容器新增至自有環境中需要使用 GPUDirect-TCPX 的任何 Pod。如需在資訊清單中新增必要欄位的程式碼片段,請參閱「在資訊清單中新增 GPUDirect」。
查看 GitHub 中的
nccl-config.yaml
ConfigMap 資訊清單。 這份資訊清單會部署指令碼,用於初始化 NCCL 全體收集測試,並設定 NCCL 專屬的設定。在 GitHub 中查看
nccl-test-latest.yaml
部署資訊清單。部署 ConfigMap 和測試工作負載:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-config.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-test-latest.yaml
執行下列指令,為節點觸發 NCCL 全體收集測試:
kubectl exec \ --stdin --tty --container=nccl-test nccl-test-host-1 \ -- /configs/allgather.sh nccl-host-1 nccl-host-2
輸出結果會與下列內容相似:
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1048576 16384 float none -1 696.8 1.50 1.41 0 729.0 1.44 1.35 0 2097152 32768 float none -1 776.4 2.70 2.53 0 726.7 2.89 2.71 0 4194304 65536 float none -1 774.3 5.42 5.08 0 805.1 5.21 4.88 0 8388608 131072 float none -1 812.1 10.33 9.68 0 817.6 10.26 9.62 0 16777216 262144 float none -1 1035.2 16.21 15.19 0 1067.8 15.71 14.73 0 33554432 524288 float none -1 1183.3 28.36 26.59 0 1211.8 27.69 25.96 0 67108864 1048576 float none -1 1593.4 42.12 39.49 0 1510.5 44.43 41.65 0 134217728 2097152 float none -1 2127.8 63.08 59.13 0 2312.7 58.03 54.41 0 268435456 4194304 float none -1 3603.0 74.50 69.85 0 3586.2 74.85 70.17 0 536870912 8388608 float none -1 7101.7 75.60 70.87 0 7060.9 76.03 71.28 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 29.8293
使用必要的 NCCL 設定來提升效能
下列鍵/值組合是 GPUDirect-TCPX 和 GPUDirect-TCPXO 的必要 NCCL 設定。部署使用 NCCL 的工作負載時,請將這些工作負載設為環境變數,以提升效能。
GPUDirect-TCPXO
"LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64\"",
"NCCL_FASTRAK_CTRL_DEV=eth0",
"NCCL_FASTRAK_IFNAME=eth1,eth2,eth3,eth4,eth5,eth6,eth7,eth8",
"NCCL_SOCKET_IFNAME=eth0",
"NCCL_CROSS_NIC=0",
"NCCL_ALGO=Ring,Tree",
"NCCL_PROTO=Simple,LL128",
"NCCL_MIN_NCHANNELS=4",
"NCCL_TUNER_PLUGIN=libnccl-tuner.so",
"NCCL_TUNER_CONFIG_PATH=/usr/local/nvidia/lib64/a3plus_tuner_config.textproto",
"NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE=/usr/local/nvidia/lib64/a3plus_guest_config.textproto",
"NCCL_DYNAMIC_CHUNK_SIZE=524288",
"NCCL_P2P_NET_CHUNKSIZE=524288",
"NCCL_P2P_PCI_CHUNKSIZE=524288",
"NCCL_P2P_NVL_CHUNKSIZE=1048576",
"NCCL_FASTRAK_NUM_FLOWS=2",
"NCCL_FASTRAK_USE_SNAP=1",
"NCCL_FASTRAK_PLUGIN_ACCEPT_TIMEOUT_MS=600000",
"NCCL_FASTRAK_ENABLE_CONTROL_CHANNEL=0",
"NCCL_BUFFSIZE=8388608",
"CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7",
"NCCL_NET_GDR_LEVEL=PIX",
"NCCL_FASTRAK_ENABLE_HOTPATH_LOGGING=0",
"NCCL_FASTRAK_USE_LLCM=1",
"NCCL_NVLS_ENABLE=0"
或者,您也可以按照下列步驟一次設定所有設定:
在工作負載容器資訊清單中,將下列鍵/值組合新增為環境變數:
NCCL_LIB_DIR="/usr/local/nvidia/lib64"
確保工作負載容器啟動時會執行
nccl-env-profile.sh
指令碼。舉例來說,您可以在 Pod 規格中覆寫容器的指令,加入下列內容:source ${NCCL_LIB_DIR}/nccl-env-profile.sh
支援 LL128
NVIDIA LL128 (低延遲 128) NCCL 通訊協定可大幅提升中小型集合的效能。GPUDirect-TCPXO 支援 LL128 通訊協定。
如要使用 LL128,請確認「安裝 GPUDirect 二進位檔並設定 NCCL」一節中的 nccl-tcpxo-installer.yaml
檔案使用下列容器映像檔版本或更新版本:
us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-
dev:v1.0.8-1
如要設定 LL128,請執行下列操作:
如要使用
us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx- dev:v1.0.8-1
NCCL 外掛程式版本,請按照下列步驟操作:在工作負載資訊清單中,設定下列環境變數:
NCCL_LIB_DIR="/usr/local/nvidia/lib64
設定工作負載,在容器啟動時執行
nccl-env-profile-ll128.sh
指令碼。在工作負載資訊清單中,設定下列指令:source ${NCCL_LIB_DIR}/nccl-env-profile-ll128.sh
nccl-env-profile-ll128.sh
指令碼具有下列環境變數:NCCL_PROTO=Simple,LL128 NCCL_TUNER_CONFIG_PATH=/usr/local/nvidia/lib64/a3plus_tuner_config_ll128.textproto NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE=/usr/local/nvidia/lib64/a3plus_guest_config_ll128.textproto
如果是
us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.9-1
NCCL 外掛程式版本和後續版本,LL128 會成為預設參數,因此使用nccl-env-profile.sh
指令碼或nccl-env-profile-ll128.sh
指令碼都會啟用 LL128。如要停用 LL128:在工作負載資訊清單中,設定下列環境變數:
NCCL_LIB_DIR="/usr/local/nvidia/lib64
設定工作負載,在容器啟動時執行
nccl-env-profile-ll128.sh
指令碼。在工作負載資訊清單中,設定下列指令:source ${NCCL_LIB_DIR}/nccl-env-profile-simple.sh
nccl-env-profile-simple.sh
指令碼具有下列環境變數:NCCL_PROTO=Simple NCCL_TUNER_CONFIG_PATH=/usr/local/nvidia/lib64/a3plus_tuner_config_simple.textproto NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE=/usr/local/nvidia/lib64/a3plus_tuner_config_simple.textproto
GPUDirect-TCPX
"LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/usr/local/tcpx/lib64\"",
"NCCL_SOCKET_IFNAME=\"eth0\"",
"NCCL_ALGO=Ring",
"NCCL_PROTO=Simple",
"NCCL_CROSS_NIC=0",
"NCCL_NET_GDR_LEVEL=PIX",
"NCCL_P2P_PXN_LEVEL=0",
"NCCL_GPUDIRECTTCPX_SOCKET_IFNAME=eth1,eth2,eth3,eth4",
"NCCL_GPUDIRECTTCPX_CTRL_DEV=eth0",
"NCCL_DYNAMIC_CHUNK_SIZE=524288",
"NCCL_P2P_NET_CHUNKSIZE=524288",
"NCCL_P2P_PCI_CHUNKSIZE=524288",
"NCCL_P2P_NVL_CHUNKSIZE=1048576",
"NCCL_BUFFSIZE=4194304",
"NCCL_NSOCKS_PERTHREAD=4",
"NCCL_SOCKET_NTHREADS=1",
"NCCL_GPUDIRECTTCPX_TX_BINDINGS=\"eth1:8-21,112-125;eth2:8-21,112-125;eth3:60-73,164-177;eth4:60-73,164-177\"",
"NCCL_GPUDIRECTTCPX_RX_BINDINGS=\"eth1:22-35,126-139;eth2:22-35,126-139;eth3:74-87,178-191;eth4:74-87,178-191\"",
"NCCL_GPUDIRECTTCPX_PROGRAM_FLOW_STEERING_WAIT_MICROS=500000"
收集 NCCL 偵錯記錄
如要記錄 NCCL 錯誤,建議您新增下列 NCCL 設定:
NCCL_DEBUG=INFO
NCCL_DEBUG_SUBSYS=INIT,NET,ENV,COLL,GRAPH
NCCL_DEBUG_FILE=/DIRECTORY/FILE_NAME.%h.%p
NCCL_DEBUG=INFO
:列印偵錯資訊。- 對於大規模工作負載 (64 個節點以上),可能會產生大量記錄。為避免發生這種情況,除非您指定
NCCL_DEBUG_FILE
,否則建議設定NCCL_DEBUG=WARN
,將記錄檔限制為僅記錄錯誤。
- 對於大規模工作負載 (64 個節點以上),可能會產生大量記錄。為避免發生這種情況,除非您指定
NCCL_DEBUG_SUBSYS
:篩選 NCCL 收集偵錯資訊的子系統。建議您收集下列子系統的記錄:INIT
:NCCL 的初始化階段。NET
:NCCL 網路。ENV
:NCCL 使用的環境變數。COLL
:集體作業。GRAPH
:拓撲偵測和圖形搜尋。
如要收集不同子系統的記錄,請參閱 NCCL 說明文件中的
NCCL_DEBUG_SUBSYS
,查看可接受的值清單。NCCL_DEBUG_FILE
(選用):將 NCCL 偵錯記錄輸出內容導向至您指定的檔案。這個變數會將 NCCL 記錄寫入標準檔案,避免記錄輸出與應用程式輸出混雜。這個變數也會將不同 NCCL 排序的記錄寫入不同檔案,避免記錄混雜。請使用下列檔案名稱格式:
/DIRECTORY/FILE_NAME.%h.%p
更改下列內容:
DIRECTORY
:要儲存記錄檔的目錄。FILE_NAME
:記錄檔的名稱。
預留位置
%h
會解析為節點的主機名稱,而%p
則會解析為產生記錄的程序的程序 ID (PID)。
如要進一步瞭解如何偵錯 NCCL 記錄,請參閱「排解 GKE 中的 GPU 問題」。
在資訊清單中新增 GPUDirect
本節說明必須新增至 Kubernetes 資訊清單的必要欄位,Pod 才能使用 GPUDirect。
請根據 GPUDirect 類型執行下列操作:
GPUDirect-TCPXO
在 Pod 中繼資料中新增下列註解。 如果沒有這些註解,Pod 就必須使用
hostNetwork:true
,tcpxo-daemon
容器則必須使用privileged:true
。metadata: annotations: devices.gke.io/container.tcpxo-daemon: |+ - path: /dev/nvidia0 - path: /dev/nvidia1 - path: /dev/nvidia2 - path: /dev/nvidia3 - path: /dev/nvidia4 - path: /dev/nvidia5 - path: /dev/nvidia6 - path: /dev/nvidia7 - path: /dev/nvidiactl - path: /dev/nvidia-uvm - path: /dev/dmabuf_import_helper networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"vpc1"}, {"interfaceName":"eth2","network":"vpc2"}, {"interfaceName":"eth3","network":"vpc3"}, {"interfaceName":"eth4","network":"vpc4"}, {"interfaceName":"eth5","network":"vpc5"}, {"interfaceName":"eth6","network":"vpc6"}, {"interfaceName":"eth7","network":"vpc7"}, {"interfaceName":"eth8","network":"vpc8"} ]
在 Pod 規格中新增下列欄位:
spec: volumes: - name: libraries hostPath: path: /home/kubernetes/bin/nvidia/lib64 - name: sys hostPath: path: /sys - name: proc-sys hostPath: path: /proc/sys - name: aperture-devices hostPath: path: /dev/aperture_devices
在資訊清單中新增下列容器,即可執行
tcpxo-daemon
服務。 將 (TCPXO_DAEMON_IMAGE
) 換成最新圖片,us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.17
:- name: tcpxo-daemon image: TCPXO_DAEMON_IMAGE imagePullPolicy: Always command: ["/bin/sh", "-c"] args: - | set -ex chmod 755 /fts/entrypoint_rxdm_container.sh /fts/entrypoint_rxdm_container.sh --num_hops=2 --num_nics=8 --uid= --alsologtostderr securityContext: capabilities: add: - NET_ADMIN - NET_BIND_SERVICE volumeMounts: - name: libraries mountPath: /usr/local/nvidia - name: sys mountPath: /hostsysfs - name: proc-sys mountPath: /hostprocsysfs env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64
在每個 GPU 容器中新增下列環境變數:
env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 - name: NCCL_FASTRAK_LLCM_DEVICE_DIRECTORY value: /dev/aperture_devices
將下列 volumeMounts 新增至每個 GPU 容器。如果沒有
aperture_devices
設定,GPU 容器必須具備privileged:true
:volumeMounts: - name: aperture-devices mountPath: /dev/aperture_devices
新增環境變數來設定 NCCL 選項。詳情請參閱「使用建議的 NCCL 設定提升效能」。
完成的 Pod 規格如下所示:
apiVersion: v1
kind: Pod
metadata:
name: a3plus-workloads
annotations:
devices.gke.io/container.tcpxo-daemon: |+
- path: /dev/nvidia0
- path: /dev/nvidia1
- path: /dev/nvidia2
- path: /dev/nvidia3
- path: /dev/nvidia4
- path: /dev/nvidia5
- path: /dev/nvidia6
- path: /dev/nvidia7
- path: /dev/nvidiactl
- path: /dev/nvidia-uvm
- path: /dev/dmabuf_import_helper
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"vpc1"},
{"interfaceName":"eth2","network":"vpc2"},
{"interfaceName":"eth3","network":"vpc3"},
{"interfaceName":"eth4","network":"vpc4"},
{"interfaceName":"eth5","network":"vpc5"},
{"interfaceName":"eth6","network":"vpc6"},
{"interfaceName":"eth7","network":"vpc7"},
{"interfaceName":"eth8","network":"vpc8"}
]
...
containers:
- name: tcpxo-daemon
image: TCPXO_DAEMON_IMAGE
imagePullPolicy: Always
command: ["/bin/sh", "-c"]
args:
- |
set -ex
chmod 755 /fts/entrypoint_rxdm_container.sh
/fts/entrypoint_rxdm_container.sh --num_hops=2 --num_nics=8 --uid= --alsologtostderr
securityContext:
capabilities:
add:
- NET_ADMIN
- NET_BIND_SERVICE
volumeMounts:
- name: libraries
mountPath: /usr/local/nvidia
- name: sys
mountPath: /hostsysfs
- name: proc-sys
mountPath: /hostprocsysfs
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
- name: main-application-container
...
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
- name: NCCL_FASTRAK_LLCM_DEVICE_DIRECTORY
value: /dev/aperture_devices
securityContext:
volumeMounts:
- name: aperture-devices
mountPath: /dev/aperture_devices
resources:
limits:
nvidia.com/gpu: 8
volumes:
- name: libraries
hostPath:
path: /home/kubernetes/bin/nvidia
- name: sys
hostPath:
path: /sys
- name: proc-sys
hostPath:
path: /proc/sys
- name: aperture-devices
hostPath:
path: /dev/aperture_devices
GPUDirect-TCPX
在 Pod 中繼資料中新增下列註解。 如果沒有這些註解,Pod 就必須使用
hostNetwork:true
,tcpx-daemon
容器則必須使用privileged:true
。metadata: annotations: devices.gke.io/container.tcpx-daemon: |+ - path: /dev/nvidia0 - path: /dev/nvidia1 - path: /dev/nvidia2 - path: /dev/nvidia3 - path: /dev/nvidia4 - path: /dev/nvidia5 - path: /dev/nvidia6 - path: /dev/nvidia7 - path: /dev/nvidiactl - path: /dev/nvidia-uvm networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"vpc1"}, {"interfaceName":"eth2","network":"vpc2"}, {"interfaceName":"eth3","network":"vpc3"}, {"interfaceName":"eth4","network":"vpc4"}, ]
在 Pod 規格中新增下列欄位:
spec: volumes: - name: libraries hostPath: path: /home/kubernetes/bin/nvidia/lib64 - name: sys hostPath: path: /sys - name: proc-sys hostPath: path: /proc/sys
在資訊清單中新增下列容器,即可執行 tcpx-daemon 服務:
- name: tcpx-daemon image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd-dev:v2.0.9 command: - /tcpgpudmarxd/build/app/tcpgpudmarxd - --gpu_nic_preset - a3vm - --gpu_shmem_type - fd - --uds_path - /run/tcpx - --setup_param - \"--verbose 128 2 0 \" securityContext: capabilities: add: - NET_ADMIN volumeMounts: - name: libraries mountPath: /usr/local/nvidia/lib64 - name: tcpx-socket mountPath: /run/tcpx - name: sys mountPath: /hostsysfs - name: proc-sys mountPath: /hostprocsysfs env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64
將下列磁碟區掛接至要求 GPU 的任何容器:
volumeMounts: - name: tcpx-socket mountPath: /tmp - name: libraries mountPath: /usr/local/nvidia/lib64
新增環境變數來設定 NCCL 選項。詳情請參閱本文的「使用建議的 NCCL 設定來提升效能」一節。
在每個 GPU 容器中新增下列環境變數:
env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64
完成的 Pod 規格如下所示:
apiVersion: v1
kind: Pod
metadata:
name: a3-gpu-workloads-example
labels:
name: a3-gpu-workloads-example
annotations:
devices.gke.io/container.tcpx-daemon: |+
- path: /dev/nvidia0
- path: /dev/nvidia1
- path: /dev/nvidia2
- path: /dev/nvidia3
- path: /dev/nvidia4
- path: /dev/nvidia5
- path: /dev/nvidia6
- path: /dev/nvidia7
- path: /dev/nvidiactl
- path: /dev/nvidia-uvm
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"vpc1"},
{"interfaceName":"eth2","network":"vpc2"},
{"interfaceName":"eth3","network":"vpc3"},
{"interfaceName":"eth4","network":"vpc4"}
]
spec:
containers:
- name: tcpx-daemon
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd-dev:v2.0.11
imagePullPolicy: Always
command:
- /tcpgpudmarxd/build/app/tcpgpudmarxd
- --gpu_nic_preset
- a3vm
- --gpu_shmem_type
- fd
- --uds_path
- /run/tcpx
- --setup_param
- \"--verbose 128 2 0 \"
securityContext:
capabilities:
add:
- NET_ADMIN
volumeMounts:
- name: libraries
mountPath: /usr/local/nvidia/lib64
readOnly: true
- name: tcpx-socket
mountPath: /run/tcpx
- name: sys
mountPath: /hostsysfs
- name: proc-sys
mountPath: /hostprocsysfs
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
- name: a3-gpu-workloads-example
...
volumeMounts:
- name: tcpx-socket
mountPath: /tmp
- name: libraries
mountPath: /usr/local/nvidia/lib64
readOnly: true
resources:
limits:
nvidia.com/gpu: 8
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
...
volumes:
- name: libraries
hostPath:
path: /home/kubernetes/bin/nvidia/lib64
- name: tcpx-socket
emptyDir:
- name: sys
hostPath:
path: /sys
- name: proc-sys
hostPath:
path: /proc/sys
後續步驟
- 閱讀 GPUDirect-TCPXO 版本資訊
- 進一步瞭解使用 GPUDirect-TCPX(O) 執行工作負載的最佳做法
- 瞭解 GKE 網路的最佳做法。
- 進一步瞭解 Nvidia GPUDirect 系列技術,以便在 Nvidia GPU 上移動及存取資料。
- 瞭解 GKE 目前可用的 GPU 版本,以及如何要求使用 GPU。