通过控制台自定义部署

EAS(Elastic Algorithm Service)的自定义部署提供高度灵活和全面的AI推理服务托管能力。支持将任意算法或模型封装成在线服务,适用于从通用大语言模型(LLM)到自研算法的各类AI应用场景。对于LLM、ComfyUI等常见应用,推荐优先尝试场景化部署,以获得更简化的配置体验。本文面向需要深度定制环境、性能和功能的专业用户。

部署原理

EAS服务本质上是运行在一个或多个隔离的容器实例中。EAS通过组合以下基本元素来构建和启动服务:

  • 环境镜像 :一个包含操作系统、基础库(如CUDA)、语言环境(如Python)和必要依赖的只读模板。可使用PAI提供的官方镜像,也可以自定义镜像以满足特定业务需求。

  • 代码与模型文件 :业务逻辑代码、模型权重等文件。最佳实践是将它们存储在对象存储OSS文件存储NAS上,通过挂载方式使用。这能实现代码/模型与环境的解耦,当需要迭代时,只需更新存储中的文件,无需重建镜像。

  • 存储挂载:服务启动时,EAS会将指定的OSSNAS路径挂载到容器内的本地目录。这使得容器内的代码可以像访问本地文件一样,直接访问外部存储上的代码和模型。

  • 运行命令:容器启动后需要执行的第一个命令。通常是用于启动一个HTTP服务器的命令,例如python app.py

整个流程如下:

  1. EAS拉取指定的镜像来创建容器。

  2. 将外部存储挂载到容器的指定路径。

  3. 在容器内执行运行命令。

  4. 命令成功执行后,服务便开始在指定端口监听并处理推理请求。

image
说明

EAS支持镜像部署和Processor部署两种部署方式。推荐使用镜像部署。因为镜像部署提供了更高的灵活性和可维护性,而Processor部署在环境和框架存在较多限制。

重要限制与策略

  • EAS服务如果持续180天处于非运行中状态,将会被系统自动删除。

  • 通过网关调用时,请求体大小不得超过 1MB。

  • 请避免使用EAS引擎固定监听的80809090端口。

快速开始:部署一个简单的Web服务

本节将使用镜像部署模式,快速部署一个简单的Web服务。

1步:准备代码文件

将如下Flask应用代码保存为app.py文件。注意,服务监听在8000端口。

app.py

from flask import Flask

app = Flask(__name__)

@app.route('/hello')
def hello_world():
    #  这里是模型推理或其他业务逻辑
    return 'Hello World'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

2步:上传代码至OSS

app.py文件上传到OSS Bucket中(请确保OSS BucketEAS工作空间在同一地域)。例如,上传至oss://examplebucket/code/目录下。

3步:配置并部署服务

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

  2. 推理服务页签,单击部署服务。然后在自定义模型部署区域,单击自定义部署

  3. 在配置页面,如下填写环境信息资源信息区域的关键参数:

    • 镜像配置:选择镜像部署,并在镜像配置中选择官方镜像python-inference:3.9-ubuntu2004

    • 存储挂载:将包含app.pyOSS目录挂载到容器的/mnt/data/路径下。

      • Uri:选择代码所在的OSS目录,本例中为oss://examplebucket/code/

      • 挂载路径:为该目录在容器内指定本地路径,本例中为/mnt/data/

    • 运行命令:由于app.py已被挂载到容器的/mnt/data/目录,因此启动命令为:python /mnt/data/app.py

    • 三方库配置:本示例代码依赖的flask库未包含在使用的官方镜像中。可以在三方库列表直接添加flask。EAS会在服务启动时自动安装。

    • 资源配置:为服务分配合适的计算资源。对于这个简单示例,一个小型CPU实例即可满足需求。

      • 资源类型:公共资源。

      • 资源规格ecs.c7.large

  4. 完成配置后,单击部署。服务状态变为运行中时,即表示部署成功,可进行服务调用

更多配置说明

管理环境与依赖

环境信息区域,可以配置服务的允许环境与依赖项。

参数

描述

镜像配置

服务的运行环境基础。可以使用PAI提供的官方镜像,或通过自定义镜像或输入镜像地址使用自行构建的镜像,详情请参见自定义镜像

说明

若镜像中包含WebUI,开启Web应用,EAS 会自动启动Web服务器,方便直接访问前端页面。

存储挂载

将存放在OSS、NAS等云存储上的模型、代码或数据挂载到容器的本地路径,实现代码/数据与环境的解耦,便于独立更新。详情请参见存储挂载

数据集挂载

若希望对模型或数据进行版本化管理,可以使用数据集功能进行挂载。详见创建及管理数据集

运行命令端口号

设置镜像启动命令(例如python /run.py)以及服务监听的端口。

重要

请避免使用EAS引擎固定监听的80809090端口。

三方库配置

若仅需额外安装少数Python库,在此处直接添加库名或指定一个requirements.txt文件路径,避免重新构建镜像。

环境变量

以键值对形式为服务实例设置环境变量。

对于GPU实例,还可以在服务功能资源配置中指定GPU驱动版本,以满足特定模型或框架的运行要求。

配置计算资源

资源信息区域,可以为服务配置计算资源。

参数

描述

资源类型

支持选择公共资源EAS资源组、资源配额。

说明

开启GPU共享,可在同一张GPU卡上部署多个模型服务,通过共享算力来提升GPU资源利用率。适用于模型较小或推理负载不高的场景。仅使用EAS资源组或资源配额时支持开启。详见GPU共享

实例数

建议配置多个实例,避免单点故障风险。

部署资源

使用公共资源时,对于支持的规格,可以开启竞价模式,并设置出价上限,以远低于常规实例的价格抢占空闲资源,适用于对中断不敏感的推理任务。

说明

如果领取了免费资源包,支持在华北2(北京)、华东2(上海)、华东1(杭州)、华南1(深圳)、西南1(成都)、华南2(河源)地域,使用试用活动页签的免费机型,详情请参见免费试用领取、使用和释放

配置系统盘

  • 使用公共资源,EAS免费赠送30 GiB系统盘。如需更大容量,则需按实际使用量付费。

  • 使用EAS资源组或资源配额,默认开启60GiB系统盘,修改容量后将从宿主机上进行划分。

弹性资源池

使用EAS资源组或资源配额时,开启此功能后,当自有资源不足时,会自动使用公共资源(按量付费)进行扩容以应对突发流;缩容时则优先释放公共资源实例,节约成本。详情请参见弹性资源池

高优资源重调度

开启后,系统会周期性地尝试将服务实例从低优先级资源(如公共资源、常规实例)迁移到高优先级资源(如专属资源组、竞价实例)上,以优化成本和资源分配。该功能可以解决以下问题:

  • 在滚动更新过程中,避免因旧实例暂用资源导致新实例短暂调度到公共资源组的问题。

  • 当同时使用竞价实例和常规实例时,系统会定期检查并将实例迁移至更经济的竞价实例上(如果可用)。

服务接入与网络

EAS提供灵活的服务接入和网络配置选项,以满足不同的业务集成需求。详情请参见服务调用方式

参数

描述

网关选择

默认使用免费的共享网关,可付费开通专属网关以获得自定义域名、访问控制等更多高级功能。详情请参见通过专属网关调用

重要

通过网关调用时,请求体大小不得超过 1MB。

专有网络 (VPC)

通过配置VPC、交换机和安全组,可以实现服务在VPC内部的直接访问,或允许服务访问公网资源。详情请参见网络配置

关联负载均衡NLB

将服务关联到网络型负载均衡NLB实例,实现更自主可控的负载均衡。详情请参见通过关联负载均衡NLB调用

关联服务发现Nacos

将服务注册到微服务注册配置中心,便于在微服务架构中实现服务的自动发现与同步。详情请参见通过关联服务发现Nacos调用

还可以在服务功能区域的高级网络启用GRPC。开启后,服务网关将支持GRPC连接,适用于需要高性能RPC通信的场景。

服务安全

为了保障服务安全,可以在服务功能区域使用以下功能:

参数

描述

自定义鉴权

如果不想使用系统自动生成的Token,可在此处自定义服务访问的鉴权Token。

配置安全加密环境

通过与系统信任管理服务集成,保证服务在部署和调用过程中,数据、模型和代码等信息的安全加密,实现可信推理。该功能主要针对挂载的存储文件,请先完成存储挂载再开启。详情请参见安全加密推理服务

实例RAM角色

通过为实例关联RAM角色,服务内代码可基于STS临时凭证访问其他云资源,无需配置固定的AccessKey,从而降低密钥泄漏风险。详情请参见配置EAS RAM角色

保障服务稳定与高可用

通过基本信息区域的所属群组功能,可将多个版本的服务或使用异构资源的服务划分到同一个群组,配合流量管理策略,实现灰度发布。详情参见灰度发布

为确保生产环境服务的稳定可靠,可以在服务功能区域进行以下相关配置:

参数

描述

服务响应超时时长

合理配置每个请求的超时时间,默认为5秒,避免慢请求长时间占用服务资源。

健康检查

为服务配置健康检查,系统会定期探测实例的存活状态,并在实例异常时自动拉起新实例,实现故障自愈。详情请参见健康检查

优雅退出

配置优雅退出时间,确保在服务更新或缩容时,实例有足够的时间处理完已接收的请求再退出,避免请求处理中断。还可以选择是否发送SIGTERM信号,以便在应用层进行更精细的退出处理。详情请参见滚动更新与优雅退出

滚动更新

通过配置超过期望的实例数最大不可用实例数,可以精细化控制服务更新过程中的实例替换策略,在保证服务不中断的前提下完成版本升级。详情请参见滚动更新与优雅退出

性能优化

以下配置对于提升服务性能至关重要,能有效加快启动速度、提高吞吐量并降低延迟,尤其适用于大模型等资源密集型应用。

参数

参数及描述

存储加速

分布式缓存加速

将挂载的OSS等存储中的模型或数据文件高速缓存到实例本地,以提高读取速度,减少I/O延迟。详情请参见内存缓存本地目录

模型权重服务(MoWS)

通过模型权重的本地缓存和跨实例共享,显著提升大规模实例部署场景下的扩缩容效率和服务启动速度。详情请参见模型权重服务

资源配置

共享内存

为实例配置共享内存,允许容器内的多个进程直接读写同一内存区域,避免数据复制和传输带来的开销,适用于需要高效进程间通信的场景。

分布式推理

将单个推理实例部署在多台机器上,共同完成一次推理任务,解决超大模型无法在单机上部署的问题。详情见多机分布式推理

智能调度

LLM智能路由

LLM服务有多个后端实例时,LLM智能路由能够根据后端负载进行动态请求分发,保证各实例的算力和显存使用尽可能均衡,提升集群资源利用率。详情请参见LLM智能路由

服务观测与诊断

为洞察服务状态和快速排查问题,可以在服务功能区域开启以下功能:

参数

描述

保存调用记录

将服务的所有请求和响应记录持久化保存到大数据MaxCompute日志服务SLS中,用于审计、分析或问题排查。

  • 大数据MaxCompute

    • MaxCompute项目:选择一个已创建的项目。如果列表为空,可以单击新建MaxCompute项目进行创建。详情请参见通过MaxCompute控制台创建项目

    • MaxCompute数据表:配置数据表名称,部署服务时,系统会自动在选定的项目中创建此表。

  • 日志服务SLS

    • SLS项目:选择一个已创建的日志项目。如果列表为空,可以单击前往创建SLS Project进行创建。详情请参见管理Project

    • logstore:配置一个日志库(Logstore)名称。部署服务时,系统会自动在选定的项目中创建此Logstore。

链路追踪

部分官方镜像已内置采集组件,可一键开启链路追踪功能。对于其他镜像,可通过简单配置来集成ARMS探针,实现对服务调用链路的端到端监控。可参见EAS中开启基于LLM应用链路追踪(Tracing)。 配置方法如下:

  • 运行命令增加aliyun-bootstrap -a install && aliyun-instrument python app.py,用以安装探针并使用ARMS Python探针启动应用(请将app.py替换为用于提供预测服务的主文件)。

  • 三方库配置增加aliyun-bootstrap,用于从PyPI仓库下载探针安装器。

异步与弹性服务

  • 异步推理:对于AIGC、视频处理等长耗时推理场景,建议开启异步队列,客户端发起调用后可立即获得响应,并通过轮询或回调方式获取最终结果。详情请参见部署异步推理服务

  • 弹性Job服务:在服务功能区域开启任务模式,可将推理服务部署为按需执行的Job服务,适用于批量数据处理、定时任务等场景。任务完成后资源自动释放,节约成本。详情请参见弹性Job服务

修改JSON文件配置参数

服务配置区域查看当前界面配置对应的完整 JSON,并支持直接编辑。

说明

对于自动化和精细化配置场景,还可以直接使用 JSON 文件来定义和部署服务。请参见JSON部署