Vertex AI-তে Gemini-কে আরও সুন্দর করে তুলুন

1. ভূমিকা

এই ল্যাবে, আপনি একটি নির্দিষ্ট কাজের জন্য Google Gemini মডেলের তত্ত্বাবধানে থাকা সূক্ষ্ম-টিউনিংয়ের সম্পূর্ণ কর্মপ্রবাহ সম্পাদন করতে শিখবেন: নিবন্ধের সারাংশ। যদিও বৃহৎ ভাষা মডেলগুলি শক্তিশালী, তাদের সাধারণ-উদ্দেশ্য প্রকৃতির অর্থ হল সূক্ষ্ম-টিউনিংয়ের মাধ্যমে নির্দিষ্ট ব্যবহারের ক্ষেত্রে এগুলিকে আরও কার্যকর করা যেতে পারে। উদাহরণের একটি উচ্চ-মানের ডেটাসেটে মডেলটিকে প্রশিক্ষণ দিয়ে, আপনি আপনার লক্ষ্য কাজের জন্য এর ধারাবাহিকতা, গুণমান এবং দক্ষতা উন্নত করতে পারেন।

আপনি জেমিনি ২.৫ ফ্ল্যাশ ব্যবহার করবেন, যা একটি হালকা এবং সাশ্রয়ী মডেল, এবং ভার্টেক্স এআই ব্যবহার করে সূক্ষ্ম-টিউনিং করবেন।

স্থাপত্যের সংক্ষিপ্ত বিবরণ

আমরা যা তৈরি করব তা এখানে:

  • ক্লাউড শেল : আপনার উন্নয়ন পরিবেশ।
  • ক্লাউড স্টোরেজ : প্রশিক্ষণ/বৈধকরণের তথ্য JSONL ফর্ম্যাটে সংরক্ষণ করে।
  • ভার্টেক্স এআই প্রশিক্ষণ : সূক্ষ্ম-টিউনিং কাজ পরিচালনা করে।
  • ভার্টেক্স এআই এন্ডপয়েন্ট : আপনার সূক্ষ্মভাবে সুরক্ষিত মডেলটি হোস্ট করে।

তুমি কি শিখবে

  • তত্ত্বাবধানে থাকা ফাইন-টিউনিংয়ের জন্য উচ্চ-মানের ডেটাসেট প্রস্তুত করুন।
  • পাইথনের জন্য Vertex AI SDK ব্যবহার করে ফাইন-টিউনিং কাজগুলি কনফিগার করুন এবং চালু করুন।
  • স্বয়ংক্রিয় মেট্রিক্স (ROUGE স্কোর) ব্যবহার করে মডেলগুলি মূল্যায়ন করুন।
  • উন্নতির পরিমাণ নির্ণয়ের জন্য বেস এবং সূক্ষ্ম-সুরযুক্ত মডেলগুলির তুলনা করুন।

2. প্রকল্প সেটআপ

গুগল অ্যাকাউন্ট

যদি আপনার ইতিমধ্যেই একটি ব্যক্তিগত Google অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি Google অ্যাকাউন্ট তৈরি করতে হবে।

কর্মক্ষেত্র বা স্কুল অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন

গুগল ক্লাউড কনসোলে সাইন-ইন করুন

একটি ব্যক্তিগত গুগল অ্যাকাউন্ট ব্যবহার করে গুগল ক্লাউড কনসোলে সাইন-ইন করুন।

বিলিং সক্ষম করুন

$৫ গুগল ক্লাউড ক্রেডিট রিডিম করুন (ঐচ্ছিক)

এই কর্মশালাটি পরিচালনা করার জন্য, আপনার কিছু ক্রেডিট সহ একটি বিলিং অ্যাকাউন্ট প্রয়োজন। আপনি যদি নিজের বিলিং ব্যবহার করার পরিকল্পনা করেন, তাহলে আপনি এই ধাপটি এড়িয়ে যেতে পারেন।

  1. এই লিঙ্কে ক্লিক করুন এবং একটি ব্যক্তিগত গুগল অ্যাকাউন্ট দিয়ে সাইন ইন করুন। আপনি এরকম কিছু দেখতে পাবেন: ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  2. আপনার ক্রেডিট অ্যাক্সেস করতে এখানে ক্লিক করুন বোতামটি ক্লিক করুন। এটি আপনাকে আপনার বিলিং প্রোফাইল সেট আপ করার জন্য একটি পৃষ্ঠায় নিয়ে যাবে। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  3. নিশ্চিত করুন ক্লিক করুন

আপনি এখন একটি Google ক্লাউড প্ল্যাটফর্ম ট্রায়াল বিলিং অ্যাকাউন্টের সাথে সংযুক্ত।

বিলিং ওভারভিউয়ের স্ক্রিনশট

একটি প্রকল্প তৈরি করুন (ঐচ্ছিক)

যদি আপনার এই ল্যাবের জন্য ব্যবহার করতে চান এমন কোন বর্তমান প্রকল্প না থাকে, তাহলে এখানে একটি নতুন প্রকল্প তৈরি করুন

৩. ক্লাউড শেল এডিটর খুলুন

  1. সরাসরি ক্লাউড শেল এডিটরে যেতে এই লিঙ্কে ক্লিক করুন।
  2. আজই যদি যেকোনো সময় অনুমোদনের অনুরোধ করা হয়, তাহলে চালিয়ে যেতে অনুমোদন করুন- এ ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  3. যদি স্ক্রিনের নীচে টার্মিনালটি না দেখা যায়, তাহলে এটি খুলুন:
    • ভিউ ক্লিক করুন
    • টার্মিনাল ক্লিক করুন ক্লাউড শেল এডিটরে নতুন টার্মিনাল খুলুন
  4. টার্মিনালে, এই কমান্ড দিয়ে আপনার প্রকল্পটি সেট করুন:
    gcloud config set project [PROJECT_ID]
    
    • উদাহরণ:
      gcloud config set project lab-project-id-example
      
    • যদি আপনি আপনার প্রজেক্ট আইডি মনে রাখতে না পারেন, তাহলে আপনি আপনার সমস্ত প্রজেক্ট আইডি তালিকাভুক্ত করতে পারেন:
      gcloud projects list
      
      ক্লাউড শেল এডিটর টার্মিনালে প্রোজেক্ট আইডি সেট করুন
  5. আপনার এই বার্তাটি দেখা উচিত:
    Updated property [core/project].
    

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

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

  1. টার্মিনালে, API গুলি সক্রিয় করুন:
    • ভার্টেক্স এআই এপিআই ( aiplatform.googleapis.com ): মডেলগুলিকে ফাইন-টিউনিং এবং পরিবেশনের জন্য ভার্টেক্স এআই ব্যবহার সক্ষম করে।
    • ক্লাউড স্টোরেজ API ( storage.googleapis.com ): ডেটাসেট এবং মডেল আর্টিফ্যাক্টের স্টোরেজ সক্ষম করে।
    gcloud services enable aiplatform.googleapis.com \
        storage.googleapis.com
    

৫. প্রকল্পের পরিবেশ সেট আপ করুন

একটি কার্যকরী ডিরেক্টরি তৈরি করুন

  1. টার্মিনালে , আপনার প্রকল্পের জন্য একটি ডিরেক্টরি তৈরি করুন এবং এতে নেভিগেট করুন।
    mkdir gemini-finetuning
    cd gemini-finetuning
    

পরিবেশ ভেরিয়েবল সেট আপ করুন

  1. টার্মিনালে , আপনার প্রকল্পের জন্য পরিবেশ ভেরিয়েবলগুলি সংজ্ঞায়িত করুন। আমরা এই ভেরিয়েবলগুলি সংরক্ষণ করার জন্য একটি env.sh ফাইল তৈরি করব যাতে আপনার সেশন সংযোগ বিচ্ছিন্ন হলে এগুলি সহজেই পুনরায় লোড করা যায়।
    cat <<EOF > env.sh
    export PROJECT_ID=\$(gcloud config get-value project)
    export REGION="us-central1"
    export BUCKET_NAME="\${PROJECT_ID}-gemini-tuning"
    EOF
    
    source env.sh
    

একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন

  1. টার্মিনালে , আপনার ডেটাসেট এবং মডেল আর্টিফ্যাক্ট সংরক্ষণের জন্য একটি বাকেট তৈরি করুন।
    gcloud storage buckets create gs://$BUCKET_NAME --project=$PROJECT_ID --location=$REGION
    

ভার্চুয়াল পরিবেশ সেট আপ করুন

  1. আমরা আমাদের পাইথন পরিবেশ পরিচালনা করতে uv ব্যবহার করব। টার্মিনালে , চালান:
    uv venv .venv
    source .venv/bin/activate
    
  2. টার্মিনালে , প্রয়োজনীয় পাইথন প্যাকেজগুলি ইনস্টল করুন।
    uv pip install google-cloud-aiplatform rouge-score matplotlib pandas tqdm
    

৬. প্রশিক্ষণের তথ্য প্রস্তুত করুন

সফল ফাইন-টিউনিংয়ের ভিত্তি হলো মানসম্পন্ন ডেটা। আপনি WikiLingua ডেটাসেট ব্যবহার করবেন, এটিকে জেমিনির প্রয়োজনীয় নির্দিষ্ট JSONL ফর্ম্যাটে রূপান্তর করবেন এবং আপনার স্টোরেজ বাকেটে আপলোড করবেন।

  1. টার্মিনালে , prepare_data.py নামে একটি ফাইল তৈরি করুন।
    cloudshell edit prepare_data.py
    
  2. নিম্নলিখিত কোডটি prepare_data.py তে পেস্ট করুন।
    import json
    import os
    import pandas as pd
    from google.cloud import storage
    import subprocess
    
    # Configuration
    BUCKET_NAME = os.environ["BUCKET_NAME"]
    PROJECT_ID = os.environ["PROJECT_ID"]
    
    def download_data():
        print("Downloading WikiLingua dataset...")
        # Using gsutil to copy from public bucket
        subprocess.run(["gsutil", "cp", "gs://github-repo/generative-ai/gemini/tuning/summarization/wikilingua/*", "."], check=True)
    
    def convert_to_gemini_format(input_file, output_file, max_samples=1000):
        print(f"Converting {input_file} to Gemini format (first {max_samples} samples)...")
        converted_data = []
        with open(input_file, 'r') as f:
            for i, line in enumerate(f):
                if i >= max_samples:
                    break
                obj = json.loads(line)
                messages = obj.get("messages", [])
    
                # Convert messages to Gemini 2.5 format
                # Input: {"messages": [{"role": "user", "content": "..."}, {"role": "model", "content": "..."}]}
                # Output: {"contents": [{"role": "user", "parts": [{"text": "..."}]}, {"role": "model", "parts": [{"text": "..."}]}]}
    
                contents = []
                for msg in messages:
                    role = msg["role"]
                    content = msg["content"]
                    contents.append({
                        "role": role,
                        "parts": [{"text": content}]
                    })
    
                converted_data.append({"contents": contents})
    
        with open(output_file, 'w') as f:
            for item in converted_data:
                f.write(json.dumps(item) + "\n")
    
        print(f"Saved {len(converted_data)} examples to {output_file}")
    
    def upload_to_gcs(local_file, destination_blob_name):
        print(f"Uploading {local_file} to gs://{BUCKET_NAME}/{destination_blob_name}...")
        storage_client = storage.Client(project=PROJECT_ID)
        bucket = storage_client.bucket(BUCKET_NAME)
        blob = bucket.blob(destination_blob_name)
        blob.upload_from_filename(local_file)
        print("Upload complete.")
    
    def main():
        download_data()
    
        # Process Training Data
        convert_to_gemini_format("sft_train_samples.jsonl", "train_gemini.jsonl")
        upload_to_gcs("train_gemini.jsonl", "datasets/train/train_gemini.jsonl")
    
        # Process Validation Data
        convert_to_gemini_format("sft_val_samples.jsonl", "val_gemini.jsonl")
        upload_to_gcs("val_gemini.jsonl", "datasets/val/val_gemini.jsonl")
    
        print("Data preparation complete!")
    
    if __name__ == "__main__":
        main()
    
  3. টার্মিনালে , ডেটা প্রস্তুতি স্ক্রিপ্টটি চালান।
    python prepare_data.py
    

৭. বেসলাইন কর্মক্ষমতা প্রতিষ্ঠা করুন

ফাইন-টিউনিং করার আগে, আপনার একটি বেঞ্চমার্ক প্রয়োজন। আপনি ROUGE স্কোর ব্যবহার করে বেস gemini-2.5-flash মডেলটি সারসংক্ষেপের কাজে কতটা ভালো কাজ করে তা পরিমাপ করবেন।

  1. টার্মিনালে , evaluate.py নামে একটি ফাইল তৈরি করুন।
    cloudshell edit evaluate.py
    
  2. নিম্নলিখিত কোডটি evaluate.py তে পেস্ট করুন।
    import argparse
    import json
    import os
    import pandas as pd
    from google.cloud import aiplatform
    import vertexai
    from vertexai.generative_models import GenerativeModel, GenerationConfig, HarmCategory, HarmBlockThreshold
    from rouge_score import rouge_scorer
    from tqdm import tqdm
    import matplotlib.pyplot as plt
    import time
    
    # Configuration
    PROJECT_ID = os.environ["PROJECT_ID"]
    REGION = os.environ["REGION"]
    
    aiplatform.init(project=PROJECT_ID, location=REGION)
    
    def evaluate(model_name, test_file, max_samples=50, output_json="results.json"):
        print(f"Evaluating model: {model_name}")
    
        # Load Test Data
        test_df = pd.read_csv(test_file)
        test_df = test_df.head(max_samples)
    
        model = GenerativeModel(model_name)
    
        safety_settings = {
            HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
            HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_ONLY_HIGH,
            HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
            HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
        }
    
        generation_config = GenerationConfig(
            temperature=0.1,
            max_output_tokens=1024,
        )
    
        scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)
        results = []
    
        for index, row in tqdm(test_df.iterrows(), total=len(test_df)):
            input_text = row['input_text']
            reference_summary = row['output_text']
    
            try:
                response = model.generate_content(
                    input_text,
                    generation_config=generation_config,
                    safety_settings=safety_settings
                )
                generated_summary = response.text
    
                scores = scorer.score(reference_summary, generated_summary)
    
                results.append({
                    "generated": generated_summary,
                    "reference": reference_summary,
                    "rouge1": scores['rouge1'].fmeasure,
                    "rouge2": scores['rouge2'].fmeasure,
                    "rougeL": scores['rougeL'].fmeasure
                })
            except Exception as e:
                print(f"Error processing example {index}: {e}")
                # Sleep briefly to avoid quota issues if hitting limits
                time.sleep(1)
    
        # Save results
        with open(output_json, 'w') as f:
            json.dump(results, f, indent=2)
    
        return pd.DataFrame(results)
    
    def plot_results(df, title, filename):
        os.makedirs("plots", exist_ok=True)
    
        metrics = ['rouge1', 'rouge2', 'rougeL']
        fig, axes = plt.subplots(1, 3, figsize=(15, 5))
    
        for i, metric in enumerate(metrics):
            axes[i].hist(df[metric], bins=10, alpha=0.7, color='skyblue', edgecolor='black')
            axes[i].set_title(f'{metric} Distribution')
            axes[i].set_xlabel('Score')
            axes[i].set_ylabel('Count')
    
        plt.suptitle(title)
        plt.tight_layout()
        plt.savefig(f"plots/{filename}")
        print(f"Plot saved to plots/{filename}")
    
    def compare_results(baseline_file, tuned_file):
        with open(baseline_file, 'r') as f:
            baseline_data = pd.DataFrame(json.load(f))
        with open(tuned_file, 'r') as f:
            tuned_data = pd.DataFrame(json.load(f))
    
        print("\n--- Comparison ---")
        metrics = ['rouge1', 'rouge2', 'rougeL']
        for metric in metrics:
            base_mean = baseline_data[metric].mean()
            tuned_mean = tuned_data[metric].mean()
            diff = tuned_mean - base_mean
            print(f"{metric}: Base={base_mean:.4f}, Tuned={tuned_mean:.4f}, Diff={diff:+.4f}")
    
        # Comparative Plot
        os.makedirs("plots", exist_ok=True)
        comparison_df = pd.DataFrame({
            'Metric': metrics,
            'Baseline': [baseline_data[m].mean() for m in metrics],
            'Tuned': [tuned_data[m].mean() for m in metrics]
        })
    
        comparison_df.plot(x='Metric', y=['Baseline', 'Tuned'], kind='bar', figsize=(10, 6))
        plt.title('Baseline vs Tuned Model Performance')
        plt.ylabel('Average Score')
        plt.xticks(rotation=0)
        plt.tight_layout()
        plt.savefig("plots/comparison.png")
        print("Comparison plot saved to plots/comparison.png")
    
    def main():
        parser = argparse.ArgumentParser()
        parser.add_argument("--model", type=str, default="gemini-2.5-flash", help="Model resource name")
        parser.add_argument("--baseline", type=str, help="Path to baseline results json for comparison")
        parser.add_argument("--output", type=str, default="results.json", help="Output file for results")
        args = parser.parse_args()
    
        # Ensure test data exists (it was downloaded in prepare_data step)
        if not os.path.exists("sft_test_samples.csv"):
            # Fallback download if needed
            subprocess.run(["gsutil", "cp", "gs://github-repo/generative-ai/gemini/tuning/summarization/wikilingua/sft_test_samples.csv", "."], check=True)
    
        df = evaluate(args.model, "sft_test_samples.csv", output_json=args.output)
    
        print("\n--- Results Summary ---")
        print(df.describe())
    
        plot_filename = "baseline_dist.png" if not args.baseline else "tuned_dist.png"
        plot_results(df, f"ROUGE Scores - {args.model}", plot_filename)
    
        if args.baseline:
            compare_results(args.baseline, args.output)
    
    if __name__ == "__main__":
        main()
    
  3. টার্মিনালে , বেসলাইন মূল্যায়ন চালান।
    python evaluate.py --model "gemini-2.5-flash" --output "baseline.json"
    
    এটি একটি baseline.json ফাইল এবং plots/baseline_dist.png এ একটি প্লট তৈরি করবে।

৮. ফাইন-টিউনিং কনফিগার করুন এবং চালু করুন

এখন আপনি Vertex AI-তে একটি পরিচালিত ফাইন-টিউনিং কাজ চালু করবেন।

  1. টার্মিনালে , tune.py নামে একটি ফাইল তৈরি করুন।
    cloudshell edit tune.py
    
  2. নিচের কোডটি tune.py তে পেস্ট করুন।
    import os
    import time
    from google.cloud import aiplatform
    import vertexai
    from vertexai.preview.tuning import sft
    
    # Configuration
    PROJECT_ID = os.environ["PROJECT_ID"]
    REGION = os.environ["REGION"]
    BUCKET_NAME = os.environ["BUCKET_NAME"]
    
    aiplatform.init(project=PROJECT_ID, location=REGION)
    
    def train():
        print("Launching fine-tuning job...")
    
        sft_tuning_job = sft.train(
            source_model="gemini-2.5-flash", # Using specific version for stability
            train_dataset=f"gs://{BUCKET_NAME}/datasets/train/train_gemini.jsonl",
            validation_dataset=f"gs://{BUCKET_NAME}/datasets/val/val_gemini.jsonl",
            epochs=1, # Keep it short for the lab
            adapter_size=4,
            learning_rate_multiplier=1.0,
            tuned_model_display_name="gemini-2.5-flash-wikilingua",
        )
    
        print(f"Job started: {sft_tuning_job.resource_name}")
        print("Waiting for job to complete... (this may take ~45 minutes)")
    
        # Wait for the job to complete
        while not sft_tuning_job.has_ended:
            time.sleep(60)
            sft_tuning_job.refresh()
            print(f"Status: {sft_tuning_job.state.name}")
    
        print("Job completed!")
        print(f"Tuned Model Endpoint: {sft_tuning_job.tuned_model_endpoint_name}")
        return sft_tuning_job.tuned_model_endpoint_name
    
    if __name__ == "__main__":
        train()
    
  3. টার্মিনালে , ফাইন-টিউনিং স্ক্রিপ্টটি চালান।
    python tune.py
    
    দ্রষ্টব্য : এই প্রক্রিয়াটি প্রায় ৪৫ মিনিট সময় নিতে পারে। আপনি Vertex AI কনসোলে কাজটি পর্যবেক্ষণ করতে পারেন।

৯. প্রশিক্ষণ কোডটি বুঝুন

আপনার কাজ চলাকালীন, ফাইন-টিউনিং কীভাবে কাজ করে তা বোঝার জন্য tune.py স্ক্রিপ্টটি ঘনিষ্ঠভাবে দেখে নেওয়া যাক।

পরিচালিত তত্ত্বাবধানে ফাইন-টিউনিং

স্ক্রিপ্টটি vertexai.tuning.sft.train পদ্ধতি ব্যবহার করে একটি পরিচালিত টিউনিং কাজ জমা দেয়। এটি অবকাঠামো সরবরাহ, প্রশিক্ষণ বিতরণ এবং চেকপয়েন্ট পরিচালনার জটিলতা দূর করে।

sft_tuning_job = sft.train(
    source_model="gemini-2.5-flash",
    train_dataset=f"gs://{BUCKET_NAME}/datasets/train/train_gemini.jsonl",
    # ...
)

LoRA কনফিগারেশন

ওপেন-সোর্স ফ্রেমওয়ার্কের মতো LoraConfig ম্যানুয়ালি সংজ্ঞায়িত করার পরিবর্তে, Vertex AI এটিকে কয়েকটি মূল প্যারামিটারে সহজ করে তোলে:

  • adapter_size : এই প্যারামিটারটি (আমাদের স্ক্রিপ্টে 4 তে সেট করা হয়েছে) LoRA অ্যাডাপ্টারের র‍্যাঙ্ক নিয়ন্ত্রণ করে। বড় আকার মডেলটিকে আরও জটিল অভিযোজন শিখতে দেয় কিন্তু প্রশিক্ষণযোগ্য প্যারামিটারের সংখ্যা বৃদ্ধি করে।
  • epochs : প্রশিক্ষণের সময় কম রাখার জন্য আমরা এই ল্যাবের জন্য এটি 1 এ সেট করেছি (~20 মিনিট)। একটি উৎপাদন পরিস্থিতিতে, আপনি এটি বাড়িয়ে দিতে পারেন যাতে মডেলটি আপনার ডেটা থেকে আরও গভীরভাবে শিখতে পারে, যদিও আপনার অতিরিক্ত ফিটিং এর দিকে নজর রাখা উচিত।

মডেল নির্বাচন

আমরা স্পষ্টভাবে source_model="gemini-2.5-flash" উল্লেখ করেছি। Vertex AI জেমিনির বিভিন্ন সংস্করণ সমর্থন করে এবং একটি নির্দিষ্ট সংস্করণ পিন করা নিশ্চিত করে যে আপনার পাইপলাইন স্থিতিশীল এবং পুনরুৎপাদনযোগ্য থাকে।

১০. মডেলের তুলনা করুন

একবার ফাইন-টিউনিং কাজ সম্পন্ন হলে, আপনি আপনার নতুন মডেলের পারফরম্যান্সকে বেসলাইনের সাথে তুলনা করতে পারেন।

  1. আপনার টিউন করা মডেল এন্ডপয়েন্টটি পান। এটি tune.py স্ক্রিপ্টের শেষে মুদ্রিত হয়েছিল। এটি দেখতে projects/.../locations/.../endpoints/... মতো কিছু হবে।
  2. মূল্যায়ন স্ক্রিপ্টটি আবার চালান, এবার তুলনার জন্য আপনার টিউন করা মডেল এবং বেসলাইন ফলাফলগুলি দেখুন।
    # Replace [YOUR_TUNED_MODEL_ENDPOINT] with the actual endpoint name
    export TUNED_MODEL="projects/[YOUR_PROJECT_ID]/locations/[YOUR_REGION]/endpoints/[YOUR_ENDPOINT_ID]"
    
    python evaluate.py --model "$TUNED_MODEL" --baseline "baseline.json" --output "tuned.json"
    
  3. ফলাফল দেখুন। স্ক্রিপ্টটি ROUGE স্কোরের তুলনা আউটপুট করবে এবং উন্নতি দেখানো একটি plots/comparison.png চার্ট তৈরি করবে। আপনি ক্লাউড শেল এডিটরে plots ফোল্ডারটি খুলে প্লটগুলি দেখতে পারেন।

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

চার্জ এড়াতে, আপনার তৈরি করা রিসোর্সগুলি মুছে ফেলুন।

  1. টার্মিনালে , ক্লাউড স্টোরেজ বাকেট এবং টিউন করা মডেলটি মুছে ফেলুন।
    gcloud storage rm -r gs://$BUCKET_NAME
    # Note: You can delete the model endpoint from the Vertex AI Console
    

১২. অভিনন্দন!

আপনি Vertex AI তে Gemini 2.5 Flash সফলভাবে উন্নত করেছেন!

সংক্ষিপ্তসার

এই ল্যাবে, আপনি:

  • জেমিনি ফাইন-টিউনিংয়ের জন্য JSONL ফর্ম্যাটে একটি ডেটাসেট প্রস্তুত করা হয়েছে।
  • বেস জেমিনি ২.৫ ফ্ল্যাশ মডেল ব্যবহার করে একটি বেসলাইন স্থাপন করা হয়েছে।
  • Vertex AI-তে একটি তত্ত্বাবধানে সূক্ষ্ম-টিউনিং কাজ শুরু করা হয়েছে।
  • বেসলাইনের সাথে সূক্ষ্মভাবে সুরক্ষিত মডেলটির মূল্যায়ন এবং তুলনা করা হয়েছে।

এরপর কি?

এই ল্যাবটি গুগল ক্লাউড লার্নিং পাথ সহ প্রোডাকশন-রেডি এআই- এর অংশ।

প্রোটোটাইপ থেকে উৎপাদন পর্যন্ত ব্যবধান পূরণ করতে সম্পূর্ণ পাঠ্যক্রমটি অন্বেষণ করুন।

#ProductionReadyAI হ্যাশট্যাগ ব্যবহার করে আপনার অগ্রগতি শেয়ার করুন।