Blog

Stellen Sie Open Source LLM in Ihrem privaten Cluster mit Hugging Face und GKE Autopilot bereit

Marcin Zabłocki

Aktualisiert Oktober 15, 2025
9 Minuten

Die Bereitstellung von Anwendungen, die auf Sprachmodellen (LLMs) basieren, kann zahlreiche Herausforderungen mit sich bringen, insbesondere wenn es um Datenschutz, Zuverlässigkeit und einfache Bereitstellung geht (siehe: Finden Sie Ihren Weg durch den Hype um große Sprachmodelle - GetInData). Eine Möglichkeit ist die Bereitstellung von LLMs in Ihrer eigenen Infrastruktur. Dies ist jedoch oft mit einer komplizierten Einrichtung und Wartung verbunden, was für viele Entwickler eine entmutigende Aufgabe darstellt. Darüber hinaus kann es aufgrund von Datenschutzbeschränkungen, die von Unternehmen auferlegt werden, die die Nutzung externer Dienste einschränken und/oder wertvolle Daten verarbeiten, die personenbezogene Daten enthalten, nicht möglich sein, sich ausschließlich auf öffentliche APIs für LLMs zu verlassen (siehe: Führen Sie Ihr erstes privates Large Language Model (LLM) auf Google Cloud Platform aus - GetInData). Darüber hinaus fehlen bei öffentlichen APIs oft die notwendigen Service Level Agreements (SLAs), um robuste und zuverlässige Anwendungen auf der Grundlage von LLMs zu entwickeln. In diesem Blogbeitrag führen wir Sie durch den Bereitstellungsprozess von Falcon LLM innerhalb der sicheren Grenzen Ihres privaten Google Kubernetes Engine (GKE) Autopilot-Clusters unter Verwendung der Texterzeugungs-Inferenzbibliothek vonHugging Face. Die Bibliothek wurde mit Blick auf Hochleistungsimplementierungen entwickelt und wird von Hugging Face selbst in der Produktion verwendet, um HF Model Hub Widgets zu betreiben.

Falcon - das neue klassenbeste, quelloffene Großsprachenmodell (zumindest im Juni 2023 🙃)

Falcon LLM selbst ist eines der beliebten Open Source Large Language Models, das vor kurzem die OSS-Gemeinschaft im Sturm erobert hat. Sehen Sie sich das Open LLM Leaderboard an, um die verschiedenen Modelle zu vergleichen. Dieser Leitfaden konzentriert sich auf den Einsatz der Version Falcon-7B-Instruct. Der gleiche Ansatz kann jedoch auch auf andere Modelle angewendet werden, einschließlich Falcon-40B oder andere, je nach verfügbarer Hardware und Budget.

Voraussetzungen

Bevor Sie mit dem Einsatz von Falcon LLM in Ihrem privaten GKE Autopilot-Cluster beginnen, müssen Sie einige Voraussetzungen erfüllen:

  • Zugang zu einem GCP-Projekt und einem erstellten GKE Autopilot-Cluster: Stellen Sie sicher, dass Sie Zugang zu einem Google Cloud Platform (GCP)-Projekt haben und einen GKE Autopilot-Cluster eingerichtet haben. Der Autopilot-Cluster bietet eine verwaltete Kubernetes-Umgebung mit automatischer Skalierung und effizienter Ressourcenzuweisung, ohne dass eine manuelle Clusterkonfiguration erforderlich ist, und eignet sich daher perfekt für schnelle Bereitstellungen.
    Stellen Sie sicher, dass sich der Cluster in einer Region/Zone befindet, die GPUs unterstützt.
  • Kontingent für den Betrieb von T4-GPUs (oder A100 für Falcon-40B): Vergewissern Sie sich, dass Ihr GCP-Projekt über das erforderliche Kontingent für den Betrieb von T4-GPUs (bzw. A100-GPUs für Falcon-40B) verfügt.
  • Artefakt-Register: Richten Sie eine Artifact Registry für Docker-Container innerhalb Ihres GCP-Projekts ein. Stellen Sie sicher, dass sich die Artifact Registry in der gleichen Region wie der GKE-Cluster
    befindet, um eine schnelle Netzwerkübertragung zu gewährleisten.
  • Google Cloud Storage (GCS) Bucket: Erstellen Sie einen GCS-Bucket in der gleichen Region
    wie Ihr GKE-Cluster. Der GCS-Bucket wird zum Speichern von Modellgewichten verwendet.
  • Grundlegende Kenntnisse von Kubernetes: Ein grundlegendes Verständnis der Kubernetes-Konzepte und -Operationen ist für die Verwendung dieses Bereitstellungsprozesses erforderlich.

Das folgende Diagramm zeigt die Zielinfrastruktur, die Sie nach der Lektüre dieses Blogbeitrags erhalten werden.


Vorbereitung der Modelldateien

Um die Bereitstellung privat und zuverlässig zu gestalten, müssen Sie zunächst die Dateien des Modells (Gewichte, Konfiguration und sonstige Dateien) herunterladen und in GCS speichern.

Sie haben dafür 3 Möglichkeiten:

  1. Manueller Download: Besuchen Sie die Falcon-7B-Instruct Modellseite auf dem Hugging Face Hub(https://huggingface.co/tiiuae/falcon-7b-instruct) und laden Sie die Modelldateien manuell über Ihren Webbrowser herunter.

Git LFS Klonen: Alternativ können Sie auch Git LFS verwenden, um das Modell-Repository zu klonen. Führen Sie den folgenden Befehl aus:

git lfs clone --depth=1 https://huggingface.co/tiiuae/falcon-7b-instruct

Beachten Sie, dass die für das Klonen erforderliche Festplattengröße aufgrund des Git-Overheads in der Regel doppelt so groß ist wie die Modellgröße.

  1. Hugging Face Hub SDK: Eine weitere Option ist die Verwendung des Hugging Face Hub SDK, das eine bequeme Möglichkeit bietet, Modelle programmatisch abzurufen und mit ihnen zu interagieren. In der Dokumentation zum Hugging Face Hub SDK(https://huggingface.co/docs/huggingface_hub/quick-start) finden Sie eine Kurzanleitung zur Verwendung des SDK.

Nachdem Sie die Modelldateien heruntergeladen haben, sollten Sie die folgende Struktur auf Ihrer lokalen Festplatte haben:

falcon-7b-instruct
├── [9.6K]  README.md
├── [ 667]  config.json
├── [2.5K]  configuration_RW.py
├── [ 111]  generation_config.json
├── [1.1K]  handler.py
├── [ 46K]  modelling_RW.py
├── [9.3G]  pytorch_model-00001-of-00002.bin
├── [4.2G]  pytorch_model-00002-of-00002.bin
├── [ 17K]  pytorch_model.bin.index.json
├── [ 281]  special_tokens_map.json
├── [2.6M]  tokenizer.json
└── [ 220]  tokenizer_config.json

Laden Sie nun die Dateien in Google Cloud Storage (GCS) hoch.

gsutil -m rsync -rd falcon-7b-instruct gs://<your bucket name>/llm/deployment/falcon-7b-instruct

Vorbereitung des Docker-Images

Die Texterzeugungs-Inferenz von Hugging Face wird mit einem vorgefertigten Docker-Image geliefert, das für den Einsatz bereit ist und von https://ghcr.io/huggingface/text-generation-inference abgerufen werden kann. Für private und sichere Einsätze ist es jedoch besser, sich nicht auf eine externe Container-Registry zu verlassen - ziehen Sie dieses Image und speichern Sie es sicher in der Google Artifact Registry. Das komprimierte Image hat eine Größe von ca. 4 GB.

docker pull ghcr.io/huggingface/text-generation-inference:latest


docker tag ghcr.io/huggingface/text-generation-inference:latest <region>-docker.pkg.dev/<project id>/<name of the artifact registry>/huggingface/text-generation-inference:latest


docker push <region>-docker.pkg.dev/<project id>/<name of the artifact registry>/huggingface/text-generation-inference:latest

Die gleichen Aktionen (pull/tag/push) sollten Sie auch für das google/cloud-sdk:slim-Image durchführen, das zum Herunterladen von Modelldateien im initContainer der Bereitstellung verwendet wird.

Kubernetes-Bereitstellung

Einrichten des Zugangs

GKE Autopilot-Cluster verwenden standardmäßig Workload Identity. Folgen Sie zur Einrichtung der offiziellen Dokumentation:

  • Ein Kubernetes-Dienstkonto im GKE Autopilot-Cluster
  • Ein neues Dienstkonto in GCP, das mit dem Kubernetes-Dienstkonto verbunden wird
  • IAM-Berechtigungen für das GCP-Servicekonto in IAM (der Storage Object Viewer auf dem Bucket mit den Dateien des Modells sollte ausreichen).

Vorbereitungen für die Bereitstellung

Speicherklasse (storage.yaml)

Beginnen Sie mit der Erstellung einer Speicherklasse, die schnelle SSD-Laufwerke für Volumes verwendet. Dies gewährleistet eine optimale Leistung für den Einsatz von Falcon LLM - Sie möchten die Modelldateien von GCS kopieren und sie so schnell wie möglich laden.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ssd
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-ssd

Bereitstellung (deployment.yaml)

Das Bereitstellungsmanifest ist für die Bereitstellung des auf Textgenerierung und Inferenz basierenden Modells verantwortlich, das die im obigen Diagramm gezeigten APIs bereitstellt. Außerdem enthält es einen initContainer, der die erforderlichen Falcon LLM-Dateien von GCS in einen ephemeren Persistent Volume Claim (PVC) zieht, der vom Hauptcontainer geladen wird.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: falcon-7b-instruct
spec:
  replicas: 1
  selector:
    matchLabels:
      app: falcon-7b-instruct
  template:
    metadata:
      labels:
        app: falcon-7b-instruct
    spec:
      serviceAccountName: marcin-autopilot-sa
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
        cloud.google.com/gke-accelerator: nvidia-tesla-t4
      volumes:
        - name: model-storage
          ephemeral:
            volumeClaimTemplate:
              spec:
                accessModes: [ "ReadWriteOnce" ]
                storageClassName: "ssd"
                resources:
                  requests:
                    storage: 64Gi
      initContainers:
        - name: init
          image: google/cloud-sdk:slim
          command: ["sh", "-c", "gcloud alpha storage cp -r gs://<bucket name>/llm/deployment/falcon-7b-instruct /data"]
          volumeMounts:
            - name: model-storage
              mountPath: /data
          resources:
            requests:
              cpu: 7.0
      containers:
      - name: model
        image: <region>-docker.pkg.dev/<project id>/<artifact registry name>/huggingface/text-generation-inference:latest
        command: ["text-generation-launcher", "--model-id", "tiiuae/falcon-7b-instruct", "--quantize", "bitsandbytes", "--num-shard", "1", "--huggingface-hub-cache", "/usr/src/falcon-7b-instruct", "--weights-cache-override", "/usr/src/falcon-7b-instruct"]
        env:
          - name: HUGGINGFACE_OFFLINE
            value: "1"
          - name: PORT
            value: "8080"
        volumeMounts:
          - name: model-storage
            mountPath: /usr/src/
        resources:
          requests:
            cpu: 7.0
            memory: 32Gi
          limits:
            nvidia.com/gpu: 1
        ports:
          - containerPort: 8080

Die wichtigsten Punkte im Manifest sind:

nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
        cloud.google.com/gke-accelerator: nvidia-tesla-t4

Die Knotenselektoren weisen den GKE Autopilot an, den Metadatenserver für die Bereitstellung zu aktivieren (Workload Identity zu verwenden) und einen nvidia-tesla-t4-Grafikprozessor an den Knoten anzuschließen, der die Bereitstellung ausführen wird. Mehr über GPU-basierte Workloads im GKE Autocluster erfahren Sie hier.

initContainers:
        - name: init
          image: google/cloud-sdk:slim
          command: ["sh", "-c", "gcloud alpha storage cp -r gs://<bucket name>/llm/deployment/falcon-7b-instruct /data"]

Der init-Container kopiert die Daten von GCS in die lokale SSD-gestützte PVC. Beachten Sie, dass wir den Befehl gcloud alpha storage verwenden. Dabei handelt es sich um die neue, durchsatzoptimierte CLI-Schnittstelle für den Betrieb mit Google Cloud Storage, mit der der Benutzer einen Durchsatz von etwa 550 MB/s erreichen kann (*dies kann je nach Zone/Cluster usw. variieren).

 containers:
      - name: model
        image: <region>-docker.pkg.dev/<project id>/<artifact registry name>/huggingface/text-generation-inference:latest
        command: ["text-generation-launcher", "--model-id", "tiiuae/falcon-7b-instruct", "--quantize", "bitsandbytes", "--num-shard", "1", "--huggingface-hub-cache", "/usr/src/falcon-7b-instruct", "--weights-cache-override", "/usr/src/falcon-7b-instruct"]
        env:
          - name: HUGGINGFACE_OFFLINE
            value: "1"
          - name: PORT
            value: "8080"

Der Hauptcontainer (Modell) startet text-generation-launcher mit dem quantisierten Modell (8-Bit-Quantisierung) und - was am wichtigsten ist - mit den überschriebenen Parametern --weights-cache-override und --huggingface-hub-cache, die zusammen mit der Umgebung HUGGINGFACE_OFFLINE verhindern, dass der Container irgendetwas direkt vom Hugging Face Hub herunterlädt, so dass Sie die volle Kontrolle über die Bereitstellung haben.

Service (service.yaml)

Das letzte Teil des Puzzles ist ein einfacher Kubernetes-Dienst, um die Bereitstellung zu ermöglichen:

apiVersion: v1
kind: Service
metadata:
  name: falcon-7b-instruct-service
spec:
  selector:
    app: falcon-7b-instruct
  type: ClusterIP
  ports:
    - name: http
      port: 8080
      targetPort: 8080

Einsatz von Falcon-7b-Instruct in GKE

Sobald die Manifeste fertig sind, wenden Sie sie an:

kubectl apply -f storage.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

Nach ein paar Minuten sollte die Bereitstellung abgeschlossen sein.

kubectl get pods -l app=falcon-7b-instruct
NAME                                  READY   STATUS    RESTARTS   AGE
falcon-7b-instruct-68d7b85f56-vbcsv   1/1     Running   0          8m

Sie können jetzt eine Verbindung mit dem Modell herstellen!

Verbindung mit dem privaten Falcon-7B-Instruct Modell

Jetzt, wo das Modell bereitgestellt ist, können Sie sich mit dem Modell vom Cluster oder von Ihrem lokalen Rechner aus verbinden, indem Sie eine Port-Weiterleitung zum Dienst erstellen:

kubectl port-forward svc/falcon-7b-instruct-service 8080:8080

Um das Modell abzufragen, können Sie direkt die HTTP-API verwenden

curl 127.0.0.1:8081/generate \
    -X POST \
    -d '{"inputs":"Who is James Hetfield?","parameters":{"max_new_tokens":17}}' \
    -H 'Content-Type: application/json'
Response:
{"generated_text":"\nJames Hetfield is a guitarist and singer for the American heavy metal band Metallica"}

Oder Sie verwenden Python (das Beispiel zeigt eine Textklassifizierung / Stimmungsanalyse zum Nulltarif):

from text_generation import Client

client = Client("http://127.0.0.1:8080")

query = """
Answer the question using ONLY the provided context between triple backticks, and if the answer is not contained within the context, answer: "I don't know".
Only focus on the information within the context. Do NOT use any outside information. If the question is not about the context, answer: "I don't know".

Context:
```
I really like the new Metallica 72 Seasons album! I can't wait to hear the next one.
```

Question: What is the sentiment of the text? Answer should be one of the following words: "positive" / "negative" / "unknown".
"""
text = ""
for response in client.generate_stream(query, max_new_tokens=128):
    if not response.token.special:
        text += response.token.text
        print(response.token.text, end="")
print("")

Ergebnis:

> python query.py
Answer: "positive"

Die vollständige Dokumentation der API des Dienstes finden Sie hier.
wichtiger hinweis beim einsatz von falcon llm oder einem anderen sprachenmodell ist es wichtig, die leistungsmerkmale zu verstehen und zu wissen, wie wichtig es ist, geeignete aufforderungen zu erstellen. sprachenmodelle können res

Zusammenfassung


Wenn Sie die Schritte in diesem Blogbeitrag befolgen, können Sie Falcon LLMs(oder andere große OSS-Sprachmodelle) nahtlos innerhalb der sicheren, privaten GKE Autopilot-Cluster. Dieser Ansatz ermöglicht es Ihnen, den Datenschutz und die Kontrolle über Ihre Daten zu bewahren und gleichzeitig die Vorteile einer verwalteten Kubernetes-Umgebung in Bezug auf die Skalierbarkeit zu nutzen .


Die Nutzung der Leistungsfähigkeit von Open-Source-LLMs ermöglicht es Ihnen, zuverlässige, effiziente und datenschutzfreundliche Anwendungen zu entwickeln, die sich die Fähigkeiten modernster Sprachmodelle zunutze machen.

Verfasst von

Marcin Zabłocki

Contact

Let’s discuss how we can support your journey.