Udostępnij przez


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 deweloper sztucznej inteligencji może być konieczne utworzenie prototypu i wdrożenie obciążeń sztucznej inteligencji z różnymi wagami modeli. Usługa AKS umożliwia wdrażanie obciążeń wnioskowania przy użyciu ustawień wstępnych typu open source obsługiwanych poza urządzeniem i zarządzanych w rejestrze modeli KAITO lub dynamicznego pobierania z rejestru HuggingFace w czasie wykonywania do klastra usługi 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.

  • Przykładowe wdrożenie wymaga limitu zasobów Standard_NCads_A100_v4 dla rodziny maszyn wirtualnych w subskrypcji 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ęzyka BigScience Bloom-1B7 . 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. W tym przykładzie określimy identyfikator modelu Bloom-1b7 HuggingFace dla modelu BigScience Bloom-1B7 :

    • instanceType: minimalny rozmiar maszyny wirtualnej dla tego wdrożenia usługi wnioskowania to Standard_NC24ads_A100_v4. 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: zastąp element określonym identyfikatorem HuggingFace modelu, który można znaleźć po https://huggingface.co/ w adresie URL karty modelu.
    • "--torch_dtype": Ustaw na "float16" dla zgodności z procesorami GPU V100. W przypadku procesorów GPU A100, H100 lub nowszych użyj polecenia "bfloat16".
    • (Opcjonalnie) HF_TOKEN: określ wartości w tej sekcji tylko wtedy, gdy wdrażasz prywatny lub ogrodzony model Hugging Face na potrzeby wnioskowania.
    apiVersion: kaito.sh/v1beta1
    kind: Workspace
    metadata:
      name: workspace-custom-llm
    resource:
      instanceType: "Standard_NC24ads_A100_v4" # Replace with the 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.0.8 # 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"
                - "bloom-1b7"
                - "--torch_dtype"
                - "bfloat16"
              # env:
              #   HF_TOKEN is required only for private or gated Hugging Face models
              #   Uncomment and configure this block if needed
              #   - name: HF_TOKEN
              #     valueFrom:
              #       secretKeyRef:
              #         name: hf-token-secret     # Replace with your Kubernetes Secret name
              #         key: HF_TOKEN             # Replace with the specific key holding the token
              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.

  2. Sprawdź usługę wnioskowania modelu językowego i uzyskaj adres IP usługi przy użyciu kubectl get svc polecenia .

    export SERVICE_IP=$(kubectl get svc workspace-custom-llm -o jsonpath='{.spec.clusterIP}')
    
  3. Przetestuj działanie swojej niestandardowej usługi wnioskowania z wybraną przez siebie próbką danych wejściowych, używając formatu interfejsu API OpenAI.

       kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$SERVICE_IP/v1/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "bloom-1b7",
        "prompt": "What sport should I play in rainy weather?",
        "max_tokens": 20
      }'
    

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 przedstawiono sposób dołączania modelu HuggingFace na potrzeby wnioskowania za pomocą dodatku łańcucha narzędzi AI bezpośrednio do klastra usługi AKS. Aby dowiedzieć się więcej na temat sztucznej inteligencji i uczenia maszynowego w usłudze AKS, zobacz następujące artykuły: