本文以部署ModelScope社区的通义千问-7B-Chat模型为例,演示如何使用数据缓存。通过数据缓存提前拉取通义千问-7B-Chat模型数据,然后在创建通义千问的应用实例时直接挂载模型数据,可以免去在实例中拉取模型数据的等待时间,加速应用部署。
背景信息
通义千问-7B(Qwen-7B)是阿里云研发的通义千问大模型系列的70亿参数规模的模型。基于Transformer的大语言模型,在超大规模的预训练数据上进行训练得到了Qwen-7B。本文使用的通义千问-7B-Chat是在Qwen-7B的基础上,使用对齐机制打造了基于大语言模型的AI助手。更多信息,请参见Qwen-7B-Chat。
前提条件
您使用的VPC已绑定公网NAT网关,并配置SNAT条目允许该VPC或下属交换机的资源可以访问公网。
如果VPC没有绑定公网NAT网关,您需要在创建数据缓存和部署应用时绑定EIP,以便可以拉取公网数据。
准备运行环境
硬件要求
需使用的GPU规格要求如下。ECI支持的GPU规格,请参见规格说明。
CPU:无严格限制
内存:>16 GiB
GPU:≥1
显存:>16 GB(显存过低可能会出现OOM)
软件环境
通义千问-7B-Chat依赖的库和配置较多,ECI已经制作好了一个公共容器镜像,包含了一个基于Gradio的WebUI,您可以直接使用该镜像或者将其作为基础镜像进行二次开发。镜像地址为registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0,大小约为15 GB。
操作步骤
创建数据缓存
控制台
访问ModelScope,获取模型ID。
本示例使用通义千问-7B-Chat模型的v1.1.4版本。在ModelScope找到目标模型后,在模型详情页面顶部可以复制模型ID。
登录弹性容器实例控制台。
在顶部菜单栏左上角处选择地域。
在左侧导航栏,单击数据缓存。
创建通义千问-7B-Chat的数据缓存。
单击创建数据缓存。
完成数据缓存参数配置。
本文使用的参数示例如下,其中缓存数据源为拉取通义千问-7B-Chat模型的固定配置,其他参数可自定义配置,更多信息,请参见创建数据缓存。
配置项
示例值
缓存所属Bucket
test
缓存所属目录
/model/qwen/
缓存名
qwen
缓存大小
20 GiB
缓存数据源
类型:URL
参数
repoSource:ModelScope/Model
repoId:qwen/Qwen-7B-Chat
revision:v1.1.4
单击确定。
查看数据缓存状态。
在数据缓存页面刷新查看数据缓存状态,当状态为Available时,表示可以使用该数据缓存。
OpenAPI
访问ModelScope,获取模型ID。
本示例使用通义千问-7B-Chat模型的v1.1.4版本。在ModelScope找到目标模型后,在模型详情页面顶部可以复制模型ID。
创建通义千问-7B-Chat的数据缓存。
调用CreateDataCache接口创建数据缓存所采用的参数示例如下,表示从ModelScope拉取指定模型数据,保存到名为test的Bucket的
/model/qwen/
目录。数据缓存名为qwen,保留时长为1天。重要如果您通过SDK创建数据缓存,DataSource.Options中的各个参数前无需添加参数名的长度,例如
#10#repoSource
直接写成repoSource
,#6#repoId
直接写成repoId
即可。{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze7l1o0ql1cbk******", "VSwitchId": "vsw-2ze23nqzig8inpr******", "Bucket": "test", "Path": "/model/qwen/", "Name": "qwen", "DataSource": { "Type": "URL", "Options": { "#6#repoId": "qwen/Qwen-7B-Chat", "#10#repoSource": "ModelScope/Model" "#8#revision": "v1.1.4" } }, "RetentionDays": 1 }
查询数据缓存状态。
根据返回的数据缓存ID调用DescribeDataCaches接口查询数据缓存信息,当数据缓存的状态(DataCaches.Status)为Available时,表示可以使用该数据缓存。
部署通义千问应用
控制台
在弹性容器实例控制台的容器组页面,单击创建弹性容器组。
填写实例相关配置信息,然后单击配置确认。
本文使用的参数示例如下,实例使用GPU规格,并挂载了通义千问模型。实例内容器使用包含通义千问WebUI应用的镜像,容器启动后会运行
python Qwen-7B/web_demo.py --server_port 8888
启动WebUI。重要当VPC已绑定公网NAT网关时,创建ECI实例时可以不绑定EIP。在实例创建完成后,您可以配置DNAT条目实现外部访问ECI实例。
配置区域
配置项
示例值
容器组配置
指定规格
ecs.gn6i-c16g1.4xlarge
名称
qwen-web
容器配置
容器名称
qwen
镜像
镜像:registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui
版本:1.0.0
可执行命令
/bin/sh
参数
-c
python Qwen-7B/web_demo.py --server_port 8888
数据缓存
缓存Bucket
test
单击添加,挂载通义千问-7B-Chat的数据缓存
缓存目录:/model/qwen/
目标容器:qwen
容器挂载目录:/data/model/
开启Burst
开启
弹性公网IP
弹性公网IP
自动创建
带宽峰值:5 Mbps
确认实例配置信息,阅读并选中服务协议,单击确认订单。
返回容器组页面,确认应用部署状态并查看实例的EIP地址。
在容器组页面可以查看实例状态,单击实例ID进入实例详情页可以查看容器状态。当实例状态和容器状态均为运行中时,表示应用部署成功。您可以在IP地址列获取实例的EIP地址。
OpenAPI
使用数据缓存创建ECI实例,部署通义千问应用。
调用CreateContainerGroup接口创建ECI实例所采用的参数示例如下,该实例使用GPU规格,并挂载了通义千问模型。实例内容器使用包含通义千问WebUI应用的镜像,容器启动后会运行
python Qwen-7B/web_demo.py --server_port 8888
启动WebUI。说明以下示例中,系统会自动创建并为ECI实例绑定一个EIP。当VPC已绑定公网NAT网关时,创建ECI实例时可以不绑定EIP。在实例创建完成后,您可以配置DNAT条目实现外部访问ECI实例。
{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze7l1o0ql1cbk******", "VSwitchId": "vsw-2ze23nqzig8inpr******", "ContainerGroupName": "qwen-web", "InstanceType": "ecs.gn6i-c16g1.4xlarge", "DataCacheBucket": "test", "Container": [ { "Arg": [ "-c", "python Qwen-7B/web_demo.py --server_port 8888" ], "Command": [ "/bin/sh" ], "Gpu": 1, "Name": "qwen", "Image": "registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0", "VolumeMount": [ { "Name": "model-qwen", "MountPath": "/data/model" } ] } ], "Volume": [ { "Type": "HostPathVolume", "HostPathVolume.Path": "/model/qwen/", "Name": "model-qwen" } ], "DataCacheProvisionedIops": 35000, "DataCacheBurstingEnabled": true, "AutoCreateEip": true }
确认应用部署状态。
根据返回的实例ID调用DescribeContainerGroupStatus查询实例和容器状态。当实例状态(Status)和容器状态(ContainerStatuses.State)为Running,表示实例已经创建成功,容器正在运行。
查询实例的EIP地址。
根据返回的实例ID调用DescribeContainerGroups查询实例详情,在InternetIp中可以获取实例的EIP地址。
测试模型效果
在ECI实例所属安全组中添加入方向规则,开放8888端口。
打开浏览器,访问通义千问的Web页面。
本文示例的通义千问应用已单独绑定了EIP,可以直接输入实例的EIP地址和容器开放的端口进行访问,例如
123.57.XX.XX:8888
。输入文本,测试通义千问-7B-Chat的模型效果。
示例如下: