连接到外部托管模型
2.9 版本引入
第三方平台上的机器学习(ML)模型集成允许系统管理员和数据科学家在其OpenSearch集群外部运行ML工作负载。连接到外部托管模型使ML开发人员能够创建与其他ML服务(例如Amazon SageMaker或OpenAI)的集成。
要集成第三方平台上托管的模型,请选择以下选项
先决条件
如果您是部署ML连接器的管理员,请确保连接器的目标模型已部署在您选择的平台上。此外,请确保您拥有向连接器对应的第三方API发送和接收数据的权限。
当您的第三方平台启用访问控制时,您可以使用连接器API中的authorization
或credential
设置输入您的安全设置。
添加可信端点
要在OpenSearch中配置连接器,请使用plugins.ml_commons.trusted_connector_endpoints_regex
设置将可信端点添加到您的集群设置中,该设置支持Java正则表达式
PUT /_cluster/settings
{
"persistent": {
"plugins.ml_commons.trusted_connector_endpoints_regex": [
"^https://runtime\\.sagemaker\\..*[a-z0-9-]\\.amazonaws\\.com/.*$",
"^https://api\\.openai\\.com/.*$",
"^https://api\\.cohere\\.ai/.*$",
"^https://bedrock-runtime\\..*[a-z0-9-]\\.amazonaws\\.com/.*$"
]
}
}
设置连接器访问控制
如果您计划使用远程连接器,请确保使用启用了安全插件的OpenSearch集群。使用安全插件可让您访问连接器访问控制,这是使用远程连接器时必需的。
如果您需要对连接器进行细粒度访问控制,请使用以下集群设置
PUT /_cluster/settings
{
"persistent": {
"plugins.ml_commons.connector_access_control_enabled": true
}
}
启用访问控制后,您可以安装安全插件。这使得使用连接器API时需要backend_roles
、add_all_backend_roles
或access_model
选项。如果成功,OpenSearch将返回以下响应
{
"acknowledged": true,
"persistent": {
"plugins": {
"ml_commons": {
"connector_access_control_enabled": "true"
}
}
},
"transient": {}
}
步骤 1:注册模型组
要注册模型,您有以下选项
- 您可以使用
model_group_id
将模型版本注册到现有模型组。 - 如果您不使用
model_group_id
,ML Commons 将创建一个带有新模型组的模型。
要注册模型组,请发送以下请求:
POST /_plugins/_ml/model_groups/_register
{
"name": "remote_model_group",
"description": "A model group for external models"
}
响应包含模型组 ID,您将使用它向此模型组注册模型。
{
"model_group_id": "wlcnb4kBJ1eYAeTMHlV6",
"status": "CREATED"
}
要了解有关模型组的更多信息,请参阅模型访问控制。
步骤2:创建连接器
您可以创建一个可重复用于多个模型的独立连接器。或者,您可以在创建模型时指定一个连接器,使其仅用于该模型。有关更多信息和示例连接器,请参阅连接器。
连接器创建API (/_plugins/_ml/connectors/_create
) 用于创建连接器,从而实现在OpenSearch中注册和部署外部模型。使用endpoint
参数,您可以通过其特定的API端点将ML Commons连接到任何受支持的ML工具。例如,您可以使用api.openai.com
端点连接到ChatGPT模型
POST /_plugins/_ml/connectors/_create
{
"name": "OpenAI Chat Connector",
"description": "The connector to public OpenAI model service for GPT 3.5",
"version": 1,
"protocol": "http",
"parameters": {
"endpoint": "api.openai.com",
"model": "gpt-3.5-turbo"
},
"credential": {
"openAI_key": "..."
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"url": "https://${parameters.endpoint}/v1/chat/completions",
"headers": {
"Authorization": "Bearer ${credential.openAI_key}"
},
"request_body": "{ \"model\": \"${parameters.model}\", \"messages\": ${parameters.messages} }"
}
]
}
响应包含新创建连接器的连接器 ID。
{
"connector_id": "a1eMb4kBJ1eYAeTMAljY"
}
步骤3:注册外部托管模型
要将外部托管模型注册到步骤1中创建的模型组,请在以下请求中提供步骤1中的模型组ID和步骤2中的连接器ID。您必须将function_name
指定为remote
POST /_plugins/_ml/models/_register
{
"name": "openAI-gpt-3.5-turbo",
"function_name": "remote",
"model_group_id": "1jriBYsBq7EKuKzZX131",
"description": "test model",
"connector_id": "a1eMb4kBJ1eYAeTMAljY"
}
OpenSearch 返回注册操作的任务 ID。
{
"task_id": "cVeMb4kBJ1eYAeTMFFgj",
"status": "CREATED"
}
要检查操作状态,请将任务 ID 提供给任务 API:
GET /_plugins/_ml/tasks/cVeMb4kBJ1eYAeTMFFgj
操作完成后,状态将变为 COMPLETED
。
{
"model_id": "cleMb4kBJ1eYAeTMFFg4",
"task_type": "REGISTER_MODEL",
"function_name": "REMOTE",
"state": "COMPLETED",
"worker_node": [
"XPcXLV7RQoi5m8NI_jEOVQ"
],
"create_time": 1689793598499,
"last_update_time": 1689793598530,
"is_async": false
}
记下返回的 model_id
,因为部署模型时需要它。
步骤4:部署模型
从OpenSearch 2.13版本开始,当您首次发送预测API请求时,外部托管模型默认会自动部署。要禁用外部托管模型的自动部署,请将plugins.ml_commons.model_auto_deploy.enable
设置为false
PUT _cluster/settings
{
"persistent": {
"plugins.ml_commons.model_auto_deploy.enable" : "false"
}
}
要卸载模型,请使用卸载API。
POST /_plugins/_ml/models/cleMb4kBJ1eYAeTMFFg4/_deploy
响应中包含任务 ID,您可以使用它来检查部署操作的状态
{
"task_id": "vVePb4kBJ1eYAeTM7ljG",
"status": "CREATED"
}
与上一步一样,通过调用任务 API 检查操作状态
GET /_plugins/_ml/tasks/vVePb4kBJ1eYAeTM7ljG
操作完成后,状态将变为 COMPLETED
。
{
"model_id": "cleMb4kBJ1eYAeTMFFg4",
"task_type": "DEPLOY_MODEL",
"function_name": "REMOTE",
"state": "COMPLETED",
"worker_node": [
"n-72khvBTBi3bnIIR8FTTw"
],
"create_time": 1689793851077,
"last_update_time": 1689793851101,
"is_async": true
}
步骤5(可选):测试模型
使用预测API测试模型
POST /_plugins/_ml/models/cleMb4kBJ1eYAeTMFFg4/_predict
{
"parameters": {
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}
}
要了解有关OpenAI中聊天功能的更多信息,请参阅OpenAI聊天API。
响应包含OpenAI模型提供的推理结果
{
"inference_results": [
{
"output": [
{
"name": "response",
"dataAsMap": {
"id": "chatcmpl-7e6s5DYEutmM677UZokF9eH40dIY7",
"object": "chat.completion",
"created": 1689793889,
"model": "gpt-3.5-turbo-0613",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 19,
"completion_tokens": 9,
"total_tokens": 28
}
}
}
]
}
]
}
步骤6:使用模型进行批量摄取
要了解如何使用模型进行批量摄取以提高摄取性能,请参阅使用外部托管ML模型进行批量摄取。
步骤7:使用模型进行搜索
要了解如何使用模型进行向量搜索,请参阅AI 搜索方法。
步骤8(可选):卸载模型
您可以通过在模型设置中定义TTL或使用卸载API手动卸载模型来自动卸载模型。有关更多信息,请参阅卸载API。
后续步骤
- 有关连接器的更多信息,包括示例连接器,请参阅连接器。
- 有关连接器参数的更多信息,请参阅连接器蓝图。
- 有关在OpenSearch中管理ML模型的更多信息,请参阅在OpenSearch中使用ML模型。
- 有关在OpenSearch中与ML模型交互的更多信息,请参阅在OpenSearch Dashboards 中管理 ML 模型。有关如何配置模型防护栏的说明,请参阅防护栏。