Aangepaste modellen onboarden voor inferentie met de AI-toolchain-operator (KAITO) in Azure Kubernetes Service (AKS)

Als AI-engineer of ontwikkelaar moet u mogelijk een prototype maken en AI-workloads implementeren met verschillende modelgewichten. AKS biedt de mogelijkheid om inference-workloads te implementeren met behulp van opensource-voorinstellingen die standaard worden ondersteund en beheerd in het KAITO-modelregister of om dynamisch te downloaden van het HuggingFace-register tijdens runtime op uw AKS-cluster.

In dit artikel leert u hoe u een voorbeeld HuggingFace-model kunt onboarden voor inferentie met de AI-toolchain-operator-add-on, zonder dat u aangepaste afbeeldingen hoeft te beheren in Azure Kubernetes Service (AKS).

Vereiste voorwaarden

  • Een Azure-account met een actief abonnement. Als u geen account hebt, kunt u er gratis een maken.

  • Een AKS-cluster waarvoor de AI-toolchain-operator-add-on is ingeschakeld. Zie KAITO inschakelen in een AKS-cluster voor meer informatie.

  • Voor deze voorbeeldimplementatie is een quotum vereist voor de Standard_NCads_A100_v4 vm-familie (virtuele machine) in uw Azure-abonnement. Als u geen quotum voor deze VM-serie hebt, vraagt u een quotumverhoging aan.

    Notitie

    Momenteel ondersteunt alleen de HuggingFace-runtime deductie met de kaito-sjabloon voor aangepaste modelimplementatie.

Een opensource-taalmodel kiezen in HuggingFace

In dit voorbeeld gebruiken we het HuggingFaceTB SmolLM2-1.7B-Instruct klein taalmodel. U kunt ook kiezen uit duizenden modellen voor het genereren van tekst die worden ondersteund op HuggingFace.

  1. Maak verbinding met uw AKS-cluster met behulp van de az aks get-credentials opdracht.

    az aks get-credentials --resource-group <resource-group-name> --name <aks-cluster-name>
    
  2. Kloon de GitHub-opslagplaats van het KAITO-project met behulp van de git clone opdracht.

    git clone https://github.com/kaito-project/kaito.git
    

Uw modelinferentiewerkbelasting uitrollen met behulp van de KAITO-werkruimtesjabloon

  1. Navigeer naar de kaito map en kopieer het YAML-voorbeeldmanifest voor de implementatie . Vervang de standaardwaarden in de volgende velden door de vereisten van uw model:

    • instanceType: de VM-grootte voor de implementatie van de inferenceservice. Voor grotere modelgrootten kunt u een VIRTUELE machine in de Standard_NCads_A100_v4 familie kiezen met een hogere geheugencapaciteit.
    • MODEL_ID: De specifieke HuggingFace-id van je model, te vinden na https://huggingface.co/ in de URL van de modelkaart.
    • "--torch_dtype": Ingesteld op "float16" compatibiliteit met V100 GPU's. Gebruik voor A100, H100 of nieuwere GPU's "bfloat16".
    • Voor dit voorbeeld gebruiken we Standard_NC24ads_A100_v4 als het exemplaartype en het HuggingFaceTB SmolLM2-1.7B-Instruct-model.
    apiVersion: kaito.sh/v1beta1
    kind: Workspace
    metadata:
      name: workspace-custom-llm
    resource:
      instanceType: "Standard_NC24ads_A100_v4" # Required VM SKU based on model requirements
      labelSelector:
        matchLabels:
          apps: custom-llm
    inference:
      template:
        spec:
          containers:
            - name: custom-llm-container
              image: mcr.microsoft.com/aks/kaito/kaito-base:0.2.0 # KAITO base image which includes hf runtime
              livenessProbe:
                failureThreshold: 3
                httpGet:
                  path: /health
                  port: 5000
                  scheme: HTTP
                initialDelaySeconds: 600
                periodSeconds: 10
                successThreshold: 1
                timeoutSeconds: 1
              readinessProbe:
                failureThreshold: 3
                httpGet:
                  path: /health
                  port: 5000
                  scheme: HTTP
                initialDelaySeconds: 30
                periodSeconds: 10
                successThreshold: 1
                timeoutSeconds: 1
              resources:
                requests:
                  nvidia.com/gpu: 1  # Request 1 GPU; adjust as needed
                limits:
                  nvidia.com/gpu: 1  # Optional: Limit to 1 GPU
              command:
                - "accelerate"
              args:
                - "launch"
                - "--num_processes"
                - "1"
                - "--num_machines"
                - "1"
                - "--gpu_ids"
                - "all"
                - "tfs/inference_api.py"
                - "--pipeline"
                - "text-generation"
                - "--trust_remote_code"
                - "--allow_remote_files"
                - "--pretrained_model_name_or_path"
                - "HuggingFaceTB/SmolLM2-1.7B-Instruct" # The model's HuggingFace identifier
                - "--torch_dtype"
                - "bfloat16"
              volumeMounts:
                - name: dshm
                  mountPath: /dev/shm
          volumes:
          - name: dshm
            emptyDir:
              medium: Memory
    
  2. Sla deze wijzigingen op in uw custom-model-deployment.yaml bestand.

  3. Voer de implementatie uit in uw AKS-cluster met behulp van de kubectl apply opdracht.

    kubectl apply -f custom-model-deployment.yaml
    

Uw aangepaste modelinferentieservice testen

  1. Houd de wijzigingen in de live-resource in uw KAITO-werkruimte bij met behulp van de kubectl get workspace opdracht.

    kubectl get workspace workspace-custom-llm -w
    

    Notitie

    Houd er rekening mee dat de gereedheid van de machine maximaal 10 minuten kan duren en dat de gereedheid van de werkruimte maximaal 20 minuten kan duren. Ga door naar de volgende stap alleen als de werkruimtestatus Ready aangeeft.

  2. Zodra de werkruimte gereed is, stuurt u de deductieservice door naar uw lokale computer in een afzonderlijke terminal.

    kubectl port-forward svc/workspace-custom-llm 5000:80
    
  3. Installeer de OpenAI Python-client.

    pip install openai
    
  4. Sla het volgende script op als test_inference.py en voer het uit met behulp van python test_inference.py:

    from openai import OpenAI
    
    client = OpenAI(
        base_url="http://127.0.0.1:5000/v1",
        api_key="unused",
    )
    
    response = client.chat.completions.create(
        model="workspace-custom-llm",
        messages=[{"role": "user", "content": "What sport should I play in rainy weather?"}],
        max_tokens=400,
        stream=True,
    )
    
    print("".join(chunk.choices[0].delta.content or "" for chunk in response))
    

Hulpmiddelen opruimen

Als u deze resources niet meer nodig hebt, kunt u ze verwijderen om te voorkomen dat er extra Azure-rekenkosten in rekening worden gebracht.

Verwijder de KAITO-deductiewerkruimte met behulp van de kubectl delete workspace opdracht.

kubectl delete workspace workspace-custom-llm

Volgende stappen

In dit artikel hebt u geleerd hoe u een HuggingFace-model kunt integreren voor inferentie met de AI-toolchain-operator rechtstreeks in uw AKS-cluster. Zie de volgende artikelen voor meer informatie over AI en machine learning in AKS: