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 alınmış bir genel önizleme olarak kullanılabilir. Özelliği denemek istiyorsanız bekleme listesine katılmak için bu formu doldurun. Cloud Run, Google Cloud'da bulunan bir container platformudur. Küme yönetmenizi gerektirmeden kodunuzu container'da çalıştırmanızı kolaylaştırır.

Bugün kullanıma sunduğumuz GPU'lar, 24 GB vRAM'e sahip Nvidia L4 GPU'lardır. Cloud Run örneği başına bir GPU vardır ve Cloud Run otomatik ölçeklendirme özelliği geçerliliğini korur. Bu kapsamda, 5 örneğe kadar ölçeklendirme (kota artışı mümkündür) ve istek olmadığında sıfır örneğe kadar ölçeklendirme yer alır.

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

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

Neler öğreneceksiniz?

  • Cloud Run'da birden fazla kapsayıcı içeren hizmet oluşturma
  • Ollama'yı Gemma 2 2B modeline hizmet veren bir yardımcı olarak dağıtma
  • Open WebUI'yı ön uç giriş kapsayıcısı olarak dağıtma

2. Ortam değişkenlerini ayarlama ve API'leri etkinleştirme

gcloud CLI'yı yükseltme

Öncelikle gcloud CLI'nin yeni bir 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 boyunca 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 codelab'de aşağıdaki API'lerin kullanılması gerekir. Bu API'leri aşağıdaki 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şturun

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

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

Şimdi aşağıdaki komutu çalıştırarak ollama'yı çalıştırın:

ollama serve

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

Gemma 2 2B modelini indirmek 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şimde bulunabilirsiniz:

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 --platform=linux/amd64 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

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ı dosya görüntüsünü 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'yı kullanarak ön uç giriş kapsayıcısını oluşturacaksınız.

Open WebUI görüntüsünü çekmek için Docker'ı kullanın.

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

Ardından, Docker'ı Artifact Registry'de kimlik doğrulaması yapmak için Google Cloud kimlik bilgilerinizi kullanacak şekilde yapılandırın. Bu, bir görüntüyü Artifact Registry deposuna aktarmak için Docker'ı kullanmanıza olanak tanır.

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

Resminizi etiketleyin ve Artifact Registry'ye gönderin.

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. Çok container'lı hizmeti Cloud Run'a dağıtma

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

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
        env:
          - name: OLLAMA_MODELS
            value: /root/.ollama/models
        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 yerine proje kimliğinizi yazmak 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

Şimdi hizmet URL'sini web tarayıcınızda açın.

Kullanıcı arayüzü yüklenmeyi tamamladıktan sonra 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!

Codelab'i tamamladığınız için tebrikler.

Cloud Run işlevleriyle ilgili dokümanları incelemenizi öneririz.

İşlediğimiz konular

  • Cloud Run'da birden fazla kapsayıcı içeren hizmet oluşturma
  • Ollama'yı Gemma 2 2B modeline hizmet veren bir yardımcı olarak dağıtma
  • Open WebUI'yı ön uç giriş kapsayıcısı olarak dağıtma

9. Temizleme

Yanlışlıkla ücretlendirilmemek için (örneğin, Cloud Run hizmetleri ücretsiz katmandaki aylık Cloud Run çağırma tahsisinizden daha fazla sayıda çağrılırsa) Cloud Run'ı 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 gidin ve ollama-sidecar-codelab hizmetini silin.

Tüm projeyi silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidebilir, 2. adımda oluşturduğunuz projeyi seçip Sil'i tıklayabilirsiniz. Projeyi silerseniz Cloud SDK'nızda projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak kullanılabilir tüm projelerin listesini görüntüleyebilirsiniz.