Ollama'yı Cloud Run GPU'ları ve ön uç giriş container'ı olarak Open WebUI ile yardımcı dosya olarak kullanma

1. Giriş

Genel Bakış

Cloud Run'a kısa süre önce GPU desteği eklendi. Bu özellik, bekleme listesine kayıtlı kullanıcılar için herkese açık bir önizleme olarak kullanılabilir. Özelliği denemek istiyorsanız bekleme listesine katılmak için bu formu doldurun. Cloud Run, Google Cloud'daki bir kapsayıcı platformudur. Bu platform, bir küme yönetmenize gerek kalmadan kodunuzu bir kapsayıcıda çalıştırmayı kolaylaştırır.

Bugün kullanıma sunduğumuz GPU'lar, 24 GB vRAM'e sahip Nvidia L4 GPU'lardır. Her Cloud Run örneği için bir GPU vardır ve Cloud Run otomatik ölçeklendirmesi geçerli olmaya devam eder. Bu, 5 taneye kadar ölçeklendirme (kota artışı kullanılabilir) ve istek olmadığında sıfır örneğe ölçeklendirmeyi içerir.

GPU'ların kullanım alanlarından biri, kendi açık büyük dil modellerinizi (LLM) çalıştırmaktır. Bu eğitim, LLM çalıştıran bir hizmetin dağıtımında size yol gösterir.

Bu codelab'de, ön uç giriş kapsayıcısı olarak Open WebUI'yi kullanan ve Google Cloud Storage paketinde depolanan bir Gemma 2 2B modelini sunmak için yan tarafta Ollama kullanan çok kapsayıcılı bir hizmet dağıtacaksınız.

Neler öğreneceksiniz?

  • Cloud Run'da birden fazla kapsayıcı hizmeti oluşturma
  • Ollama'yı Gemma 2 2B modeli sunan bir yan araç olarak dağıtma
  • Open WebUI'yi ön uç giriş container'ı olarak dağıtma

2. Ortam Değişkenlerini Ayarlama ve API'leri Etkinleştirme

gcloud CLI'ı yükseltme

Öncelikle, gcloud CLI'nin en son sürümünü yüklemeniz gerekir. Aşağıdaki komutu çalıştırarak KSA'yı güncelleyebilirsiniz:

gcloud components update

Ortam değişkenlerini ayarlama

Bu codelab'de kullanılacak ortam değişkenlerini ayarlayabilirsiniz.

PROJECT_ID=<YOUR_PROJECT_ID>
REGION=us-central1
gcloud config set project $PROJECT_ID

API'leri etkinleştir

Bu codelab'i kullanmaya başlamadan önce etkinleştirmeniz gereken birkaç API vardır. Bu kod laboratuvarının çalışması için aşağıdaki API'lerin kullanılması gerekir. Bu API'leri şu komutu çalıştırarak etkinleştirebilirsiniz:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    storage.googleapis.com \
    artifactregistry.googleapis.com

Bu codelab için bir dizin oluşturun.

mkdir ollama-sidecar-codelab
cd ollama-sidecar-codelab

3. Gemma 2 2B modelini depolamak için bir GCS Paketi oluşturma

Önce, modeli indirmek için Ollama'yı yükleyeceksiniz. Bu işlem, modeli /home/$USER/.ollama/models dizinine indirir.

curl -fsSL https://ollama.com/install.sh | sh

Şimdi koşarak ollama çalıştırın

ollama serve

Ollama, 11434 numaralı bağlantı noktasında dinlemeye başlar.

Gemma 2 2B modelini aşağı doğru çekmek için ikinci bir terminal penceresi açın.

ollama pull gemma2:2b

(İsteğe bağlı) Aşağıdaki komutu çalıştırarak Gemma ile komut satırından etkileşime geçebilirsiniz:

ollama run gemma2:2b

Gemma ile sohbetiniz bittiğinde

/bye

4. Storage Paketi Oluşturma

Model indirildikten sonra GCS paketinize taşıyabilirsiniz.

Öncelikle paketi oluşturun.

gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab

Şimdi, modeller klasörünü GCS'ye taşıyın.

gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab

5. Ollama görüntüsünü oluşturma

Aşağıdaki içeriklere sahip bir Dockerfile oluşturun

FROM ollama/ollama

# Listen on all interfaces, port 11434
ENV OLLAMA_HOST 0.0.0.0:11434

# Store model weight files in /models
ENV OLLAMA_MODELS /models

# Reduce logging verbosity
ENV OLLAMA_DEBUG false

# Never unload model weights from the GPU
ENV OLLAMA_KEEP_ALIVE -1 

# Store the model weights in the container image
ENV MODEL gemma2:2b
RUN ollama serve & sleep 5 && ollama pull $MODEL 

# Start Ollama
ENTRYPOINT ["ollama", "serve"]

Hizmet resimlerinizi depolamak için bir Artifact Registry deposu oluşturun.

gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
    --location=us-central1 --description="Ollama + OpenWebUI website demo" \
    --project=$PROJECT_ID

Ollama yardımcısı görseli oluşturun

gcloud builds submit \
   --tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
   --machine-type e2-highcpu-32

6. Open WebUI ön uç görüntüsünü oluşturma

Bu bölümde, Open WebUI kullanarak ön uç giriş kapsayıcısını oluşturacaksınız.

Open WebUI resmini indirmek için docker'ı kullanın.

docker pull ghcr.io/open-webui/open-webui:main

Ardından Docker'ı, Artifact Registry ile kimlik doğrulamak için Google Cloud kimlik bilgilerinizi kullanacak şekilde yapılandırın. Bu sayede Docker'ı kullanarak görüntüleri Artifact Registry deposuna aktarabilirsiniz.

gcloud auth configure-docker us-central1-docker.pkg.dev

Görüntünüzü etiketleyip Artifact Registry'ye aktarın.

docker tag ghcr.io/open-webui/open-webui:main us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui

docker push us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui

7. Çoklu container hizmetini Cloud Run'a dağıtma

Çok kapsayıcılı hizmeti dağıtmak için bir YAML dosyası kullanın

Aşağıdaki içeriklerle bir service.yaml oluşturun.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: ollama-sidecar-codelab
  labels:
    cloud.googleapis.com/location: us-central1
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/maxScale: '5'
        run.googleapis.com/cpu-throttling: 'false'
        run.googleapis.com/startup-cpu-boost: 'true'
        run.googleapis.com/container-dependencies: '{"openwebui":["ollama-sidecar"]}'
    spec:
      containerConcurrency: 80
      timeoutSeconds: 300
      containers:
      - name: openwebui
        image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/openwebui
        ports:
        - name: http1
          containerPort: 8080
        env:
        - name: OLLAMA_BASE_URL
          value: http://localhost:11434
        - name: WEBUI_AUTH
          value: 'false'
        resources:
          limits:
            memory: 1Gi
            cpu: 2000m
        volumeMounts:
        - name: in-memory-1
          mountPath: /app/backend/data
        startupProbe:
          timeoutSeconds: 240
          periodSeconds: 240
          failureThreshold: 1
          tcpSocket:
            port: 8080
      - name: ollama-sidecar
        image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/ollama-gemma-2b
        resources:
          limits:
            cpu: '6'
            nvidia.com/gpu: '1'
            memory: 16Gi
        volumeMounts:
        - name: gcs-1
          mountPath: /root/.ollama
        startupProbe:
          timeoutSeconds: 1
          periodSeconds: 10
          failureThreshold: 3
          tcpSocket:
            port: 11434
      volumes:
      - name: gcs-1
        csi:
          driver: gcsfuse.run.googleapis.com
          volumeAttributes:
            bucketName: YOUR_PROJECT_ID-gemma2-2b-codelab
      - name: in-memory-1
        emptyDir:
          medium: Memory
          sizeLimit: 10Gi
      nodeSelector:
        run.googleapis.com/accelerator: nvidia-l4

PROJECT_ID'yi proje kimliğinizle değiştirmek için service.yaml dosyasını güncelleyin:

sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml

Aşağıdaki komutu kullanarak Cloud Run'a dağıtın.

gcloud beta run services replace service.yaml

Cloud Run hizmetini test etme

Ardından, web tarayıcınızda Hizmet URL'sini açın.

Kullanıcı arayüzü yüklendikten sonra Bir model seçin bölümünde Gemma 2 2B'yi seçin.

Şimdi Gemma'ya bir soru sorun, ör. "Gökyüzü neden mavi?"

8. Tebrikler!

Tebrikler, codelab'i tamamladınız.

Cloud Run işlevleri ile ilgili belgeleri incelemenizi öneririz.

Ele aldığımız konular

  • Cloud Run'da birden çok container hizmeti oluşturma
  • Ollama'yı Gemma 2 2B modeli sunan bir yan araç olarak dağıtma
  • Open WebUI'yi ön uç giriş kapsayıcısı olarak dağıtma

9. Temizleme

Yanlışlıkla yapılan ödemeleri önlemek için (örneğin, Cloud Run hizmetleri yanlışlıkla ücretsiz kademede aylık Cloud Run çağrısı tahsisatınızdan daha fazla çağrılırsa) Cloud Run'u veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.

Cloud Run işlevini silmek için https://console.cloud.google.com/run adresinden Cloud Run Cloud Console'a gidip ollama-sidecar-codelab hizmetini silin.

Projenin tamamını silmeyi seçerseniz https://console.cloud.google.com/cloud-resource-manager adresine gidip 2. adımda oluşturduğunuz projeyi seçin ve Sil'i tıklayın. Projeyi silerseniz Cloud SDK'nızdaki projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak mevcut tüm projelerin listesini görüntüleyebilirsiniz.