ভিএলএলএম এবং ওপেনএআই পাইথন এসডিকে সহ ক্লাউড রান জিপিইউতে কীভাবে এলএলএম অনুমান চালানো যায়

1. ভূমিকা

সংক্ষিপ্ত বিবরণ

ক্লাউড রান হল গুগল ক্লাউডের একটি কন্টেইনার প্ল্যাটফর্ম যা আপনার কোডকে একটি কন্টেইনারে চালানো সহজ করে তোলে, কোনও ক্লাস্টার পরিচালনা করার প্রয়োজন ছাড়াই। ক্লাউড রান সম্প্রতি GPU সমর্থন যোগ করেছে।

আজ, আমরা যে GPU গুলি উপলব্ধ করছি তা হল Nvidia L4 GPU যার 24 GB vRAM আছে। প্রতিটি ক্লাউড রান ইনস্ট্যান্সের জন্য একটি GPU আছে এবং ক্লাউড রান অটো স্কেলিং এখনও প্রযোজ্য। এর মধ্যে রয়েছে 5 টি ইনস্ট্যান্স পর্যন্ত স্কেলিং আউট (কোটা বৃদ্ধি সহ), এবং কোনও অনুরোধ না থাকলে শূন্য ইনস্ট্যান্সে স্কেলিং করা।

GPU-এর জন্য একটি ব্যবহারের উদাহরণ হল আপনার নিজস্ব ওপেন লার্জ ল্যাঙ্গুয়েজ মডেল (LLM) চালানো। এই টিউটোরিয়ালটি আপনাকে LLM চালানোর জন্য একটি পরিষেবা স্থাপনের পদ্ধতি সম্পর্কে জানাবে।

এই পরিষেবাটি একটি ব্যাকএন্ড পরিষেবা যা vLLM চালায়, যা উৎপাদন সিস্টেমের জন্য একটি ইনফারেন্স ইঞ্জিন। এই কোডল্যাবটি Google এর Gemma 2 ব্যবহার করে যার 2 বিলিয়ন প্যারামিটার নির্দেশ-টিউনড মডেল রয়েছে।

তুমি কি শিখবে

  • ক্লাউড রানে জিপিইউ কীভাবে ব্যবহার করবেন।
  • একটি মডেল পুনরুদ্ধার করতে Hugging Face কীভাবে ব্যবহার করবেন।
  • ইনফারেন্স ইঞ্জিন হিসেবে vLLM ব্যবহার করে ক্লাউড রানে গুগলের Gemma 2 2b নির্দেশনা-টিউনড মডেল কীভাবে স্থাপন করবেন।
  • বাক্য সম্পূর্ণ করার জন্য ব্যাকএন্ড পরিষেবা কীভাবে ব্যবহার করবেন।

2. সেটআপ এবং প্রয়োজনীয়তা

পূর্বশর্ত

  • আপনি ক্লাউড কনসোলে লগ ইন করেছেন।
  • আপনি আগে একটি ক্লাউড রান পরিষেবা স্থাপন করেছেন। উদাহরণস্বরূপ, শুরু করার জন্য আপনি সোর্স কোড কুইকস্টার্ট থেকে একটি ওয়েব পরিষেবা স্থাপন করতে পারেন।
  • আপনার একটি Hugging Face অ্যাকাউন্ট আছে এবং https://huggingface.co/google/gemma-2-2b-it ওয়েবসাইটে Gemma 2 2b লাইসেন্সের স্বীকৃতি আছে; অন্যথায়, আপনি মডেলটি ডাউনলোড করতে পারবেন না।
  • আপনি একটি অ্যাক্সেস টোকেন তৈরি করেছেন যার google/gemma-2-2b-it মডেলে অ্যাক্সেস আছে।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন d1264ca30785e435.png সম্পর্কে .

cb81e7c8e34bc8d.png সম্পর্কে

যদি আপনি প্রথমবারের মতো ক্লাউড শেল শুরু করেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন দেখানো হবে যা এটি কী তা বর্ণনা করবে। যদি আপনার কাছে একটি মধ্যবর্তী স্ক্রিন থাকে, তাহলে Continue এ ক্লিক করুন।

d95252b003979716.png সম্পর্কে

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে।

7833d5e1c5d18f54.png সম্পর্কে

এই ভার্চুয়াল মেশিনটিতে প্রয়োজনীয় সকল ডেভেলপমেন্ট টুল রয়েছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি অফার করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার বেশিরভাগ কাজ, যদি সব না হয়, একটি ব্রাউজার দিয়ে করা যেতে পারে।

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণিত এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. API গুলি সক্ষম করুন এবং পরিবেশ ভেরিয়েবল সেট করুন

API গুলি সক্ষম করুন

এই কোডল্যাব ব্যবহার শুরু করার আগে, আপনাকে বেশ কয়েকটি API সক্রিয় করতে হবে। এই কোডল্যাবটির জন্য নিম্নলিখিত API ব্যবহার করা প্রয়োজন। আপনি নিম্নলিখিত কমান্ডটি চালিয়ে এই APIগুলি সক্রিয় করতে পারেন:

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

৪. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

এই পরিষেবা অ্যাকাউন্টটি ক্লাউড রান পরিষেবা তৈরি করতে এবং সিক্রেট ম্যানেজারের একটি গোপনীয়তা অ্যাক্সেস করতে ব্যবহৃত হয়।

প্রথমে, এই কমান্ডটি চালিয়ে পরিষেবা অ্যাকাউন্ট তৈরি করুন:

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

এখন, আপনার Hugging Face Access Token এর জন্য Secret Manager এ HF_TOKEN নামক একটি গোপন তথ্য তৈরি করুন। Cloud Build বিল্ড-এর সময় এই গোপন তথ্য অ্যাক্সেস করার জন্য পরিষেবা অ্যাকাউন্ট ব্যবহার করে Hugging Face থেকে Gemma 2 (2B) মডেলটি সরিয়ে ফেলবে। আপনি গোপন তথ্য এবং Cloud Build সম্পর্কে আরও জানতে এখানে ক্লিক করুন।

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

এবং ইমেজ তৈরি করার সময় সিক্রেট ম্যানেজারে HF_TOKEN সিক্রেটে ডিফল্ট কম্পিউট সার্ভিস অ্যাকাউন্ট অ্যাক্সেস দিন।

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"

৫. আর্টিফ্যাক্ট রেজিস্ট্রিতে ছবিটি তৈরি করুন

প্রথমে, আর্টিফ্যাক্ট রেজিস্ট্রিতে একটি সংগ্রহস্থল তৈরি করুন।

gcloud artifacts repositories create $AR_REPO_NAME \
  --repository-format docker \
  --location $REGION

এরপর, একটি Dockerfile তৈরি করুন যা সিক্রেট ম্যানেজারের গোপন তথ্য অন্তর্ভুক্ত করবে। আপনি এখানে ডকার বিল্ডএক্স –সিক্রেটস ফ্ল্যাগ সম্পর্কে আরও জানতে পারেন।

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

নির্মাণটি প্রায় ৮ মিনিট সময় নিতে পারে।

৬. পরিষেবাটি স্থাপন করুন

আপনি এখন ক্লাউড রানে ছবিটি স্থাপন করতে প্রস্তুত। স্থাপনে প্রায় ৫ মিনিট সময় লাগবে। ছবিটি লোড হতে আরও সময় দেওয়ার জন্য আপনাকে স্বাস্থ্য পরীক্ষার প্রাথমিক বিলম্ব কয়েক মিনিট বাড়িয়ে দিতে হবে। অন্যথায়, স্বাস্থ্য পরীক্ষা থেকে আপনি একটি সময়সীমা অতিক্রম করা ত্রুটি দেখতে পাবেন।

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

৭. পরিষেবাটি পরীক্ষা করুন

একবার স্থাপন করা হলে, আপনি হয় ক্লাউড রান ডেভ প্রক্সি পরিষেবা ব্যবহার করতে পারেন যা স্বয়ংক্রিয়ভাবে আপনার জন্য একটি আইডি টোকেন যোগ করে অথবা আপনি সরাসরি পরিষেবা URL কার্ল করে ফেলতে পারেন।

ক্লাউড রান ডেভ প্রক্সি পরিষেবা ব্যবহার করা

ক্লাউড রান ডেভ প্রক্সি পরিষেবা ব্যবহার করতে, আপনি এই পদক্ষেপগুলি ব্যবহার করতে পারেন:

প্রথমে, নিম্নলিখিত কমান্ডটি চালান

gcloud run services proxy $SERVICE_NAME --region $REGION

এরপর, পরিষেবাটি কার্ল করুন।

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

৮. অভিনন্দন!

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!

আমরা ক্লাউড রান ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিচ্ছি।

আমরা যা কভার করেছি

  • ক্লাউড রানে জিপিইউ কীভাবে ব্যবহার করবেন।
  • একটি মডেল পুনরুদ্ধার করতে Hugging Face কীভাবে ব্যবহার করবেন।
  • ইনফারেন্স ইঞ্জিন হিসেবে vLLM ব্যবহার করে ক্লাউড রানে গুগলের জেমা 2 (2B) মডেল কীভাবে স্থাপন করবেন।
  • বাক্য সম্পূর্ণ করার জন্য ব্যাকএন্ড পরিষেবা কীভাবে ব্যবহার করবেন।

9. পরিষ্কার করা

অসাবধানতাবশত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি ক্লাউড রান পরিষেবাগুলি আপনার মাসিক ফ্রি টিয়ারে ক্লাউড রান ইনভোকমেন্ট বরাদ্দের চেয়ে বেশিবার অসাবধানতাবশত ইনভোক করা হয়), আপনি হয় ক্লাউড রান মুছে ফেলতে পারেন অথবা ধাপ ২-এ তৈরি করা প্রকল্পটি মুছে ফেলতে পারেন।

ক্লাউড রান পরিষেবাটি মুছে ফেলার জন্য, 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 চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।