EAS提供了预置镜像以部署社区模型,并针对模型分发和镜像拉起做了加速机制。您只需配置几个参数就可以将社区模型一键快捷的部署到EAS模型在线服务平台。本文为您介绍如何部署HuggingFace的社区模型。
背景信息
当前,开放的模型社区(例如 huggingface)提供了大量的机器学习模型和代码实现,其对应库的接口将模型、框架以及相关的处理逻辑进行了封装,您仅需使用几行代码即可直接端到端进行模型训练和调用等操作,无需考虑复杂的环境依赖、预处理后处理逻辑、框架类型等一系列使用和部署落地模型时的问题。这种生态也是对以Tensorflow、Pytorch为代表的框架-模型形态的升级。
EAS也对该形态进行了优化支持,支持您一键部署社区模型。
部署HuggingFace模型
PAI支持将HuggingFace社区官方库中的tasks对应的模型快速部署为EAS模型在线服务,具体操作步骤如下:
在官方库tasks中选择要部署的模型,本文以文本分类模型为例,进入distilbert-base-uncased-finetuned-sst-2-english模型页面,分别获取下图中的MODEL_ID(模型ID)、TASK(模型对应的TASK)、REVISION(模型版本)的值,并保存到本地。
您可以根据下表中的对应关系找到部署EAS服务时所需的TASK:
HuggingFace页面展示的TASK
部署EAS服务时填写的TASK
Audio Classification
audio-classification
Automatic Speech Recognition(ASR)
automatic-speech-recognition
Feature Extraction
feature-extraction
Fill Mask
fill-mask
Image Classification
image-classification
Question Answering
question-answering
Summarization
summarization
Text Classification
text-classification
Sentiment Analysis
sentiment-analysis
Text Generation
text-generation
Translation
translation
Translation (xx-to-yy)
translation_xx_to_yy
Text-to-Text Generation
text2text-generation
Zero-Shot Classification
zero-shot-classification
Document Question Answering
document-question-answering
Visual Question Answering
visual-question-answering
Image-to-Text
image-to-text
在EAS模型在线服务页面,部署HuggingFace模型。
进入新建服务页面,配置以下关键参数,其他参数配置详情,请参见服务部署:控制台。
参数
描述
服务名称
参照界面提示自定义配置服务名称。
部署方式
选择镜像部署AI-Web应用。
镜像选择
在PAI平台镜像列表中选择huggingface-inference;并根据实际场景选择对应的镜像版本。
环境变量
配置以下参数为步骤1中查询的结果:
MODEL_ID:distilbert-base-uncased-finetuned-sst-2-english。
TASK:text-classification。
REVISION:main。
运行命令
配置镜像版本后,系统会自动配置运行命令,您无需修改配置。
额外系统盘
单击资源部署信息区域的系统盘配置,将额外系统盘配置为100 GB。
单击部署。当服务状态变为运行中时,表明服务已部署成功。
调用已部署成功的模型服务。
通过控制台调用服务
在模型在线服务(EAS)页面,单击服务方式列下的查看Web应用,在WebUI页面验证模型推理效果。
单击目标服务操作列下的在线调试,在Body页签输入请求数据,例如:
{"data": ["hello"]}
,单击发送请求。说明文本分类模型输入的数据格式(
{"data": ["XXX"]}
)是Gradio框架的/api/predict
定义的,如果您使用其他类型的模型,例如图片分类或语音数据处理等,可以参考/api/predict
的定义来构造请求数据。
通过API调用服务
单击服务名称进入服务详情页面,在该页面单击查看调用信息。
在调用信息对话框公网地址调用页签,查看访问地址和Token,并保存到本地。
通过如下代码使用API调用服务。
import requests resp = requests.post(url="<service_url>", headers={"Authorization": "<token>"}, json={"data": ["hello"]}) print(resp.content) # resp: {"data":[{"label":"POSITIVE","confidences":[{"label":"POSITIVE","confidence":0.9995185136795044}]}],"is_generating":false,"duration":0.280987024307251,"average_duration":0.280987024307251}
其中:<service_url>和<token>均需要替换为步骤b中获取的访问地址和Token。