طريقة تنفيذ الاستنتاج المستنِد إلى النماذج اللغوية الكبيرة (LLM) على وحدات معالجة الرسومات في السحابة الإلكترونية باستخدام vLLM وOpenAI Python SDK

1. مقدمة

نظرة عامة

تمت إضافة دعم وحدة معالجة الرسومات في Cloud Run مؤخرًا. ويتوفّر المنتج كنسخة حصرية متاحة للجميع في قائمة الانتظار. إذا أردت تجربة هذه الميزة، يُرجى ملء هذا النموذج للانضمام إلى قائمة الانتظار. Cloud Run هو نظام أساسي للحاويات في Google Cloud، ما يسهِّل تشغيل الرمز في حاوية بدون الحاجة إلى إدارة مجموعة.

وفي الوقت الحالي، نجد أن وحدات معالجة الرسومات التي نوفّرها هي وحدات معالجة الرسومات من فئة Nvidia L4 المزوّدة بذاكرة وصول عشوائي (vRAM) بسعة 24 غيغابايت. هناك وحدة معالجة رسومات واحدة لكل مثيل في Cloud Run، ولا يزال المقياس التلقائي في Cloud Run مطبّقًا. ويشمل ذلك التوسّع بما يصل إلى 5 حالات (مع إتاحة زيادة في الحصة)، بالإضافة إلى التخفيض إلى صفر من الحالات عند عدم تقديم طلبات.

إحدى حالات استخدام وحدات معالجة الرسومات هي تشغيل النماذج اللغوية الكبيرة المفتوحة (LLM). يُطلعك هذا الدليل التوجيهي على خطوات تفعيل خدمة تعمل على تشغيل نموذج لغوي كبير.

هذه الخدمة عبارة عن خدمة خلفية تشغِّل vLLM، وهو محرّك استنتاج لأنظمة الإنتاج. يستخدم هذا الدرس التطبيقي حول الترميز نموذج Gemma 2 من Google الذي يتضمّن مليارَي مَعلمة نموذجًا مضبوطًا حسب التعليمات.

المعلومات التي ستطّلع عليها

  • كيفية استخدام وحدات معالجة الرسومات على السحابة الإلكترونية.
  • طريقة استخدام وجه معانق لاسترداد نموذج
  • كيفية نشر نموذج 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

  1. من Cloud Console، انقر على تفعيل Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

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

d95252b003979716.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.

7833d5e1c5d18f54.png

يتم تحميل هذا الجهاز الافتراضي مع جميع أدوات التطوير اللازمة. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح.

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

  1. شغِّل الأمر التالي في 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`
  1. شغّل الأمر التالي في 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 والوصول إلى أحد المفاتيح السرّية من خلال "المدير السري".

أولاً، أنشئ حساب الخدمة من خلال تنفيذ الأمر التالي:

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run vllm SA to access secrete 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 Access Token. تستخدم Cloud Build حساب الخدمة للوصول إلى هذا السر في وقت الإصدار لسحب نموذج Gemma 2 (2B) من Hugging Face. يمكنك معرفة المزيد من المعلومات عن الأسرار وإنشاء Cloud هنا.

printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-

وامنح حساب الخدمة إذن الوصول إلى سر HF_TOKEN في Secret Manager.

gcloud secrets add-iam-policy-binding HF_TOKEN \
    --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --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- نشر الخدمة

أنت الآن جاهز لنشر الصورة في تشغيل السحابة.

gcloud beta run deploy $SERVICE_NAME \
--image=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \
--service-account $SERVICE_ACCOUNT_ADDRESS \
--cpu=8 \
--memory=32Gi \
--gpu=1 --gpu-type=nvidia-l4 \
--region us-central1 \
--no-allow-unauthenticated \
--max-instances 5 \
--no-cpu-throttling

قد تستغرق عملية النشر ما يصل إلى 5 دقائق.

7. اختبار الخدمة

وبعد نشر الخدمة، يمكنك استخدام خدمة الخادم الوكيل للمطوّر في السحابة الإلكترونية التي تُضيف تلقائيًا رمزًا مميّزًا للمعرّف أو يمكنك تصغير عنوان URL للخدمة مباشرةً.

استخدام خدمة الخادم الوكيل لمطوّري البرامج Cloud Run

لاستخدام خدمة الخادم الوكيل لمطوّري البرامج Cloud Run، يمكنك اتّباع الخطوات التالية:

أولاً، قم بتشغيل الأمر التالي

gcloud run services proxy $SERVICE_NAME --region us-central1

بعد ذلك، نحج الخدمة

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 -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.

النقاط التي تناولناها

  • كيفية استخدام وحدات معالجة الرسومات على السحابة الإلكترونية.
  • طريقة استخدام وجه معانق لاسترداد نموذج
  • كيفية نشر نموذج Gemma 2 (2B) من Google على تشغيل السحابة الإلكترونية باستخدام vLLM كمحرّك استنتاج.
  • كيفية استدعاء خدمة الخلفية لإكمال الجملة.

9. تَنظيم

لتجنب دفع رسوم غير مقصودة، (على سبيل المثال، إذا تم استدعاء خدمات Cloud Run عن غير قصد أكثر من تخصيص استدعاء Cloud Run الشهري في الفئة المجانية)، يمكنك إما حذف Cloud Run أو حذف المشروع الذي أنشأته في الخطوة 2.

لحذف خدمة Cloud Run، انتقِل إلى Cloud Run Console على https://console.cloud.google.com/run واحذف خدمة vllm-gemma-2-2b. يمكنك أيضًا حذف حساب خدمة vllm-gemma-2-2b.

إذا اخترت حذف المشروع بالكامل، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager، واختيار المشروع الذي أنشأته في الخطوة الثانية، ثم اختيار "حذف". إذا حذفت المشروع، ستحتاج إلى تغيير المشاريع في حزمة تطوير البرامج (SDK) للسحابة الإلكترونية. يمكنك عرض قائمة بجميع المشاريع المتاحة من خلال تشغيل gcloud projects list.