۱. مقدمه
نمای کلی
Cloud Run اخیراً پشتیبانی از GPU را اضافه کرده است. این قابلیت به صورت پیشنمایش عمومی در لیست انتظار موجود است. اگر علاقهمند به امتحان کردن این ویژگی هستید، این فرم را پر کنید تا به لیست انتظار بپیوندید. Cloud Run یک پلتفرم کانتینر در Google Cloud است که اجرای کد شما را در یک کانتینر، بدون نیاز به مدیریت یک کلاستر، ساده میکند.
امروزه، پردازندههای گرافیکی که ما ارائه میدهیم، پردازندههای گرافیکی Nvidia L4 با ۲۴ گیگابایت حافظه مجازی هستند. به ازای هر نمونه Cloud Run یک پردازنده گرافیکی وجود دارد و مقیاسبندی خودکار Cloud Run همچنان اعمال میشود. این شامل مقیاسبندی تا ۵ نمونه (با امکان افزایش سهمیه) و همچنین کاهش مقیاس به صفر نمونه در صورت عدم درخواست میشود.
یکی از کاربردهای پردازندههای گرافیکی (GPU) اجرای مدلهای زبان بزرگ (LLM) متنباز خودتان است. این آموزش شما را در پیادهسازی سرویسی که یک LLM را اجرا میکند، راهنمایی میکند.
در این آزمایشگاه کد، شما یک سرویس چند کانتینری را مستقر خواهید کرد که از Open WebUI به عنوان یک کانتینر ورودی frontend استفاده میکند و از Ollama در یک محفظه جانبی برای ارائه یک مدل Gemma 2 2B ذخیره شده در یک سطل ذخیرهسازی ابری گوگل استفاده میکند.
آنچه یاد خواهید گرفت
- نحوه ایجاد یک سرویس چند کانتینری در Cloud Run
- نحوه استقرار Ollama به عنوان یک خودروی جانبی در خدمت مدل Gemma 2 2B
- نحوهی پیادهسازی Open WebUI به عنوان یک کانتینر ورودی frontend
۲. تنظیم متغیرهای محیطی و فعال کردن APIها
ارتقاء رابط خط فرمان gcloud
ابتدا، باید آخرین نسخه از رابط خط فرمان gcloud را نصب کنید. میتوانید با اجرای دستور زیر، رابط خط فرمان را بهروزرسانی کنید:
gcloud components update
متغیرهای محیطی را تنظیم کنید
شما میتوانید متغیرهای محیطی که در سراسر این آزمایشگاه کد استفاده خواهند شد را تنظیم کنید.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
فعال کردن APIها
قبل از اینکه بتوانید از این codelab استفاده کنید، باید چندین API را فعال کنید. این codelab به استفاده از APIهای زیر نیاز دارد. میتوانید با اجرای دستور زیر این APIها را فعال کنید:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
یک دایرکتوری برای این codelab ایجاد کنید.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
۳. یک سطل GCS برای ذخیره مدل Gemma 2 2B ایجاد کنید
ابتدا، Ollama را برای دانلود مدل نصب خواهید کرد. این کار مدل را در /home/$USER/.ollama/models دانلود میکند.
curl -fsSL https://ollama.com/install.sh | sh
حالا با اجرای دستور زیر، اولاما را اجرا کنید.
ollama serve
اولاما شروع به گوش دادن به پورت ۱۱۴۳۴ میکند.
یک پنجره ترمینال دوم باز کنید تا مدل Gemma 2 2B را به پایین بکشید
ollama pull gemma2:2b
(اختیاری) میتوانید با اجرای دستور زیر از طریق خط فرمان با Gemma تعامل داشته باشید.
ollama run gemma2:2b
وقتی چت کردن با جما تمام شد، میتوانید با تایپ کردن عبارت «\» از آن خارج شوید.
/bye
۴. یک سطل ذخیرهسازی ایجاد کنید
اکنون که مدل دانلود شده است، میتوانید آن را به سطل GCS خود منتقل کنید.
ابتدا سطل را ایجاد کنید.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
حالا، پوشه models را به GCS منتقل کنید.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
۵. تصویر اولاما را ایجاد کنید
یک فایل docker با محتوای زیر ایجاد کنید
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
یک مخزن Artifact Registry برای ذخیره تصاویر خدمات خود ایجاد کنید.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
تصویر واگن کناری اولاما را بسازید
gcloud builds submit \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
--machine-type e2-highcpu-32
۶. تصویر رابط کاربری Open WebUI را ایجاد کنید
در این بخش، با استفاده از Open WebUI، کانتینر ورودی frontend را ایجاد خواهید کرد.
از داکر برای دریافت تصویر Open WebUI استفاده کنید.
docker pull ghcr.io/open-webui/open-webui:main
سپس Docker را طوری پیکربندی کنید که از اعتبارنامههای Google Cloud شما برای احراز هویت با Artifact Registry استفاده کند. این به شما امکان میدهد تا از docker برای ارسال یک تصویر به مخزن Artifact Registry استفاده کنید.
gcloud auth configure-docker us-central1-docker.pkg.dev
تصویر خود را برچسبگذاری کنید و سپس آن را به فهرست آثار باستانی (Artifact Registry) منتقل کنید.
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
۷. سرویس چند کانتینری را در Cloud Run مستقر کنید
برای استقرار سرویس چند کانتینری از یک فایل yaml استفاده کنید
یک service.yaml با محتوای زیر ایجاد کنید.
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
service.yaml را بهروزرسانی کنید تا PROJECT_ID را با شناسه پروژه خود جایگزین کنید:
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
با استفاده از دستور زیر، آن را در Cloud Run مستقر کنید.
gcloud beta run services replace service.yaml
سرویس Cloud Run را آزمایش کنید
اکنون آدرس اینترنتی سرویس را در مرورگر وب خود باز کنید.
پس از اتمام بارگذاری رابط کاربری، در قسمت «انتخاب مدل» ، Gemma 2 2B را انتخاب کنید.
حالا از جما یک سوال بپرسید، مثلاً «چرا آسمان آبی است؟»
۸. تبریک میگویم!
تبریک میگویم که آزمایشگاه کد را تمام کردید!
توصیه میکنیم مستندات مربوط به توابع Cloud Run را بررسی کنید.
آنچه ما پوشش دادهایم
- نحوه ایجاد یک سرویس چند کانتینری در Cloud Run
- نحوه استقرار Ollama به عنوان یک خودروی جانبی در خدمت مدل Gemma 2 2B
- نحوهی پیادهسازی Open WebUI به عنوان یک کانتینر ورودی frontend
۹. تمیز کردن
برای جلوگیری از هزینههای ناخواسته، (برای مثال، اگر سرویسهای Cloud Run سهواً بیشتر از تخصیص فراخوانی ماهانه Cloud Run شما در سطح رایگان فراخوانی شوند)، میتوانید Cloud Run یا پروژهای را که در مرحله 2 ایجاد کردهاید، حذف کنید.
برای حذف عملکرد Cloud Run، به کنسول Cloud Run در آدرس https://console.cloud.google.com/run بروید و سرویس ollama-sidecar-codelab را حذف کنید.
اگر تصمیم به حذف کل پروژه دارید، میتوانید به آدرس https://console.cloud.google.com/cloud-resource-manager بروید، پروژهای را که در مرحله ۲ ایجاد کردهاید انتخاب کنید و گزینه Delete را انتخاب کنید. اگر پروژه را حذف کنید، باید پروژهها را در Cloud SDK خود تغییر دهید. میتوانید با اجرای gcloud projects list لیست تمام پروژههای موجود را مشاهده کنید.