结合ECI伸缩组与应用型负载均衡器ALB,快速搭建跨可用区弹性高可用的大模型推理服务。
方案概览
本方案采用跨可用区高可用架构,将搭载推理服务的ECI实例分散部署于单地域的多个可用区,实现可用区级容灾。通过负载均衡进行智能流量调度,并使用对象存储作为模型仓库,确保业务连续性与数据可靠性。本方案架构如图所示。
方案优势
-
避免单点故障(高可用):使用多台服务器来分摊业务负载,从而提高服务承载能力,避免出现单一服务故障造成的服务中断。
-
弹性伸缩:使用伸缩组管理推理服务集群可以一键调整ECI数量,快速横向扩展。同时还支持设置自动伸缩的机制,实现根据业务负载按需扩展。
搭建流程
-
规划集群网络。创建专有网络(VPC)和多个可用区的交换机,以搭建集群的基础网络环境。
-
创建对象存储Bucket。该Bucket用于存储模型权重文件。
-
配置实例RAM角色。后续ECI实例将扮演该角色,访问步骤2中创建的对象存储Bucket。
-
准备镜像缓存。在ECI控制台创建镜像缓存以加快实例启动速度,并将模型权重文件下载到对象存储Bucket。
-
创建应用负载均衡ALB实例。该ALB实例将作为服务访问入口。
-
创建伸缩组。创建伸缩组并绑定ALB,确保新扩容的ECI实例自动加入ALB的后端服务器组。
-
开启服务。调整伸缩组的期望实例数以启动服务,并等待服务启动完成。
1. 规划集群网络
首先需要规划集群网络,并根据规划创建专有网络和交换机。为实现高可用性,请尽可能将ECI等资源分布在多个可用区,以规避单个可用区故障导致的服务不可用。本方案以双可用区为例,您需要创建一个专有网络(VPC)以及两个可用区的交换机。操作步骤如下:
您也可以复用已有的专有网络VPC,以跳过该步骤。
-
在控制台。根据以下指引创建1个专有网络及2个交换机。
①:在左侧导航栏单击专有网络,进而单击创建专有网络。
②:地域。华东1(杭州)。
③:名称。
vpc-ess-hangzhou。④:IPv4网段。选择使用192.168.0.0/16。
交换机1:
⑤:名称。
vSwitch-j。⑥:可用区。杭州可用区J。
⑦:IPv4网段。192.168.0.0/24。
⑧:单击添加创建交换机2。
交换机2:
⑨:名称。
vSwitch-k。⑩:可用区。杭州可用区K。
⑪:IPv4网段。192.168.1.0/24。
-
完成配置后单击确定,等待专有网络创建完成。
2. 创建对象存储Bucket
网络环境搭建完成后,需创建对象存储的存储空间(Bucket),用于存储模型权重文件,后续ECI实例会从该Bucket中读取模型权重文件。操作步骤如下:
您也可以复用已有的对象存储的Bucket,以跳过该步骤。
-
完成配置后单击完成创建。
3. 创建实例RAM角色
本步骤需要创建实例RAM角色,并为该角色设置访问对象存储Bucket的权限,后续ECI实例将扮演该角色,读取Bucket中的模型权重文件。操作步骤如下:
-
在控制台创建实例RAM角色。关键配置项说明如下。
①:单击创建角色。
②:信任主体类型。选择云服务。
③:信任主体名称。选择云服务器ECS。
④:单击确定后,根据界面提示设置实例RAM角色的名称。
-
在控制台创建以下自定义权限策略。
①:单击创建权限策略。
②:单击脚本编辑。
③:该策略代表某个Bucket的全部权限。权限策略脚本内容如下。
重要设置以下自定义策略时,请将
<bucket_name>替换为您所创建的存储空间的Bucket名称。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:<bucket_name>", "acs:oss:*:*:<bucket_name>/*" ] } ] }完成配置后单击确定,根据界面提示设置权限策略名称。
-
在控制台为实例RAM角色授权。
①:单击新增授权。
②:授权主体。选择之前创建的实例RAM角色。
③:权限策略。选择之前创建的自定义权限策略。
完成配置后单击确认新增授权。
4. 准备镜像缓存和模型权重文件
由于本方案中ECI实例使用的镜像文件较大,因此需要在ECI控制台创建镜像缓存,以加快实例启动速度。同时还需要将模型权重文件下载到对象存储Bucket,以提升模型加载速度。
-
在控制台创建ECI镜像缓存。
①:在弹性容器实例控制台左侧导航栏单击镜像缓存进入镜像缓存页面,单击创建镜像缓存。
②:地域及可用区。地域与步骤1中VPC地域保持一致,可用区与步骤1中创建的交换机可用区保持一致(任选一个)。
③:网络。选择步骤1中创建的VPC和交换机(交换机任选一个)。
④:弹性公网IP。选择已有弹性公网IP,若没有,请单击弹性公网IP控制台开始创建。创建完成后,单击
刷新后重新选择弹性公网IP。⑤:安全组。选择一个安全组,如果没有安全组,请单击新建安全组,创建完成后,需回到该页面重新选择安全组。
⑥:镜像缓存名。vllm。
⑦:缓存大小。100GB。
⑧:镜像。
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm。⑨:版本号。
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04。⑩:勾选弹性容器实例 ECI 服务协议。⑪:单击确认创建。
等待镜像创建完成。镜像缓存创建需15分钟左右,请耐心等待。您可以在控制台镜像缓存页,查看创建进度。
镜像缓存创建后,状态列显示为准备中并附带完成百分比(如 0%),表示正在正常创建中。
-
在控制台启动一台临时ECI实例,用于将模型权重文件下载到对象存储。
①:在左侧导航栏单击容器组,进而单击创建弹性容器组。
②:付费模式。按量付费。
③:地域。地域与步骤1中VPC地域保持一致,本文为华东1(杭州)为例。
④:专有网络。选择步骤1中创建的专有网络VPC。
⑤:交换机。选择步骤1中创建的交换机。
⑥:安全组。根据界面提示设置。
容器组配置:
⑦:CPU。2vCPU。
⑧:内存。4GiB。
⑨:容器运行退出后。选择失败后重启。
容器组高级配置:
⑩:展开高级配置。
⑪:开启自动匹配镜像缓存。
⑫:选择并添加OSS持久化存储。
⑬:名称。
oss-data。⑭:Bucket。选择步骤2创建的Bucket。
⑮:RAM角色。选择步骤3创建的实例RAM角色。
⑯:临时存储大小。设置为100GiB。
容器配置:
⑰:镜像。
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm。⑱:镜像版本。
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04。⑲:启动命令。将以下命令分别复制到对应输入框。
/bin/bash -c git-lfs clone https://www.modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git /oss-data/DeepSeek-R1-Distill-Qwen-7B该命令含义:使用git-lfs将模型从魔搭社区的仓库克隆到
/oss-data/DeepSeek-R1-Distill-Qwen-7B目录下。容器高级配置:
⑳:展开container-1 高级配置。
㉑:CPU。2vCPU。
㉒:内存。4GiB。
㉓:开启存储功能并添加挂载。
㉔:选择
oss-data。㉕:容器内挂载路径。
/oss-data。㉖:单击下一步: 其他设置。
㉗:弹性公网IP。选择自动创建。
㉘:带宽峰值。设置为200Mbps。
㉙:单击配置确认,根据界面提示完成ECI实例的创建。
ECI创建完成后,会自动开始下载模型权重文件。请耐心等待。您可以在等待期间,同时进行步骤5和步骤6的操作。
5. 创建应用负载均衡ALB实例
在开始创建ECI集群前,需先创建应用型负载均衡ALB作为集群访问入口。具体操作如下:
-
在控制台创建ALB实例。
①:在左侧导航栏选择应用型负载均衡 ALB > 实例,进入实例列表页面,单击创建应用型负载均衡。
②:地域。选择华东 1 (杭州),与步骤1中创建的VPC保持一致。
③:实例网络类型。选择公网,选择公网才能对外提供服务。
④:VPC。选择步骤1中创建的VPC。
⑤:可用区和交换机。选择步骤1中创建的交换机。
⑥:实例名称。
alb-eci-deepseek-7B。⑦:单击立即购买,然后根据界面提示完成ALB实例创建操作。
-
在控制台为ALB实例创建监听及后端服务器组。
①:找到上一步创建的ALB实例,单击操作列下的创建监听。
如果没有找到ALB实例,请在页面左上角切换地域。
②:选择HTTP协议。
③:监听端口设置为80。
④:单击下一步。
⑤:单击创建服务器组。
⑥:服务器组类型。选择服务器类型。
⑦:服务器组名称。
eci-deepseek-7B。⑧:VPC。选择步骤1创建的VPC,会自动选中。
⑨:选择后端协议。HTTP。
⑩:开启健康检查。
⑪:健康检查方法。选择GET。
⑫:健康检查路径。设置为
/health。后续推理服务启动后,会通过检查/health路径判断服务启动状态。⑬:单击创建,单击下一步,单击提交,等待创建完成。
6. 创建伸缩组
创建伸缩组并绑定ALB,伸缩组负责自动创建和管理ECI实例,并确保新扩容的ECI实例自动加入ALB的后端服务器组以实现负载均衡。
-
在弹性伸缩控制台创建伸缩组并关联ALB。
①:在左侧导航栏单击伸缩组管理,在顶部菜单栏选择目标地域(以华东1(杭州)为例),单击创建伸缩组。
②:伸缩组名称。
deepseek-7B-servers。③:伸缩组类型。选择ECI。
④:组内实例配置信息来源。选择从零开始创建。
⑤:组内最小实例数。设置为0,伸缩组实例数下限。
⑥:组内最大实例数。设置为10,伸缩组实例数上限。
⑦:专有网络。选择步骤1创建的VPC。
⑧:交换机。选择步骤1创建的所有交换机。
⑨:单击展开高级配置。
高级配置:
⑩:开启期望实例数,并配置期望实例数为0,代表先创建一个空的伸缩组。
⑪:单击添加服务器组,并选择服务器组类型为ALB。
⑫:服务器组。选择步骤5创建的服务器组。
⑬:端口。选择
30000。后续ECI中部署的推理服务会使用该端口对外提供服务。⑭:单击创建。等待伸缩组创建完成,可根据界面提示创建伸缩配置。
-
在弹性伸缩控制台创建伸缩配置。
伸缩配置用于定义伸缩组中实例的模板,伸缩组在扩容时,会以伸缩配置为模板创建新实例。操作步骤如下。
①:在左侧导航栏单击伸缩组管理,在顶部菜单栏选择目标地域(以华东1(杭州)为例),在列表中找到目标伸缩组,单击伸缩组ID进入伸缩组详情页。
②:单击。
③:付费模式。选择按量付费。
④:选择安全组。
容器组配置:
⑤:选择指定规格。
⑥:实例规格。
ecs.gn7i-c8g1.2xlarge。⑦:勾选自动匹配镜像缓存。
⑧:展开高级配置。
⑨:选择OSS持久化存储。并配置Bucket和实例RAM角色。
⑩:临时存储大小。100GiB。
⑪:GPU驱动版本。
tesla=550。OSS 持久化存储的名称设置为
oss-data,RAM 角色选择EciOssRole。容器配置:
⑫:镜像。
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm。⑬:镜像版本。
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04。⑭:启动命令。将以下命令分别复制到对应输入框。
/bin/bash -c vllm serve /oss-data/DeepSeek-R1-Distill-Qwen-7B --port 30000 --served-model-name DeepSeek-R1-Distill-Qwen-7B --tensor-parallel-size 1 --max-model-len=16384 --enforce-eager --dtype=half --api-key api-key-example-abc123该命令代表从对象存储中读取模型权重文件,并在
30000端口启动推理服务,api-key为api-key-example-abc123。⑮:展开container-1 高级配置。
⑯:CPU。设置为8vCPU。
⑰:内存。设置为30GiB。
⑱:GPU。设置为1。
⑲:开启存储功能并添加存储。
⑳:容器内挂载路径。/oss-data
㉑:单击下一步: 其他设置。
㉒:弹性公网IP。选择自动创建。
㉛:峰值带宽。200Mbps。
㉜:单击配置确认,并根据界面提示完成伸缩配置的创建。
㉝㉞㉟:根据界面提示启用伸缩配置并启动伸缩组。
7. 开启服务
进行本步骤操作前,请确保步骤4中的模型权重文件已完成下载。
在完成上述所有步骤后,您可以通过调整伸缩组期望实例数,触发伸缩组的扩容活动。本文以扩容5台ECI实例为例,具体操作如下。
调整期望实例数后,创建实例的操作可能会有延迟。您可以在伸缩活动页签下,查看伸缩组中正在进行的伸缩活动。
-
在伸缩组详情页基本信息页签的实例伸缩概览区域,修改期望实例数的值。
-
在修改实例伸缩概览对话框中,开启期望实例数开关,将组内期望实例数设置为
5,单击确认。
后续步骤
使用Dify与大模型对话
释放本文资源
应用于生产环境
如果要将该方案应用于生产,您可以参考以下建议完善架构。
-
建立自动伸缩机制,按业务负载自动扩缩容伸缩组实例数量,节省成本。例如基于GPU内存使用率配置报警任务实现自定扩缩容、基于ALB的单机QPS监控指标自动扩缩容。
-
使用NAT网关,无需为所有实例配置弹性公网IP。本示例中,ECI实例通过配置弹性公网IP实现拉取公网镜像。在实际生产中,您可以使用NAT网关提供ECI实例的公网访问能力。
-
为ALB配置域名并添加HTTPS协议支持。推荐使用自定义域名作为集群访问入口,同时配置HTTPS协议支持以提升安全性。更多信息,请参见为ALB配置CNAME解析、添加HTTPS监听。