Compartilhar via


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:

  1. Implante o KAITO em um cluster existente.
  2. Adicione um pool de nós de GPU.
  3. Implante o modelo de IA.
  4. 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:

  1. 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.
  2. Certifique-se de que helm e kubectl estejam instalados no seu computador local.

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:

  1. Clone o repositório KAITO para seu computador local.

  2. 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:

  1. Entre no portal do Azure e localize o cluster do AKS Arc.

  2. Em Configurações e Grupos de nós, selecione Adicionar. Durante a pré-visualização, oferecemos suporte apenas para nós do Linux. Preencha os outros campos obrigatórios e crie o pool de nós.

    Captura de tela da página do portal de pools de nós.

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:

  1. 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 e preferredNodes para selecionar explicitamente o nó da GPU pelo nome. No exemplo a seguir, app: llm-inference é usado para o nó da GPU moc-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"
    
  2. 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
    
  3. 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:

  1. Valide o espaço de trabalho usando o comando kubectl get workspace. Verifique também se os campos ResourceReady e InferenceReady 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
    
  2. 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.