Ao executar modelos de machine learning no Kubernetes, é necessário contar com dimensionamento automático, roteamento de tráfego e gerenciamento de ciclo de vida para endpoints de inferência. O KServe (anteriormente KFServing) oferece esses recursos como uma plataforma de inferência nativa do Kubernetes. Ao integrar o KServe ao Alibaba Cloud Service Mesh (ASM), você implanta e gerencia serviços de inferência por meio do plano de controle do ASM, com dimensionamento automático baseado em tráfego, scale-to-zero e implantações canary integrados.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster ACK adicionado a uma instância do ASM versão 17.2.7 ou posterior. Consulte Adicionar um cluster a uma instância do ASM
O recurso que permite acessar recursos do Istio pela API Kubernetes dos clusters ativado. Consulte Ativar o recurso que permite acessar recursos do Istio usando a API Kubernetes dos clusters
Componentes do Knative implantados no cluster ACK com o recurso Knative on ASM ativado. Consulte a Etapa 1 em Usar Knative on ASM para implantar uma aplicação serverless
Como funciona
O KServe executa no seu cluster Container Service for Kubernetes (ACK), gerenciado pelo ASM. Quando você implanta um recurso InferenceService, o KServe:
Provisiona um servidor de modelo e carrega o modelo do URI de armazenamento especificado.
Cria serviços Knative para dimensionamento serverless, incluindo scale-to-zero quando ocioso.
Gera recursos de roteamento do Istio (um
VirtualServicee umGateway) para tornar o modelo acessível pelo gateway de entrada do ASM.
O KServe suporta dois modos de implantação:
|
Modo |
Comportamento de dimensionamento |
|
Serverless (Knative) |
Dimensionamento automático, incluindo scale-to-zero |
|
Implantação Kubernetes |
Alocação padrão de recursos do Kubernetes |
O procedimento a seguir utiliza o modo serverless com Knative.

Para mais detalhes, consulte o projeto KServe no GitHub.
Etapa 1: Ativar o KServe no ASM
O KServe depende do cert-manager para gerenciar certificados. Ao ativar o KServe, o cert-manager é instalado automaticamente.
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha Ecosystem > KServe on ASM.
Na página KServe on ASM, clique em Enable KServe on ASM.
Se o cert-manager já estiver instalado no cluster, desative a opção Automatically install the CertManager component in the cluster para evitar conflitos.
Etapa 2: Obter o endereço IP do gateway de entrada
Anote o endereço IP do gateway de entrada do ASM. Esse dado é necessário para enviar solicitações de inferência na Etapa 4.
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.
Na página Ingress Gateway, anote o Service address do gateway de entrada.
Etapa 3: Criar um serviço de inferência
Implante um modelo de classificação de íris scikit-learn como um InferenceService para verificar a integração.
-
Conecte-se ao cluster ACK com kubectl e crie um namespace para os recursos do KServe:
kubectl create namespace kserve-test -
Crie um arquivo chamado isvc.yaml com o seguinte conteúdo:
apiVersion: "serving.kserve.io/v1beta1" kind: "InferenceService" metadata: name: "sklearn-iris" spec: predictor: model: modelFormat: name: sklearn storageUri: "gs://kfserving-examples/models/sklearn/1.0/model" -
Implante o serviço de inferência no namespace
kserve-test:kubectl apply -f isvc.yaml -n kserve-test -
Verifique se o serviço está pronto:
kubectl get inferenceservices sklearn-iris -n kserve-testSaída esperada:
NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE sklearn-iris http://sklearn-iris.kserve-test.example.com True 100 sklearn-iris-predictor-00001 3h26mA coluna
READYexibeTruequando o serviço está disponível. -
(Opcional) Visualize os recursos do Istio gerados automaticamente
Após a criação do serviço de inferência, o KServe gera automaticamente um serviço virtual e um gateway do Istio para rotear o tráfego para o modelo. Para visualizar esses recursos:
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha Traffic Management Center > VirtualService.
Na página VirtualService, clique em ícone
ao lado de Namespace e selecione kserve-test na lista suspensa para visualizar o serviço virtual.No painel de navegação à esquerda, escolha ASM Gateways > Gateway. Na página Gateway, selecione knative-serving na lista suspensa Namespace para visualizar o gateway do Istio.
Etapa 4: Enviar solicitações de inferência
Com o serviço de inferência em execução, envie solicitações de previsão pelo gateway de entrada do ASM. As etapas a seguir aplicam-se a Linux e macOS.
-
Crie um arquivo de entrada com dados de amostra para o modelo de classificação de íris:
cat <<EOF > "./iris-input.json" { "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] } EOF -
Obtenha o nome do host do serviço:
SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3) echo $SERVICE_HOSTNAMESaída esperada:
sklearn-iris.kserve-test.example.com -
Envie uma solicitação de previsão pelo gateway de entrada. Substitua
<ingress-gateway-ip>pelo endereço IP obtido na Etapa 2:curl -H "Host: ${SERVICE_HOSTNAME}" \ http://<ingress-gateway-ip>:80/v1/models/sklearn-iris:predict \ -d @./iris-input.jsonSaída esperada:
{"predictions": [1, 1]}O modelo classifica ambas as amostras de entrada como classe
1(Iris versicolor). -
Execute um teste de carga
Para avaliar o throughput e a latência sob tráfego sustentado, implante um job de teste de carga pré-configurado:
-
Implante a aplicação de teste de carga:
kubectl create -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/kserve/v0.7/loadtest.yaml -
Encontre o nome do pod de teste de carga:
kubectl get podSaída esperada:
NAME READY STATUS RESTARTS AGE load-testxhwtq-pj9fq 0/1 Completed 0 3m24s sklearn-iris-predictor-00001-deployment-857f9bb56c-vg8tf 2/2 Running 0 51m -
Visualize os resultados do teste. Substitua
<load-test-pod-name>pelo nome real do pod obtido na etapa anterior:kubectl logs <load-test-pod-name>Saída esperada:
Requests [total, rate, throughput] 30000, 500.02, 500.01 Duration [total, attack, wait] 59.999s, 59.998s, 1.352ms Latencies [min, mean, 50, 90, 95, 99, max] 1.196ms, 1.463ms, 1.378ms, 1.588ms, 1.746ms, 2.99ms, 18.873ms Bytes In [total, mean] 690000, 23.00 Bytes Out [total, mean] 2460000, 82.00 Success [ratio] 100.00% Status Codes [code:count] 200:30000 Error Set:Esse resultado mostra uma taxa de sucesso de 100% em 30.000 solicitações a 500 solicitações por segundo, com latência média de 1,463 ms.
-
Próximos passos
Acelerar o carregamento de modelos: Para aplicações de IA intensivas em dados, integre o KServe on ASM com o Fluid para acelerar o acesso aos dados. Consulte Integrar o recurso KServe on ASM com Fluid para implementar AI Serving que acelera o acesso a dados.
Transformar dados de entrada: Implante um transformador para converter a entrada bruta no formato exigido pelo servidor de modelo. Consulte Usar InferenceService para implantar um transformador.
Gerenciar múltiplos modelos: Para implantações de modelos em grande escala e alta densidade, use o Model Service Mesh para agendar e gerenciar vários serviços de modelo. Consulte Model Service Mesh.