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.