1. مقدمه
نمای کلی
Cloud Run اخیراً پشتیبانی GPU را اضافه کرده است. به عنوان پیشنمایش عمومی فهرست انتظار در دسترس است. اگر میخواهید این ویژگی را امتحان کنید، این فرم را پر کنید تا به لیست انتظار بپیوندید. Cloud Run یک پلتفرم کانتینری در Google Cloud است که اجرای کد خود را در یک کانتینر ساده می کند، بدون اینکه نیازی به مدیریت یک کلاستر باشد.
امروزه، پردازندههای گرافیکی که ما در دسترس قرار میدهیم، پردازندههای گرافیکی Nvidia L4 با 24 گیگابایت VRAM هستند. هر نمونه Cloud Run یک GPU وجود دارد و مقیاس خودکار Cloud Run همچنان اعمال میشود. این شامل کاهش تا 5 نمونه (با افزایش سهمیه در دسترس)، و همچنین کاهش مقیاس به صفر در صورت عدم وجود درخواست است.
یکی از موارد استفاده برای پردازندههای گرافیکی، اجرای مدلهای زبان بزرگ باز (LLM) شماست. این آموزش شما را از طریق استقرار سرویسی که یک LLM را اجرا می کند راهنمایی می کند.
در این لبه کد، شما یک سرویس چند کانتینری را مستقر خواهید کرد که از Open WebUI به عنوان یک محفظه ورودی frontend استفاده می کند و از Ollama در یک سایدکار برای ارائه یک مدل Gemma 2 2B ذخیره شده در یک سطل Google Cloud Storage استفاده می کند.
چیزی که یاد خواهید گرفت
- نحوه ایجاد یک سرویس چند کانتینری در Cloud Run
- نحوه استقرار اولاما به عنوان یک خودروی جانبی در خدمت مدل Gemma 2 2B
- نحوه استقرار Open WebUI به عنوان یک کانتینر ورودی frontend
2. متغیرهای محیط را تنظیم کرده و API ها را فعال کنید
gcloud CLI را ارتقا دهید
ابتدا باید یک نسخه جدید از gcloud CLI را نصب کنید. با اجرای دستور زیر می توانید CLI را به روز کنید:
gcloud components update
تنظیم متغیرهای محیطی
می توانید متغیرهای محیطی را تنظیم کنید که در سراسر این کد لبه مورد استفاده قرار می گیرند.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
API ها را فعال کنید
قبل از اینکه بتوانید از این کد لبه استفاده کنید، چندین API وجود دارد که باید آنها را فعال کنید. این آزمایشگاه کد نیاز به استفاده از API های زیر دارد. با اجرای دستور زیر می توانید آن API ها را فعال کنید:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com
یک دایرکتوری برای این کد لبه ایجاد کنید.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. یک سطل GCS برای ذخیره مدل Gemma 2 2B ایجاد کنید
ابتدا اوللاما را برای دانلود مدل نصب خواهید کرد. این مدل را در /home/$USER/.ollama/models دانلود می کند
curl -fsSL https://ollama.com/install.sh | sh
حالا اولاما را با دویدن اجرا کنید
ollama serve
اولاما شروع به گوش دادن در پورت 11434 می کند.
یک پنجره ترمینال دوم را باز کنید تا مدل Gemma 2 2B را پایین بکشید
ollama pull gemma2:2b
(اختیاری) می توانید با اجرا کردن از خط فرمان با Gemma تعامل داشته باشید
ollama run gemma2:2b
پس از اتمام چت با Gemma، می توانید با تایپ کردن خارج شوید
/bye
4. یک Storage Bucket ایجاد کنید
اکنون که مدل دانلود شده است، می توانید مدل را به سطل GCS خود منتقل کنید.
ابتدا سطل را ایجاد کنید.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
اکنون پوشه مدل ها را به GCS منتقل کنید.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. تصویر اوللاما را ایجاد کنید
یک dockerfile با محتویات زیر ایجاد کنید
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"]
یک مخزن رجیستری مصنوع برای ذخیره تصاویر سرویس خود ایجاد کنید.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
تصویر olama sidecar را بسازید
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 frontend را ایجاد کنید
در این بخش، کانتینر ورودی frontend را با استفاده از Open WebUI ایجاد خواهید کرد.
از داکر برای پایین کشیدن تصویر Open WebUI استفاده کنید.
docker pull ghcr.io/open-webui/open-webui:main
سپس Docker را پیکربندی کنید تا از اعتبارنامه Google Cloud شما برای احراز هویت با Artifact Registry استفاده کند. این به شما امکان می دهد از docker برای ارسال یک تصویر به مخزن رجیستری Artifact استفاده کنید.
gcloud auth configure-docker us-central1-docker.pkg.dev
تصویر خود را تگ کنید و سپس به رجیستری Artifact فشار دهید.
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. سرویس چند کانتینر را در 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 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
سرویس.yaml را بهروزرسانی کنید تا ID پروژه خود را جایگزین PROJECT_ID کنید:
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
با استفاده از دستور زیر در Cloud Run مستقر شوید.
gcloud beta run services replace service.yaml
سرویس Cloud Run را تست کنید
اکنون URL Service را در مرورگر وب خود باز کنید.
پس از بارگیری رابط کاربری، در قسمت Select a model ، Gemma 2 2B را انتخاب کنید.
حالا یک سوال از جما بپرسید، به عنوان مثال "چرا آسمان آبی است؟"
8. تبریک می گویم!
برای تکمیل کد لبه تبریک می گویم!
توصیه می کنیم اسناد مربوط به عملکردهای Cloud Run را مرور کنید
آنچه را پوشش داده ایم
- نحوه ایجاد یک سرویس چند کانتینری در Cloud Run
- نحوه استقرار اولاما به عنوان یک خودروی جانبی در خدمت مدل Gemma 2 2B
- نحوه استقرار Open WebUI به عنوان یک کانتینر ورودی frontend
9. پاکسازی کنید
برای جلوگیری از هزینههای غیرعمدی، (به عنوان مثال، اگر سرویسهای Cloud Run به طور ناخواسته بیشتر از تخصیص فراخوانی ماهانه Cloud Run در ردیف رایگان فراخوانی میشوند)، میتوانید Cloud Run را حذف کنید یا پروژهای را که در مرحله 2 ایجاد کردهاید حذف کنید.
برای حذف عملکرد Cloud Run، به کنسول Cloud Run Cloud در https://console.cloud.google.com/run بروید و سرویس ollama-sidecar-codelab
را حذف کنید.
اگر تصمیم به حذف کل پروژه دارید، میتوانید به https://console.cloud.google.com/cloud-resource-manager بروید، پروژهای را که در مرحله ۲ ایجاد کردهاید انتخاب کنید و حذف را انتخاب کنید. اگر پروژه را حذف کنید، باید پروژه ها را در Cloud SDK خود تغییر دهید. با اجرای gcloud projects list
می توانید لیست تمام پروژه های موجود را مشاهده کنید.