☰
seldon model status 详解:Seldon Core 2 模型状态查询与等待条件实战指南
2026/10/14 18:45:11 网站建设 项目流程
  • 人工智能
  • 大模型
  • MLOps
  • LLMOps
  • 模型推理服务
  • 云原生
  • 后端

【免费下载链接】seldon-core

An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models

项目地址:https://gitcode.com/gh_mirrors/se/seldon-core
点击查看免费下载

导读: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 condition

2.1 核心参数逐一解析

参数简写类型默认值作用
--scheduler-host无string0.0.0.0:9004指定 seldon scheduler 的 gRPC 地址与端口
--authority无string空设置 HTTP/2 的 authority 或 HTTP/1 的虚拟主机,用于 TLS/SNI 场景
-r, --show-request-rboolfalse打印发送给 scheduler 的 gRPC 请求内容
-o, --show-response-obooltrue打印 scheduler 返回的响应内容(默认开启)
-w, --wait-wstring空设置等待条件,命令会轮询直到模型状态与指定字符串一致
-t, --timeout-secs-tint645等待模式下的超时秒数(配合-w使用)
-v, --verbose-vboolfalse输出调试信息(请求体等)
-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"。其取值还支持两层覆盖:

  1. 环境变量:源码中通过env.GetString(envScheduler, defaultSchedulerHost)读取,环境变量名为SELDON_SCHEDULE_HOST(定义于 flags.go);
  2. 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,其执行流程为:

  1. 解析 flags,构造SchedulerClient(cli.NewSchedulerClient);
  2. 调用schedulerClient.ModelStatus(modelName, modelWaitCondition, timeout);
  3. 成功时用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不是孤立命令,它与同组命令形成状态管理闭环:

  1. seldon model load -f model.yaml:向 scheduler 提交模型加载请求(见 scheduler.go,内部解析 YAML 为mlopsv1alpha1.Model后转为 scheduler 模型并调用LoadModel);
  2. seldon model status <name> -w ModelAvailable:阻塞等待模型进入可用状态;
  3. seldon model infer:对就绪模型发起推理;
  4. seldon model list:以表格形式列出所有模型及其最新状态(model state reason三列,scheduler.go);
  5. 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

项目地址:https://gitcode.com/gh_mirrors/se/seldon-core
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询