在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)。
在彈出的面板中,測試已訓練模型,查看輸出結果是否符合預期。