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.