In diesem Dokument finden Sie eine detaillierte Anleitung zum Bereitstellen von Open-Weight-Modellen von Google DeepMind, insbesondere der Gemma 4-Familie, mit Ollama in GDC-Umgebungen (Google Distributed Cloud) mit Air Gap. Es wird die Verwendung von Ollama für eine vereinfachte Bereitstellung sowie die Nutzung der Funktionen der GDC-Plattform, einschließlich Kubernetes, Harbor und GPU-Ressourcen, behandelt. Wählen Sie im Abschnitt „Modell“ das Modell und die GPU-Option aus. Alle anderen Schritte sind für alle Modelle gleich.
Unterstützte Modelle
| Modell | Ollama-Tag | Parameter | Lizenz | GPU-Optionen |
|---|---|---|---|---|
| Gemma 4 E2B | gemma4:e2b |
5,1 Mrd. (2 Mrd. effektiv) | Gemma-Nutzungsbedingungen | 1 x beliebige GPU |
| Gemma 4 E4B | gemma4:e4b |
8,0 Mrd. (4 Mrd. effektiv) | Gemma-Nutzungsbedingungen | 1 x beliebige GPU |
| Gemma 4 12B | gemma4:12b |
12 Mrd. (dicht) | Gemma-Nutzungsbedingungen | 1 x beliebige GPU |
| Gemma 4 26B-A4B | gemma4:26b |
25,8 Mrd. insgesamt / 4 Mrd. aktiv (Mixture of Experts) | Gemma-Nutzungsbedingungen | 1 x beliebige GPU |
| Gemma 4 31B | gemma4:31b |
31,3 Mrd. (Dense) | Gemma-Nutzungsbedingungen | 1 x beliebige GPU |
Architektur
Die Lösung umfasst die Bereitstellung von Ollama als containerisiertes Bereitstellungs-Backend (Deployment) in einem Standardcluster. Modellgewichtungen werden auf nichtflüchtigen Volumes gespeichert, die aus lokal heruntergeladenen Dateien gefüllt und mit einem Loader-Pod hochgeladen werden. Ein Kubernetes-Service vom Typ LoadBalancer stellt die Backend-API bereit und NetworkPolicy- / ProjectNetworkPolicy-Objekte sichern den Zugriff darauf.
Hinweis
Führen Sie die Referenzimplementierung für Open-Weight-Modelle mit Ollama auf der Workstation aus und achten Sie darauf, dass Sie Zugriff auf das Verzeichnis ${HOME}/gdcag-solutions haben.
Identity and Access Management
In diesem Leitfaden wird davon ausgegangen, dass Sie die folgenden Rollen für den Standardcluster haben:
- Optional: Standard-Cluster-Administrator (Cluster über die Console ansehen)
- Standard-Cluster-Administrator (
standard-cluster-admin) StandardClusterRoleBindingfür dieStandardClusterRolecluster-admin(erstellt von einem Projekt-IAM-Administrator, siehe Abschnitt Identity and Access Management der Referenzimplementierung)
Workstation
Führen Sie alle Befehle in diesem Leitfaden auf einer Workstation mit den erforderlichen Tools und der erforderlichen Verbindung zur Umgebung und zum Internet aus, sofern in einem Schritt nichts anderes angegeben ist.
Die Umgebungskonfiguration ist mehrschichtig:
${HOME}/gdcag-solutions/env.shlädt die Plattform- und Registry-Einstellungen.${HOME}/gdcag-solutions/open-weight-models/ollama/env.shfügt die Ollama-Einstellungen hinzu.In diesem Nutzerhandbuch werden
env.d/model.sh(das Modell) undenv.d/accelerator.sh(die GPU-Option und die Laufzeiteinstellungen) hinzugefügt, die Sie im Abschnitt „Modell“ schreiben, sowieenv.d/model-common.sh(die daraus abgeleiteten Werte).
Erstellen Sie die Verzeichnisstruktur für das Nutzerhandbuch:
mkdir -p ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.dErstellen Sie die Konfigurationsdatei für die allgemeine Modellumgebung. Es berechnet die Namen und Pfade, die vom Modellnamen abgeleitet werden:
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/model-common.sh && echo "Successfully created." || echo "Failed to create!" # Model (derived from env.d/model.sh) export GDCS_OLLAMA_MODEL_LOWERCASE="${GDCS_OLLAMA_MODEL,,}" export GDCS_OLLAMA_MODEL_KUBERNETES="$(echo "${GDCS_OLLAMA_MODEL_LOWERCASE}" | tr ':' '-')" # Paths export GDCS_OLLAMA_MODEL_DOWNLOAD_DIR="${GDCS_USER_GUIDE_HOME}/models/${GDCS_OLLAMA_MODEL_LOWERCASE}" export GDCS_OLLAMA_PV_MOUNT_PATH="/root/.ollama/models" # Workload export GDCS_WORKLOAD_NAMESPACE="ollama-gemma" export GDCS_WORKLOAD_NAME="${GDCS_OLLAMA_MODEL_KUBERNETES}" export GDCS_MODEL_LOADER_POD_NAME="loader-${GDCS_OLLAMA_MODEL_KUBERNETES}" EOFErstellen Sie die Loader-Datei für die Nutzerhandbuch-Umgebung. Es werden die Root-Umgebung, die Implementierungsumgebung und die Modellumgebung bereitgestellt:
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.sh && echo "Successfully created." || echo "Failed to create!" source "${HOME}/gdcag-solutions/open-weight-models/ollama/env.sh" export GDCS_USER_GUIDE_HOME="${HOME}/gdcag-solutions/open-weight-models/ollama/gemma" echo "GDCS_USER_GUIDE_HOME=${GDCS_USER_GUIDE_HOME}" # Sourced in dependency order: the model selection, the accelerator and runtime settings, then the values derived from them source "${GDCS_USER_GUIDE_HOME}/env.d/model.sh" source "${GDCS_USER_GUIDE_HOME}/env.d/accelerator.sh" source "${GDCS_USER_GUIDE_HOME}/env.d/model-common.sh" EOF
Modell
Auf jedem Tab sind die Modellfakten, der Befehl zum Schreiben der Modellumgebungsdatei env.d/model.sh und verschachtelte Tabs aufgeführt, die die Beschleunigerumgebungsdatei env.d/accelerator.sh für die ausgewählte GPU-Option mit vorausgefüllten Ressourcentypen und Ollama-Einstellungen schreiben. Wenn Sie später Modelle oder GPU-Optionen wechseln möchten, schreiben Sie andere Umgebungsdateien, rufen Sie die Umgebung noch einmal auf und wiederholen Sie den Abschnitt „Implementierung“. Die Arbeitslasten mehrerer Modelle können im selben Namespace nebeneinander ausgeführt werden, da jeder Ressourcenname vom Modellnamen abgeleitet wird.
| GPU | Arbeitsspeicher | Maschinentypen | Beschleuniger-Ressourcentyp |
|---|---|---|---|
| NVIDIA A100 | 40 GB | a2-highgpu-1g-gdc |
nvidia.com/gpu-pod-NVIDIA_A100_PCIE_40GB |
| NVIDIA A100 | 80 GB | a2-ultragpu-1g-gdc, a2-ultragpu-2g-gdc |
nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE |
| NVIDIA H100 | 94 GB | a3-highgpu-1g-gdc (Vorabversion), a3-highgpu-2g-gdc (Vorabversion), a3-highgpu-4g-gdc |
nvidia.com/gpu-pod-NVIDIA_H100_NVL |
| NVIDIA H200 | 141 GB | a3-ultragpu-8g-gdc |
nvidia.com/gpu-pod-NVIDIA_H200 |
| NVIDIA B300 | 288 GB | a4-ultragpu-8g-gdc |
nvidia.com/gpu-pod-NVIDIA_B300_SXM6_AC |
- Erstellen Sie die Modell- und Beschleuniger-Umgebungsdateien für das Modell und die GPU-Option, die Sie bereitstellen möchten.
Gemma 4 E2B
| Attribut | Wert |
|---|---|
| Ollama-Tag | gemma4:e2b |
| Parameter | 5,1 Mrd. (2 Mrd. effektiv) |
| Lizenz | Gemma-Nutzungsbedingungen |
| Gewichtungen | Ollama-Standardquantisierung, ca.4,6 GB |
| Kontextlänge | 128.000 Tokens |
Erstellen Sie die Modellumgebungsdatei:
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/model.sh && echo "Successfully created." || echo "Failed to create!"
# Model: Gemma 4 E2B
export GDCS_OLLAMA_MODEL="gemma4:e2b"
EOF
Erstellen Sie die Umgebungsdatei für den Beschleuniger für Ihre GPU-Option:
NVIDIA A100 40 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 40 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_PCIE_40GB"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="12Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="6Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA A100 80 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 80 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="12Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="6Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H100 94 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H100 94 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H100_NVL"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="12Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="6Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H200 141 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H200 141 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H200"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="12Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="6Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA B300 288 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA B300 288 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_B300_SXM6_AC"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="12Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="6Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
Gemma 4 E4B
| Attribut | Wert |
|---|---|
| Ollama-Tag | gemma4:e4b |
| Parameter | 8,0 Mrd. (4 Mrd. effektiv) |
| Lizenz | Gemma-Nutzungsbedingungen |
| Gewichtungen | Ollama-Standardquantisierung, etwa 6,6 GB |
| Kontextlänge | 128.000 Tokens |
Erstellen Sie die Modellumgebungsdatei:
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/model.sh && echo "Successfully created." || echo "Failed to create!"
# Model: Gemma 4 E4B
export GDCS_OLLAMA_MODEL="gemma4:e4b"
EOF
Erstellen Sie die Umgebungsdatei für den Beschleuniger für Ihre GPU-Option:
NVIDIA A100 40 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 40 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_PCIE_40GB"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA A100 80 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 80 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H100 94 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H100 94 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H100_NVL"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H200 141 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H200 141 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H200"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA B300 288 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA B300 288 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_B300_SXM6_AC"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
Gemma 4 12B
| Attribut | Wert |
|---|---|
| Ollama-Tag | gemma4:12b |
| Parameter | 12 Mrd. (dicht) |
| Lizenz | Gemma-Nutzungsbedingungen |
| Gewichtungen | Ollama-Standardquantisierung, ca.7,7 GB |
| Kontextlänge | 256.000 Tokens |
Erstellen Sie die Modellumgebungsdatei:
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/model.sh && echo "Successfully created." || echo "Failed to create!"
# Model: Gemma 4 12B
export GDCS_OLLAMA_MODEL="gemma4:12b"
EOF
Erstellen Sie die Umgebungsdatei für den Beschleuniger für Ihre GPU-Option:
NVIDIA A100 40 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 40 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_PCIE_40GB"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA A100 80 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 80 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H100 94 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H100 94 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H100_NVL"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H200 141 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H200 141 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H200"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA B300 288 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA B300 288 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_B300_SXM6_AC"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="16Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="8Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
Gemma 4 26B-A4B
| Attribut | Wert |
|---|---|
| Ollama-Tag | gemma4:26b |
| Parameter | 25,8 Mrd. insgesamt / 4 Mrd. aktiv (Mixture of Experts) |
| Lizenz | Gemma-Nutzungsbedingungen |
| Gewichtungen | Ollama-Standardquantisierung, ca. 16 GB |
| Kontextlänge | 256.000 Tokens |
Erstellen Sie die Modellumgebungsdatei:
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/model.sh && echo "Successfully created." || echo "Failed to create!"
# Model: Gemma 4 26B-A4B
export GDCS_OLLAMA_MODEL="gemma4:26b"
EOF
Erstellen Sie die Umgebungsdatei für den Beschleuniger für Ihre GPU-Option:
NVIDIA A100 40 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 40 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_PCIE_40GB"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="32Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="16Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA A100 80 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 80 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="32Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="16Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H100 94 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H100 94 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H100_NVL"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="32Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="16Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H200 141 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H200 141 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H200"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="32Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="16Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA B300 288 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA B300 288 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_B300_SXM6_AC"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="32Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="16Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
Gemma 4 31B
| Attribut | Wert |
|---|---|
| Ollama-Tag | gemma4:31b |
| Parameter | 31,3 Mrd. (Dense) |
| Lizenz | Gemma-Nutzungsbedingungen |
| Gewichtungen | Ollama-Standardquantisierung, ca. 19 GB |
| Kontextlänge | 256.000 Tokens |
Erstellen Sie die Modellumgebungsdatei:
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/model.sh && echo "Successfully created." || echo "Failed to create!"
# Model: Gemma 4 31B
export GDCS_OLLAMA_MODEL="gemma4:31b"
EOF
Erstellen Sie die Umgebungsdatei für den Beschleuniger für Ihre GPU-Option:
NVIDIA A100 40 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 40 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_PCIE_40GB"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="40Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="20Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA A100 80 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA A100 80 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="40Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="20Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H100 94 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H100 94 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H100_NVL"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="40Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="20Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA H200 141 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA H200 141 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_H200"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="40Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="20Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
NVIDIA B300 288 GB
cat << 'EOF' > ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.d/accelerator.sh && echo "Successfully created." || echo "Failed to create!"
# Accelerator: NVIDIA B300 288 GB
export GDCS_WORKLOAD_ACCELERATOR_TYPE="nvidia.com/gpu-pod-NVIDIA_B300_SXM6_AC"
export GDCS_WORKLOAD_ACCELERATOR_COUNT="1"
# Resources
export GDCS_WORKLOAD_CPU_LIMIT="4"
export GDCS_WORKLOAD_CPU_REQUEST="2"
export GDCS_WORKLOAD_MEMORY_LIMIT="40Gi"
export GDCS_WORKLOAD_MEMORY_REQUEST="20Gi"
# Ollama
export GDCS_OLLAMA_NUM_PARALLEL="4"
export GDCS_OLLAMA_TEST_NUM_PREDICT="128"
EOF
Rufen Sie die Umgebungsdatei auf:
source ${HOME}/gdcag-solutions/open-weight-models/ollama/gemma/env.sh
Cluster
Clusteranmeldedaten abrufen:
gdcloud clusters get-credentials "${GDC_STANDARD_CLUSTER_NAME}" \ --project="${GDC_PROJECT}"Prüfen Sie, ob der Beschleuniger-Ressourcentyp der Beschleuniger-Umgebungsdatei im Cluster verfügbar ist:
kubectl get nodes \ -o custom-columns='NAME:.metadata.name,ACCELERATOR:.status.allocatable.'"${GDCS_WORKLOAD_ACCELERATOR_TYPE}"
Implementierung
Namespace
Erstellen Sie den Namespace:
kubectl create namespace "${GDCS_WORKLOAD_NAMESPACE}" \ --dry-run=client \ --output=yaml | kubectl apply -f -Fügen Sie die
imagePullSecrethinzu:kubectl create secret docker-registry "${GDCS_HARBOR_K8S_PULL_SECRET}" \ --dry-run=client \ --from-file=.dockerconfigjson=${GDCS_HARBOR_K8S_DOCKER_CONFIG}/config.json \ --namespace="${GDCS_WORKLOAD_NAMESPACE}" \ --output=yaml | kubectl apply -f -
Modellgewichtungen
Laden Sie die Modellgewichtungen herunter:
${GDCS_IMPLEMENTATION_HOME}/ollama_model_weight_download.shBerechnen Sie die erforderliche
PersistentVolumeClaim-Größe aus den heruntergeladenen Modellgewichtungen mit 25% Overhead (aufgerundet auf das nächste ganze GiB):MODEL_KIB=$(du -sk "${GDCS_OLLAMA_MODEL_DOWNLOAD_DIR}" | awk '{print $1}') export GDCS_MODEL_PVC_SIZE="$(( (MODEL_KIB * 125 / 100 + 1048575) / 1048576 ))Gi" echo "GDCS_MODEL_PVC_SIZE=${GDCS_MODEL_PVC_SIZE}"Erstellen Sie das Manifest für den
PersistentVolumeClaimfür die Modellgewichtungen:cat <<EOF > "${GDCS_USER_GUIDE_HOME}/${GDCS_WORKLOAD_NAME}-pvc.yaml" && echo "Successfully created." || echo "Failed to create!" apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ${GDCS_WORKLOAD_NAME}-rwo namespace: ${GDCS_WORKLOAD_NAMESPACE} spec: accessModes: - ReadWriteOnce resources: requests: storage: ${GDCS_MODEL_PVC_SIZE} EOFWenden Sie das Manifest für den
PersistentVolumeClaimfür die Modellgewichtungen an:kubectl apply --filename="${GDCS_USER_GUIDE_HOME}/${GDCS_WORKLOAD_NAME}-pvc.yaml"Warten Sie, bis die
PersistentVolumeClaimgebunden ist, und geben Sie die Werte aus, die der Infrastrukturbetreiber benötigt, um die I/O-QoS-Richtlinie (Quality of Service) anzupassen:kubectl wait \ --for=jsonpath='{.status.phase}'=Bound \ "pvc/${GDCS_WORKLOAD_NAME}-rwo" \ --namespace="${GDCS_WORKLOAD_NAMESPACE}" \ --timeout=120s BACKING_PVC=$(kubectl get pvc "${GDCS_WORKLOAD_NAME}-rwo" \ --namespace="${GDCS_WORKLOAD_NAMESPACE}" \ --output=jsonpath='{.spec.volumeName}') echo "BACKING_PVC=${BACKING_PVC} ORG=${GDC_ORG}"Wenn
performance-rwoin Ihrem Cluster nicht verfügbar ist, bitten Sie Ihren Infrastrukturoperator, die Hochleistungs-QoS-Richtlinie (system-performance-<ORG>-admin, 30 IOPS pro GiB mit einem Mindestwert von 6.148 IOPS) auf das Volume anzuwenden, das denPersistentVolumeClaimunterstützt. Geben Sie die Werte fürBACKING_PVCundORGan, die im vorherigen Schritt ausgegeben wurden. Der Infrastrukturbetreiber wendet die Richtlinie wie in FILE-R0097 beschrieben an. Sie wird auf das Live-Volume angewendet, sodass Sie mit den nächsten Schritten fortfahren können.Erstellen Sie das Manifest für den Modell-Loader
Pod:cat <<EOF > "${GDCS_USER_GUIDE_HOME}/${GDCS_WORKLOAD_NAME}-loader.yaml" && echo "Successfully created." || echo "Failed to create!" apiVersion: v1 kind: Pod metadata: name: ${GDCS_MODEL_LOADER_POD_NAME} namespace: ${GDCS_WORKLOAD_NAMESPACE} spec: containers: - command: ["/bin/sh", "-c", "trap 'exit 0' TERM; while :; do sleep 1; done"] image: ${GDCS_HARBOR_PROJECT_URI}/busybox/busybox:${GDCS_BUSYBOX_IMAGE_TAG} imagePullPolicy: IfNotPresent name: loader volumeMounts: - mountPath: ${GDCS_OLLAMA_PV_MOUNT_PATH} name: model-cache imagePullSecrets: - name: ${GDCS_HARBOR_K8S_PULL_SECRET} restartPolicy: Never volumes: - name: model-cache persistentVolumeClaim: claimName: ${GDCS_WORKLOAD_NAME}-rwo EOFWenden Sie das Manifest für den Modell-Loader
Podan:kubectl apply --filename="${GDCS_USER_GUIDE_HOME}/${GDCS_WORKLOAD_NAME}-loader.yaml"Warten Sie, bis der Modell-Loader
Podausgeführt wird:kubectl wait \ --for=jsonpath='{.status.phase}'=Running \ "pod/${GDCS_MODEL_LOADER_POD_NAME}" \ --namespace="${GDCS_WORKLOAD_NAMESPACE}" \ --timeout=120sLaden Sie die Modellgewichtungen hoch:
${GDCS_IMPLEMENTATION_HOME}/model_weight_upload.sh \ --local-dir="${GDCS_OLLAMA_MODEL_DOWNLOAD_DIR}" \ --pod="${GDCS_MODEL_LOADER_POD_NAME}" \ --target-dir="${GDCS_OLLAMA_PV_MOUNT_PATH}"Löschen Sie den Modell-Loader
Pod:kubectl delete pod "${GDCS_MODEL_LOADER_POD_NAME}" \ --namespace="${GDCS_WORKLOAD_NAMESPACE}"
Inferenzserver
Erstellen Sie das Manifest für das Ollama-
Deployment:cat <<EOF > "${GDCS_USER_GUIDE_HOME}/${GDCS_WORKLOAD_NAME}-deployment.yaml" && echo "Successfully created." || echo "Failed to create!" apiVersion: v1 kind: ConfigMap metadata: name: ${GDCS_WORKLOAD_NAME} data: OLLAMA_FLASH_ATTENTION: "1" OLLAMA_HOST: "0.0.0.0" OLLAMA_KEEP_ALIVE: "-1" OLLAMA_MODELS: "${GDCS_OLLAMA_PV_MOUNT_PATH}" OLLAMA_NUM_PARALLEL: "${GDCS_OLLAMA_NUM_PARALLEL}" OLLAMA_ORIGINS: "*" --- apiVersion: apps/v1 kind: Deployment metadata: name: ${GDCS_WORKLOAD_NAME} labels: app: ${GDCS_WORKLOAD_NAME} spec: replicas: 1 selector: matchLabels: app: ${GDCS_WORKLOAD_NAME} strategy: type: Recreate template: metadata: labels: app: ${GDCS_WORKLOAD_NAME} spec: containers: - envFrom: - configMapRef: name: ${GDCS_WORKLOAD_NAME} image: ${GDCS_HARBOR_PROJECT_URI}/ollama/ollama:${GDCS_OLLAMA_IMAGE_TAG} imagePullPolicy: IfNotPresent lifecycle: postStart: exec: command: - /bin/sh - -c - | echo "Waiting for local API to respond..." timeout=60 until /bin/ollama list > /dev/null 2>&1 || [ "\$timeout" -le 0 ]; do sleep 1 timeout=\$((timeout - 1)) done if [ "\$timeout" -le 0 ]; then echo "Timed out waiting for Ollama server to start." >&2 exit 1 fi echo "Preloading model into memory..." /bin/ollama run "${GDCS_OLLAMA_MODEL}" "" livenessProbe: failureThreshold: 3 httpGet: path: / port: 11434 periodSeconds: 30 timeoutSeconds: 10 name: ollama ports: - containerPort: 11434 name: http-ollama readinessProbe: failureThreshold: 3 httpGet: path: /api/tags port: 11434 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 5 resources: limits: cpu: ${GDCS_WORKLOAD_CPU_LIMIT} memory: ${GDCS_WORKLOAD_MEMORY_LIMIT} ${GDCS_WORKLOAD_ACCELERATOR_TYPE}: "${GDCS_WORKLOAD_ACCELERATOR_COUNT}" requests: cpu: ${GDCS_WORKLOAD_CPU_REQUEST} memory: ${GDCS_WORKLOAD_MEMORY_REQUEST} ${GDCS_WORKLOAD_ACCELERATOR_TYPE}: "${GDCS_WORKLOAD_ACCELERATOR_COUNT}" securityContext: allowPrivilegeEscalation: false seLinuxOptions: type: spc_t startupProbe: failureThreshold: 60 httpGet: path: / port: 11434 periodSeconds: 10 timeoutSeconds: 5 volumeMounts: - mountPath: ${GDCS_OLLAMA_PV_MOUNT_PATH} name: model-cache - mountPath: /dev/shm name: shm imagePullSecrets: - name: ${GDCS_HARBOR_K8S_PULL_SECRET} volumes: - name: model-cache persistentVolumeClaim: claimName: ${GDCS_WORKLOAD_NAME}-rwo - emptyDir: medium: Memory sizeLimit: "8Gi" name: shm --- apiVersion: v1 kind: Service metadata: name: ${GDCS_WORKLOAD_NAME} spec: ports: - name: http-ollama port: 80 protocol: TCP targetPort: 11434 selector: app: ${GDCS_WORKLOAD_NAME} type: LoadBalancer EOFWenden Sie das Manifest für den Ollama-
Deploymentan:kubectl apply --filename="${GDCS_USER_GUIDE_HOME}/${GDCS_WORKLOAD_NAME}-deployment.yaml" --namespace="${GDCS_WORKLOAD_NAMESPACE}"Erstellen Sie das Manifest für das Ollama-
NetworkPolicy:cat <<EOF > "${GDCS_USER_GUIDE_HOME}/ollama-netpol.yaml" && echo "Successfully created." || echo "Failed to create!" apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-ollama-ingress namespace: ${GDCS_WORKLOAD_NAMESPACE} spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 - namespaceSelector: {} ports: - port: 11434 protocol: TCP podSelector: {} policyTypes: - Ingress EOFWenden Sie das Manifest für den Ollama-
NetworkPolicyan:kubectl apply --filename="${GDCS_USER_GUIDE_HOME}/ollama-netpol.yaml"Warten Sie, bis der
Podausgeführt wird:kubectl wait \ --for=jsonpath='{.status.phase}'=Running \ "pod" \ --selector="app=${GDCS_WORKLOAD_NAME}" \ --namespace="${GDCS_WORKLOAD_NAMESPACE}" \ --timeout=300sWarten Sie, bis der
Deploymentbereit ist:kubectl wait \ --for=condition=Available \ "deployment/${GDCS_WORKLOAD_NAME}" \ --namespace="${GDCS_WORKLOAD_NAMESPACE}" \ --timeout=600sOptional: Streamen Sie die Containerlogs, um den Startfortschritt zu überwachen:
kubectl logs deployment/${GDCS_WORKLOAD_NAME} \ --follow \ --namespace="${GDCS_WORKLOAD_NAMESPACE}"
Validierung
Rufen Sie die LoadBalancer-IP-Adresse für Ollama ab:
export OLLAMA_LB_IP=$(kubectl get service/${GDCS_WORKLOAD_NAME} --namespace="${GDCS_WORKLOAD_NAMESPACE}" --output=jsonpath='{.status.loadBalancer.ingress[*].ip}') echo "OLLAMA_LB_IP=${OLLAMA_LB_IP}"Senden Sie eine Testanfrage an Ollama über den Load Balancer (Ollama API, Textgenerierung):
curl http://${OLLAMA_LB_IP}/api/generate \ -H "Content-Type: application/json" \ -d '{ "model": "'${GDCS_OLLAMA_MODEL}'", "prompt": "Explain Google Distributed Cloud air-gapped briefly.", "stream": false }'Senden Sie eine Streaming-Testanfrage:
curl http://${OLLAMA_LB_IP}/api/generate \ -H "Content-Type: application/json" \ -d '{ "model": "'${GDCS_OLLAMA_MODEL}'", "prompt": "Explain Google Distributed Cloud air-gapped briefly.", "stream": true }'Senden Sie eine Testanfrage an die OpenAI-kompatible API von Ollama über den Load Balancer:
curl http://${OLLAMA_LB_IP}/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "'${GDCS_OLLAMA_MODEL}'", "messages": [ {"role": "user", "content": "Explain Google Distributed Cloud air-gapped briefly."} ] }'Senden Sie eine Testanfrage an Ollama mithilfe der Portweiterleitung:
kubectl port-forward service/${GDCS_WORKLOAD_NAME} \ --namespace="${GDCS_WORKLOAD_NAMESPACE}" 11434:80 & PF_PID=$! sleep 1 curl http://127.0.0.1:11434/api/tags kill ${PF_PID}