You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MLflow R版注册模型加载后对象未找到问题求助

问题根源

问题出在R6类生成器的环境绑定逻辑:TRCDetector这类R6类在定义时,依赖的SESD、TRES、TCHA存放在原脚本环境中。用carrier::crate打包后,这些依赖虽被存入crate的函数环境,但TRCDetector的内部查找路径仍指向原脚本环境,容器的新环境中不存在该路径,因此触发"Object not found"错误。

可行解决方案

方案1:在预测函数内部绑定依赖到R6类环境

直接在crate的预测函数中,将打包好的依赖R6类注入TRCDetector的运行环境,确保其内部能直接找到依赖:

library(carrier)
library(rlang)

predictor <- crate(
    function(x) {
        # 将依赖R6类绑定到TRCDetector的专属环境
        env_bind(environment(TRCDetector), SESD = SESD, TRES = TRES, TCHA = TCHA)
        # 调用模型
        TRCDetector(
            data = x$value,
            time = x$timestamps,
            train_size = TRAIN_SIZE,
            dwin = DWIN,
            rwin = RWIN,
            alpha = ALPHA,
            maxr = MAXR
        )
    },
    # 打包所有必要依赖
    TRCDetector = TRCDetector,
    SESD = SESD,
    TRES = TRES,
    TCHA = TCHA,
    TRAIN_SIZE = TRAIN_SIZE,
    DWIN = DWIN,
    RWIN = RWIN,
    ALPHA = ALPHA,
    MAXR = MAXR
)

方案2:提前修改R6类环境再打包

若不想在预测函数中加入额外逻辑,可提前修改TRCDetector的环境,让它直接指向包含所有依赖的环境:

library(carrier)
library(rlang)

# 克隆TRCDetector原始环境并绑定所有依赖
trc_env <- env_clone(environment(TRCDetector))
env_bind(trc_env, SESD = SESD, TRES = TRES, TCHA = TCHA)
# 替换TRCDetector的环境为新的绑定环境
environment(TRCDetector) <- trc_env

# 打包模型(无需重复传入SESD/TRES/TCHA)
predictor <- crate(
    function(x) TRCDetector(
        data = x$value,
        time = x$timestamps,
        train_size = TRAIN_SIZE,
        dwin = DWIN,
        rwin = RWIN,
        alpha = ALPHA,
        maxr = MAXR
    ),
    TRCDetector = TRCDetector,
    TRAIN_SIZE = TRAIN_SIZE,
    DWIN = DWIN,
    RWIN = RWIN,
    ALPHA = ALPHA,
    MAXR = MAXR
)
验证方法

用mlflow_log_model()记录模型后,在容器中通过mlflow_load_model()加载,直接调用预测函数或执行mlflow models serve命令,即可正常使用模型,无需手动提取依赖。

内容的提问来源于stack exchange,提问作者jdevoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:57:02