全部产品
Search
文档中心

人工智能平台 PAI:使用竞价任务

更新时间:Dec 19, 2024

在大模型时代,AI算力需求旺盛。因此,PAI特别推出了竞价任务功能,提供了一定数目的算力资源,通过竞价方式提供给客户,来缓解客户算力紧张的情况。相较于普通的公共资源实例(按量付费实例),竞价资源通常在价格上有一定幅度的折扣,帮助您以较低成本获取所需的AI算力,从而降低任务运行所需的资源成本。在创建DLC任务时,您可以通过选择竞价资源来使用该功能。

使用限制

使用竞价资源有如下限制:

限制类型

灵骏智算竞价资源

通用计算竞价资源

地域限制

  • 华北6(乌兰察布)

  • 新加坡

  • 华北2(北京)

  • 华东2(上海)

  • 华东1(杭州)

  • 华南1(深圳)

  • 华北6(乌兰察布)

  • 华南3(广州)

框架类型

  • PyTorch

  • MPIJob

PyTorch

自动容错(AIMaster)

支持

不支持

功能限制

  • 不支持转换为包年包月实例。

  • 不支持变更实例规格和带宽。

  • 不支持备案服务。

  • 不支持大客户折扣。

竞价资源特点

  • 竞价资源使用说明

    您可以使用通用计算或灵骏智算竞价资源创建DLC任务。竞价资源的市场价格会随供需变化而浮动,相对于按量付费实例能最高节约90%的实例成本。由于竞价资源为阿里云所有用户共同抢占,不是稳定承诺可用的计算资源。使用竞价资源的DLC任务提交后:

    • 当阿里云的竞价资源库存不足时,有可能存在不能立即抢占到实例资源的情况,此时会持续为您申请竞价资源,在此阶段任务会表现为等待状态。

    • 当您申请到竞价资源后,DLC任务即开始创建并运行。

    • 当竞价资源被回收后,DLC任务表现为失败结束。

  • 申请竞价资源

    使用竞价资源创建DLC任务,任务提交成功后即开始抢占实例资源。当满足如下条件时可成功抢占资源:

    • 您配置的竞价资源的出价上限≥市场价格

    • 竞价资源库存充足

  • 回收竞价资源

    竞价资源存在中断回收机制,与市场价格、实例库存以及创建任务时设置的单台实例上限价格、实例使用时长有关。出现以下情况时,DLC使用的竞价资源可能会在没有任何提示的情况下被回收:

    • 灵骏智算竞价资源:竞价资源出价上限低于系统平均价格,或竞价资源库存不足时,会被回收。

    • 通用计算竞价资源:竞价资源出价上限低于当前竞价资源市场价,或竞价资源库存不足时,会被回收。

    为确保您的竞价任务能够持续稳定运行,您可以:

    • 在使用灵骏智算竞价资源创建任务时,打开自动容错(AIMaster)开关。开启开关后,您的任务将自动进入竞价队列,再次参与竞价,从而有机会再次运行起来。详情请参见AIMaster:弹性自动容错引擎image

    • 在使用通用计算或灵骏智算竞价资源创建任务时,使用EasyCkpt框架进行PyTorch大模型训练。该训练任务可以进行频繁的Checkpoint保存,支持中断和继续训练。详情请参见EasyCkpt:AI大模型高性能状态保存恢复

计费规则

  • 价格说明:

    PAI竞价任务的出价模式是设定您的最高价(SpotWithPriceLimit)。当DLC任务使用竞价资源时,由于竞价资源的市场价格会随供需变化而浮动,因此使用相同的资源提交多个任务,其固定时间的账单价格可能是相同的。目前支持以下两种出价类型:

    说明

    灵骏智算竞价资源的出价类型仅支持Spot折扣。

    • 出价(Spot折扣):最高价是基于资源规格的市场价格,从1折到9折的离散选项。

    • 出价(Spot价格):最高价的出价范围为市场价格区间。

    前往分布式训练(DLC)的新建任务页面,在资源信息区域,资源来源选择竞价资源,然后在任务资源中查看支持使用的竞价资源和市场价格区间。

    • 通用计算竞价资源

      image

    • 灵骏智算竞价资源image

  • 竞价资源计费:

    竞价资源为按量计费的计费模式,按照实时的市场价进行计费。

  • 查看账单:

    任务执行成功后,您可以在次日访问费用与成本的账单详情页面,查看使用竞价资源执行该任务产生的费用明细。该账单为PAI-DLC的后付费账单,实例标签为key:acs:pai:dlc:payType value:spot。查看账单明细的操作步骤,请参见查看账单明细

应用场景

  • 适用场景:

    建议以下场景使用竞价资源来降低成本:

    • 运行时间比较短的计算任务。

    • Debug状态的计算任务。

    • 能够容忍过程中失败的计算任务。

    • 支持可中断和继续训练的计算任务。例如使用EasyCkpt框架进行PyTorch大模型训练的场景,能频繁进行Checkpoint保存并从Checkpoint中恢复,详情请参见EasyCkpt:AI大模型高性能状态保存恢复

  • 不适用场景:

    对稳定性要求极高的服务,请勿选择竞价资源。

操作步骤

提交DLC任务时使用竞价资源,支持以下两种提交方式:

通过控制台

  1. 进入新建任务页面。

    1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入DLC

    2. 在分布式训练(DLC)页面,单击新建任务

  2. 配置以下关键参数,其他参数配置说明,请参见创建训练任务

    参数

    描述

    资源信息

    资源类型

    选择灵骏智算通用计算

    说明

    仅当工作空间同时支持使用灵骏智算资源和通用计算资源时,才支持选择资源类型。

    资源来源

    选择竞价资源

    任务资源

    资源规格列,单击image选择竞价资源,并设置出价。该出价是基于实例的原价,从1折到9折的离散选项,表示参与竞价的上限。当竞价资源的最高出价≥市场价格且库存充足时,可申请到竞价资源。

    专有网络配置

    专有网络配置

    当使用灵骏智算竞价资源提交DLC任务时,需要配置专有网络。在下拉框中选择当前地域已创建好的专有网络、交换机和安全组。

    安全组

    交换机

    容错与诊断

    自动容错

    在使用灵骏智算竞价资源提交任务时,强烈建议您打开自动容错开关。开启AIMaster功能后,竞价任务可以在由于系统平均价格超过客户设定的上限价格导致资源回收后, 自动重新进入竞价中,再次进行尝试竞价。竞价任务可以在系统平均价格低于设定的上限价格时再次运行。关于AIMaster功能更详细的内容介绍,请参见AIMaster:弹性自动容错引擎

    灵骏智算竞价资源

    image

    通用计算竞价资源

    image

  3. 参数配置完成后,单击确定

    任务提交后,DLC即开始申请竞价资源,以创建并运行任务。如果未能申请到竞价资源,此任务将显示为等待状态。

通过SDK

步骤一:安装Python SDK

  • 安装工作空间SDK。

    pip install alibabacloud_aiworkspace20210204==3.0.1
  • 安装DLC SDK。

    pip install alibabacloud_pai_dlc20201203==1.4.17

步骤二:提交竞价任务

SpotDiscountLimit

#!/usr/bin/env python3

from alibabacloud_tea_openapi.models import Config
from alibabacloud_credentials.client import Client as CredClient

from alibabacloud_pai_dlc20201203.client import Client as DLCClient
from alibabacloud_pai_dlc20201203.models import CreateJobRequest

region_id = '<region-id>'  # DLC任务所在地域ID,例如华东1(杭州)为cn-hangzhou。
cred = CredClient()
workspace_id = '12****'  # DLC任务所在工作空间ID。

dlc_client = DLCClient(
    Config(credential=cred,
           region_id=region_id,
           endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id),
           protocol='http'))

create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({
    'WorkspaceId': workspace_id,
    'DisplayName': 'sample-spot-job',
    'JobType': 'PyTorchJob',
    'JobSpecs': [
        {
            "Type": "Worker",
            "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04",
            "PodCount": 1,
            "EcsSpec": 'ecs.g7.xlarge',
            "SpotSpec": {
                "SpotStrategy": "SpotWithPriceLimit",
                "SpotDiscountLimit": 0.4,
            }
        },
    ],
    'UserVpc': {
        "VpcId": "vpc-0jlq8l7qech3m2ta2****",
        "SwitchId": "vsw-0jlc46eg4k3pivwpz8****",
        "SecurityGroupId": "sg-0jl4bd9wwh5auei9****",
    },
    "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'",
}))
job_id = create_job_resp.body.job_id
print(f'jobId is {job_id}')

SpotPriceLimit

#!/usr/bin/env python3

from alibabacloud_tea_openapi.models import Config
from alibabacloud_credentials.client import Client as CredClient

from alibabacloud_pai_dlc20201203.client import Client as DLCClient
from alibabacloud_pai_dlc20201203.models import CreateJobRequest

region_id = '<region-id>'
cred = CredClient()
workspace_id = '12****'

dlc_client = DLCClient(
    Config(credential=cred,
           region_id=region_id,
           endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id),
           protocol='http'))

create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({
    'WorkspaceId': workspace_id,
    'DisplayName': 'sample-spot-job',
    'JobType': 'PyTorchJob',
    'JobSpecs': [
        {
            "Type": "Worker",
            "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04",
            "PodCount": 1,
            "EcsSpec": 'ecs.g7.xlarge',
            "SpotSpec": {
                "SpotStrategy": "SpotWithPriceLimit",
                "SpotPriceLimit": 0.011,
            }
        },
    ],
    'UserVpc': {
        "VpcId": "vpc-0jlq8l7qech3m2ta2****",
        "SwitchId": "vsw-0jlc46eg4k3pivwpz8****",
        "SecurityGroupId": "sg-0jl4bd9wwh5auei9****",
    },
    "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'",
}))
job_id = create_job_resp.body.job_id
print(f'jobId is {job_id}')

其中关键配置说明如下,更多参数配置说明,请参见使用Python SDK

参数

描述

SpotStrategy

竞价策略。仅该参数设置为SpotWithPriceLimit时,出价类型才能生效。

SpotDiscountLimit

出价类型为Spot折扣。

说明
  • SpotDiscountLimitSpotPriceLimit不能同时设置。

  • 灵骏竞价资源出价类型仅支持SpotDiscountLimit

SpotPriceLimit

出价类型为Spot价格。

UserVpc

使用灵骏竞价资源提交任务时,该参数必填。配置任务所在地域的专有网络、交换机和安全组ID。