Combine grupos de dimensionamento do Elastic Container Instance (ECI) com o Application Load Balancer (ALB) para implantar um serviço de inferência de modelo de linguagem grande (LLM) altamente disponível e distribuído entre zonas.
Visão geral da solução
Esta solução implanta instâncias de inferência baseadas em ECI em várias zonas dentro de uma única região, garantindo recuperação de desastres no nível de zona. O ALB gerencia a distribuição de tráfego e o Object Storage Service (OSS) armazena os arquivos do modelo. A figura a seguir ilustra a arquitetura.
Benefícios
Alta disponibilidade: Distribui a carga de trabalho entre vários servidores para eliminar pontos únicos de falha e evitar interrupções no serviço.
Dimensionamento elástico: Um grupo de dimensionamento gerencia o cluster de inferência. Escale horizontalmente com rapidez ajustando a quantidade de instâncias ECI ou configure o dimensionamento automático para provisionar recursos sob demanda conforme a carga de trabalho.
Procedimento
Planeje a rede do cluster. Crie uma VPC e vSwitches em múltiplas zonas.
Crie um bucket do OSS. Armazene os arquivos de pesos do modelo.
Configure uma função RAM de instância. Conceda à instância ECI acesso ao bucket do OSS criado na Etapa 2.
Prepare um cache de imagem. Crie um cache de imagem para acelerar a inicialização e baixe os pesos do modelo para o OSS.
Crie uma instância ALB. A instância ALB funcionará como o endpoint do serviço.
Crie um grupo de dimensionamento. Associe-o à instância ALB para adicionar automaticamente novas instâncias ECI ao grupo de servidores de back-end.
Inicie o serviço. Defina a quantidade esperada de instâncias no grupo de dimensionamento para iniciar o serviço.
1. Planeje a rede do cluster
Crie uma Virtual Private Cloud (VPC) e vSwitches em múltiplas zonas. Este exemplo utiliza uma VPC e dois vSwitches em zonas diferentes para garantir alta disponibilidade.
Você pode reutilizar uma VPC existente e pular esta etapa.
-
No console, crie uma VPC e dois vSwitches conforme as instruções abaixo.
①: No painel de navegação à esquerda, clique em Virtual Private Cloud e, em seguida, clique em Create VPC.
②: Region. China (Hangzhou).
③: Name.
vpc-ess-hangzhou.④: IPv4 CIDR. Selecione 192.168.0.0/16.
vSwitch 1:
⑤: Name.
vSwitch-j.⑥: Zone. Zone J.
⑦: IPv4 CIDR. 192.168.0.0/24.
⑧: Clique em Add para criar o vSwitch 2.
vSwitch 2:
⑨: Name.
vSwitch-k.⑩: Zone. Zone K.
⑪: IPv4 CIDR. 192.168.1.0/24.
Clique em OK e aguarde a criação da VPC.
2. Crie um bucket do OSS
Crie um bucket do Object Storage Service (OSS) para armazenar os arquivos de pesos do modelo. As instâncias ECI lerão os arquivos deste bucket.
Você pode reutilizar um bucket do OSS existente e pular esta etapa.
-
No console do Object Storage Service, crie um bucket.
Configure os seguintes parâmetros principais. Mantenha os padrões para os demais.
①: Clique em Create Bucket.
②: Bucket. Este nome será necessário quando você montar o espaço de armazenamento posteriormente.
③: Region. Selecione Specific Region e certifique-se de que a região seja a mesma das suas instâncias ECI. Este tutorial usa China (Hangzhou).
O acesso na mesma região do ECI para o OSS utiliza a rede interna e não gera taxas de transferência de dados. Access OSS resources from an ECS instance over an internal network.
Clique em OK.
3. Crie uma função RAM de instância
Crie uma função RAM de instância que permita às instâncias ECI ler os arquivos de pesos do modelo no seu bucket do OSS.
-
No console, crie uma função RAM de instância com as seguintes configurações.
①: No painel de navegação à esquerda do console RAM, escolha Identities > Roles. Clique em Create Role.
②: Principal Type. Selecione Cloud Service.
③: Principal Name. Selecione ECS.
④: Clique em OK e defina um nome para a função RAM de instância conforme solicitado.
-
No console, crie a seguinte política.
①: Clique em Create Policy.
②: Clique em JSON Editor.
③: Esta política concede permissões totais para um bucket específico. Use o script de política a seguir.
ImportanteAo configurar esta política, substitua
<bucket_name>pelo Bucket do bucket que você criou.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:<bucket_name>", "acs:oss:*:*:<bucket_name>/*" ] } ] }Clique em OK e defina um nome para a política conforme solicitado.
-
No console, conceda permissões à função RAM de instância.
①: Clique em Grant Permission.
②: Principal. Selecione a função RAM de instância que você criou.
③: Policies. Selecione a política que você criou.
Clique em OK.
4. Prepare o cache de imagem e os arquivos do modelo
Crie um cache de imagem para acelerar a inicialização das instâncias ECI e baixe os arquivos de pesos do modelo para o OSS.
-
No console, crie um cache de imagem ECI.
①: No painel de navegação à esquerda do console Elastic Container Instance, clique em Image Cache. Clique em Create Image Cache.
②: Region and Zone. Deve corresponder à região da VPC da Etapa 1. A zona deve corresponder a um dos vSwitches da Etapa 1.
③: Network. Selecione a VPC e um dos vSwitches criados na Etapa 1.
④: Elastic IP Addresses. Selecione um EIP existente. Se não houver nenhum, clique em EIP console para criar um, retorne, clique no ícone de atualização
e selecione-o.⑤: Security Group. Selecione um grupo de segurança. Se não houver nenhum, clique em Create Security Group para criar um, retorne e selecione-o.
⑥: 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.⑩: Marque a caixa de seleção Elastic Container Instance ECI Service Agreement. ⑪: Clique em OK.
Aguarde a criação do cache de imagem (~15 minutos). Verifique o progresso na página de cache de imagem do console.
Após a criação do cache de imagem, a coluna Status exibirá Preparing com uma porcentagem de conclusão (como 0%), indicando que a criação está em andamento.
-
No console, inicie uma instância ECI temporária para baixar os arquivos de pesos do modelo para o bucket do OSS.
①: No painel de navegação à esquerda, clique em Container Groups e, em seguida, clique em Create Container Group.
②: Billing Method. pay-as-you-go.
③: Region. Deve corresponder à região da VPC da Etapa 1. Este tutorial usa China (Hangzhou).
④: VPC. Selecione a VPC criada na Etapa 1.
⑤: vSwitch. Selecione o vSwitch criado na Etapa 1.
⑥: Security Group. Defina o parâmetro conforme solicitado na página.
Configuração do grupo de contêineres:
⑦: CPU. 2 vCPU.
⑧: Memory. 4 GiB.
⑨: After containers run and exit. Selecione Upon Failure.
Configurações avançadas:
⑩: Expanda Advanced Configuration.
⑪: Ative Automatically Match Image Cache.
⑫: Selecione e adicione OSS Persistence.
⑬: Name.
oss-data.⑭: Bucket. Selecione o bucket criado na Etapa 2.
⑮: RAM Role. Selecione a função RAM de instância criada na Etapa 3.
⑯: Ephemeral Storage Size. Defina o valor como 100 GiB.
Configuração do contêiner:
⑰: 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 os seguintes comandos para os campos correspondentes.
/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 usa git-lfs para clonar o modelo do repositório da comunidade ModelScope para o diretório
/oss-data/DeepSeek-R1-Distill-Qwen-7B.Configurações avançadas do contêiner:
⑳: Expanda container-1 advanced settings.
㉑: CPU. 2 vCPU.
㉒: Memory. 4 GiB.
㉓: Ative Storage e Add uma montagem de volume.
㉔: Selecione
oss-data.㉕: Mount Path.
/oss-data.㉖: Clique em Next: Other Settings.
㉗: Elastic IP Addresses. Selecione Auto Create.
㉘: Maximum Bandwidth. Defina o valor como 200 Mbit/s.
㉙: Clique em Confirm Configuration e conclua a criação da instância ECI conforme solicitado.
O download do arquivo de pesos do modelo inicia automaticamente após a criação da instância ECI. Prossiga com a Etapa 5 e a Etapa 6 enquanto o download é executado.
5. Crie uma instância ALB
Crie uma instância do Application Load Balancer (ALB) para atuar como o endpoint do serviço.
-
No console, crie uma instância ALB.
①: No painel de navegação à esquerda, escolha ALB > Instances. Clique em Create ALB.
②: Region. Selecione China (Hangzhou) para manter a consistência com a VPC criada na Etapa 1.
③: Network Type. Selecione Public para fornecer serviços pela internet.
④: VPC. Selecione a VPC criada na Etapa 1.
⑤: Zone e vSwitch. Selecione os vSwitches criados na Etapa 1.
⑥: Instance Name.
alb-eci-deepseek-7B.⑦: Clique em Buy Now e conclua a criação da instância ALB conforme solicitado.
-
No console, crie um listener e um grupo de servidores de back-end para a instância ALB.
①: Localize a instância ALB criada e clique em Create Listener na coluna Actions.
Se não conseguir encontrar a instância ALB, mude para uma região diferente no canto superior esquerdo da página.
②: Selecione HTTP como protocolo.
③: Defina a porta do listener como 80.
④: Clique em Next.
⑤: Clique em Create Server Group.
⑥: Server Group Type. Selecione Server.
⑦: Server Group Name.
eci-deepseek-7B.⑧: VPC. Selecione a VPC criada na Etapa 1. Este parâmetro é selecionado automaticamente.
⑨: Select Backend Server Protocol. HTTP.
⑩: Ative Health Check.
⑪: Health check method. Selecione GET.
⑫: Caminho da verificação de integridade. Defina o valor como
/health. Após o início do serviço de inferência, o ALB usa o caminho/healthpara determinar o status do serviço.⑬: Clique em Create, clique em Next e, em seguida, clique em Submit. Aguarde a conclusão da criação.
6. Crie um grupo de dimensionamento
Crie um grupo de dimensionamento associado à instância ALB. O grupo gerencia automaticamente as instâncias ECI e as adiciona ao grupo de servidores de back-end do ALB.
-
No console do Auto Scaling, crie um grupo de dimensionamento e associe-o à instância ALB.
①: No painel de navegação à esquerda, clique em Scaling Groups. Na barra de navegação superior, selecione a região de destino (como China (Hangzhou)). Clique em Create Scaling Group.
②: Scaling Group Name.
deepseek-7B-servers.③: Type. Selecione ECI.
④: Instance Configuration Source. Selecione Create from Scratch.
⑤: Minimum Number of Instances. Defina este parâmetro como 0. Esta é a quantidade mínima de instâncias no grupo de dimensionamento.
⑥: Maximum Number of Instances. Defina este parâmetro como 10. Esta é a quantidade máxima de instâncias no grupo de dimensionamento.
⑦: VPC. Selecione a VPC criada na Etapa 1.
⑧: vSwitch. Selecione todos os vSwitches criados na Etapa 1.
⑨: Clique em Show Advanced Settings.
Configurações avançadas:
⑩: Ative Expected Number of Instances e defina o valor como 0. Isso cria um grupo de dimensionamento vazio.
⑪: Clique em Add Server Group e defina o Type como ALB.
⑫: Server Group. Selecione o grupo de servidores criado na Etapa 5.
⑬: Port. Selecione
30000. O serviço de inferência implantado na instância ECI usará esta porta para fornecer serviços.⑭: Clique em Create. Aguarde a criação do grupo de dimensionamento. Em seguida, crie uma configuração de dimensionamento conforme solicitado.
-
No console do Auto Scaling, crie uma configuração de dimensionamento.
Uma configuração de dimensionamento é um modelo para criar instâncias durante eventos de scale-out.
①: No painel de navegação à esquerda, clique em Scaling Groups. Na barra de navegação superior, selecione a região de destino (como China (Hangzhou)), localize o grupo de dimensionamento de destino na lista e clique em seu ID para acessar a página de detalhes.
②: Clique em .
③: Billing Method. Selecione Pay-As-You-Go.
④: Selecione um Security Group.
Configuração do grupo de contêineres:
⑤: Selecione Specify Instance Type.
⑥: Instance Type.
ecs.gn7i-c8g1.2xlarge.⑦: Selecione Automatically Match Image Cache.
⑧: Expanda Advanced Configuration.
⑨: Selecione OSS Persistence. Configure o Bucket e a RAM Role da instância.
⑩: Ephemeral Storage Size. 100 GiB.
⑪: GPU Driver Version.
tesla=550.Defina o Name do armazenamento persistente do OSS como
oss-datae defina a RAM Role comoEciOssRole.Configuração do contêiner:
⑫: 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 os seguintes comandos para os campos correspondentes.
/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 lê os arquivos de pesos do modelo do OSS e inicia o serviço de inferência na porta
30000. A chave da API é definida comoapi-key-example-abc123.⑮: Expanda container-1 advanced settings.
⑯: CPU. Defina o valor como 8 vCPU.
⑰: Memory. Defina o valor como 30 GiB.
⑱: GPU. Defina o valor como 1.
⑲: Ative Storage e Add armazenamento.
⑳: Mount Path. /oss-data
㉑: Clique em Next: Other Settings.
㉒: Elastic IP Addresses. Selecione Auto Create.
㉛: Maximum Bandwidth. 200 Mbit/s.
㉜: Clique em Confirm Configuration e conclua a criação da configuração de dimensionamento conforme solicitado.
㉝㉞㉟: Ative a configuração de dimensionamento e inicie o grupo de dimensionamento conforme solicitado.
7. Inicie o serviço
Antes de prosseguir, certifique-se de que os arquivos de pesos do modelo da Etapa 4 foram totalmente baixados.
Acione um scale-out definindo a quantidade esperada de instâncias. Este exemplo escala para cinco instâncias ECI.
Após ajustar a quantidade esperada de instâncias, há um atraso antes que as novas instâncias sejam criadas. Monitore o progresso na aba Scaling Activities.
Na página de detalhes do grupo de dimensionamento, na aba Basic Information, na seção Instance Scaling Overview, modifique o valor de Expected Number of Instances.
Na caixa de diálogo Modify Instance Scaling Overview, ative a chave Expected Number of Instances, defina Expected Number of Instances in Group como
5e clique em OK.
Próximas etapas
Integração com Dify
Limpar recursos
Considerações para produção
Considere as seguintes melhorias para ambientes de produção.
Configure o dimensionamento automático: Dimensione as instâncias com base na carga de trabalho para otimizar custos. Configure event-triggered tasks para dimensionamento baseado em memória GPU ou automatically scale based on the queries per second (QPS) metrics of a single ALB instance.
Use um gateway NAT: Em vez de atribuir um EIP a cada instância, use um NAT gateway para fornecer acesso compartilhado à internet para as instâncias ECI.
Adicione um domínio personalizado e HTTPS: Use um nome de domínio personalizado para o endpoint do serviço e configure um listener HTTPS para segurança. Configure a CNAME record for an ALB instance e Add an HTTPS listener.