Azure Kubernetes 服务#

RAPIDS 可以通过 Azure Kubernetes 服务 (AKS) 部署在 Azure 上。

要运行 RAPIDS,您需要一个配备可用 GPU 的 Kubernetes 集群。

先决条件#

首先,您需要安装 az CLI 工具以及 kubectlhelm 等用于管理 Kubernetes 的工具。

确保您已登录到 az CLI。

$ az login

创建 Kubernetes 集群#

现在我们可以启动一个启用 GPU 的 AKS 集群。首先启动一个 AKS 集群。

az aks create -g <resource group> -n rapids \
        --enable-managed-identity \
        --node-count 1 \
        --enable-addons monitoring \
        --enable-msi-auth-for-monitoring  \
        --generate-ssh-keys

集群创建完成后,我们需要将凭据拉取到本地配置中。

$ az aks get-credentials -g <resource group> --name rapids
Merged "rapids" as current context in ~/.kube/config

接下来,我们需要添加一个额外的 GPU 节点组,您可以在 Azure 文档中了解更多信息。

注意

您需要启用 GPUDedicatedVHDPreview 功能,以便自动安装 NVIDIA 驱动程序。

您可以通过以下命令检查是否已启用:

$ az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/GPUDedicatedVHDPreview')].{Name:name,State:properties.state}"
Name                                               State
-------------------------------------------------  -------------
Microsoft.ContainerService/GPUDedicatedVHDPreview  NotRegistered
如果看到 NotRegistered,请按照以下说明操作

如果尚未注册,您需要注册它,这可能需要几分钟时间。

$ az feature register --name GPUDedicatedVHDPreview --namespace Microsoft.ContainerService
Once the feature 'GPUDedicatedVHDPreview' is registered, invoking 'az provider register -n Microsoft.ContainerService' is required to get the change propagated
Name
-------------------------------------------------
Microsoft.ContainerService/GPUDedicatedVHDPreview

持续检查直到其进入注册状态。

$ az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/GPUDedicatedVHDPreview')].{Name:name,State:properties.state}"
Name                                               State
-------------------------------------------------  -----------
Microsoft.ContainerService/GPUDedicatedVHDPreview  Registered

当状态显示为 registered 时,使用 az provider register 命令刷新 Microsoft.ContainerService 资源提供程序的注册。

$ az provider register --namespace Microsoft.ContainerService

然后安装 aks-preview CLI 扩展,使用以下 Azure CLI 命令:

$ az extension add --name aks-preview
az aks nodepool add \
    --resource-group <resource group> \
    --cluster-name rapids \
    --name gpunp \
    --node-count 1 \
    --node-vm-size Standard_NC48ads_A100_v4 \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3

这里我们添加了一个新的节点池,由 Standard_NC48ads_A100_v4 实例组成,每个实例有两个 A100 GPU。我们还为该节点池启用了 1 到 3 个节点之间的自动扩缩容。

然后我们可以安装 NVIDIA 驱动程序。

helm install --wait --generate-name --repo https://helm.ngc.nvidia.com/nvidia \
    -n gpu-operator --create-namespace \
    gpu-operator \
    --set operator.runtimeClass=nvidia-container-runtime

新节点池创建和配置完成后,我们可以测试集群了。

让我们创建一个使用 GPU 计算的示例 Pod,以确保一切按预期工作。

cat << EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: cuda-vectoradd
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vectoradd
    image: "nvidia/samples:vectoradd-cuda11.6.0-ubuntu18.04"
    resources:
       limits:
         nvidia.com/gpu: 1
EOF
$ kubectl logs pod/cuda-vectoradd
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

如果在输出中看到 Test PASSED,您可以确信您的 Kubernetes 集群已正确设置了 GPU 计算。

接下来,清理该 Pod。

$ kubectl delete pod cuda-vectoradd
pod "cuda-vectoradd" deleted

我们应该能够测试我们是否可以调度 GPU Pods。

安装 RAPIDS#

现在您已在 AKS 上拥有一个启用 GPU 的 Kubernetes 集群,您可以使用任何支持的方法安装 RAPIDS。

清理#

您还可以使用以下命令删除 AKS 集群以停止计费。

$ az aks delete -g <resource group> -n rapids
/ Running ..