加载已注册的模型
要在注册的模型版本上执行推理,我们需要将其加载到内存中。有许多方法可以找到我们的模型版本,但最佳方法取决于您可用的信息。然而,本着快速入门的精神,下面的代码片段展示了通过特定的模型URI从模型注册表加载模型并执行推理的最简单方法。
import mlflow.sklearn
from sklearn.datasets import make_regression
model_name = "sk-learn-random-forest-reg-model"
model_version = "latest"
# Load the model from the Model Registry
model_uri = f"models:/{model_name}/{model_version}"
model = mlflow.sklearn.load_model(model_uri)
# Generate a new dataset for prediction and predict
X_new, _ = make_regression(n_features=4, n_informative=2, random_state=0, shuffle=False)
y_pred_new = model.predict(X_new)
print(y_pred_new)
请注意,如果你没有使用 sklearn,如果你的模型风格受支持,你应该使用特定模型风格的加载方法,例如 mlflow.<flavor>.load_model()
。如果模型风格不受支持,你应该利用 mlflow.pyfunc.load_model()
。在本教程中,我们为了演示目的使用了 sklearn。
示例 0: 通过跟踪服务器加载
模型URI是序列化模型的唯一标识符。鉴于模型工件与实验一起存储在跟踪服务器中,您可以使用以下模型URI绕过模型注册表并将工件加载到内存中。
绝对本地路径:
mlflow.sklearn.load_model("/Users/me/path/to/local/model")
相对本地路径:
mlflow.sklearn.load_model("relative/path/to/local/model")
运行ID:
mlflow.sklearn.load_model(f"runs:/{mlflow_run_id}/{run_relative_path_to_model}")
然而,除非你在记录模型的相同环境中,否则通常不会有上述信息。相反,你应该通过利用模型的名称和版本来加载模型。
示例 1:通过名称和版本加载
要通过 model_name
和单调递增的 model_version
将模型加载到内存中,请使用以下方法:
model = mlflow.sklearn.load_model(f"models:/{model_name}/{model_version}")
虽然这种方法快速且简单,但单调递增的模型版本缺乏灵活性。通常,利用模型版本别名更为高效。
示例 2:通过模型版本别名加载
模型版本别名是用户为模型版本定义的标识符。由于它们在模型注册后是可变的,因此它们将模型版本与使用它们的代码解耦。
例如,假设我们有一个名为 production_model
的模型版本别名,对应于生产模型。当我们的团队构建了一个更好的模型并准备部署时,我们不需要更改服务工作负载代码。相反,在 MLflow 中,我们将 production_model
别名从旧模型版本重新分配到新模型版本。这可以在 UI 中简单完成。在 API 中,我们使用相同的模型名称、别名名称和 新 模型版本 ID 运行 client.set_registered_model_alias。就是这么简单!
在前一页中,我们为模型添加了一个模型版本别名,但这里是一个编程示例。
import mlflow.sklearn
from mlflow import MlflowClient
client = MlflowClient()
# Set model version alias
model_name = "sk-learn-random-forest-reg-model"
model_version_alias = "the_best_model_ever"
client.set_registered_model_alias(
model_name, model_version_alias, "1"
) # Duplicate of step in UI
# Get informawtion about the model
model_info = client.get_model_version_by_alias(model_name, model_version_alias)
model_tags = model_info.tags
print(model_tags)
# Get the model version using a model URI
model_uri = f"models:/{model_name}@{model_version_alias}"
model = mlflow.sklearn.load_model(model_uri)
print(model)
{'problem_type': 'regression'}
RandomForestRegressor(max_depth=2, random_state=42)
模型版本别名非常动态,可以对应于对你的团队有意义的任何事物。最常见的例子是部署状态。例如,假设我们在生产中有一个 champion
模型,但正在开发一个有望超越生产模型的 challenger
模型。你可以使用 champion
和 challenger
模型版本别名来唯一标识这些模型版本,以便于访问。
就是这样!你现在应该感到舒适了…
注册一个模型
通过 MLflow UI 查找模型并修改标签和模型版本别名
加载已注册的模型进行推理