Dengan GPU NVIDIA tingkat perusahaan yang disertakan dalam SKU yang Dioptimalkan untuk AI GDC Sandbox, Anda dapat mengembangkan dan menguji aplikasi inferensi dan pelatihan AI yang berat, seperti AI generatif.
Gemma adalah Model Bahasa Besar ringan yang didasarkan pada teknologi Gemini. Panduan tutorial ini menunjukkan cara men-deploy Gemma dengan Ollama dan Open-WebUI di Sandbox GDC dan memiliki tujuan berikut.
- Deploy Ollama dengan model Gemma di Sandbox GDC yang Dioptimalkan untuk AI dengan GPU.
- Kirim perintah ke layanan Ollama di endpoint pribadinya melalui antarmuka Open-WebUI.
Sebelum memulai
GPU di GDC Sandbox disertakan dalam cluster org-infra.
Untuk menjalankan perintah terhadap cluster infrastruktur org, pastikan Anda memiliki kubeconfig cluster
org-1-infra
, seperti yang dijelaskan dalam Bekerja dengan cluster:- Mengonfigurasi dan melakukan autentikasi dengan command line
gdcloud
, dan - buat file kubeconfig untuk cluster infrastruktur org, dan
tetapkan jalurnya ke variabel lingkungan
KUBECONFIG
.
- Mengonfigurasi dan melakukan autentikasi dengan command line
Pastikan pengguna memiliki peran
sandbox-gpu-admin
yang ditetapkan untuk projectsandbox-gpu-project
. Secara default, peran ditetapkan kepada penggunaplatform-admin
. Anda dapat menetapkan peran kepada pengguna lain dengan login sebagaiplatform-admin
dan menjalankan perintah berikut:kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \ --user=${USER} --namespace=sandbox-gpu-project
Pastikan untuk menyiapkan repositori Artifact Registry seperti yang dijelaskan dalam Menggunakan Artifact Registry dan login agar dapat mengirim dan menarik image ke registry artefak.
Men-deploy model Gemma dengan Ollama dan Open-WebUI
Deployment diatur melalui serangkaian file konfigurasi Kubernetes (manifest YAML), yang masing-masing menentukan komponen atau layanan tertentu.
Buat Dockerfile dengan Gemma yang telah didownload sebelumnya.
FROM ubuntu # Install Ollama # This uses Ollamas official installation script, which adds Ollama to /usr/local/bin RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates RUN curl -fsSL https://ollama.com/install.sh -o install.sh RUN chmod +x install.sh RUN ./install.sh && \ rm -rf /var/lib/apt/lists/* # Set environment variables for Ollama (optional, but good practice) ENV OLLAMA_HOST="0.0.0.0" # ENV OLLAMA_MODELS="/usr/local/ollama/models" # Default is /root/.ollama # If you want to customize the model storage path within the container, set OLLAMA_MODELS # and then ensure you create and populate that directory. Default is usually fine for pre-downloaded. # --- Predownload Gemma Model --- # This step starts Ollama server in the background, pulls the model, # and then kills the server to allow the Docker build to continue. # This approach works around Docker''s RUN command limitations for services. RUN ollama serve & \ sleep 5 && \ # Give the Ollama server a moment to start up # Use --retry and --retry-connrefused to handle startup delays curl --retry 10 --retry-connrefused -s http://localhost:11434 || true && \ echo "Attempting to pull gemma:7b..." && \ ollama pull gemma:7b && \ echo "Model pull complete. Cleaning up background Ollama process." && \ pkill ollama || true # Gracefully kill the ollama serve process # Expose Ollama's default port EXPOSE 11434 # Command to run Ollama server when the container starts CMD ["ollama", "serve"]
Bangun image Docker dan upload ke repositori Artifact Registry.
docker build -t ollama-gemma . docker tag ollama-gemma REGISTRY_REPOSITORY_URL/ollama-gemma:latest docker push REGISTRY_REPOSITORY_URL/ollama-gemma:latest
Ganti kode berikut:
REGISTRY_REPOSITORY_URL
dengan URL repositori.
Buat secret untuk menyimpan kredensial Docker.
export SECRET=DOCKER_REGISTRY_SECRET export DOCKER_TEST_CONFIG=~/.docker/config.json kubectl --kubeconfig ${KUBECONFIG}$ create secret docker-registry ${SECRET} --from-file=.dockerconfigjson=${DOCKER_TEST_CONFIG} -n sandbox-gpu-project
Ganti kode berikut:
DOCKER_REGISTRY_SECRET
nama secret.
Buat file
ollama-deployment.yaml
untuk menentukan deployment mesin AI Ollama:Deployment server Ollama meminta satu GPU.
apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "9" name: ollama namespace: sandbox-gpu-project spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: ollama strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: ollama egress.networking.gke.io/enabled: "true" spec: containers: - name: ollama image: REGISTRY_REPOSITORY_URL/ollama-gemma:latest imagePullPolicy: Always ports: - containerPort: 11434 protocol: TCP resources: limits: nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: "1" requests: nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: "1" env: - name: OLLAMA_HOST value: 0.0.0.0 - name: OLLAMA_ORIGINS value: http://localhost:8080,http://ollama-webui.ollama-llm.svc.cluster.local:8080,http://ollama-webui:8080 securityContext: seLinuxOptions: type: unconfined_t terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullSecrets: - name: DOCKER_REGISTRY_SECRET dnsConfig: nameservers: - 8.8.8.8 dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler terminationGracePeriodSeconds: 30
Ganti kode berikut:
REGISTRY_REPOSITORY_URL
: URL repositori.DOCKER_REGISTRY_SECRET
: nama secret.
Buat file
ollama-service.yaml
untuk mengekspos server Ollama secara internal.apiVersion: v1 kind: Service metadata: name: ollama namespace: sandbox-gpu-project annotations: metallb.universe.tf/ip-allocated-from-pool: lb-address-pool-0-ptleg spec: type: LoadBalancer selector: app: ollama ports: - port: 11434 nodePort: 30450 ipFamilyPolicy: SingleStack ipFamilies: - IPv4 clusterIPs: - 10.1.122.216 clusterIP: 10.1.122.216
Terapkan manifes
kubectl --kubeconfig ${KUBECONFIG} apply -f ollama-deployment.yaml kubectl --kubeconfig ${KUBECONFIG} apply -f ollama-service.yaml
Pastikan pod ollama sedang berjalan.
kubectl --kubeconfig ${KUBECONFIG} get deployments -n sandbox-gpu-project kubectl --kubeconfig ${KUBECONFIG} get service -n sandbox-gpu-project
Catat IP Eksternal layanan Ollama
OLLAMA_BASE_END_POINT
dari outputkubectl --kubeconfig ${KUBECONFIG} get service ollama \ -n sandbox-gpu-project -o jsonpath='{.status.loadBalancer.ingress[*].ip}'
Buat file
openweb-ui-deployment.yaml
untuk men-deploy Antarmuka Open-WebUI.apiVersion: apps/v1 kind: Deployment metadata: name: ollama-webui namespace: sandbox-gpu-project labels: app: ollama-webui annotations: deployment.kubernetes.io/revision: "5" spec: replicas: 1 selector: matchLabels: app: ollama-webui strategy: type: RollingUpdate rollingUpdate: maxSurge: 25% maxUnavailable: 25% progressDeadlineSeconds: 600 revisionHistoryLimit: 10 template: metadata: labels: app: ollama-webui creationTimestamp: null spec: containers: - name: ollama-webui image: ghcr.io/open-webui/open-webui:main imagePullPolicy: IfNotPresent ports: - name: http containerPort: 8080 protocol: TCP env: - name: OLLAMA_BASE_URL value: OLLAMA_BASE_END_POINT - name: PORT value: "8080" terminationMessagePath: /dev/termination-log terminationMessagePolicy: File restartPolicy: Always dnsPolicy: ClusterFirst schedulerName: default-scheduler terminationGracePeriodSeconds: 30
Ganti kode berikut:
OLLAMA_BASE_END_POINT
: alamat IP eksternal layanan Ollama.
Buat file
ollama-webui-service.yaml
untuk mengekspos antarmuka webui terbuka secara eksternal.apiVersion: v1 kind: Service metadata: name: ollama-webui namespace: sandbox-gpu-project annotations: metallb.universe.tf/ip-allocated-from-pool: lb-address-pool-0-ptleg spec: type: LoadBalancer ipFamilyPolicy: SingleStack ipFamilies: - IPv4 clusterIPs: - 10.1.104.52 clusterIP: 10.1.104.52 ports: - port: 80 targetPort: 8080 nodePort: 32351 selector: app: ollama-webui
Terapkan manifes
openweb-ui-deployment.yaml
danollama-webui-service.yaml
` ke cluster.kubectl --kubeconfig ${KUBECONFIG} apply -f openweb-ui-deployment.yaml kubectl --kubeconfig ${KUBECONFIG} apply -f ollama-webui-service.yaml
Buat Kebijakan Jaringan Project untuk mengizinkan traffic masuk dari alamat IP eksternal.
kubectl --kubeconfig ${KUBECONFIG} apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: sandbox-gpu-project name: allow-inbound-traffic-from-external spec: policyType: Ingress subject: subjectType: UserWorkload ingress: - from: - ipBlock: cidr: 0.0.0.0/0 EOF
Identifikasi IP eksternal layanan Ollama dengan menjalankan perintah berikut. Catat untuk digunakan pada langkah selanjutnya, di mana Anda akan mengganti nilai ini dengan
OPEN_WEB_UI_ENDPOINT
.kubectl --kubeconfig ${KUBECONFIG} get service -n sandbox-gpu-project
Buka Google Chrome dan masukkan URL menggunakan alamat IP eksternal yang Anda temukan di langkah sebelumnya. Anda kini dapat berinteraksi dengan model Gemma melalui antarmuka Open Web UI.
http://OPEN_WEB_UI_ENDPOINT/