آموزش: استنتاج بدون سرور با شتاب‌دهنده GPU با استفاده از Google Cloud Run

آموزش: استنتاج بدون سرور با شتاب‌دهنده GPU با استفاده از Google Cloud Run

اخیراً، گوگل کلود پشتیبانی از GPU را برای پلتفرم بدون سرور Cloud Run راه‌اندازی کرده است. این ویژگی به توسعه‌دهندگان امکان می‌دهد تا استنتاج بدون سرور مدل‌های مستقر شده در Cloud Run را تسریع کنند.

در این آموزش، مراحل استقرار مدل زبان بزرگ (LLM) Llama 3.1 با 8 میلیارد پارامتر را بر روی یک سرویس Cloud Run مبتنی بر GPU به شما نشان خواهم داد. ما از سرور Text Generation Inference (TGI) از Hugging Face به عنوان سرور مدل و موتور استنتاج استفاده خواهیم کرد.

این راهنما فرض می‌کند که شما می‌توانید به Google Cloud دسترسی داشته باشید و gcloud CLI را بر روی دستگاه خود نصب و پیکربندی کرده‌اید.

مرحله 1 - مقداردهی اولیه محیط

بیایید با تعریف متغیرهای محیطی مورد نیاز برای پیکربندی Cloud Run شروع کنیم:

export PROJECT_ID=YOUR_GCP_PROJECT
export LOCATION=us-central1
export CONTAINER_URI=us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-generation-inference-cu121.2-2.ubuntu2204.py310
export SERVICE_NAME=text-generation-inference

از آنجایی که Cloud Run یک ایمیج کانتینر را به عنوان واحد استقرار انتظار دارد، ما از کانتینر رسمی Deep Learning از Hugging Face استفاده می‌کنیم که از قبل در Google Cloud Artifact Registry ذخیره شده است.

ایمیج us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-generation-inference-cu121.2-2.ubuntu2204.py310 نشان‌دهنده ایمیج کانتینر رسمی TGI است که ما آن را در Cloud Run مستقر خواهیم کرد.

مرحله بعدی پیکربندی gcloud CLI برای استفاده از پروژه و منطقه صحیح است. دستورات زیر را برای مقداردهی اولیه محیط اجرا کنید.

gcloud auth login
gcloud config set project $PROJECT_ID

در نهایت، اطمینان حاصل کنید که Cloud Run API برای پروژه شما فعال شده است.

gcloud services enable run.googleapis.com

مرحله 2 - استقرار سرور مدل TGI

ما آماده استقرار سرور Text Generation Inference در Google Cloud هستیم. برای استقرار، دستور زیر را اجرا کنید.

gcloud beta run deploy $SERVICE_NAME \
 --image=$CONTAINER_URI \ --args="--model-id=hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4,--quantize=awq,--max-concurrent-requests=64" \
 --set-env-vars="HF_HUB_ENABLE_HF_TRANSFER=1, HF_TOKEN=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" \
 --port=8080 \
 --cpu=4 \
 --memory=16Gi \
 --no-cpu-throttling \
 --gpu=1 \
 --gpu-type=nvidia-l4 \
 --max-instances=1 \
 --concurrency=64 \
 --region=$LOCATION \
 --no-allow-unauthenticated

پارامتر --image ایمیج کانتینر ذخیره شده در Google Cloud Artifact registry را مشخص می‌کند که در متغیر محیطی مقداردهی اولیه کردیم.

سوییچ --args نام مدل را همانطور که در مخزن Hugging Face ظاهر می‌شود، ارسال می‌کند. برای افزایش توان عملیاتی، ما از یک مدل کوانتیزه‌شده int4 استفاده می‌کنیم که می‌تواند تا 64 درخواست همزمان را مدیریت کند.

مهم‌ترین مجموعه آرگومان‌ها gpu=1 و --gpu-type=nvidia-l4 است که سرویس را مجبور می‌کند از شتاب‌دهنده GPU استفاده کند.

ما نمی‌خواهیم از احراز هویت ناشناس استفاده کنیم. بنابراین، سوییچ --no-allow-unauthenticated سرویس گیرنده را مجبور می‌کند از احراز هویت مبتنی بر Google Cloud استفاده کند.

صبر کنید تا دستور به پایان برسد، و شما باید بتوانید سرویس را در Google Cloud Console مشاهده کنید. علامت تیک سبز نشان می‌دهد که سرویس مستقر شده و در حال اجرا است.

سرویس Google Cloud Run مستقر شد

مرحله 3 - انجام استنتاج

با استقرار مدل در Cloud Run، اکنون می‌توانیم استنتاج را در برابر endpoint انجام دهیم. قبل از آن، بیایید پروکسی را اجرا کنیم تا سرویس را در دستگاه محلی خود در معرض دید قرار دهیم. این یک تکنیک مفید برای آزمایش یک سرویس مستقر شده در Cloud Run است.

gcloud run services proxy $SERVICE_NAME --region $LOCATION

اکنون می‌توانیم از دستور cURL برای آزمایش endpoint استنتاج استفاده کنیم.

curl http://localhost:8080/v1/chat/completions \<br> -X POST \<br> -H 'Content-Type: application/json' \<br> -d '{\<br> "model": "tgi",\<br> "messages": [{\<br> "role": "system",\<br> "content": "You are a helpful assistant."\<br> }, {\<br> "role": "user",\<br> "content": "What is the capital of France?"\<br> }],\<br> "max_tokens": 128\<br> }'

از آنجایی که Hugging Face TGI یک endpoint سازگار با OpenAI را در معرض دید قرار می‌دهد، ما همچنین می‌توانیم از کتابخانه OpenAI Python استاندارد برای صحبت با سرویس استفاده کنیم.

ماژول OpenAI Python را نصب کنید.

pip install --upgrade openai

اکنون می‌توانیم کد زیر را برای آزمایش سرویس اجرا کنیم.

from openai import OpenAI

client = OpenAI(
 base_url="http://localhost:8080/v1/",
 api_key="-",
)

chat_completion = client.chat.completions.create(
 model="tgi",
 messages=[
 {"role": "system", "content": "You are a helpful assistant."},
 {"role": "user", "content": "What is the capital of France?"},
 ],
 max_tokens=128,
)

اولین درخواست زمان می‌برد زیرا مدل دانلود می‌شود. با این حال، تماس‌های بعدی سریع‌تر خواهند بود زیرا مدل کش شده و به راحتی در دسترس قرار می‌گیرد.

جدا از TGI، استقرار سایر سرورهای مدل مانند vLLM در Google Cloud Run امکان پذیر است.