本文主要为您介绍如何使用GPU容器实例,这里以使用 Tensorflow 进行图片识别为例进行演示。该功能适用于Serverless kubernetes 集群和在 Kubernetes 集群创建的虚拟节点。

背景信息

容器服务ACK Serverless(Serverless Kubernetes)基于ECI(弹性容器实例)正式推出GPU容器实例支持,让用户以 serverless 的方式快速运行AI计算任务,极大降低AI平台运维的负担,显著提升整体计算效率。

AI计算离不开GPU已经是行业共识,然而从零开始搭建GPU集群环境是件相对复杂的任务,包括GPU规格购买、机器准备、驱动安装、容器环境安装等。GPU资源的serverless交付方式,充分的展现了serverless的核心优势,其向用户提供标准化而且“开箱即用”的资源供给能力,用户无需购买机器也无需登录到节点安装GPU驱动,极大降低了AI平台的部署复杂度,让客户关注在AI模型和应用本身而非基础设施的搭建和维护,让使用GPU/CPU资源就如同打开水龙头一样简单方便,同时按需计费的方式让客户按照计算任务进行消费, 避免包年包月带来的高成本和资源浪费。

在容器服容器服务ACK Serverless中创建挂载GPU的Pod,通过Annotation指定所需GPU的类型,同时在resource.limits中指定GPU的个数即可(也可指定instance-type)。每个pod独占GPU,GPU实例的收费与ECS GPU类型收费一致,不产生额外费用。目前阿里云ECI提供的GPU规格及类型请参见ECI GPU使用示例

说明 目前创建挂载 vGPU 的 Pod 暂不支持该功能。

前提条件

您已经创建一个Serverless Kubernetes集群或已在Kubernetes 集群创建一个虚拟节点

操作步骤

下面以 Serverless kubernetes 集群中在使用Tensorflow进行图片识别。

  1. 登录 容器服务管理控制台
  2. 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 无状态,单击右上角的使用模板创建
  3. 选择所需的集群和命名空间,选择样例模板或自定义,然后单击创建
    您可以使用如下 yaml 示例模板创建Pod(本例中,Pod中指定GPU类型为 P4,GPU个数为1) 。
    apiVersion: v1
    kind: Pod
    metadata:
      name: tensorflow
      annotations:
        k8s.aliyun.com/eci-gpu-type : "P4"
    spec:
      containers:
      - image: registry-vpc.cn-hangzhou.aliyuncs.com/ack-serverless/tensorflow
        name: tensorflow
        command:
        - "sh"
        - "-c"
        - "python models/tutorials/image/imagenet/classify_image.py"
        resources:
          limits:
            nvidia.com/gpu: "1"
      restartPolicy: OnFailure
  4. 几分钟后,单击左侧导航栏中的应用 > 容器组,当出现如下内容时,表示Pod创建成功。

  5. 单击目标Pod,在容器组 - tensorflow中的日志页签下,看到如下红框内容时,表示图片识别成功。

如果您想要在容器服务ACK的虚拟节点中进行使用该功能,请参考虚拟节点需要把Pod指定调度到虚拟节点上,或把Pod创建在有 virtual-node-affinity-injection=enabled label的namespace中,然后使用如下示例文件替换步骤4的yaml文件即可。示例如下:
apiVersion: v1
kind: Pod
metadata:
  name: tensorflow
  annotations:
    k8s.aliyun.com/eci-gpu-type : "P4"
spec:
  containers:
  - image: registry-vpc.cn-hangzhou.aliyuncs.com/ack-serverless/tensorflow
    name: tensorflow
    command:
    - "sh"
    - "-c"
    - "python models/tutorials/image/imagenet/classify_image.py"
    resources:
      limits:
        nvidia.com/gpu: "1"
  restartPolicy: OnFailure
  nodeName: virtual-kubelet
说明 基于虚拟节点的方式可以更灵活的支持多种深度学习框架,例如 Kubeflow、arena或其他自定义CRD。