סיווג חיזוי

ה-Vertex AI SDK כולל את מחלקות החיזוי הבאות. מחלקת אחת מיועדת לתחזיות אצווה. האחרים קשורים לחיזויים אונליין או לחיזויים של חיפוש וקטורי. מידע נוסף זמין במאמר סקירה כללית על קבלת תחזיות ב-Vertex AI.

Batch prediction class

חיזוי באצווה הוא קבוצה של בקשות לא סנכרוניות לחיזוי. אתם שולחים בקשה לתחזיות אצווה ממשאב המודל בלי לפרוס את המודל לנקודת קצה. תחזיות באצווה מתאימות למקרים שבהם לא נדרשת תגובה מיידית ורוצים לעבד נתונים באמצעות בקשה אחת. ‫BatchPredictionJob היא המחלקה היחידה ב-Vertex AI SDK שספציפית לחיזויים של Batch.

BatchPredictionJob

המחלקה BatchPredictionJob מייצגת קבוצה של בקשות לא סינכרוניות לחיזוי. יש שתי דרכים ליצור משימת חיזוי באצווה:

  1. הדרך המועדפת ליצור משימת חיזוי באצווה היא להשתמש בשיטה batch_predict במודל Model שאומן. השיטה הזו דורשת את הפרמטרים הבאים:

    • instances_format: הפורמט של קובץ בקשת החיזוי באצווה: jsonl,‏ csv,‏ bigquery,‏ tf-record,‏ tf-record-gzip או file-list.
    • prediction_format: הפורמט של קובץ התגובה של התחזית באצווה: jsonl,‏ csv,‏ bigquery,‏ tf-record,‏ tf-record-gzip או file-list.
    • gcs_source: רשימה של נתיבים אחד או יותר ב-Cloud Storage לבקשות לחיזוי באצווה.
    • gcs_destination_prefix: הנתיב ב-Cloud Storage שאליו Vertex AI כותב את התחזיות.

    בדוגמה הבאה אפשר לראות איך אפשר להפעיל את Model.batch_predict:

    batch_prediction_job = model.batch_predict(
        instances_format="jsonl",
        predictions_format="jsonl",
        job_display_name="your_job_display_name_string",
        gcs_source=['gs://path/to/my/dataset.csv'],
        gcs_destination_prefix='gs://path/to/my/destination',
        model_parameters=None,
        starting_replica_count=1,
        max_replica_count=5,
        machine_type="n1-standard-4",
        sync=True
    )
    
  2. הדרך השנייה ליצור עבודת חיזוי באצווה היא לבצע קריאה ל-method‏ BatchPredictionJob.create. ה-method‏ BatchPredictionJob.create דורש ארבעה פרמטרים:

    • job_display_name: שם שאתם מקצים למשימת החיזוי באצווה. שימו לב: מאפיין job_display_name הוא חובה בBatchPredictionJob.create, אבל הוא אופציונלי בModel.batch_predict.
    • model_name: השם המלא או המזהה של Model שאומן ומשמש למשימת חיזוי באצווה.
    • instances_format: הפורמט של קובץ בקשת התחזית באצווה: jsonl,‏ csv,‏ bigquery,‏ tf-record,‏ tf-record-gzip או file-list.
    • predictions_format: הפורמט של קובץ התגובה של התחזית באצווה: jsonl,‏ csv,‏ bigquery,‏ tf-record,‏ tf-record-gzip או file-list.

שיעורים אונליין בנושא חיזוי

תחזיות אונליין הן בקשות סינכרוניות שנשלחות לנקודת קצה של מודל. כדי לשלוח בקשה לחיזוי אונליין, צריך לפרוס את המודל לנקודת קצה. כדאי להשתמש בתחזיות אונליין כשרוצים תחזיות שנוצרות על סמך קלט של אפליקציה, או כשצריך תגובה מהירה של תחזית.

Endpoint

כדי לקבל חיזויים אונליין מהמודל, צריך לפרוס את המודל לנקודת קצה. כשפורסים מודל לנקודת קצה, משייכים את משאבי המכונה הפיזית למודל כדי שהוא יוכל לספק חיזויים אונליין.

אפשר לפרוס יותר ממודל אחד לנקודת קצה אחת. אפשר גם לפרוס מודל אחד לכמה נקודות קצה. מידע נוסף על שיקולים לפריסת מודלים

כדי ליצור משאב Endpoint, פורסים את המודל. כשמתקשרים לשיטה Model.deploy, היא יוצרת ומחזירה Endpoint.

קוד לדוגמה הבא הוא קטע שמראה איך ליצור משימת אימון בהתאמה אישית, ליצור ולאמן מודל, ואז לפרוס את המודל לנקודת קצה.

# Create your custom training job

job = aiplatform.CustomTrainingJob(
    display_name="my_custom_training_job",
    script_path="task.py",
    container_uri="us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-8:latest",
    requirements=["google-cloud-bigquery>=2.20.0", "db-dtypes"],
    model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest"
)

# Start the training and create your model
model = job.run(
    dataset=dataset,
    model_display_name="my_model_name",
    bigquery_destination=f"bq://{project_id}"
)

# Create an endpoint and deploy your model to that endpoint
endpoint = model.deploy(deployed_model_display_name="my_deployed_model")

# Get predictions using test data in a DataFrame named 'df_my_test_data'
predictions = endpoint.predict(instances=df_my_test_data)

PrivateEndpoint

נקודת קצה פרטית היא כמו משאב Endpoint, אבל התחזיות נשלחות ברשת מאובטחת לשירות התחזיות אונליין של Vertex AI. אם הארגון רוצה לשמור על פרטיות של כל התעבורה, צריך להשתמש בנקודת קצה פרטית.

כדי להשתמש בנקודת קצה פרטית, צריך להגדיר את Vertex AI כך שתהיה לה גישה לרשת של ענן וירטואלי פרטי (VPC). כדי שנקודת הקצה הפרטית של התחזית תתחבר ישירות ל-Vertex AI, צריך להשתמש ב-VPC. מידע נוסף זמין במאמרים בנושא הגדרה של קישור בין רשתות VPC שכנות ושימוש בנקודות קצה פרטיות לחיזוי אונליין.

ModelDeploymentMonitoringJob

אפשר להשתמש במשאב ModelDeploymentMonitoringJob כדי לעקוב אחרי המודל ולקבל התראות אם יש חריגה שעלולה להשפיע על איכות התחזיות של המודל.

כשנתוני הקלט שונים מהנתונים ששימשו לאימון המודל, יכול להיות שביצועי המודל יורדים, גם אם המודל לא השתנה. ניטור המודל מנתח את תאריך הקלט כדי לזהות הטיה וסחף בתכונות:

  • Skew מתרחשת כשפיזור הנתונים של התכונה בייצור חורג מפיזור הנתונים של התכונה ששימשו לאימון המודל.
  • סחף מתרחש כשנתוני התכונה בסביבת הייצור משתנים באופן משמעותי לאורך זמן.

מידע נוסף זמין במאמר מבוא למעקב אחרי מודלים ב-Vertex AI. דוגמה לאופן ההטמעה של מעקב ב-Vertex AI באמצעות Vertex AI SDK מופיעה במחברת Vertex AI model monitoring with explainable AI feature attributions ב-GitHub.

מחלקות חיזוי של חיפוש וקטור

חיפוש וקטורי הוא שירות מנוהל שיוצר אינדקסים של דמיון, או וקטורים, כדי לבצע התאמה לפי דמיון. יש שני שלבים כלליים לביצוע התאמה לפי דמיון:

  1. יוצרים ייצוג וקטורי של הנתונים. הנתונים יכולים להיות טקסט, תמונות, סרטונים, אודיו או נתונים טבלאיים.

  2. התכונה Vector Search משתמשת בנקודות הקצה של הווקטורים שאתם יוצרים כדי לבצע חיפוש של וקטורים דומים בהיקף גדול ובזמן אחזור נמוך.

מידע נוסף זמין במאמר בנושא סקירה כללית של חיפוש וקטורי ובמחברת Create a Vector Search index ב-GitHub.

MatchingEngineIndex

המחלקות MatchingEngineIndex מייצגות את האינדקסים או הווקטורים שאתם יוצרים, שחיפוש וקטורי משתמש בהם כדי לבצע את חיפוש הדמיון.

יש שני אלגוריתמים לחיפוש שאפשר להשתמש בהם לאינדקס:

  1. TreeAhConfig משתמש באלגוריתם עץ רדוד (עץ רדוד באמצעות גיבוב אסימטרי). משתמשים ב-MatchingEngineIndex.create_tree_ah_index כדי ליצור אינדקס שמשתמש באלגוריתם tree-AH.
  2. BruteForceConfig משתמש בחיפוש ליניארי רגיל) משתמשים ב-MatchingEngineIndex.create_brute_force_index כדי ליצור אינדקס שמשתמש בחיפוש ליניארי רגיל.

מידע נוסף על הגדרת האינדקסים זמין במאמר בנושא הגדרת אינדקסים.

הקוד הבא הוא דוגמה ליצירת אינדקס שמשתמש באלגוריתם tree-AH:

my_tree_ah_index = aiplatform.Index.create_tree_ah_index(
    display_name="my_display_name",
    contents_delta_uri="gs://my_bucket/embeddings",
    dimensions=1,
    approximate_neighbors_count=150,
    distance_measure_type="SQUARED_L2_DISTANCE",
    leaf_node_embedding_count=100,
    leaf_nodes_to_search_percent=50,
    description="my description",
    labels={ "label_name": "label_value" }
)

הקוד הבא הוא דוגמה ליצירת אינדקס שמשתמש באלגוריתם של חיפוש בכוח:

my_brute_force_index = aiplatform.Index.create_brute_force_index(
    display_name="my_display_name",
    contents_delta_uri="gs://my_bucket/embeddings",
    dimensions=1,
    approximate_neighbors_count=150,
    distance_measure_type="SQUARED_L2_DISTANCE",
    description="my description",
    labels={ "label_name": "label_value" }
)

MatchingEngineIndexEndpoint

משתמשים במחלקה MatchingEngineIndexEndpoint כדי ליצור ולאחזר נקודת קצה. אחרי שמפעילים מודל בנקודת הקצה, מקבלים כתובת IP שמשמשת להרצת השאילתות.

הקוד הבא הוא דוגמה ליצירת נקודת קצה של אינדקס Matching Engine, ואז לפריסת אינדקס Matching Engine בנקודת הקצה:

my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
    display_name="sample_index_endpoint",
    description="index endpoint description",
    network="projects/123456789123/global/networks/my_vpc"
)

my_index_endpoint = my_index_endpoint.deploy_index(
    index=my_tree_ah_index, deployed_index_id="my_matching_engine_index_id"
)

המאמרים הבאים