ML数据和普罗米修斯和Grafana的模型漂移

2021-05-11 02:41:36

Boxkite是一种简单,开源的方式,可跟踪机器学习模型的模型和数据漂移。

数据漂移:输入数据如何从我培训我的模型到它的内容时所怎样的'

模型漂移:我的模型的预测/分类如何从培训到它的预测到它的培训时因培训而变化?

只是导入boxkite,然后添加到modelMonitorsService.export_text方法的调用。这告诉boxkite导出包含模型的统计分布的直方图的文本文件(模型培训的数据)和推广(将模型运行训练数据的结果)。

bunch = load_diabetes()x_train,x_test,y_train,y_test = train_test_split(bunch。数据,束。目标)model = linearregression()模型。 Fit(X_Train,Y_Train)打印("得分:%.2f"%模型。分数(x_test,y_test))与打开(" ./ model.pkl",&#34 ; WB")作为f:泡菜。转储(模型,f)#特征= [("年龄" [33,23,54,...]),("性别" [0,1,0] ),......]功能= zip(* [束。feature_names,x_train。t])y_pred = model。预测(x_test)推理=列表(y_pred)modelMonitoringService。 export_text(功能=特征,推理=推断,路径=" ./ timogram.txt",#<这里)mlflow。 log_artifact(" ./ timogram.txt")

这样,Boxkite在训练时间内采用模型的输入和输出的形状的快照,以及模型本身。在此示例中,我们正在将直方图与模型文件本身一起记录到MLFlow,以便可以在那里跟踪并将其传递在那里。

在您的模型服务代码中(假设您的型号在,例如,烧瓶服务器),我们将ModelMonitorsService类初始化,并在培训时间收集的TIMITIM_FILE:

然后,当我们正在推理时,我们调用Monitor.Log_Prediction方法和Boxkite将自动将我们的生产时间分布进行比较到训练时间分布:

@应用程序 。路线(" /"方法= [" post"])def predict():特征=请求。 JSON得分=模型。预测([特征])[0] PID =监视器。 log_prediction(#< - here请求_body =请求。数据,特征=特征,输出= score,)返回{"结果" :得分," prediction_id" :PID}

然后我们公开了一个普通的格式/度量标准端点,它只需调用ModelMonitoringService' s organd_http方法:

然后配置您的propetheus实例来刮窗格服务器。你如何这样做取决于你的设置,你可能需要添加proMetheus.io/scrape:"真实"到您的POD注释或可能会设置ProMetheus以刮掉模型服务器。

KL发散和K-S测试对这些分布的方差随着时间的变化而变化!