Combine grupos de escalado de Elastic Container Instance (ECI) con Application Load Balancer (ALB) para desplegar un servicio de inference de modelos de lenguaje grande (LLM) de alta disponibilidad en varias zonas.
Descripción general de la solución
Esta solución despliega instancias de inference basadas en ECI en varias zonas dentro de una misma región para lograr recuperación ante desastres a nivel de zona. ALB gestiona la distribución del tráfico y Object Storage Service (OSS) almacena los archivos del modelo. La siguiente figura muestra la arquitectura.
Beneficios
Alta disponibilidad: Distribuye la carga de trabajo entre varios servidores para eliminar puntos únicos de falla y prevenir interrupciones del servicio.
Escalado elástico: Un grupo de escalado administra el clúster de inference. Escale horizontalmente con rapidez al ajustar el número de instancias ECI, o configure el escalado automático para aprovisionar recursos bajo demanda según la carga de trabajo.
Procedimiento
Planifique la red del clúster. Cree una VPC y vSwitches en varias zonas.
Cree un bucket de OSS. Almacene los archivos de pesos del modelo.
Configure un rol de RAM de instancia. Otorgue a la instancia ECI acceso al bucket de OSS del Paso 2.
Prepare una caché de imagen. Cree una caché de imagen para acelerar el inicio y descargue los pesos del modelo a OSS.
Cree una instancia ALB. La instancia ALB funciona como endpoint del servicio.
Cree un grupo de escalado. Asócielo con la instancia ALB para agregar automáticamente nuevas instancias ECI al grupo de servidores backend.
Inicie el servicio. Establezca el número esperado de instancias en el grupo de escalado para iniciar el servicio.
1. Planificación de la red del clúster
Cree una Virtual Private Cloud (VPC) y vSwitches en varias zonas. Este ejemplo utiliza una VPC y dos vSwitches en diferentes zonas para garantizar alta disponibilidad.
Puede reutilizar una VPC existente y omitir este paso.
-
En la consola, cree una VPC y dos vSwitches siguiendo las instrucciones a continuación.
①: En el panel de navegación izquierdo, haga clic en Virtual Private Cloud y luego haga clic en Create VPC.
②: Region. China (Hangzhou).
③: Name.
vpc-ess-hangzhou.④: IPv4 CIDR. Seleccione 192.168.0.0/16.
vSwitch 1:
⑤: Name.
vSwitch-j.⑥: Zone. Zone J.
⑦: IPv4 CIDR. 192.168.0.0/24.
⑧: Haga clic en Add para crear el vSwitch 2.
vSwitch 2:
⑨: Name.
vSwitch-k.⑩: Zone. Zone K.
⑪: IPv4 CIDR. 192.168.1.0/24.
Haga clic en OK y espere a que se cree la VPC.
2. Creación de un bucket de OSS
Cree un bucket de Object Storage Service (OSS) para almacenar los archivos de pesos del modelo. Las instancias ECI leerán los archivos desde este bucket.
Puede reutilizar un bucket de OSS existente y omitir este paso.
-
En la consola de Object Storage Service, cree un bucket.
Configure los siguientes parámetros clave. Mantenga los valores predeterminados para el resto.
①: Haga clic en Create Bucket.
②: Bucket. Este nombre es obligatorio cuando monte el espacio de almacenamiento más adelante.
③: Region. Seleccione Specific Region y asegúrese de que la región coincida con la de sus instancias ECI. Este tutorial utiliza China (Hangzhou).
El acceso desde ECI a OSS dentro de la misma región utiliza la red interna y no genera costos de transferencia de datos. Access OSS resources from an ECS instance over an internal network.
Haga clic en OK.
3. Creación de un rol de RAM de instancia
Cree un rol de RAM de instancia que permita a las instancias ECI leer archivos de pesos del modelo desde su bucket de OSS.
-
En la consola, cree un rol de RAM de instancia con la siguiente configuración.
①: En el panel de navegación izquierdo de la consola RAM, seleccione Identities > Roles. Haga clic en Create Role.
②: Principal Type. Seleccione Cloud Service.
③: Principal Name. Seleccione ECS.
④: Haga clic en OK y establezca un nombre para el rol de RAM de instancia según se le solicite.
-
En la consola, cree la siguiente directiva.
①: Haga clic en Create Policy.
②: Haga clic en JSON Editor.
③: Esta directiva otorga permisos completos para un bucket específico. Utilice el siguiente script de directiva.
ImportanteAl configurar esta directiva, reemplace
<bucket_name>con el valor de Bucket del bucket que creó.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:<bucket_name>", "acs:oss:*:*:<bucket_name>/*" ] } ] }Haga clic en OK y establezca un nombre para la directiva según se le solicite.
-
En la consola, otorgue permisos al rol de RAM de instancia.
①: Haga clic en Grant Permission.
②: Principal. Seleccione el rol de RAM de instancia que creó.
③: Policies. Seleccione la directiva que creó.
Haga clic en OK.
4. Preparación de la caché de imagen y los archivos del modelo
Cree una caché de imagen para acelerar el inicio de las instancias ECI y descargue los archivos de pesos del modelo a OSS.
-
En la consola, cree una caché de imagen de ECI.
①: En el panel de navegación izquierdo de la consola de Elastic Container Instance, haga clic en Image Cache. Haga clic en Create Image Cache.
②: Region and Zone. Debe coincidir con la región de la VPC del Paso 1. La zona debe coincidir con uno de los vSwitches del Paso 1.
③: Network. Seleccione la VPC y uno de los vSwitches que creó en el Paso 1.
④: Elastic IP Addresses. Seleccione una EIP existente. Si no existe ninguna, haga clic en EIP console para crear una; luego regrese, haga clic en el icono de actualización
y selecciónela.⑤: Security Group. Seleccione un security group. Si no existe ninguno, haga clic en Create Security Group para crear uno; luego regrese y selecciónelo.
⑥: Image Cache Name. vllm.
⑦: Cache Size. 100 GB.
⑧: Image.
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm.⑨: Version.
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04.⑩: Seleccione la casilla Elastic Container Instance ECI Service Agreement. ⑪: Haga clic en OK.
Espere a que se cree la caché de imagen (~15 minutos). Compruebe el progreso en la página de caché de imagen de la consola.
Una vez creada la caché de imagen, la columna Status mostrará Preparing con un porcentaje de finalización (por ejemplo, 0%), lo que indica que la creación está en curso.
-
En la consola, inicie una instancia ECI temporal para descargar los archivos de pesos del modelo al bucket de OSS.
①: En el panel de navegación izquierdo, haga clic en Container Groups y luego haga clic en Create Container Group.
②: Billing Method. pay-as-you-go.
③: Region. Debe coincidir con la región de la VPC del Paso 1. Este tutorial utiliza China (Hangzhou).
④: VPC. Seleccione la VPC que creó en el Paso 1.
⑤: vSwitch. Seleccione el vSwitch que creó en el Paso 1.
⑥: Security Group. Configure el parámetro según se le indique en la página.
Configuración del grupo de contenedores:
⑦: CPU. 2 vCPU.
⑧: Memory. 4 GiB.
⑨: After containers run and exit. Seleccione Upon Failure.
Configuración avanzada:
⑩: Expanda Advanced Configuration.
⑪: Active Automatically Match Image Cache.
⑫: Seleccione y agregue OSS Persistence.
⑬: Name.
oss-data.⑭: Bucket. Seleccione el bucket que creó en el Paso 2.
⑮: RAM Role. Seleccione el rol de RAM de instancia que creó en el Paso 3.
⑯: Ephemeral Storage Size. Establezca el valor en 100 GiB.
Configuración del contenedor:
⑰: Image.
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm.⑱: Image Tag.
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04.⑲: Startup Command. Copie los siguientes comandos en los campos correspondientes.
/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-7BEste comando utiliza git-lfs para clonar el modelo desde el repositorio de la comunidad ModelScope al directorio
/oss-data/DeepSeek-R1-Distill-Qwen-7B.Configuración avanzada del contenedor:
⑳: Expanda container-1 advanced settings.
㉑: CPU. 2 vCPU.
㉒: Memory. 4 GiB.
㉓: Active Storage y Add un montaje de volumen.
㉔: Seleccione
oss-data.㉕: Mount Path.
/oss-data.㉖: Haga clic en Next: Other Settings.
㉗: Elastic IP Addresses. Seleccione Auto Create.
㉘: Maximum Bandwidth. Establezca el valor en 200 Mbit/s.
㉙: Haga clic en Confirm Configuration y complete la creación de la instancia ECI según se le solicite.
La descarga del archivo de pesos del modelo comienza automáticamente después de crear la instancia ECI. Continúe con el Paso 5 y el Paso 6 mientras se ejecuta la descarga.
5. Creación de una instancia ALB
Cree una instancia de Application Load Balancer (ALB) como endpoint del servicio.
-
En la consola, cree una instancia ALB.
①: En el panel de navegación izquierdo, seleccione ALB > Instances. Haga clic en Create ALB.
②: Region. Seleccione China (Hangzhou) para mantener la consistencia con la VPC que creó en el Paso 1.
③: Network Type. Seleccione Public para proporcionar servicios a través de Internet.
④: VPC. Seleccione la VPC que creó en el Paso 1.
⑤: Zone y vSwitch. Seleccione los vSwitches que creó en el Paso 1.
⑥: Instance Name.
alb-eci-deepseek-7B.⑦: Haga clic en Buy Now y complete la creación de la instancia ALB según se le solicite.
-
En la consola, cree un listener y un grupo de servidores backend para la instancia ALB.
①: Busque la instancia ALB que creó y haga clic en Create Listener en la columna Actions.
Si no encuentra la instancia ALB, cambie a otra región en la esquina superior izquierda de la página.
②: Seleccione HTTP como protocolo.
③: Establezca el puerto del listener en 80.
④: Haga clic en Next.
⑤: Haga clic en Create Server Group.
⑥: Server Group Type. Seleccione Server.
⑦: Server Group Name.
eci-deepseek-7B.⑧: VPC. Seleccione la VPC que creó en el Paso 1. Este parámetro se selecciona automáticamente.
⑨: Select Backend Server Protocol. HTTP.
⑩: Habilite Health Check.
⑪: Health check method. Seleccione GET.
⑫: Ruta de comprobación de estado. Establezca el valor en
/health. Una vez iniciado el servicio de inference, ALB utilizará la ruta/healthpara determinar el estado del servicio.⑬: Haga clic en Create, haga clic en Next y luego haga clic en Submit. Espere a que finalice la creación.
6. Creación de un grupo de escalado
Cree un grupo de escalado asociado con la instancia ALB. El grupo administra automáticamente las instancias ECI y las agrega al grupo de servidores backend de ALB.
-
En la consola de Auto Scaling, cree un grupo de escalado y asócielo con la instancia ALB.
①: En el panel de navegación izquierdo, haga clic en Scaling Groups. En la barra de navegación superior, seleccione la región objetivo (como China (Hangzhou)). Haga clic en Create Scaling Group.
②: Scaling Group Name.
deepseek-7B-servers.③: Type. Seleccione ECI.
④: Instance Configuration Source. Seleccione Create from Scratch.
⑤: Minimum Number of Instances. Establezca este parámetro en 0. Este es el número mínimo de instancias en el grupo de escalado.
⑥: Maximum Number of Instances. Establezca este parámetro en 10. Este es el número máximo de instancias en el grupo de escalado.
⑦: VPC. Seleccione la VPC que creó en el Paso 1.
⑧: vSwitch. Seleccione todos los vSwitches que creó en el Paso 1.
⑨: Haga clic en Show Advanced Settings.
Configuración avanzada:
⑩: Habilite Expected Number of Instances y establezca el valor en 0. Esto crea un grupo de escalado vacío.
⑪: Haga clic en Add Server Group y establezca el Type en ALB.
⑫: Server Group. Seleccione el grupo de servidores que creó en el Paso 5.
⑬: Port. Seleccione
30000. El servicio de inference desplegado en la instancia ECI utilizará este puerto para proporcionar servicios.⑭: Haga clic en Create. Espere a que se cree el grupo de escalado. Luego, podrá crear una configuración de escalado según se le solicite.
-
En la consola de Auto Scaling, cree una configuración de escalado.
Una configuración de escalado es una plantilla para crear instancias durante eventos de escalado horizontal.
①: En el panel de navegación izquierdo, haga clic en Scaling Groups. En la barra de navegación superior, seleccione la región objetivo (como China (Hangzhou)), busque el grupo de escalado objetivo en la lista y haga clic en su ID para ir a la página de detalles.
②: Haga clic en .
③: Billing Method. Seleccione Pay-As-You-Go.
④: Seleccione un Security Group.
Configuración del grupo de contenedores:
⑤: Seleccione Specify Instance Type.
⑥: Instance Type.
ecs.gn7i-c8g1.2xlarge.⑦: Seleccione Automatically Match Image Cache.
⑧: Expanda Advanced Configuration.
⑨: Seleccione OSS Persistence. Configure el Bucket y el RAM Role de la instancia.
⑩: Ephemeral Storage Size. 100 GiB.
⑪: GPU Driver Version.
tesla=550.Establezca el Name del almacenamiento persistente de OSS en
oss-datay configure el RAM Role comoEciOssRole.Configuración del contenedor:
⑫: Image.
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm.⑬: Image Tag.
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04.⑭: Startup Command. Copie los siguientes comandos en los campos correspondientes.
/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-abc123Este comando lee los archivos de pesos del modelo desde OSS e inicia el servicio de inference en el puerto
30000. La clave API se establece enapi-key-example-abc123.⑮: Expanda container-1 advanced settings.
⑯: CPU. Establezca el valor en 8 vCPU.
⑰: Memory. Establezca el valor en 30 GiB.
⑱: GPU. Establezca el valor en 1.
⑲: Active Storage y Add almacenamiento.
⑳: Mount Path. /oss-data
㉑: Haga clic en Next: Other Settings.
㉒: Elastic IP Addresses. Seleccione Auto Create.
㉛: Maximum Bandwidth. 200 Mbit/s.
㉜: Haga clic en Confirm Configuration y complete la creación de la configuración de escalado según se le solicite.
㉝㉞㉟: Habilite la configuración de escalado e inicie el grupo de escalado según se le solicite.
7. Inicio del servicio
Antes de continuar, asegúrese de que los archivos de pesos del modelo de Step 4 se hayan descargado por completo.
Desencadene un escalado horizontal al establecer el número esperado de instancias. Este ejemplo escala a cinco instancias ECI.
Después de ajustar el número esperado de instancias, hay un retraso antes de que se creen las nuevas instancias. Puede supervisar el progreso en la pestaña Scaling Activities .
En la página de detalles del grupo de escalado, en la pestaña Basic Information, dentro de la sección Instance Scaling Overview, modifique el valor de Expected Number of Instances.
En el cuadro de diálogo Modify Instance Scaling Overview, active el interruptor Expected Number of Instances, establezca Expected Number of Instances in Group en
5y luego haga clic en OK.
Siguientes pasos
Integración con Dify
Liberar recursos
Consideraciones para producción
Tome en cuenta las siguientes mejoras para entornos de producción.
Configure el escalado automático: Escale las instancias según la carga de trabajo para optimizar costos. Consulte Configure event-triggered tasks para el escalado basado en memoria GPU, o bien automatically scale based on the queries per second (QPS) metrics of a single ALB instance.
Utilice una puerta de enlace NAT: En lugar de asignar una EIP a cada instancia, use una NAT gateway para proporcionar acceso compartido a Internet a las instancias de ECI.
Agregue un dominio personalizado y HTTPS: Utilice un nombre de dominio personalizado para el endpoint del servicio y configure un listener HTTPS para mayor seguridad. Consulte Configure a CNAME record for an ALB instance y Add an HTTPS listener.