在EAS中,可以通过一个JSON格式的配置文件来定义和部署在线服务。当准备好JSON配置文件后,便可通过EAS控制台、EASCMD客户端或SDK等多种方式完成服务部署。
部署服务的核心是创建一个包含所有必需配置的JSON文件。对于初次使用者,建议在控制台的服务部署页面进行基础配置,系统会自动生成对应的JSON内容,可以在此基础上进行修改和扩展。
在推理服务页签,单击部署服务。在部署服务页面,选择自定义模型部署 > JSON独立部署。
输入准备好的JSON文件,单击部署。等待一段时间,当服务状态变为运行中时,表明服务部署成功。
通过客户端工具EASCMD,可以在自己服务器上对模型服务进行管理,包括创建、查看、删除及更新服务。具体操作步骤如下:
下载并认证客户端
执行部署命令
系统返回如下类似结果。
参数
是否必选
描述
metadata
cloud
containers
dockerAuth
当镜像来源于私有仓库时,需配置dockerAuth,值为镜像仓库的用户名:密码经Base64编码后的字符串。
networking
storage
token
表示访问鉴权的Token字符串。如果未指定,则系统自动生成。
model_path
使用processor部署时必选。model_path和processor_path分别为模型和Processor的输入数据源地址,均支持以下格式的地址:
OSS地址:地址链接可以是具体文件路径或文件夹路径。
本地路径:如果使用test命令进行本地调试,则可以使用本地路径。
oss_endpoint
默认无需指定该参数,会使用当前地域的内网OSS地址,来进行模型文件或Processor文件的下载。当跨地域访问OSS时,需要指定该参数。例如:当您在杭州地域部署服务时,model_path中填写了北京地域的OSS地址,则需要使用该参数来指定北京地域的OSS公网访问地址。
model_entry
表示模型的入口文件,可以包含任意文件。如果未指定,则使用model_path中的文件名。主文件路径会传递给Processor中的initialize()函数。
model_config
表示模型的配置,支持任意文本。该参数值会传递给Processor中initialize()函数的第二个参数。
processor
如果使用自定义Processor,则无需配置该参数,只需要配置processor_path、processor_entry、processor_mainclass和processor_type参数。
processor_path
Processor相关的文件包路径,可以参见model_path参数的描述信息。
processor_entry
当processor_type为cpp或python时,必须指定该参数。
processor_mainclass
当processor_type为java时,必须指定该参数。
processor_type
processor实现的语言,取值如下:
cpp
java
python
warm_up_data_path
当服务实例因Processor代码异常发生Crash后,服务实例是否会自动重启。取值如下:
true:表示服务实例不自动重启,以保留现场进行问题排查。
false:默认值,表示服务实例自动重启。
autoscaler
labels
为EAS服务配置标签。格式为key:value。
表示分布式推理配置下单实例部署的机器数。默认值为2。
sinker
confidential
通过配置系统信任管理服务,保证服务部署和调用的过程中数据、模型和代码等信息可以安全加密,实现安全可验证的推理服务。格式如下:
安全加密环境主要针对您挂载的存储文件,请先完成存储文件的挂载再打开该功能。
trustee_endpoint:系统信任管理服务Trustee的URI。
decryption_key:解密密钥的KBS URI。例如kbs:///default/key/test-key。
参数
是否必选
描述
name
服务名称,必须在同一地域内唯一。
instance
服务启动的实例数量。
workspace_id
设置工作空间ID参数后,服务将只能在指定的PAI工作空间之内使用。例如:1405**。
cpu
每个实例需要的CPU数量。
memory
每个实例需要的内存数量,取值为整型,单位为MB。例如,"memory": 4096表示每个实例需要4 GB内存。
gpu
每个实例需要的GPU数量。
gpu_memory
每个实例所需的GPU显存数量,取值为整型,单位为GiB。
系统支持实例按显存进行调度,实现单卡共享多实例功能。如果使用显存调度,则需要将gpu字段配置为0。当gpu字段配置为1时,表示实例独占整张GPU卡,此时gpu_memory 字段会被忽略。
当前未开启显存的严格隔离,您需自行控制各实例的显存使用量,不能超出申请量,避免出现显存内存溢出。
gpu_core_percentage
每个实例所需的单个GPU算力比例,取值为1~100之间的整数,单位为百分比。例如填写10,代表的是单个GPU的10%算力。
系统支持实例按算力进行调度,实现单卡共享多实例功能。另外指定该参数时,必须指定gpu_memory参数,否则该参数不生效。
qos
实例的服务质量,可选参数值为空或BestEffort。当qos指定为BestEffort时,表示进入CPU共享模式。使实例完全按照显存和内存进行调度,不再受节点的CPU数量限制,节点上的所有实例共享CPU。此时cpu字段表示,按CPU共享模式时,单个实例能使用的最大配额。
resource
资源组ID,配置策略如下:
如果服务部署在公共资源组,则可以忽略该参数,此时服务进行按量付费。
如果服务部署在专属资源组,则配置该参数为资源组ID。例如eas-r-6dbzve8ip0xnzt****。
cuda
服务需要使用的cuda版本。服务运行时,会自动将指定版本的cuda挂载到实例的/usr/local/cuda目录中。
目前支持的cuda版本为:8.0,9.0,10.0,10.1,10.2,11.0,11.1,11.2。使用示例为:"cuda":"11.2"。
rdma
表示分布式推理配置下,是否开启RDMA网络。设置为1表示开启RDMA网络。若未配置rdma参数,则表示关闭RDMA网络。
当前仅使用灵骏智算资源部署的服务可以使用RDMA网络。
enable_grpc
表示是否开启服务网关的GRPC连接,取值如下:
false:默认值,表示网关不开启GRPC连接,默认支持HTTP请求。
true:表示网关开启GRPC连接。
如果使用自定义镜像部署服务时,镜像中的服务端实现为GRPC,则需要通过该参数将网关的协议切换成GRPC。
enable_webservice
表示是否开启webserver,从而部署为一个AI-Web应用:
false:默认值,表示不开启webserver。
true:表示开启webserver。
type
请您慎重调整高级参数。
参数
是否必选
描述
rpc
batching
是否开启Server端Batching,用于GPU模型加速,仅支持预置processor模式。取值如下:
false:默认值,关闭Server端Batching。
true:开启Server端Batching。
keepalive
设置单个请求的最长处理时间(单位:毫秒)。如果请求处理时长超过该值,服务端将返回408超时并关闭连接。默认值:专属网关600000。应用型专属网关(ALB)不支持此项配置。
io_threads
每个实例用于处理网络IO的线程数量,默认值为4。
max_batch_size
max_batch_timeout
max_queue_size
创建异步推理服务时,队列最大长度,默认值为64。队列满时,服务端返回450并关闭连接。为保证服务端不会压力过载,队列可以提前通知客户端向其他实例进行重试。对于RT较长的服务队列,可以适当减小队列长度,以避免请求在队列中堆积导致大量请求超时。
worker_threads
每个实例中用于并发处理请求的线程数,默认值为5,仅支持预置processor模式。
rate_limit
表示开启QPS限流功能,并限制实例处理的最大QPS。默认为0,表示关闭QPS限流功能。
例如:该参数配置为2000,当QPS高于2000时,会拒绝请求并返回429(Too Many Requests)。
enable_sigterm
取值如下:
false(默认值):实例进入退出状态时不会发送SIGTERM信号。
true:在服务实例进入退出状态时,系统会立即向主进程发送SIGTERM信号,服务内进程收到该信号后需要在信号处理函数中进行自定义的优雅退出操作,若不处理该信号可能导致主进程收到信号后直接退出,从而使优雅退出失败。
rolling_strategy
max_surge
服务滚动更新过程中,多于指定实例数,最多可以额外创建的实例个数。该参数可以为正整数,表示实例个数;也可以为百分比,例如2%。默认比例为2%。增大该参数可以提高服务更新速度。
例如:服务实例个数指定为100,该参数配置为20,则服务更新开始后会立即创建20个新实例。
max_unavailable
服务滚动更新过程中,最大不可用的实例个数。该参数可以在服务更新过程中,为新实例释放资源,避免服务因空闲资源不足而更新卡住。目前在专有资源组中,该参数默认为1;在公共资源组中,该参数默认为0。
例如:该参数为N,则服务更新开始时会立即停止N个实例。
如果空闲资源充足,可以将该参数配置为0。该参数配置过大可能会影响服务稳定性。因为在服务更新瞬间,可用实例个数会减少,则单实例承载的流量会变大。您需要权衡服务稳定性和资源情况来配置该参数。
表示实例的优雅退出时间,单位为秒,默认为30秒。
EAS服务采用滚动更新的策略,实例会先进入Terminating状态,服务会先将流量从要退出的实例上切走,实例等待30秒后将已收到的请求处理完成后退出。如果请求处理时间很长,为保证服务更新时,状态为in progress的请求都能被处理完,您可以将该参数值适当调大。
如果将该参数值调小则会影响服务稳定性,将该参数配置过大则会导致服务更新速度过慢,如果无特别需求请不要配置该参数。
scheduling
服务实例调度时的打散策略,支持以下几种策略:
host:按照节点来打散,实例尽可能分散在不同的节点上。
zone:按照节点所在的可用区来打散,实例尽可能分散在不同的可用区。
default:按照默认策略进行调度,无主动打散的逻辑。
配置示例:
resource_rebalancing
取值如下:
false(默认值):不启用该功能。
true:EAS会周期性地在高优先级资源上创建探针实例。如果探针实例调度成功,则会以指数增长方式创建更多探针实例,直至调度失败。同时,成功调度的探针实例完成初始化并且进入就绪状态后,会替换低优先级资源上的实例。
该功能可以解决以下问题:
在服务滚动更新过程中,正在终止的实例仍会占用资源,导致新创建实例启动在公共资源组上,由于公共资源限制,后续新实例会重新调度回专属资源组上。
当同时使用竞价实例和常规实例时,系统会定期检查竞价实例是否可用,如果可用,则会将常规实例迁移至竞价实例上。
workload_type
resource_burstable
true:表示开启。
false:表示关闭。
shm_size
配置实例的共享内存,直接对内存进行读写操作,无需数据的复制或传输。单位为GB。
参数
是否必选
描述
computing
instances
使用公共资源组部署服务时,需设置该参数,表示使用的资源规格列表。当实例规格竞价失败或库存不足时,按照配置顺序依次尝试使用下一个实例规格创建服务。
type: 资源规格
spot_price_limit为可选参数:
当配置该参数时:表示对应实例规格使用竞价实例,并指明价格上限。单位为CNY,支持按量付费。
当不配置该参数时:表示对应实例规格为普通的按量付费实例。
capacity:配置使用该机型的实例数目上限。可以是数字,如“500”;也可以是字符串,如“20%”。配置后,如果机型实例数目达到上限,即使该机型还有库存资源也不会再使用。
例如:服务总的实例数为200,配置A机型的capacity为20%,即该服务最多只会使用A机型拉起40个实例,其余的实例将通过其他规格拉起。
disable_spot_protection_period
使用竞价实例时,需设置该参数,取值如下:
false(默认值):表示在竞价实例创建成功后,默认有1小时保护期。在保护期内即使市场价格超过了出价,实例也不会被释放。
true:表示禁用保护期,无保护期实例会始终比有保护期实例优惠10%左右。
networking
vpc_id
分别表示为EAS服务绑定的专有网络VPC、交换机和安全组。
vswitch_id
security_group_id
示例如下:
参数
是否必选
描述
image
使用镜像部署时必填。用于部署模型服务的镜像地址。
env
name
镜像执行时的环境变量名称。
value
镜像执行时的环境变量取值。
command
二者必选其一
script
镜像的入口执行的脚本,可指定较为复杂的脚本形式,多行以\n或分号分隔。
port
容器端口。
由于EAS引擎监听固定的8080/9090端口,因此容器端口需要避开8080/9090端口。
prepare
pythonRequirements
实例启动前安装的python requirements列表,要求镜像中在系统路径中存在python和pip命令,list格式,如:
pythonRequirementsPath
参数
是否必选
描述
gateway
gateway_policy
rate_limit:服务的全局限流,即服务每秒接收的最大请求数。
enable:是否打开限流。取值true表示打开限流,false表示关闭限流。
limit:限流值。
共享网关的服务会默认配置单服务为 1000qps,服务器组为 10000qps。专属网关无默认值。
concurrency_limit:服务的全局并发控制,即服务瞬时正在处理的最大请求数。应用型专属网关(ALB)暂不支持该设置。
enable:是否打开限流。取值true表示打开限流,false表示关闭限流。
limit:限流值。
限流配置示例:
参数
是否必选
描述
type
支持配置以下两种存储类型:
maxcompute:大数据MaxCompute。
sls:日志服务SLS。
config
MaxCompute项目名称。
MaxCompute数据表。
SLS项目名称。
SLS的Logstore。
配置示例如下:
上述参数在JSON文件中的配置示例如下:
关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务