KServe(原KFServing)是云原生环境的一个模型服务器和推理引擎,支持自动扩缩容、缩容至零、金丝雀部署等能力。本文介绍如何基于阿里云服务网格ASM和Arena部署Serverless模式的KServe模型推理服务。
前提条件
已安装KServe组件。具体操作,请参见ASM集成KServe实现云原生AI模型推理服务。
已安装Arena客户端,且版本不低于0.9.11。具体操作,请参见配置Arena客户端。
步骤一:准备模型数据
您可以使用NAS或OSS准备模型数据,具体操作,请参见使用NAS静态存储卷、使用OSS静态存储卷。本文以NAS为例说明如何准备模型数据。
1、获取NAS实例的挂载点
登录文件存储NAS控制台,在左侧导航栏选择文件系统 > 文件系统列表,在页面顶部选择NAS实例所在地域。
在文件系统列表页面,单击目标文件系统ID进入文件详情页面,单击挂载使用,悬浮鼠标至,查看NAS实例的挂载地址,并记录此处的挂载地址和挂载命令以备后续使用。
2、为目标集群配置存储卷PV和存储声明PVC
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在存储卷页面右上方,单击创建。
在创建存储卷对话框中进行参数配置,然后单击创建,创建名为training-data的存储卷。
以下为主要参数说明,其他配置项可根据业务按需配置。详细信息,请参见使用NAS静态存储卷。
配置项
说明
存储卷类型
NAS
名称
training-data
挂载点域名
选择步骤1查询到的挂载点地址。
然后在左侧导航栏,选择
,在存储声明页面右上方,单击创建。在创建存储声明对话框中进行参数配置,然后单击创建,创建名为training-data的存储声明。
以下为主要参数说明,其他配置项可根据业务按需配置。详细信息,请参见使用NAS静态存储卷。
配置项
说明
存储声明类型
NAS
名称
training-data
分配模式
选择已有存储卷。
已有存储卷
单击选择已有存储卷链接选择已创建的存储卷PV。
3、将数据下载到NAS中
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点页面,单击目标节点名称进入节点的实例详情页面,单击远程连接,然后单击立即登录,进入远程连接页面。
执行步骤1获取到的挂载命令,挂载NAS。
下载BLOOM模型和训练数据。
从Hugging Face下载
bloom-560m
模型,将模型存储到PVC中,对应路径为pvc://training-data/bloom-560m
。
步骤二:部署推理服务
执行以下命令,检查集群中可用的GPU资源。
arena top node
预期输出:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 1 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 1 0 --------------------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 0/2 (0.0%)
预期输出表明,有2个包含GPU的节点可用于运行推理服务。
执行以下命令,启动名称为bloom-560m的推理服务。
pvc training-data
将会被挂载到容器内的/mnt/models
目录,即步骤一中下载好的模型路径。arena serve kserve \ --name=bloom-560m \ --image=ghcr.io/huggingface/text-generation-inference:1.0.2 \ --gpus=1 \ --cpu=6 \ --memory=20Gi \ --port=8080 \ --env=STORAGE_URI=pvc://training-data \ "text-generation-launcher --disable-custom-kernels --model-id /mnt/models/bloom-560m --num-shard 1 -p 8080"
预期输出:
inferenceservice.serving.kserve.io/bloom-560m created INFO[0013] The Job bloom-560m has been submitted successfully INFO[0013] You can run `arena serve get bloom-560m --type kserve -n default` to check the job status
命令中的参数说明如下所示:
参数
是否必选
说明
--name
是
指定提交的作业名称,全局唯一,不能重复。
--image
是
指定推理服务的镜像地址。
--gpus
否
指定推理服务需要使用的GPU卡数。默认值为0。
--cpu
否
指定推理服务需要使用的CPU数。
--memory
否
指定推理服务需要使用的内存数。
--port
否
推理服务对外暴露的端口。
--env
否
推理服务环境变量,这里指定模型存储的PVC为training-data。
步骤三:验证推理服务
执行以下命令,查看KServe推理服务的部署情况。
arena serve get bloom-560m
预期输出:
Name: bloom-560m Namespace: default Type: KServe Version: 00001 Desired: 1 Available: 1 Age: 9m Address: http://bloom-560m.default.example.com Port: :80 GPU: 1 LatestRevision: bloom-560m-predictor-00001 LatestPrecent: 100 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp Running 9m 2/2 0 1 cn-hongkong.192.1xx.x.xxx
预期输出表明,KServe推理服务部署成功,模型访问地址为
http://bloom-560m.default.example.com
。获取ASM网关地址。具体操作,请参见获取ASM网关地址。
执行下列命令,使用获取到的ASM网关地址访问推理服务。
# 请将${ASM_GATEWAY}替换为ASM网关地址。 curl -H "Host: bloom-560m.default.example.com" http://${ASM_GATEWAY}:80/generate \ -X POST \ -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":17}}' \ -H 'Content-Type: application/json'
预期输出:
{"generated_text":" Deep Learning is a new type of machine learning that is used to solve complex problems."}
步骤四:更新推理服务
创建一个新的模型版本,可将PVC中的模型地址复制到新的路径
bloom-560m-v2
。执行下列命令,灰度更新KServe推理服务,指定新版本模型路径为
bloom-560m-v2
,新版本分配10%流量,老版本分配90%流量。arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=10 \ "text-generation-launcher --disable-custom-kernels --model-id /mnt/models/bloom-560m-v2 --num-shard 1 -p 8080"
执行以下命令,查看推理服务运行情况。
arena serve get bloom-560m
预期输出:
Name: bloom-560m Namespace: default Type: KServe Version: 00002 Desired: 2 Available: 2 Age: 36m Address: http://bloom-560m.default.example.com Port: :80 GPU: 2 LatestRevision: bloom-560m-predictor-00002 LatestPrecent: 10 PrevRevision: bloom-560m-predictor-00001 PrevPrecent: 90 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp Running 36m 2/2 0 1 cn-hongkong.192.1xx.x.xxx bloom-560m-predictor-00002-deployment-5b7bb66cfb-nqprp Running 6m 2/2 0 1 cn-hongkong.192.1xx.x.xxx
新版本测试通过后,可执行以下命令,将
canary-traffic-percent
的值设置为100,将流量全部转发到新版本。arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=100
(可选)步骤五:删除推理服务
如果需要删除推理服务,可执行以下命令。
arena serve delete bloom-560m