更新时间:2024-02-08 GMT+08:00
使用案例
主要包含三种场景的用例:
- 新增在线服务
- 更新在线服务
- 服务部署输出推理地址
新增在线服务
import modelarts.workflow as wf # 通过ServiceStep来定义一个服务部署节点,输入指定的模型进行服务部署 # 定义模型名称参数 model_name = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR) service_step = wf.steps.ServiceStep( name="service_step", # 服务部署节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="新增服务", # 标题信息 inputs=wf.steps.ServiceInput(name="si_service_ph", data=wf.data.ServiceInputPlaceholder(name="si_placeholder1", # 模型名称的限制/约束,在运行态只能选择该模型名称;一般与模型注册节点中的model_name使用同一个参数对象 model_name=model_name)),# ServiceStep的输入列表 outputs=wf.steps.ServiceOutput(name="service_output") # ServiceStep的输出 ) workflow = wf.Workflow( name="service-step-demo", desc="this is a demo workflow", steps=[service_step] )
更新在线服务
使用场景:使用新版本的模型对已有的服务进行更新,需要保证新版本的模型与已部署服务的模型名称一致。
import modelarts.workflow as wf # 通过ServiceStep来定义一个服务部署节点,输入指定的模型对已部署的服务进行更新 # 定义模型名称参数 model_name = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR) # 定义服务对象 service = wf.data.ServiceUpdatePlaceholder(name="placeholder_name") service_step = wf.steps.ServiceStep( name="service_step", # 服务部署节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="服务更新", # 标题信息 inputs=[wf.steps.ServiceInput(name="si2", data=wf.data.ServiceInputPlaceholder(name="si_placeholder2", # 模型名称的限制/约束,在运行态只能选择该模型名称 model_name=model_name)), wf.steps.ServiceInput(name="si_service_data", data=service) # 已部署的服务在运行时配置;data也可使用wf.data.ServiceData(service_id="fake_service")表示 ], # ServiceStep的输入列表 outputs=wf.steps.ServiceOutput(name="service_output") # ServiceStep的输出 ) workflow = wf.Workflow( name="service-step-demo", desc="this is a demo workflow", steps=[service_step] )
服务部署输出推理地址
服务部署节点支持输出推理地址,通过get_output_variable("access_address")方法获取输出值,并在后续节点中使用。
- 针对部署在公共资源池的服务,可以通过access_address属性从输出中获取注册在公网的推理地址。
- 针对部署在专属资源池的服务,除了可以获取注册在公网的推理地址,还能通过cluster_inner_access_address属性从输出中获取内部使用的推理地址,并且该地址只能在其他推理服务中进行访问。
import modelarts.workflow as wf # 定义模型名称参数 sub_model_name = wf.Placeholder(name="si_placeholder1", placeholder_type=wf.PlaceholderType.STR) sub_service_step = wf.steps.ServiceStep( name="sub_service_step", # 服务部署节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="子服务", # 标题信息 inputs=wf.steps.ServiceInput( name="si_service_ph", data=wf.data.ServiceInputPlaceholder(name="si_placeholder1", model_name=sub_model_name) ),# ServiceStep的输入列表 outputs=wf.steps.ServiceOutput(name="service_output") # ServiceStep的输出 ) main_model_name = wf.Placeholder(name="si_placeholder2", placeholder_type=wf.PlaceholderType.STR) # 获取子服务输出的推理地址,并通过envs传递给主服务 main_service_config = wf.steps.ServiceConfig( infer_type="real-time", envs={"infer_address": sub_service_step.outputs["service_output"].get_output_variable("access_address")} # 获取子服务输出的推理地址,并通过envs传递到主服务中 ) main_service_step = wf.steps.ServiceStep( name="main_service_step", # 服务部署节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="主服务", # 标题信息 inputs=wf.steps.ServiceInput( name="si_service_ph", data=wf.data.ServiceInputPlaceholder(name="si_placeholder2", model_name=main_model_name) ),# ServiceStep的输入列表 outputs=wf.steps.ServiceOutput(name="service_output", service_config=main_service_config), # ServiceStep的输出 depend_steps=sub_service_step ) workflow = wf.Workflow( name="service-step-demo", desc="this is a demo workflow", steps=[sub_service_step, main_service_step] )
父主题: 服务部署节点