1. مقدمة
نظرة عامة
أضافت خدمة Cloud Run مؤخرًا إمكانية استخدام وحدات معالجة الرسومات. وهي متاحة كمعاينة عامة ضمن قائمة الانتظار. إذا كنت مهتمًا بتجربة الميزة، يُرجى ملء هذا النموذج للانضمام إلى قائمة الانتظار. Cloud Run هي منصة حاويات على Google Cloud تسهّل تشغيل الرمز البرمجي في حاوية بدون الحاجة إلى إدارة مجموعة.
في الوقت الحالي، وحدات معالجة الرسومات التي نوفّرها هي وحدات معالجة رسومات Nvidia L4 بسعة 24 غيغابايت من ذاكرة الوصول العشوائي للفيديو (vRAM). تتوفّر وحدة معالجة رسومات واحدة لكل مثيل من 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=us-central1 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=-
ومنح حساب خدمة Compute التلقائي إذن الوصول إلى سر 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 us-central1
بعد ذلك، أنشئ Dockerfile
يتضمّن كلمة المرور السرية من Secret Manager. يمكنك الاطّلاع على مزيد من المعلومات حول علامة Docker buildx –secrets هنا.
FROM vllm/vllm-openai:latest 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} \ ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
الآن، أنشئ ملف 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: 'us-central1-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
يمكن أن تستغرق عملية الإنشاء 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 us-central1
بعد ذلك، أرسِل طلبًا إلى الخدمة باستخدام 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 the service
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
.