在ACK上如何使用AC2镜像

Alibaba Cloud AI Containers(简称AC2)提供了一系列的AI容器镜像,与阿里云基础设施(ECS、ACK等)深度集成优化,极大地节省了AI应用环境部署的成本。本文介绍了在ACK上如何运行AC2容器进行PyTorch训练。

创建ACK集群

在ACK上使用AC2,需要首先创建ACK集群,并确保集群中至少有一台可用节点。更多信息,请参见创建ACK托管集群

说明

创建节点池时,节点的默认操作系统为「Alibaba Cloud Linux 3.2104」。对于x86-64架构的CPU节点,可以选择「ContainerOS」作为节点系统,以获得更快的启动速度以及更小的性能开销

连接并管理ACK集群

目前可以通过三种方式连接并管理集群:

  • 通过kubectl工具连接集群。Kubernetes提供了命令行工具用以管理K8s集群,通过kubectl工具连接集群,需要在客户端机器上安装kubectl,并确定通公网还是私网来连接集群。更多信息,请参见获取集群KubeConfig并通过kubectl工具连接集群

  • 使用CloudShell通过kubectl工具连接集群。CloudShell是阿里云推出的云命令行工具,通过容器服务控制台启动CloudShell时,CloudShell会预装kubectl并自动加载KubeConfig文件。更多信息,请参见在CloudShell上通过kubectl管理Kubernetes集群

  • 直接通过容器服务控制台管理集群。更多信息,请参见与原生Kubernetes名词对照

使用AC2训练

AC2中提供了多种训练框架镜像,镜像中集成了不同的AI运行框架,包括PyTorch、TensorFlow等,同时按照不同的运行平台,内置了经过验证的NVIDIA驱动、CUDA等运行驱动以及加速库。为开发者节省了大量的环境部署时间。

PyTorch框架镜像

运行PyTorch CPU镜像训练模型

  1. 在kubectl所在的客户端机器上,创建Pod文件。

    1. 创建并打开文件。

      vim pytorch-training-cpu.yaml
    2. i键进入编辑模式,将以下内容复制到文件中。

      文件中指定AC2运行镜像,并传入运行命令。

      apiVersion: v1
      kind: Pod
      metadata:
        name: pytorch-training-cpu
        namespace: default
      spec:
        restartPolicy: OnFailure
        containers: 
        - name: pytorch-training
          image: ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/pytorch:2.3.0-alinux3.2304
          command:
            - "/bin/sh"
            - "-c"
          args:
          - "git clone https://github.com/pytorch/examples.git && python3 examples/mnist/main.py --no-cuda"
          workingDir: /root
    3. Esc键退出编辑模式,输入:wq后按Enter键保存文件。

  2. 通过kubectl指定集群创建训练Pod。

    运行后,该Pod将会下载PyTorch实例代码,并运行MNIST模型训练示例。

    kubectl create -f pytorch-training-cpu.yaml

    Pod创建成功会返回以下内容。

    pod/pytorch-training-cpu created
  3. 使用kubectl检查Pod状态。

    kubectl get pods

    返回如下信息,其中创建的训练Pod名为pytorch-training-cpu。首次运行容器时,会从AC2拉取镜像文件,此时STATUS显示ContainerCreating。重复运行该命令,直至状态显示Running

    NAME                   READY   STATUS    RESTARTS   AGE
    pytorch-training-cpu   1/1     Running   0          5m42s
  4. 使用以下命令查看Pod训练输出。

    kubectl logs pytorch-training-cpu

    输出日志类似以下内容。

    Cloning into 'examples'...
    Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
    ...
    
    Train Epoch: 1 [0/60000 (0%)]   Loss: 2.305400
    Train Epoch: 1 [640/60000 (1%)] Loss: 1.359776
    ...
    
    Train Epoch: 14 [58880/60000 (98%)]     Loss: 0.011213
    Train Epoch: 14 [59520/60000 (99%)]     Loss: 0.000181
    
    Test set: Average loss: 0.0271, Accuracy: 9912/10000 (99%)
  5. 训练完毕后,再次检查Pod状态,STATUS显示Completed,此时使用以下命令清理集群。

    kubectl delete pods pytorch-training-cpu

    Pod清理完毕会返回以下内容。

    pod "pytorch-training-cpu" deleted

运行PyTorch GPU镜像训练模型

  1. 在kubectl所在的客户端机器上,创建Pod文件。

    1. 创建并打开文件。

      vim pytorch-training-gpu.yaml
    2. i键进入编辑模式,将以下内容复制到文件中。

      文件中申请GPU资源,指定AC2运行镜像,并传入运行命令。

      apiVersion: v1
      kind: Pod
      metadata:
        name: pytorch-training-gpu
        namespace: default
      spec:
        restartPolicy: OnFailure
        containers: 
        - name: pytorch-training
          image: ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/pytorch:2.3.0-cuda12.1.1-alinux3.2304
          command:
            - "/bin/sh"
            - "-c"
          args:
          - "git clone https://github.com/pytorch/examples.git && python3 examples/mnist/main.py"
          resources:
            limits:
              nvidia.com/gpu: 1
          workingDir: /root
    3. Esc键退出编辑模式,输入:wq后按Enter键保存文件。

  2. 通过kubectl指定集群创建训练Pod。

    运行后,该Pod将会下载PyTorch实例代码,并运行MNIST模型训练示例。

    kubectl create -f pytorch-training-gpu.yaml

    Pod创建成功会返回以下内容。

    pod/pytorch-training-gpu created
  3. 使用kubectl检查Pod状态。

    kubectl get pods

    返回如下信息,其中创建的训练Pod名为pytorch-training-gpu。首次运行容器时,会从AC2拉取镜像文件,此时STATUS显示ContainerCreating。重复运行该命令,直至状态显示Running

    NAME                   READY   STATUS    RESTARTS   AGE
    pytorch-training-gpu   1/1     Running   0          5m42s
  4. 使用以下命令查看Pod训练输出。

    kubectl logs pytorch-training-gpu

    输出日志类似以下内容。

    Cloning into 'examples'...
    Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
    ...
    
    Train Epoch: 1 [0/60000 (0%)]   Loss: 2.282550
    Train Epoch: 1 [640/60000 (1%)] Loss: 1.384815
    ...
    
    Train Epoch: 14 [58880/60000 (98%)]     Loss: 0.001355
    Train Epoch: 14 [59520/60000 (99%)]     Loss: 0.002194
    
    Test set: Average loss: 0.0273, Accuracy: 9915/10000 (99%)
  5. 训练完毕后,再次检查Pod状态,STATUS显示Completed。此时使用以下命令清理集群。

    kubectl delete pods pytorch-training-gpu

    Pod清理完毕会返回以下内容。

    pod "pytorch-training-gpu" deleted