部署ModelScope模型#

ModelScope是一个开源的模型社区,提供了丰富的自然语言处理、计算机视觉、多模态等领域开源模型,并提供了ModelScope library,支持开发者可以方便得获取模型,使用模型进行推理。

PAI支持开发者将ModelScope上的模型,简单快捷得部署为在线推理服务,本文将介绍使用PAI Python SDK完成ModelScope模型的部署。

安装和配置SDK#

我们需要首先安装PAI Python SDK以运行本示例。

!python -m pip install --upgrade alipai

SDK需要配置访问阿里云服务需要的AccessKey,以及当前使用的工作空间和OSS Bucket。在PAI SDK安装之后,通过在 命令行终端 中执行以下命令,按照引导配置密钥、工作空间等信息。

# 以下命令,请在 命令行终端 中执行.

python -m pai.toolkit.config

我们可以通过以下代码验证配置是否已生效。

import pai
from pai.session import get_default_session

print(pai.__version__)

sess = get_default_session()

# 获取配置的工作空间信息
assert sess.workspace_name is not None
print(sess.workspace_name)

部署ModelScope模型#

当前示例,我们将使用ModelScope上的"CSANMT连续语义增强机器翻译-英中-通用领域-large"模型,他支持英文到中文的翻译任务。

通过ModelScope的模型详情页,我们可以获取部署模型所需要的信息,包括模型ID模型版本,以及任务类型,然后通过 pai.modelscope.ModelScopeModel 类,创建一个ModelScope模型对象,完成模型部署。

from pai.modelscope.model import ModelScopeModel

# 配置待部署的模型信息
m = ModelScopeModel(
    command="python app.py",  # 默认的ModelScope模型推理服务启动命令
    modelscope_version="latest",  # ModelScope library的版本号,latest表示最新版本
    environment_variables={
        "MODEL_ID": "damo/nlp_csanmt_translation_en2zh",  # ModelScope的模型ID
        "TASK": "translation",  # 模型的任务类型
        "REVISION": "v1.0.1",  # 模型的版本号
    },
)
from pai.common.utils import random_str
from pai.predictor import Predictor

# 部署模型,在PAI-EAS创建一个推理服务
p: Predictor = m.deploy(
    service_name="ms_model_{0}".format(random_str(8)),  # 配置推理服务名称
    instance_type="ecs.gn6i-c4g1.xlarge",  # 配置推理服务实例规格
    options={
        "metadata.rpc.keepalive": 20000,  # 配置推理服务RPC超时时间: 20s
    },
)

通过以上方式部署的模型推理服务,支持通过空字符串的预测请求,获取模型的输入输出信息。

from pprint import pprint
from pai.predictor import RawResponse

# 通过一个空的预测请求,获取模型的推理输入输出的数据格式
res: RawResponse = p.raw_predict(data="")

pprint(res.json())

基于以上获得的输入数据格式信息,我们可以构建相应的预测请求,发送给到推理,获取翻译结果。

res = p.predict(
    # 参考以上的获得的输入输出数据格式,配置推理请求的数据
    data={
        "input": {
            "text": "Alibaba Group's mission is to let the world have no difficult business"
        }
    }
)
pprint(res)

在测试完成之后,删除推理服务,释放机器资源。

# 删除推理服务
p.delete_service()