Dołączanie niestandardowych modeli do wnioskowania za pomocą operatora łańcucha narzędzi AI (KAITO) w usłudze Azure Kubernetes Service (AKS)

Jako inżynier lub programista AI możesz potrzebować tworzyć prototypy i wdrażać obciążenia robocze AI z wykorzystaniem różnych zestawów wag modeli. Usługa AKS umożliwia wdrażanie obciążeń inferencyjnych przy użyciu gotowych konfiguracji open source, które są natywnie obsługiwane i zarządzane przez katalog modeli KAITO, albo przez dynamiczne pobieranie modeli z rejestru HuggingFace w czasie wykonywania na klaster AKS.

Z tego artykułu dowiesz się, jak wdrożyć przykładowy model HuggingFace do inferencji za pomocą dodatku operatorskiego łańcucha narzędzi AI bez konieczności zarządzania obrazami niestandardowymi w usłudze Azure Kubernetes Service (AKS).

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta, możesz go utworzyć bezpłatnie.

  • Klaster AKS z włączonym dodatkiem operatora łańcucha narzędzi AI. Aby uzyskać więcej informacji, zobacz Włączanie usługi KAITO w klastrze usługi AKS.

  • Przydział limitu dla rodziny maszyn wirtualnych Standard_NVadsA10_v5 (VM) w subskrypcji platformy Azure. Jeśli nie masz limitu przydziału dla tej rodziny maszyn wirtualnych, poproś o zwiększenie limitu przydziału.

    Uwaga

    Obecnie tylko środowisko uruchomieniowe HuggingFace obsługuje wnioskowanie przy użyciu niestandardowego szablonu wdrażania modelu KAITO.

Wybieranie modelu językowego typu open source z narzędzia HuggingFace

W tym przykładzie używamy małego modelu językowego HuggingFaceTB SmolLM2-1.7B-Instruct. Alternatywnie możesz wybrać spośród tysięcy modeli generowania tekstu obsługiwanych w aplikacji HuggingFace.

  1. Połącz się z klastrem AKS za pomocą polecenia az aks get-credentials.

    az aks get-credentials --resource-group <resource-group-name> --name <aks-cluster-name>
    
  2. Sklonuj repozytorium GitHub projektu KAITO przy użyciu git clone polecenia .

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

Rozmieść swoje obciążenie związane z wnioskowaniem modelu przy użyciu szablonu obszaru roboczego KAITO

  1. Przejdź do katalogu kaito i skopiuj manifest YAML przykładowego wdrożenia. Zastąp wartości domyślne w następujących polach wymaganiami modelu:

    • instanceType: rozmiar maszyny wirtualnej dla wdrożenia usługi wnioskowania. W przypadku większych rozmiarów modeli można wybrać maszynę wirtualną w Standard_NCads_A100_v4 rodzinie o większej pojemności pamięci.
    • MODEL_ID: określony identyfikator HuggingFace modelu, który można znaleźć po https://huggingface.co/ w adresie URL karty modelu.
    • "--torch_dtype": Ustaw na "bfloat16", które jest obsługiwane we wszystkich wariantach SKU procesora graficznego obsługiwanych przez KAITO.
    • W tym przykładzie użyj Standard_NV36ads_A10_v5 jako typu instancji oraz modelu HuggingFaceTB SmolLM2-1.7B-Instruct.
    apiVersion: kaito.sh/v1beta1
    kind: Workspace
    metadata:
      name: workspace-custom-llm
    resource:
      instanceType: "Standard_NV36ads_A10_v5" # 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. Zapisz te zmiany w custom-model-deployment.yaml pliku.

  3. Uruchom wdrożenie w klastrze AKS przy użyciu polecenia kubectl apply.

    kubectl apply -f custom-model-deployment.yaml
    

Przetestuj usługę wnioskowania modelu niestandardowego

  1. Śledź zmiany zasobów na żywo w obszarze roboczym KAITO przy użyciu kubectl get workspace polecenia.

    kubectl get workspace workspace-custom-llm -w
    

    Uwaga

    Należy pamiętać, że gotowość maszyny może potrwać do 10 minut, a gotowość obszaru roboczego do 20 minut. Przejdź do następnego kroku tylko wtedy, gdy stan obszaru roboczego to Ready.

  2. Gdy obszar roboczy będzie gotowy, przekaż usługę wnioskowania do komputera lokalnego w osobnym terminalu.

    kubectl port-forward svc/workspace-custom-llm 5000:80
    
  3. Zainstaluj klienta języka Python OpenAI.

    pip install openai
    
  4. Zapisz następujący skrypt jako test_inference.py i uruchom go przy użyciu polecenia 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))
    

Czyszczenie zasobów

Jeśli nie potrzebujesz już tych zasobów, możesz je usunąć, aby uniknąć naliczania dodatkowych opłat za zasoby obliczeniowe platformy Azure.

Usuń obszar roboczy wnioskowania KAITO przy użyciu kubectl delete workspace polecenia .

kubectl delete workspace workspace-custom-llm

Następne kroki

W tym artykule dowiedziałeś się, jak wdrożyć model Hugging Face na potrzeby inferencji za pomocą dodatku operatora łańcucha narzędzi AI bezpośrednio w klastrze AKS. Aby dowiedzieć się więcej na temat sztucznej inteligencji i uczenia maszynowego w usłudze AKS, zobacz następujące artykuły: