Link Search Menu Expand Document Documentation Menu

连接到外部托管模型

2.9 版本引入

第三方平台上的机器学习(ML)模型集成允许系统管理员和数据科学家在其OpenSearch集群外部运行ML工作负载。连接到外部托管模型使ML开发人员能够创建与其他ML服务(例如Amazon SageMaker或OpenAI)的集成。

要集成第三方平台上托管的模型,请选择以下选项

  • 如果您是希望创建与特定ML服务集成的ML开发人员,请参阅连接器蓝图
  • 如果您是希望创建ML服务连接的系统管理员或数据科学家,请参阅连接器

先决条件

如果您是部署ML连接器的管理员,请确保连接器的目标模型已部署在您选择的平台上。此外,请确保您拥有向连接器对应的第三方API发送和接收数据的权限。

当您的第三方平台启用访问控制时,您可以使用连接器API中的authorizationcredential设置输入您的安全设置。

添加可信端点

要在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_rolesadd_all_backend_rolesaccess_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模型进行批量摄取

要了解如何使用模型进行向量搜索,请参阅AI 搜索方法

步骤8(可选):卸载模型

您可以通过在模型设置中定义TTL或使用卸载API手动卸载模型来自动卸载模型。有关更多信息,请参阅卸载API

后续步骤