本文主要为您介绍如何使用 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 进行图片识别。image
  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中的日志页签下,看到如下红框内容时,表示图片识别成功。
    容器组 - 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。