机器学习编辑

训练模型编辑

Eland 允许将 scikit-learn、XGBoost 和 LightGBM 库中的训练模型转换为序列化形式,并用作 Elasticsearch 中的推理模型。

>>> from xgboost import XGBClassifier
>>> from eland.ml import MLModel

# Train and exercise an XGBoost ML model locally
>>> xgb_model = XGBClassifier(booster="gbtree")
>>> xgb_model.fit(training_data[0], training_data[1])

>>> xgb_model.predict(training_data[0])
[0 1 1 0 1 0 0 0 1 0]

# Import the model into Elasticsearch
>>> es_model = MLModel.import_model(
    es_client="https://127.0.0.1:9200",
    model_id="xgb-classifier",
    model=xgb_model,
    feature_names=["f0", "f1", "f2", "f3", "f4"],
)

# Exercise the ML model in Elasticsearch with the training data
>>> es_model.predict(training_data[0])
[0 1 1 0 1 0 0 0 1 0]

使用 PyTorch 进行自然语言处理 (NLP)编辑

您需要安装适当版本的 PyTorch 才能导入 NLP 模型。运行 python -m pip install 'eland[pytorch]' 来安装该版本。

对于 NLP 任务,Eland 使您能够将 PyTorch 模型导入 Elasticsearch。使用 eland_import_hub_model 脚本下载并安装支持的 转换器模型,这些模型来自 Hugging Face 模型中心。例如

$ eland_import_hub_model <authentication> \ 
  --url https://127.0.0.1:9200/ \ 
  --hub-model-id elastic/distilbert-base-cased-finetuned-conll03-english \ 
  --task-type ner \ 
  --start

使用身份验证方法访问您的集群。请参阅 身份验证方法

集群 URL。或者,使用 --cloud-id

指定 Hugging Face 模型中心中模型的标识符。

指定 NLP 任务的类型。支持的值为 fill_masknerquestion_answeringtext_classificationtext_embeddingtext_expansiontext_similarityzero_shot_classification

有关可用选项的更多信息,请使用 --help 选项运行 eland_import_hub_model

$ eland_import_hub_model --help

使用 Docker 导入模型编辑

要使用 Docker 容器,您需要克隆 Eland 存储库:https://github.com/elastic/eland

如果您想在不安装 Eland 的情况下使用它,可以使用 Docker 镜像

您可以以交互方式使用容器

$ docker run -it --rm --network host docker.elastic.co/eland/eland

运行已安装的脚本也可以在没有交互式 shell 的情况下进行,例如

docker run -it --rm docker.elastic.co/eland/eland \
    eland_import_hub_model \
      --url $ELASTICSEARCH_URL \
      --hub-model-id elastic/distilbert-base-uncased-finetuned-conll03-english \
      --start

$ELASTICSEARCH_URL 替换为 Elasticsearch 集群的 URL。出于身份验证目的,请在 URL 中包含管理员用户名和密码,格式如下:https://username:password@host:port

在隔离环境中安装模型编辑

您可以通过将 eland_import_hub_model 脚本指向本地文件,在受限或封闭网络中安装模型。

对于 Hugging Face 模型的离线安装,需要先在本地克隆模型,您的系统中需要安装 Git 和 Git 大文件存储

  1. 从 Hugging Face 中选择您要使用的模型。有关支持的架构的更多信息,请参阅 兼容的第三方模型 列表。
  2. 使用模型 URL 从 Hugging Face 克隆选定的模型。例如

    git clone https://hugging-face.cn/dslim/bert-base-NER

    此命令将在 bert-base-NER 目录中生成模型的本地副本。

  3. 使用 eland_import_hub_model 脚本,并将 --hub-model-id 设置为克隆模型的目录以安装它

    eland_import_hub_model \
          --url 'XXXX' \
          --hub-model-id /PATH/TO/MODEL \
          --task-type ner \
          --es-username elastic --es-password XXX \
          --es-model-id bert-base-ner

    如果您使用 Docker 镜像运行 eland_import_hub_model,则必须绑定挂载模型目录,以便容器可以读取文件

    docker run --mount type=bind,source=/PATH/TO/MODELS,destination=/models,readonly -it --rm docker.elastic.co/eland/eland \
        eland_import_hub_model \
          --url 'XXXX' \
          --hub-model-id /models/bert-base-NER \
          --task-type ner \
          --es-username elastic --es-password XXX \
          --es-model-id bert-base-ner

    上传到 Elasticsearch 后,模型将具有由 --es-model-id 指定的 ID。如果未设置,则模型 ID 将从 --hub-model-id 派生;空格和路径分隔符将转换为双下划线 __

通过代理连接到 Elasticsearch编辑

在幕后,Eland 使用 requests Python 库,该库 允许通过环境变量配置代理。例如,要使用 HTTP 代理连接到 HTTPS Elasticsearch 集群,您需要在调用 Eland 时设置 HTTPS_PROXY 环境变量

HTTPS_PROXY=http://proxy-host:proxy-port eland_import_hub_model ...

如果您在 Elasticsearch 集群上禁用了安全性,则应使用 HTTP_PROXY

身份验证方法编辑

使用导入脚本时,可以使用以下身份验证选项

  • Elasticsearch 用户名和密码身份验证(使用 -u-p 选项指定)

    eland_import_hub_model -u <username> -p <password> --cloud-id <cloud-id> ...

    这些 -u-p 选项在使用 --url 时也有效。

  • Elasticsearch 用户名和密码身份验证(嵌入在 URL 中)

    eland_import_hub_model --url https://<user>:<password>@<hostname>:<port> ...
  • Elasticsearch API 密钥身份验证

    eland_import_hub_model --es-api-key <api-key> --url https://<hostname>:<port> ...
  • HuggingFace Hub 访问令牌(用于私有模型)

    eland_import_hub_model --hub-access-token <access-token> ...

TLS/SSL编辑

使用导入脚本时,可以使用以下 Elasticsearch 的 TLS/SSL 选项

  • 指定备用 CA 捆绑包以验证集群证书

    eland_import_hub_model --ca-certs CA_CERTS ...
  • 完全禁用 TLS/SSL 验证(强烈不建议)

    eland_import_hub_model --insecure ...