- 人工智能
- 大模型
- MLOps
- LLMOps
- 模型推理服务
- 云原生
- 后端
【免费下载链接】seldon-core
An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models
导读:
seldon model status是 Seldon Core 2 CLI 中用于查询单个模型实时加载状态的核心命令。本文以其官方命令手册为主体,结合operator与scheduler模块的源码实现,深入讲解命令语法、全部参数、状态机取值(如ModelAvailable、ModelFailed、ScheduleFailed)、-w等待条件轮询机制以及实际使用场景,帮助你在模型加载、发布、故障排查与自动化脚本中准确掌握模型生命周期。
一、命令概述与使用场景
seldon model status <modelName>用于获取单个模型在 Seldon Core 2 调度器(scheduler)中的当前状态。该命令是模型生命周期管理的重要一环,通常与模型加载(seldon model load)、模型卸载(seldon model unload)搭配使用:
- 验证加载结果:执行
seldon model load -f <model.yaml>后,通过seldon model status <name>确认模型是否进入可用状态; - 故障排查:当模型加载失败或调度失败时,通过命令返回的
state与reason字段定位原因; - 自动化等待:在 CI/CD 或脚本中利用
-w等待条件,阻塞直至模型达到期望状态(如ModelAvailable),避免竞态; - 发布确认:多版本场景下确认新版本是否已就绪并接管流量(参见 multi-version 示例 中对
seldon model status iris -w ModelAvailable的使用)。
在命令家族中,它隶属于 seldon model(manage models)子命令组,与seldon model list(获取所有模型的列表与状态)、seldon model load、seldon model unload、seldon model infer、seldon model metadata并列。
提示:Seldon CLI 面向非 Kubernetes 环境,通过 scheduler 与集群控制面交互;在 Kubernetes 环境中进行控制面操作(如 load)不被推荐,但
status类只读查询是安全且常用的。详见 Seldon CLI 使用说明。
二、命令语法与完整参数说明
命令的完整语法为:
seldon model status <modelName> [flags]官方手册列出的全部参数如下:
--authority string authority (HTTP/2) or virtual host (HTTP/1) -h, --help help for status --scheduler-host string seldon scheduler host (default "0.0.0.0:9004") -r, --show-request show request -o, --show-response show response (default true) -w, --wait string model wait condition2.1 核心参数逐一解析
| 参数 | 简写 | 类型 | 默认值 | 作用 |
|---|---|---|---|---|
--scheduler-host | 无 | string | 0.0.0.0:9004 | 指定 seldon scheduler 的 gRPC 地址与端口 |
--authority | 无 | string | 空 | 设置 HTTP/2 的 authority 或 HTTP/1 的虚拟主机,用于 TLS/SNI 场景 |
-r, --show-request | -r | bool | false | 打印发送给 scheduler 的 gRPC 请求内容 |
-o, --show-response | -o | bool | true | 打印 scheduler 返回的响应内容(默认开启) |
-w, --wait | -w | string | 空 | 设置等待条件,命令会轮询直到模型状态与指定字符串一致 |
-t, --timeout-secs | -t | int64 | 5 | 等待模式下的超时秒数(配合-w使用) |
-v, --verbose | -v | bool | false | 输出调试信息(请求体等) |
-h, --help | -h | — | — | 显示帮助信息 |
其中--timeout-secs、--verbose虽未列入官方手册表格,但从源码 model_status.go 中可以确认它们同样被注册为该命令的标志:flags.Int64P(flagTimeout, "t", flagTimeoutDefault, "timeout seconds")与flags.BoolP(flagVerbose, "v", false, "verbose output"),flagTimeoutDefault在 pipeline_inspect.go 中定义为int64(5)。
2.2 scheduler-host 的配置优先级
--scheduler-host的默认值来自 flags.go:defaultSchedulerHost = "0.0.0.0:9004"。其取值还支持两层覆盖:
- 环境变量:源码中通过
env.GetString(envScheduler, defaultSchedulerHost)读取,环境变量名为SELDON_SCHEDULE_HOST(定义于 flags.go); - CLI 配置文件:在 scheduler.go 中,
NewSchedulerClient会检查命令行标志是否显式设置(schedulerHostIsSet),若未设置且激活的 CLI 配置(~/.config/seldon/cli/config.json)中存在controlplane.schedulerHost,则使用配置文件中的值。
2.3 连接与 TLS 配置
命令通过 gRPC 与 scheduler 通信(详见 scheduler.go):
- 若 CLI 配置中
controlplane.keyPath为空,使用不安全连接insecure.NewCredentials(); - 否则加载
crtPath、keyPath、caPath三件套建立 TLS 双向认证(loadKeyPair); - 连接配置了指数退避重试(
grpc_retry.BackoffExponential(100 * time.Millisecond))与MaxCallSendMsgSize/MaxCallRecvMsgSize为MaxInt32。
因此,在启用 TLS 的集群中执行本命令前,需要通过seldon config add/seldon config activate(参见 seldon config 系列)配置好 controlplane 的证书与schedulerHost。
三、命令的源码实现与调用链
seldon model status的实现位于 model_status.go,其执行流程为:
- 解析 flags,构造
SchedulerClient(cli.NewSchedulerClient); - 调用
schedulerClient.ModelStatus(modelName, modelWaitCondition, timeout); - 成功时用
cli.PrintProto(res)以 JSON 格式输出响应。
底层关键调用链为ModelStatus→getModelStatus→ gRPCModelStatus流式 RPC(见 scheduler.go)。其中:
- 请求构造为
scheduler.ModelStatusRequest,携带SubscriberName: "seldon CLI"与Model: {Name: modelName}; - 调用
grpcClient.ModelStatus(ctx, req)建立流,接收首个响应stream.Recv()后返回; - 服务端处理逻辑位于 server.go:当请求只针对单个模型时,对
modelStore加锁后调用modelStatusImpl;modelStatusImpl(server.go)默认返回最新版本的ModelVersionStatus(AllVersions=false时取model.GetLatest()),组装成ModelStatusResponse(包含modelName、versions、deleted等字段)。
四、理解状态输出:ModelStatusResponse 结构
命令的响应以 JSON 形式打印,对应 proto 定义在 scheduler.proto:
message ModelStatusResponse { string modelName = 1; repeated ModelVersionStatus versions = 2; bool deleted = 3; bool keepTopics = 4; uint64 timestamp = 5; ModelOperation operation = 6; }每个ModelVersionStatus(scheduler.proto)包含版本号、serverName、副本状态映射、整体ModelStatus state以及模型定义。其中ModelStatus的关键字段为:
message ModelStatus { ModelState state = 1; string reason = 2; uint32 availableReplicas = 3; uint32 unavailableReplicas = 4; Timestamp lastChangeTimestamp = 5; ModelState modelGwState = 6; string modelGwReason = 7; }4.1 顶层状态枚举(ModelState)
顶层state完整取值见 scheduler.proto:
| 状态值 | 含义 |
|---|---|
ModelStateUnknown | 未知状态 |
ModelProgressing | 模型正在加载/流转中 |
ModelAvailable | 模型已可用,可以接收推理请求 |
ModelFailed | 模型副本加载失败 |
ModelTerminating | 模型正在卸载 |
ModelTerminated | 模型已卸载 |
ModelTerminateFailed | 模型卸载失败 |
ScheduleFailed | 模型调度失败(找不到可用服务器/资源) |
ModelScaledDown | 模型已按扩缩容策略缩容到 0 副本 |
ModelCreate/ModelTerminate | 创建/终止中 |
4.2 状态如何被计算:MemoryStore 的聚合逻辑
这些状态并非凭空产生,而是由 scheduler 的MemoryStore依据各副本(replica)上报的状态聚合得出,核心逻辑在 memory_status.go:
calcModelVersionStatistics(L38-L70)统计replicasAvailable、replicasLoading(LoadRequested/Loading/Loaded)、replicasLoadFailed(LoadFailed/LoadedUnavailable)、replicasDraining等计数;updateModelState(L72-L112)按以下规则推导顶层状态:- 任一副本
LoadFailed→ModelFailed,reason取最近失败原因; deploymentSpec.replicas == 0且minReplicas == 0、无可用副本 →ModelScaledDown;- 可用副本数达到期望副本数(或达到
minReplicas下限,或新版本发布时上一版本已 Available 且有可用副本)→ModelAvailable; - 其余情况 →
ModelProgressing; - 若为删除/非最新版本,则根据卸载结果进入
ModelTerminating/ModelTerminated/ModelTerminateFailed;
- 任一副本
FailedScheduling(L114-L157)单独将模型置为ScheduleFailed,并记录失败原因、发布模型失败事件(memory.status.scheduling.failed)。
理解了这套聚合规则,seldon model status返回的state/reason就具备了明确的故障诊断语义。
五、等待条件:-w 与超时控制
-w, --wait是seldon model status最具实用价值的功能:阻塞执行,直到模型状态与指定字符串匹配,实现“加载完成后立即继续”的脚本化流程。
5.1 轮询实现原理
对应实现见 scheduler.go:
if waitCondition != "" { secsStart := time.Now().Unix() for { res, err := sc.getModelStatus(grpcClient, req) ... if len(res.Versions) > 0 { modelStatus := res.Versions[0].State.GetState().String() if modelStatus == waitCondition { break } } time.Sleep(1 * time.Second) if time.Now().Unix()-secsStart > (timeout.Milliseconds() / 1000) { return nil, fmt.Errorf("Model wait status timeout") } } }要点:
- 每1 秒轮询一次,每次取最新版本的
state字符串与等待条件比对; - 超时由
-t, --timeout-secs控制(默认 5 秒),超时后返回错误Model wait status timeout; - 等待条件必须与状态枚举字符串精确匹配(大小写敏感),如
ModelAvailable。
5.2 典型用法示例
# 加载模型后,等待其进入可用状态(阻塞,最多等待 60 秒) seldon model status cifar10 -w ModelAvailable -t 60 # 将响应通过 jq 格式化输出(官方示例中的用法) seldon model status cifar10 -w ModelAvailable | jq . seldon model status cifar10-outlier -w ModelAvailable | jq . seldon model status cifar10-drift -w ModelAvailable | jq .以上三条等待命令出自 cifar10 示例,用于在加载漂移检测、离群点检测等模型后确保全部就绪。同样,experiment-versions 示例 在多版本实验中用seldon model status iris -w ModelAvailable等待每个版本加载完成后再进行流量切分实验。
5.3 展示控制:show-request 与 show-response
-r, --show-request:打印发给 scheduler 的请求(ModelStatusRequest),便于调试请求内容;-o, --show-response:默认true,打印响应。如果关闭(-o=false),命令将不输出任何内容,仅以退出码表达成功与否——这在脚本中可用来“静默等待”模型就绪:seldon model status my-model -w ModelAvailable -o=false echo "model ready: $?"-v, --verbose:额外打印请求体,与-r作用有重叠,可配合使用。
六、与相关命令的协作:完整的状态管理闭环
seldon model status不是孤立命令,它与同组命令形成状态管理闭环:
seldon model load -f model.yaml:向 scheduler 提交模型加载请求(见 scheduler.go,内部解析 YAML 为mlopsv1alpha1.Model后转为 scheduler 模型并调用LoadModel);seldon model status <name> -w ModelAvailable:阻塞等待模型进入可用状态;seldon model infer:对就绪模型发起推理;seldon model list:以表格形式列出所有模型及其最新状态(model state reason三列,scheduler.go);seldon model unload:卸载模型,之后可再用seldon model status确认进入ModelTerminated。
此外,命令树中所有status类命令(model/server/pipeline/experiment)均遵循相同的连接与打印模式;通用命令seldon status(见 status.go)还可传入模型清单文件(-f)批量等待多个资源就绪。
七、常见错误与排查指引
| 现象 | 可能原因 | 排查方式 |
|---|---|---|
返回state: ModelFailed+ reason | 模型副本加载失败(URI 不存在、镜像拉取失败等) | 查看versions[0].state.reason;检查模型 YAML 的modelUri与存储配置 |
返回state: ScheduleFailed | 没有满足资源/容量要求的服务器 | 查看versions[0].state.reason;通过seldon server list检查服务器状态 |
Model wait status timeout | 超时设置过短,或模型长期处于ModelProgressing | 增大-t;检查服务器副本是否就绪 |
| 连接失败/证书错误 | scheduler-host 配置错误或缺少 TLS 证书 | 核对--scheduler-host、SELDON_SCHEDULE_HOST与 CLI 配置controlplane三件套 |
| 查询不存在的模型名 | 模型尚未加载或名称拼写错误 | 先用seldon model list查看实际注册的模型名 |
八、总结
seldon model status是 Seldon Core 2 模型生命周期管理中最直接、最可靠的观测入口:一条命令即可拿到模型的最新版本、调度状态、可用副本数与失败原因。结合-w ModelAvailable与超时控制,它又能充当加载流程的“同步屏障”,是脚本化部署、多版本发布与故障排查的必备工具。若想进一步深入,可阅读 CLI 层实现 operator/cmd/seldon/cli/model_status.go、gRPC 客户端 operator/pkg/cli/scheduler.go 以及调度器状态聚合 scheduler/pkg/store/memory_status.go。
- 人工智能
- 大模型
- MLOps
- LLMOps
- 模型推理服务
- 云原生
- 后端
【免费下载链接】seldon-core
An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models
相关推荐
Seldon Core 2 CLI 实战:使用 `seldon experiment status` 查询与等待实验(Experiment)状态
Seldon Core 2 CLI 实战:使用 seldon experiment status 查询与等待实验(Experiment)状态 本文聚焦 Seld
人工智能大模型MLOpsLLMOps模型推理服务云原生后端Seldon Core v2 `seldon pipeline status` 命令详解:查询与等待 Pipeline 运行状态
Seldon Core v2 seldon pipeline status 命令详解:查询与等待 Pipeline 运行状态 本篇技术指南围绕 Seldon C
人工智能大模型MLOpsLLMOps模型推理服务云原生后端Seldon Core 模型清单查询:`seldon model list` 命令详解与调度状态解读
Seldon Core 模型清单查询: seldon model list 命令详解与调度状态解读 seldon model list 是 Seldon Cor
人工智能大模型MLOpsLLMOps模型推理服务云原生后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考