1. مقدمة
نظرة عامة
Cloud Run هي منصة حاويات على Google Cloud تسهّل تشغيل الرموز البرمجية في حاوية، بدون الحاجة إلى إدارة مجموعة. أضافت Cloud Run مؤخرًا إمكانية استخدام وحدات معالجة الرسومات.
في الوقت الحالي، وحدات معالجة الرسومات التي نوفّرها هي وحدات معالجة الرسومات Nvidia L4 التي تتضمّن ذاكرة وصول عشوائي للفيديو (vRAM) بسعة 24 غيغابايت. تتوفّر وحدة معالجة رسومات واحدة لكل مثيل من Cloud Run، ويظلّ التوسيع التلقائي لنطاق Cloud Run ساريًا. ويشمل ذلك توسيع النطاق إلى ما يصل إلى 5 مثيلات (مع إمكانية زيادة الحصة)، بالإضافة إلى تقليل النطاق إلى صفر مثيل عندما لا تكون هناك أي طلبات.
أحد استخدامات وحدات معالجة الرسومات هو تشغيل نماذج اللغة الكبيرة (LLM) المفتوحة المصدر. يرشدك هذا البرنامج التعليمي إلى كيفية نشر خدمة تشغّل نموذج لغة كبيرًا.
الخدمة هي خدمة خلفية تشغّل vLLM، وهو محرّك استنتاج لأنظمة الإنتاج. يستخدم هذا الدرس التطبيقي حول الترميز نموذج Gemma 2 من Google المحسَّن بالتعليمات والذي يتضمّن ملياري مَعلمة.
ما ستتعلمه
- كيفية استخدام وحدات معالجة الرسومات على Cloud Run
- كيفية استخدام Hugging Face لاسترداد نموذج
- كيفية نشر نموذج Gemma 2 2b المحسَّن بالتعليمات من Google على Cloud Run باستخدام vLLM كمحرك استنتاج
- كيفية استدعاء خدمة الخلفية لإكمال الجملة
2. الإعداد والمتطلبات
المتطلبات الأساسية
- يجب أن تكون مسجّلاً الدخول إلى Cloud Console.
- سبق لك نشر خدمة Cloud Run. على سبيل المثال، يمكنك اتّباع دليل البدء السريع لنشر خدمة ويب من رمز المصدر للبدء.
- لديك حساب على Hugging Face ووافقت على ترخيص Gemma 2 2b على https://huggingface.co/google/gemma-2-2b-it، وإلا لن تتمكّن من تنزيل النموذج.
- لقد أنشأت رمز دخول يتيح الوصول إلى النموذج google/gemma-2-2b-it.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell
.

إذا كانت هذه هي المرة الأولى التي تبدأ فيها Cloud Shell، ستظهر لك شاشة وسيطة توضّح ماهية هذه الخدمة. إذا ظهرت لك شاشة وسيطة، انقر على متابعة.

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

يتم تحميل هذه الآلة الافتراضية بجميع أدوات التطوير اللازمة. توفّر هذه الخدمة دليلًا منزليًا ثابتًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إكمال معظم العمل في هذا الدرس العملي، إن لم يكن كله، باستخدام متصفح.
بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّ المشروع مضبوط على رقم تعريف مشروعك.
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من إكمال عملية المصادقة:
gcloud auth list
ناتج الأمر
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك:
gcloud config list project
ناتج الأمر
[core] project = <PROJECT_ID>
إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:
gcloud config set project <PROJECT_ID>
ناتج الأمر
Updated property [core/project].
3- تفعيل واجهات برمجة التطبيقات وضبط متغيرات البيئة
تفعيل واجهات برمجة التطبيقات
قبل البدء في استخدام هذا الدرس العملي، عليك تفعيل العديد من واجهات برمجة التطبيقات. يتطلّب هذا الدرس التطبيقي استخدام واجهات برمجة التطبيقات التالية. يمكنك تفعيل واجهات برمجة التطبيقات هذه من خلال تنفيذ الأمر التالي:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
إعداد متغيرات البيئة
يمكنك ضبط متغيّرات البيئة التي سيتم استخدامها في جميع مراحل هذا الدرس البرمجي.
HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN> PROJECT_ID=<YOUR_PROJECT_ID> REGION=europe-west1 SERVICE_NAME=vllm-gemma-2-2b-it AR_REPO_NAME=vllm-gemma-2-2b-it-repo SERVICE_ACCOUNT=vllm-gemma-2-2b-it SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
4. إنشاء حساب خدمة
يُستخدَم حساب الخدمة هذا لإنشاء خدمة Cloud Run والوصول إلى سرّ من Secret Manager.
أولاً، أنشئ حساب الخدمة من خلال تنفيذ الأمر التالي:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secret manager"
ثانيًا، امنح حساب الخدمة دور "مستخدم Vertex AI".
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
الآن، أنشئ سرًا في Secret Manager باسم HF_TOKEN لرمز الدخول إلى Hugging Face. تستخدم Cloud Build حساب الخدمة للوصول إلى هذا المفتاح السري في وقت الإنشاء من أجل تنزيل نموذج Gemma 2 (2B) من Hugging Face. يمكنك الاطّلاع على مزيد من المعلومات حول الأسرار وCloud Build هنا.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
ومنح حساب خدمة الحوسبة التلقائي إذن الوصول إلى سر HF_TOKEN في Secret Manager عند إنشاء الصورة
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
5- إنشاء الصورة في Artifact Registry
أولاً، أنشئ مستودعًا في Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location $REGION
بعد ذلك، أنشئ Dockerfile يتضمّن كلمة المرور السرية من Secret Manager. يمكنك الاطّلاع على مزيد من المعلومات حول علامة Docker buildx –secrets هنا.
FROM vllm/vllm-openai:v0.11.0
ENV HF_HOME=/model-cache
RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \
huggingface-cli download google/gemma-2-2b-it
ENV HF_HUB_OFFLINE=1
ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \
--port ${PORT:-8000} \
--model ${MODEL_NAME:-google/gemma-2-2b-it} \
--gpu-memory-utilization 0.85 \
--max-num-seqs 256 \
--max-model-len 4096
الآن، أنشئ ملف cloudbuild.yaml.
steps:
- name: 'gcr.io/cloud-builders/docker'
id: build
entrypoint: 'bash'
secretEnv: ['HF_TOKEN']
args:
- -c
- |
SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN .
availableSecrets:
secretManager:
- versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest'
env: 'HF_TOKEN'
images: ["${_IMAGE}"]
substitutions:
_IMAGE: '${_LOCATION}-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it'
options:
dynamicSubstitutions: true
machineType: "E2_HIGHCPU_32"
أخيرًا، أرسِل إصدارًا.
gcloud builds submit --config=cloudbuild.yaml --substitutions=_LOCATION=$REGION
يمكن أن تستغرق عملية الإنشاء 8 دقائق تقريبًا.
6. نشر الخدمة
أنت الآن جاهز لنشر الصورة على Cloud Run. سيستغرق النشر حوالي 5 دقائق. عليك زيادة التأخير الأوّلي لفحص السلامة ببضع دقائق لمنح الصورة وقتًا أطول للتحميل. وفي حال عدم توفّرها، ستتلقّى رسالة الخطأ "تجاوز الموعد النهائي" من عملية التحقّق من الصحة.
gcloud beta run deploy $SERVICE_NAME \ --image=$REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 \ --port=8000 \ --gpu-type=nvidia-l4 \ --region $REGION \ --no-allow-unauthenticated \ --max-instances 3 \ --no-cpu-throttling \ --no-gpu-zonal-redundancy \ --startup-probe tcpSocket.port=8000,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240
7. اختبار الخدمة
بعد نشر التطبيق، يمكنك إما استخدام خدمة خادم وكيل Cloud Run المخصّصة للمطوّرين التي تضيف رمز تعريف تلقائيًا، أو يمكنك إرسال طلبات curl إلى عنوان URL الخاص بالخدمة مباشرةً.
استخدام خدمة الخادم الوكيل لتطوير Cloud Run
لاستخدام خدمة Cloud Run dev proxy، يمكنك اتّباع الخطوات التالية:
أولاً، شغِّل الأمر التالي
gcloud run services proxy $SERVICE_NAME --region $REGION
بعد ذلك، أرسِل طلبًا إلى الخدمة باستخدام curl
curl -X POST http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-2-2b-it",
"prompt": "Cloud Run is a",
"max_tokens": 128,
"temperature": 0.90
}'
استخدام عنوان URL الخاص بالخدمة مباشرةً
أولاً، استرجِع عنوان URL للخدمة التي تم نشرها.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
استخدام Curl مع الخدمة
curl -X POST $SERVICE_URL/v1/completions \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-2-2b-it",
"prompt": "Cloud Run is a",
"max_tokens": 128,
"temperature": 0.90
}'
النتائج
من المفترض أن تظهر لك نتائج مشابهة لما يلي:
{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}
8. تهانينا!
تهانينا على إكمال هذا الدرس العملي.
ننصحك بمراجعة مستندات Cloud Run.
المواضيع التي تناولناها
- كيفية استخدام وحدات معالجة الرسومات على Cloud Run
- كيفية استخدام Hugging Face لاسترداد نموذج
- كيفية نشر نموذج Gemma 2 (2B) من Google على Cloud Run باستخدام vLLM كمحرك استنتاج
- كيفية استدعاء خدمة الخلفية لإكمال الجملة
9- تَنظيم
لتجنُّب الرسوم غير المقصودة (على سبيل المثال، إذا تم استدعاء خدمات Cloud Run مرات أكثر من مخصص استدعاء Cloud Run الشهري في الطبقة المجانية)، يمكنك إما حذف Cloud Run أو حذف المشروع الذي أنشأته في الخطوة 2.
لحذف خدمة Cloud Run، انتقِل إلى Cloud Run Cloud Console على الرابط https://console.cloud.google.com/run واحذف الخدمة vllm-gemma-2-2b. يمكنك أيضًا حذف حساب الخدمة vllm-gemma-2-2b.
إذا اخترت حذف المشروع بأكمله، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager، واختيار المشروع الذي أنشأته في الخطوة 2، ثم النقر على "حذف". إذا حذفت المشروع، عليك تغيير المشاريع في Cloud SDK. يمكنك الاطّلاع على قائمة بجميع المشاريع المتاحة من خلال تنفيذ gcloud projects list.