本頁面適用於機器學習 (ML) 工程師和平台管理員,可協助他們處理 ML 工作負載。如要進一步瞭解我們在內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。 Google Cloud
人工智慧 (AI)、機器學習和高效能運算 (HPC) 應用程式需要強大的加速功能,才能縮短作業完成時間,進而提升效能。舉例來說,著重於對話式 AI 和圖像生成的 ML 模型需要高擴充性和運算能力。
閱讀本頁內容前,請務必熟悉網路技術,例如網路介面卡 (NIC) 和 TCP,以及加速器技術,例如 NVIDIA Collective Communications Library (NCCL)。
關於 Google Cloud GPU 超級電腦
Google 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
:您的 Google 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
:您的 Google 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
:您的 Google Cloud 專案 ID。
建立叢集:
gcloud beta container clusters create CLUSTER_NAME \ --enable-dataplane-v2 \ --enable-ip-alias \ --location=CONTROL_PLANE_LOCATION \ --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 \ --location=CONTROL_PLANE_LOCATION \ --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: 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 \
--location=CONTROL_PLANE_LOCATION \
--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=CONTROL_PLANE_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。