您可以使用自定义机器学习框架来完成有效载荷记录、反馈记录,并测量性能准确性、运行时偏差检测、可解释性、漂移检测和模型评估的自动偏差功能。 自定义机器学习框架必须等同于IBM watsonx.aiRuntime。
以下自定义机器学习框架支持模型评估:
框架 | 问题类型 | 数据类型 |
---|---|---|
等同于IBM watsonx.aiRuntime | 分类 | 结构化 |
等同于IBM watsonx.aiRuntime | 回归 | 结构化 |
对于不等同于IBM watsonx.aiRuntime 的模型,您必须为自定义模型创建一个封装器,以暴露所需的 REST API 端点。 您还必须在 Watson OpenScale 与实际定制机器学习引擎之间桥接输入/输出。
何时最适合选择定制机器学习引擎?
在以下情况成立时,定制机器学习引擎是最佳选择:
- 您未使用任何立即可用的产品来为机器学习模型提供服务。 您有一个为模型服务的系统,但该系统并不直接支持模型评估功能。
- 您使用的3rd-party供应商提供的服务引擎还不支持模型评估。 在这种情况下,考虑开发定制机器学习引擎作为原始或本机部署的包装程序。
运作方式
下图显示定制环境支持:
还可以引用以下链接:
模型支持监视器的输入条件
在以下示例中,模型将特征向量 (本质上是指定字段及其值的集合) 作为输入。
{ "fields": [ "name", "age", "position" ], "values": [ [ "john", 33, "engineer" ], [ "mike", 23, "student" ] ]
可以对
“age”
字段进行公平性评估。如果输入是一个从输入特征空间转换而来的张量或矩阵,则无法对该模型进行评估。 相应地,无法处理具有文本或图像输入的深度学习模型来检测和缓解偏见。
此外,必须装入训练数据以支持可解释性。
对于文本的可解释性,完整文本应该是其中某个特征。 当前发行版中不支持定制模型的图像的可解释性。
模型支持监视器的输出条件
模型输出输入特征向量以及该模型中各种类的预测概率。
{ "fields": [ "name", "age", "position", "prediction", "probability" ], "labels": [ "personal", "camping" ], "values": [ [ "john", 33, "engineer", "personal", [ 0.6744664422398081, 0.3255335577601919 ] ], [ "mike", 23, "student" "camping", [ 0.2794765664946941, 0.7205234335053059 ] ] ] }
在此示例中,
"personal”
和“camping”
是可能的类,并且会将每个评分输出中的评分分配给这两个类。 如果缺少预测概率,那么偏差检测起作用,但自动除偏不起作用。您可以通过实时评分端点访问评分输出,您可以使用 REST API 调用该端点进行模型评估。 对于 CUSTOMML、AmazonSageMaker,和IBM watsonx.aiRuntime,Watson OpenScale可直接连接到本地评分端点。
定制机器学习引擎
定制机器学习引擎提供了机器学习模型和 Web 应用程序的基础结构和托管功能。 支持模型评估的定制机器学习引擎必须符合以下要求:
公开两种类型的 REST API 端点:
- 发现端点(通过 GET 获取部署和详细信息的列表)
- 评分端点(联机和实时评分)
所有端点都需要兼容要支持的 Swagger 规范。
部署的输入有效内容和输出必须符合规范中描述的 JSON 文件格式。
Watson OpenScale 仅支持 BasicAuth
, none
或 apiKey
认证格式。
要查看 REST API 端点规范,请参阅REST API。
添加自定义机器学习引擎
您可以使用以下方法之一配置模型评估,使其与自定义机器学习提供程序协同工作:
- 您可以使用配置界面添加第一个自定义机器学习提供程序。 有关更多信息,请参阅指定定制机器学习实例。
- 还可以使用 Python SDK 添加机器学习提供程序。 如果要拥有多个提供程序,必须使用此方法。 有关更多信息,请参阅 添加定制机器学习引擎。
进一步探索
您可以使用自定义机器学习监控器来创建与其他服务交互的方式。
指定定制 ML 服务实例
配置模型评估的第一步是指定服务实例。 服务实例是存储 AI 模型和部署的位置。
连接定制服务实例
人工智能模型和部署连接在一个服务实例中,用于模型评估。 您可以连接定制服务。 要连接服务,请转到配置"选项卡,添加机器学习提供程序,然后点击编辑"图标。 除了名称,描述和指定 生产前 或 生产 环境类型外,还必须提供特定于此类型的服务实例的以下信息:
- 用户名
- 密码
- 使用格式
https://host:port
的 API 端点,例如https://custom-serve-engine.example.net:8443
选择通过请求列表还是通过输入个别评分端点来连接到部署。
请求部署列表
如果选择了请求部署列表磁贴,请输入凭证和 API 端点,然后保存配置。
提供个别评分端点
如果选择了输入个别评分端点磁贴,请输入 API 端点的凭证,然后保存配置。
现在您已准备好选择已部署模型并配置监视器。 您部署的模型会列在Insights仪表板上,您可以单击 "添加到仪表板"。 选中要监视的部署,然后单击配置。
有关更多信息,请参阅配置监视器。
定制机器学习引擎示例
使用以下构想来设置您自己的定制机器学习引擎。
Python 和 flask
可以使用 Python 和 flask 来提供 scikit-learn 模型。
要生成漂移检测模型,必须在 Notebook 中使用 scikit-learn V0.20.2。
可以在本地部署该应用程序以进行测试,并将其作为 IBM Cloud上的应用程序。
Node.js
您还可以在此处找到以 Node.js 编写的定制机器学习引擎的示例。
End2end 代码模式
代码模式显示了自定义引擎部署和与模型评估集成的end2end示例。
定制机器学习引擎的有效内容日志记录
要为IBMIBMwatsonx.aiRuntime 或自定义机器学习引擎配置有效负载日志,必须将 ML 引擎绑定为自定义引擎。
添加定制机器学习引擎
non-watsonx.aiRuntime 引擎是通过使用元数据作为自定义添加的,不存在与非IBM watsonx.aiRuntime 服务的直接集成。 您可以使用 "wos_client.service_providers.add
方法为模型评估添加多个机器学习引擎。
CUSTOM_ENGINE_CREDENTIALS = {
"url": "***",
"username": "***",
"password": "***",
}
wos_client.service_providers.add(
name=SERVICE_PROVIDER_NAME,
description=SERVICE_PROVIDER_DESCRIPTION,
service_type=ServiceTypes.CUSTOM_MACHINE_LEARNING,
credentials=CustomCredentials(
url= CUSTOM_ENGINE_CREDENTIALS['url'],
username= CUSTOM_ENGINE_CREDENTIALS['username'],
password= CUSTOM_ENGINE_CREDENTIALS['password'],
),
background_mode=False
).result
可以使用以下命令来查看服务提供者:
client.service_providers.get(service_provider_id).result.to_dict()
使用 API 密钥配置安全性
要为自定义机器学习引擎配置安全性,您可以使用IBM Cloud和IBM Cloud Pak for Data作为模型评估的身份验证提供商。 您可以使用https://iam.cloud.ibm.com/identity/token
URL 为IBM Cloud生成 IAM 令牌,使用https://<$hostname>/icp4d-api/v1/authorize
URL 为Cloud Pak for Data 生成令牌。
您可以使用 POST /v1/deployments/{deployment_id}/online
请求来实现以下格式的评分 API:
请求
{
"input_data": [{
"fields": [
"name",
"age",
"position"
],
"values": [
[
"john",
33,
"engineer"
],
[
"mike",
23,
"student"
]
]
}]
}
响应
{
"predictions": [{
"fields": [
"name",
"age",
"position",
"prediction",
"probability"
],
"labels": [
"personal",
"camping"
],
"values": [
[
"john",
33,
"engineer",
"personal",
[
0.6744664422398081,
0.32553355776019194
]
],
[
"mike",
23,
"student",
"camping",
[
0.2794765664946941,
0.7205234335053059
]
]
]
}]
}
添加定制预订
要添加定制预订,请运行以下命令:
custom_asset = Asset(
asset_id=asset['entity']['asset']['asset_id'],
name=asset['entity']['asset']['name'],
url = "dummy_url",
asset_type=asset['entity']['asset']['asset_type'] if 'asset_type' in asset['entity']['asset'] else 'model',
problem_type=ProblemType.MULTICLASS_CLASSIFICATION,
input_data_type=InputDataType.STRUCTURED,
)
deployment = AssetDeploymentRequest(
deployment_id=asset['metadata']['guid'],
url=asset['metadata']['url'],
name=asset['entity']['name'],
deployment_type=asset['entity']['type'],
scoring_endpoint = scoring_endpoint
)
asset_properties = AssetPropertiesRequest(
prediction_field='predicted_label',
probability_fields = ["probability"],
training_data_reference=None,
training_data_schema=None,
input_data_schema=None,
output_data_schema=output_schema,
)
result = ai_client.subscriptions.add(
data_mart_id=cls.datamart_id,
service_provider_id=cls.service_provider_id,
asset=custom_asset,
deployment=deployment,
asset_properties=asset_properties,
background_mode=False
).result
要获取预订列表,请运行以下命令:
subscription_id = subscription_details.metadata.id
subscription_id
details: wos_client.subscriptions.get(subscription_id).result.to_dict()
启用有效内容日志记录
要在预订中启用有效内容日志记录,请运行以下命令:
request_data = {'fields': feature_columns,
'values': [[payload_values]]}
要获取日志记录详细信息,请运行以下命令:
response_data = {'fields': list(result['predictions'][0]),
'values': [list(x.values()) for x in result['predictions']]}
评分和有效内容日志记录
对模型评分。
在有效内容日志记录表中存储请求和响应
records_list = [PayloadRecord(request=request_data, response=response_data, response_time=response_time), PayloadRecord(request=request_data, response=response_data, response_time=response_time)] subscription.payload_logging.store(records=records_list)
对于除 Python 以外的其他语言,您还可以使用 REST API 来记录有效内容。
上级主题: 受支持的机器学习引擎,框架和模型