Os clusters gerenciados Pro do ACK oferecem um ambiente pronto para executar serviços de inferência de modelos de linguagem grandes (LLM), sem necessidade de hardware GPU local ou configuração complexa de dependências. Este guia aborda dois caminhos de implantação: uma opção rápida para validar um modelo em cerca de 15 minutos e uma opção voltada para produção que pré-carrega arquivos de modelo em armazenamento persistente para reduzir o tempo de inicialização a frio e os custos de largura de banda.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster gerenciado Pro do ACK executando Kubernetes 1.22 ou posterior
Pelo menos um nó acelerado por GPU com 16 GB ou mais de memória de GPU
Driver NVIDIA versão 535 ou posterior instalado no pool de nós de GPU (este guia usa
550.144.03, definido pelo rótuloack.aliyun.com/nvidia-driver-version)O cliente Arena instalado
Escolha um caminho de implantação
|
Opção 1: Teste rápido |
Opção 2: Produção |
|
|
Tempo de configuração |
~15 minutos |
Maior (requer upload prévio do modelo) |
|
Armazenamento do modelo |
Baixado para o contêiner na inicialização |
Pré-carregado no Object Storage Service (OSS) |
|
Inicialização a frio |
Lenta — o modelo é baixado novamente a cada reinício do pod |
Rápida — o modelo já está no volume montado |
|
Mais indicado para |
Validar capacidades de inferência |
Cargas de trabalho de produção estáveis e repetíveis |
Opção 1: Implantação rápida para testes
Use o Arena para implantar o qwen/Qwen1.5-4B-Chat do ModelScope. O contêiner baixa o modelo durante a inicialização; portanto, o nó de GPU precisa de pelo menos 30 GB de espaço livre em disco.
-
Execute o comando do Arena para implantar o serviço de inferência:
arena serve custom \ --name=modelscope \ --version=v1 \ --gpus=1 \ --replicas=1 \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=qwen/Qwen1.5-4B-Chat python3 server.py"Para obter arquivos de modelo de um repositório do Hugging Face, consulte Obter modelos do Hugging Face .
A saída a seguir confirma a criação dos recursos do Kubernetes para
modelscope-v1:service/modelscope-v1 created deployment.apps/modelscope-v1-custom-serving created INFO[0002] The Job modelscope has been submitted successfully INFO[0002] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status -
Verifique o status do serviço. O pod permanece em
ContainerCreatingenquanto baixa o modelo. Dependendo das condições de rede, esse processo leva de 5 a 15 minutos:arena serve get modelscopeQuando o status do pod mostrar
Running, o serviço de inferência estará pronto.
Opção 2: Implantação pronta para produção com armazenamento persistente
Pré-carregar arquivos de modelo no OSS evita baixar repetidamente arquivos maiores que 10 GB sempre que um pod reinicia. Essa abordagem reduz o tempo de inicialização a frio, diminui os custos de largura de banda e melhora a estabilidade do serviço.
Etapa 1: Baixe os arquivos do modelo
-
Instale o Git e o Git Large File Storage (LFS). macOS
brew install git brew install git-lfsWindows Baixe e instale o Git no site oficial do Git. O Git Large File Storage vem integrado ao Git for Windows — baixe a versão mais recente. Linux (baseado em Red Hat)
yum install git yum install git-lfsPara outras distribuições Linux, consulte o site oficial do Git.
-
Clone o repositório do modelo Qwen1.5-4B-Chat e obtenha os arquivos grandes:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git cd Qwen1.5-4B-Chat git lfs pull
Etapa 2: Envie os arquivos do modelo para o OSS
-
Crie um bucket. Para reduzir a latência de carregamento do modelo, crie o bucket na mesma região do cluster:
ossutil mb oss://<your-bucket-name> -
Crie uma pasta no bucket para os arquivos do modelo:
ossutil mkdir oss://<your-bucket-name>/Qwen1.5-4B-Chat -
Envie os arquivos do modelo:
ossutil cp -r ./Qwen1.5-4B-Chat oss://<your-bucket-name>/Qwen1.5-4B-Chat
Etapa 3: Configure um volume persistente (PV)
Faça login no console do ACK e clique em no cluster desejado. No painel de navegação à esquerda, escolha Volumes > Persistent Volumes.
-
Clique em Create. Na caixa de diálogo Create PV, defina os parâmetros a seguir e clique em Create:
Parâmetro
Valor
PV type
OSSVolume name
llm-modelCapacity
20GiAccess mode
ReadOnlyManyAccess certificate
Selecione Create Secret
Optional parameters
-o umask=022 -o max_stat_cache_size=0 -o allow_otherBucket ID
Clique em Select Bucket e selecione seu bucket
OSS path
/Qwen1.5-4B-ChatEndpoint
Selecione Public Endpoint
Etapa 4: Configure uma solicitação de volume persistente (PVC)
No painel de navegação à esquerda, escolha Volumes > Persistent Volume Claims.
-
Na página Persistent Volume Claims, defina os parâmetros a seguir e clique em Create:
Parâmetro
Valor
PVC type
OSSName
llm-modelAllocation mode
Selecione Existing Volumes
Existing volumes
Selecione o PV
llm-modelcriado na etapa anteriorCapacity
20Gi
Etapa 5: Implante o serviço de inferência
Execute o comando do Arena para implantar o serviço. A flag --data monta o PVC com os arquivos de modelo pré-carregados. Como o modelo já está no volume montado, o pod inicia sem precisar baixar nada:
arena serve custom \
--name=modelscope \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--data=llm-model:/Qwen1.5-4B-Chat \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \
"MODEL_ID=/Qwen1.5-4B-Chat python3 server.py"
A saída a seguir confirma o envio do serviço de inferência:
service/modelscope-v1 created
deployment.apps/modelscope-v1-custom-serving created
INFO[0001] The Job modelscope has been submitted successfully
INFO[0001] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status
Verifique o status do serviço:
arena serve get modelscope
Quando o status do pod mostrar Running, o serviço de inferência estará pronto.
Valide o serviço de inferência
-
Configure o encaminhamento de porta para o serviço de inferência:
ImportanteO comando
kubectl port-forwarddestina-se apenas a desenvolvimento e depuração. Ele não é confiável, seguro ou escalável em produção. Para redes de produção, consulte Gerenciamento de Ingress.kubectl port-forward svc/modelscope-v1 8000:8000Saída esperada:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Em um novo terminal, envie uma solicitação de teste de inferência:
curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{ "text_input": "What is artificial intelligence? Artificial intelligence is", "parameters": { "stream": false, "temperature": 0.9, "seed": 10 } }'Uma resposta bem-sucedida contém o texto gerado pelo modelo:
{"model_name":"/Qwen1.5-4B-Chat","text_output":"What is artificial intelligence? Artificial intelligence is a branch of computer science that studies how to make computers have intelligent behavior."}
(Opcional) Limpeza
Exclua o serviço de inferência e os recursos de armazenamento ao concluir:
# Delete the inference service
arena serve del modelscope
# Delete the PVC and PV (Option 2 only)
kubectl delete pvc llm-model
kubectl delete pv llm-model
Perguntas frequentes
Como obter arquivos de modelo do Hugging Face em vez do ModelScope?
Certifique-se de que o runtime do contêiner consiga acessar o repositório do Hugging Face e defina MODEL_SOURCE=Huggingface no comando do Arena. O nó de GPU precisa de pelo menos 30 GB de espaço livre em disco para acomodar os arquivos baixados:
arena serve custom \
--name=huggingface \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \
"MODEL_ID=Qwen/Qwen1.5-4B-Chat MODEL_SOURCE=Huggingface python3 server.py"
A saída a seguir confirma a criação dos recursos:
service/huggingface-v1 created
deployment.apps/huggingface-v1-custom-serving created
INFO[0003] The Job huggingface has been submitted successfully
INFO[0003] You can run `arena serve get huggingface --type custom-serving -n default` to check the job status
Apêndice: referência de parâmetros de comando
|
Parâmetro |
Descrição |
Exemplo |
|
|
Subcomando do Arena. Implanta um serviço de modelo personalizado em vez de um tipo predefinido, como |
— |
|
|
Nome do serviço. Identificador exclusivo usado para operações subsequentes, como verificação de logs e exclusão do serviço. |
|
|
|
Versão do serviço. Rótulo de versão para o serviço, útil para gerenciamento de versões e lançamentos graduais. |
|
|
|
Quantidade de GPUs. Número de GPUs alocadas para cada pod. Obrigatório quando o modelo requer GPUs para inferência. |
|
|
|
Número de réplicas. Quantidade de pods a serem executados. Mais réplicas aumentam o throughput simultâneo e a disponibilidade. |
|
|
|
Porta da API RESTful. Porta na qual o serviço expõe sua API RESTful para receber solicitações de inferência. |
|
|
|
Tipo de sonda de prontidão. Método de verificação usado pela sonda de prontidão do Kubernetes para determinar se o contêiner está pronto para receber tráfego. |
|
|
|
Opções do tipo de sonda. Parâmetros para o tipo de sonda escolhido. Para |
|
|
|
Configurações adicionais da sonda. Parâmetros extras para a sonda de prontidão. Esta flag pode ser repetida. Define o atraso inicial e o intervalo de verificação. |
|
|
|
Montagem de volume. Monta um PVC em um caminho especificado dentro do contêiner, no formato |
|
|
|
Imagem do contêiner. URL completa da imagem do contêiner que define o ambiente de runtime para o serviço. |
|
|
|
Comando de inicialização. Comando a ser executado após o início do contêiner. Define a variável de ambiente |
|
Perguntas frequentes
Obter modelos do Hugging Face
Certifique-se de que o ambiente de runtime do contêiner possa acessar o repositório do Hugging Face.
-
Use o cliente Arena para implantar um serviço personalizado e especifique a imagem do contêiner para implantação usando o parâmetro
--image. Para obter mais informações sobre os parâmetros, consulte Referência de parâmetros de comando.Este método baixa os arquivos de modelo do Hugging Face para dentro do contêiner. Certifique-se de que seu nó de GPU tenha pelo menos 30 GB de espaço em disco disponível.
arena serve custom \ --name=huggingface \ --version=v1 \ --gpus=1 \ --replicas=1 \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=Qwen/Qwen1.5-4B-Chat MODEL_SOURCE=Huggingface python3 server.py"A saída a seguir indica a criação dos recursos do Kubernetes para o serviço de inferência
huggingface-v1:service/huggingface-v1 created deployment.apps/huggingface-v1-custom-serving created INFO[0003] The Job huggingface has been submitted successfully INFO[0003] You can run `arena serve get huggingface --type custom-serving -n default` to check the job status
Próximos passos
Para especificar uma versão do driver NVIDIA para nós de GPU, consulte Especificar uma versão do driver NVIDIA para nós adicionando um rótulo.
Para usar frameworks de inferência de nível de produção, como vLLM ou Triton, consulte Implantar um serviço de inferência de modelo Qwen usando vLLM e Implantar um serviço de inferência de modelo Qwen usando Triton.