Implantar um modelo de IA no AKS Arc com o operador de cadeia de ferramentas de IA do Kubernetes (versão prévia)
Aplica-se a: Azure Local, versão 23H2
Este artigo descreve como implantar um modelo de IA no AKS Arc com o operador de cadeia de ferramentas de IA do Kubernetes (KAITO). O operador de cadeia de ferramentas de IA (KAITO) é um complemento para o AKS Arc e simplifica a experiência de execução de modelos de IA do OSS em seus clusters do AKS Arc. Para habilitar esse recurso, siga este fluxo de trabalho:
- Implante o KAITO em um cluster existente.
- Adicione um pool de nós de GPU.
- Implante o modelo de IA.
- Valide a implantação do modelo.
Importante
Essas versões prévias de recursos estão disponíveis no modo de autoatendimento e adesão voluntária. As visualizações são fornecidas "como estão" e "conforme disponíveis" e estão excluídas dos acordos de nível de serviço e da garantia limitada. O Serviço de Kubernetes do Azure, habilitado pelas pré-visualizações do Azure Arc, é parcialmente coberto pelo suporte ao cliente com base no melhor esforço.
Pré-requisitos
Antes de começar, verifique se você tem os seguintes pré-requisitos:
Os seguintes detalhes fornecidos pelo administrador de infraestrutura:
- Um cluster do AKS Arc que está instalado e funcionando. Para obter mais informações, consulte Criar clusters do Kubernetes usando a CLI do Azure.
- Verifique se o cluster do AKS Arc é executado no cluster local do Azure com um modelo de GPU com suporte. Antes de criar o pool de nós, você também deve identificar as SKUs de VMs de GPUs corretas com base no modelo. Para obter mais informações, consulte Usar a GPU para cargas de trabalho com uso intensivo de computação.
- É recomendável usar um computador executando o Linux para esse recurso.
- Use
az connectedk8s proxy
para se conectar ao cluster do AKS Arc.
Certifique-se de que helm e kubectl estejam instalados no seu computador local.
- Se você precisar instalar ou atualizar, consulte Instalar o Helm.
- Se você precisar instalar kubectl, consulte Instalar kubectl.
Implantar o KAITO no GitHub
Você deve ter um cluster AKS Arc em execução com um pool de nós padrão. Para implantar o operador KAITO, siga estas etapas:
Instale o operador KAITO usando o seguinte comando:
helm install workspace ./charts/kaito/workspace --namespace kaito-workspace --create-namespace
Adicionar um pool de nós de GPU
Antes de adicionar um nó GPU, verifique se o Azure Local está habilitado com um modelo de GPU compatível e se os drivers de GPU estão instalados em todos os nós de host. Para criar um pool de nós de GPU usando o portal do Azure ou a CLI do Azure, siga estas etapas:
Para criar um pool de nós de GPU usando o portal do Azure, siga estas etapas:
Validar a implantação do pool de nós
Após a criação bem-sucedida do pool de nós, você poderá confirmar se o nó da GPU foi provisionado usando kubectl get nodes
. No exemplo a seguir, o nó da GPU é moc-l1i9uh0ksne. O outro nó é do pool de nós padrão que foi criado durante a criação do cluster:
kubectl get nodes
Saída esperada:
NAME STATUS ROLES AGE VERSION
moc-l09jexqpg2k Ready <none> 31d v1.29.4
moc-l1i9uh0ksne Ready <none> 26s v1.29.4
moc-lkp2603zcvg Ready control-plane 31d v1.29.4
Você também deve garantir que o nó tenha núcleos de GPU alocáveis:
kubectl get node moc-l1i9uh0ksne -o yaml | grep -A 10 "allocatable:"
Saída esperada:
allocatable:
cpu: 15740m
ephemeral-storage: "95026644016"
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 59730884Ki
nvidia.com/gpu: "2"
pods: "110"
capacity:
cpu: "16"
ephemeral-storage: 103110508Ki
Implantar o modelo de IA
Para implantar o modelo de IA, siga estas etapas:
Crie um arquivo YAML usando o modelo a seguir. O KAITO dá suporte a modelos populares de OSS, como Falcon, Phi3, Llama2 e Mistral. Essa lista pode aumentar ao longo do tempo.
- O PresetName é usado para especificar qual modelo implantar, e seu valor pode ser encontrado no arquivo de modelo com suporte no repositório GitHub. No exemplo a seguir,
falcon-7b-instruct
é usado para a implantação do modelo. - Recomendamos usar
labelSelector
epreferredNodes
para selecionar explicitamente o nó da GPU pelo nome. No exemplo a seguir,app: llm-inference
é usado para o nó da GPUmoc-le4aoguwyd9
. Você pode escolher qualquer rótulo de nó que quiser, desde que os rótulos correspondam. O próximo passo mostra como rotular o nó.
apiVersion: kaito.sh/v1alpha1 kind: Workspace metadata: name: workspace-falcon-7b resource: labelSelector: matchLabels: apps: llm-inference preferredNodes: - moc-le4aoguwyd9 inference: preset: name: "falcon-7b-instruct"
- O PresetName é usado para especificar qual modelo implantar, e seu valor pode ser encontrado no arquivo de modelo com suporte no repositório GitHub. No exemplo a seguir,
Rotule o nó da GPU usando kubectl de modo que o arquivo YAML saiba qual nó pode ser usado para implantação:
kubectl label node moc-le4aoguwyd9 app=llm-inference
Aplique o arquivo YAML e aguarde até que a implantação no local de trabalho seja concluída:
kubectl apply -f sampleyamlfile.yaml
Validar a implantação do modelo
Para validar a implantação do modelo, siga estas etapas:
Valide o espaço de trabalho usando o comando
kubectl get workspace
. Verifique também se os camposResourceReady
eInferenceReady
estão definidos como True antes de testar com o prompt:kubectl get workspace
Saída esperada:
NAME INSTANCE RESOURCEREADY INFERENCEREADY JOBSTARTED WORKSPACESUCCEEDED AGE workspace-falcon-7b Standard_NC16_A16 True True True 18h
Depois que o recurso e a inferência estiverem prontos, o serviço de inferência workspace-falcon-7b será exposto internamente e poderá ser acessado com um IP de cluster. Você pode testar o modelo com o prompt a seguir. Para obter mais informações sobre os recursos da inferência KAITO, consulte as instruções no repositório KAITO.
export CLUSTERIP=$(kubectl get svc workspace-falcon-7b -o jsonpath="{.spec.clusterIPs[0]}") kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$CLUSTERIP/chat -H "accept: application/json" -H "Content-Type: application/json" -d "{\"prompt\":\"<sample_prompt>\"}"
Saída esperada:
usera@quke-desktop: $ kubectl run -it -rm -restart=Never curl -image=curlimages/curl - curl -X POST http ://$CLUSTERIP/chat -H "accept: application/json" -H "Content-Type: application/json" -d "{\"prompt\":\"Write a short story about a person who discovers a hidden room in their house .? \"}" If you don't see a command prompt, try pressing enter. {"Result": "Write a short story about a person who discovers a hidden room in their house .? ?\nThe door is lo cked from both the inside and outside, and there appears not to be any other entrance. The walls of the room seem to be made of stone, although there are no visible seams, or any other indication of where the walls e nd and the floor begins. The only furniture in the room is a single wooden chair, a small candle, and what a ppears to be a bed. (The bed is covered entirely with a sheet, and is not visible from the doorway. )\nThe on ly light in the room comes from a single candle on the floor of the room. The door is solid and does not app ear to have hinges or a knob. The walls seem to go on forever into the darkness, and there is a chill, wet f eeling in the air that makes the hair stand up on the back of your neck. \nThe chair sits on the floor direct ly across from the door. The chair"}pod "curl" deleted
Solução de problemas
Se o pod não for implantado corretamente ou o campo ResourceReady mostrar vazio ou false, isso geralmente ocorre porque o nó da GPU preferencial não está rotulado corretamente. Verifique o rótulo do nó com kubectl get node <yourNodeName> --show-labels
. Por exemplo, no arquivo YAML, o código a seguir especifica que o nó deve ter o rótulo apps=llm-inference
:
labelSelector:
matchLabels:
apps: llm-inference
Próximas etapas
Neste artigo, você aprendeu a implantar um modelo de IA no AKS Arc com o operador de cadeia de ferramentas de IA do Kubernetes (KAITO). Para obter mais informações sobre o projeto KAITO, consulte o repositório do GitHub KAITO.