在Elasticsearch(简称ES)机器学习中应用第三方训练模型前,需要先将训练模型导入ES中。本文介绍利用Eland工具通过在线或离线方式将Hugging Face模型上传到阿里云ES。
背景信息
Eland通过将大数据处理能力与Python数据科学生态系统结合,为数据科学家提供了一个强大的工具,可以实现ES数据分析和机器学习任务等操作。例如,通过Eland将Hugging Face Transformer库中的预训练模型转换为TorchScript表示形式(该形式的模型可以在没有Python解释器的环境中运行),模型分块处理并将模型导入ES中。
关于Eland的更多信息,请参见Elastic Eland。
版本兼容性
阿里云ES 7.11及以上版本集群开始支持Eland。
更高版本ES支持的Eland功能更丰富,建议在ES 8.3及更高版本中使用Eland功能。
确保ES集群的主版本与Eland主版本一致,例如:ES 8.x 版本兼容Eland 8.x的版本,ES 7.x 版本兼容 Eland 7.x 版本,详情请参见Elastic Eland。
支持Python 3.8、3.9、3.10版本。
支持Pandas 1.5.3版本。
前提条件
已创建ECS实例,并配置Python环境,本文以Python 3.10.12为例。创建ECS实例,请参见Linux系统实例快速入门。
创建阿里云ECS时,镜像可以选择Ubuntu 22系列,自带python3.10。否则自行下载并配置Python环境,具体操作,请参见Python官方文档。
确保ECS环境网络可正常访问Hugging Face。
Eland支持Hugging Face模型上传,其他仓库环境下的模型可能无法支持。
已创建阿里云ES,本文以ES 8.9版本为例。具体操作,请参见创建阿里云Elasticsearch实例。
将ECS的公网或私网IP地址加入到ES实例的对应白名单中,使ECS与ES实例连通。具体操作,请参见配置实例公网或私网访问白名单。
Eland功能上传模型功能属于ES白金版及企业版能力,阿里云ES为白金版服务,可直接上传模型。
跨大版本ES机器学习功能的使用可能存在差异性。其他ES版本,请参见Machine learning。
准备工作
在ECS中执行如下命令,下载并安装与阿里云ES兼容的Eland和torch,本文以Eland 8.7.0版本为例。
pip3 install eland==8.7.0 pip3 install torch==1.11.0 torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu pip install eland[pytorch]
说明如果您需要使用PyTorch 1.13.1或更早版本导入NLP模型,请运行命令
pip install torch==1.13.1
,安装适当版本的PyTorch。检查pandas版本
执行如下命令查看pandas版本是否为1.5.3。
pip show pandas
如果pandas版本不是1.5.3,请执行以下命令更改pandas版本。
pip install pandas==1.5.3
步骤一:上传模型到阿里云ES
方法一:在线上传
直接将huggingface仓库中的模型上传到阿里云ES中。
eland_import_hub_model \
--url 'http://es-cn-w*****.ES.aliyuncs.com:9200' \
--hub-model-id 'madhurjindal/autonlp-Gibberish-Detector-492513457' \
--task-type text_classification \
--es-username yourusername \
--es-password yourpassword \
--es-model-id your-es-model-id-name \
方法二:离线上传
将huggingface_hub仓库中的模型下载到本地,再上传到阿里云ES中。
在ECS中执行如下命令,下载huggingface_hub仓库。
# 下载huggingface_hub仓库,huggingface_hub 是由 Hugging Face 提供的一个库,用于与他们的模型库进行交互,可以用来下载、上传以及列出模型和其他库资源。 pip install huggingface_hub python3 # 在Python解释器中导入 snapshot_download 函数 from huggingface_hub import snapshot_download # 使用 snapshot_download 函数下载一个名为 FlagAlpha/Llama2-Chinese-13b-Chat 的存储库的快照 snapshot_download(repo_id="madhurjindal/autonlp-Gibberish-Detector-492513457")
在ECS中执行如下命令,将模型文件上传到阿里云ES中。
eland_import_hub_model \ --url 'http://es-cn-w*****.ES.aliyuncs.com:9200' \ --hub-model-id '/model/.cache/huggingface/hub/models--madhurjindal--autonlp-Gibberish-Detector-492513457/snapshots/c068f552cdee957e45d8773db9f7158d43902244' \ --task-type text_classification \ --es-username yourusername \ --es-password yourpassword \ --es-model-id madhurjindal-autonlp-gibberish-detector-492513457-offline \
部分参数说明:
参数 | 说明 |
repo_id | Hugging Face模型中心的模型ID。 示例:madhurjindal/autonlp-Gibberish-Detector-492513457 |
url | ES的域名。 示例:http://es-cn-w*****.ES.aliyuncs.com:9200 |
hub-model-id |
|
task-type | 模型使用的任务类型,不同模型支持的任务类型不同。 huggingface模型目前支持的任务类型包括:
|
es-username | ES实例的用户名。 |
es-password | ES实例的密码。 |
es-model-id | 上传到ES中后使用的模型ID,可自定义。 说明 自定义的模型ID中不能包含大写字母。 示例:madhurjindal-autonlp-gibberish-detector-492513457-offline |
步骤二:部署模型
登录Kibana。具体操作,请参见登录Kibana控制台。
单击Kibana页面左上角的图标,选择Analytics > Machine Learning。
在左侧菜单栏,单击模型管理(Model Management) > 已训练模型(Trained Models)。
(可选)在页面上方,单击同步作业和已训练模型(Synchronize your jobs and trained models),在弹出的面板中单击同步(Synchronize)。
将鼠标移动到目标模型操作(Actions)列的前面,单击图标,启动模型。
在弹出的对话框中,配置模型后,单击启动(Start)。
页面右下角弹出已成功启动的提示对话框,表明模型部署成功。
说明模型无法启动可能是集群内存不足,升配集群后再试。无法启动的具体原因,请在提示对话框中单击请参阅完整的错误信息查看。
步骤三:测试模型
在已训练模型页面,在已部署模型的操作列,选择 > 测试模型(Test model)。
在弹出的面板中,测试已训练模型,查看输出结果是否符合预期。