结合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
。等待镜像创建完成。镜像缓存创建需15分钟左右,请耐心等待。您可以在控制台镜像缓存页,查看创建进度。
在控制台启动一台临时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实例。
①②:单击创建应用型负载均衡。
③:地域。选择华东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。
①②③:单击创建伸缩组。
④:伸缩组名称。
deepseek-7B-servers
。⑤:伸缩组类型。选择ECI。
⑥:组内实例配置信息来源。选择从零开始创建。
⑦:组内最小实例数。设置为0,伸缩组实例数下限。
⑧:组内最大实例数。设置为10,伸缩组实例数上限。
⑨:专有网络。选择步骤1创建的VPC。
⑩:交换机。选择步骤1创建的所有交换机。
⑪:单击展开高级配置。
高级配置:
⑫⑬:开启期望实例数,并配置期望实例数为0,代表先创建一个空的伸缩组。
⑭:单击添加服务器组,并选择服务器组类型为ALB。
⑮:服务器组。选择步骤5创建的服务器组。
⑯:端口。选择
30000
。后续ECI中部署的推理服务会使用该端口对外提供服务。⑰:单击创建。等待伸缩组创建完成,可根据界面提示创建伸缩配置。
在弹性伸缩控制台创建伸缩配置。
伸缩配置用于定义伸缩组中实例的模板,伸缩组在扩容时,会以伸缩配置为模板创建新实例。操作步骤如下。
①②③:找到上一步创建的伸缩组,单击伸缩组ID进入伸缩组详情页。
④⑤⑥:单击
。⑦:付费模式。选择按量付费。
⑧:选择安全组。
容器组配置:
⑨:选择指定规格。
⑩:实例规格。
ecs.gn7i-c8g1.2xlarge
。⑪:勾选自动匹配镜像缓存。
⑫:展开高级配置。
⑬⑭⑮⑯:选择OSS持久化存储。并配置Bucket和实例RAM角色。
⑰:临时存储大小。100GiB。
⑱:GPU驱动版本。
tesla=550
。容器配置:
⑲:镜像。
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实例为例,具体操作如图所示。
调整期望实例数后,创建实例的操作可能会有延迟。您可以在伸缩活动页签下,查看伸缩组中正在进行的伸缩活动。
后续步骤
使用Dify与大模型对话
释放本文资源
应用于生产环境
如果要将该方案应用于生产,您可以参考以下建议完善架构。
建立自动伸缩机制,按业务负载自动扩缩容伸缩组实例数量,节省成本。例如基于GPU内存使用率配置报警任务实现自定扩缩容、基于ALB的单机QPS监控指标自动扩缩容。
使用NAT网关,无需为所有实例配置弹性公网IP。本示例中,ECI实例通过配置弹性公网IP实现拉取公网镜像。在实际生产中,您可以使用NAT网关提供ECI实例的公网访问能力。
为ALB配置域名并添加HTTPS协议支持。推荐使用自定义域名作为集群访问入口,同时配置HTTPS协议支持以提升安全性。更多信息,请参见为ALB添加CNAME记录、添加HTTPS监听。