שימוש ברכיבי צינורות ב-Google Cloud

כשמשתמשים ב-Pipeline Components ‏ (GCPC), אפשר להשתמש בתכונות הבאות של Gemini Enterprise Agent Platform כדי לאבטח את הרכיבים והארטיפקטים. Google Cloud Google Cloud

ציון חשבון שירות לרכיב

כשמשתמשים ברכיב, אפשר לציין חשבון שירות. הרכיב יופעל ויפעל עם ההרשאות של חשבון השירות הזה. לדוגמה, אפשר להשתמש בקוד הבא כדי לציין את חשבון השירות של רכיב ModelDeploy:

model_deploy_op = ModelDeployOp(model=training_job_run_op.outputs["model"],
    endpoint=endpoint_op.outputs["endpoint"],
    automatic_resources_min_replica_count=1,
    automatic_resources_max_replica_count=1,
    service_account="SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com")

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE_ACCOUNT_ID: המזהה של חשבון השירות.
  • PROJECT_ID: מזהה הפרויקט.

מידע נוסף על שימוש בחשבון שירות בהתאמה אישית ועל הגדרת חשבון שירות לשימוש בצינורות של Gemini Enterprise Agent Platform.

שימוש ב-VPC Service Controls כדי למנוע זליגת נתונים

VPC Service Controls יכול לעזור לכם לצמצם את הסיכון לזליגת נתונים מצינורות של Gemini Enterprise Agent Platform. כשמשתמשים ב-VPC Service Controls כדי ליצור גבולות גזרה לשירות, המשאבים והנתונים שנוצרים על ידי Gemini Enterprise Agent Platform Pipelines ו-Pipeline Components מוגנים באופן אוטומטי. Google Cloud לדוגמה, כשמשתמשים ב-VPC Service Controls כדי להגן על הפייפליין, אי אפשר להוציא את הפריטים הבאים מגבולות גזרה לשירות:

  • נתוני אימון למודל AutoML
  • מודלים שיצרתם
  • תוצאות מבקשת תחזית באצווה

מידע נוסף על VPC Service Controls עם פלטפורמת הסוכנים של Gemini Enterprise

הגדרת קישור בין רשתות VPC שכנות (peering)

אפשר להגדיר רכיבי צינורות עיבוד נתונים (Pipeline) כדי ליצור קשר עם ענן וירטואלי פרטי (VPC) באמצעות פרמטרים נוספים. לדוגמה, אפשר להשתמש בקוד הבא כדי לציין רשת VPC לרכיב EndpointCreate: Google Cloud

endpoint_create_op = EndpointCreateOp(
    project="PROJECT_ID",
    location="REGION",
    display_name="endpoint-display-name",
    network="NETWORK")

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט.
  • REGION: האזור שבו אתם משתמשים ב-Gemini Enterprise Agent Platform.
  • NETWORK: רשת ה-VPC, למשל "projects/12345/global/networks/myVPC".

מידע נוסף על שיתוף פעולה בין רשתות VPC ב-Gemini Enterprise Agent Platform

שימוש במפתחות הצפנה בניהול הלקוח (CMEK)

כברירת מחדל, Google Cloud מצפין אוטומטית נתונים במצב מנוחה באמצעות מפתחות הצפנה שמנוהלים על ידי Google. אם יש לכם דרישות תאימות או רגולטוריות ספציפיות שקשורות למפתחות שמגנים על הנתונים שלכם, אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) עבור המשאבים שלכם. לפני שמתחילים להשתמש במפתחות הצפנה בניהול הלקוח, כדאי לקרוא על היתרונות של CMEK בפלטפורמת הסוכנים של Gemini Enterprise ועל המשאבים הנוכחיים שתומכים ב-CMEK.

הגדרת הרכיב באמצעות CMEK

אחרי שיוצרים מחזיק מפתחות ומפתח ב-Cloud Key Management Service, ומעניקים למצפין ולמפענח של Gemini Enterprise Agent Platform הרשאות למפתח, אפשר ליצור רכיב חדש עם תמיכה ב-CMEK על ידי ציון המפתח כאחד מפרמטרים היצירה. לדוגמה, אפשר להשתמש בקוד הבא כדי לציין מפתח לרכיב ModelBatchPredict:

model_batch_predict_op = ModelBatchPredictOp(project="PROJECT_ID",
    model=model_upload_op.outputs["model"],
    encryption_spec_key_name="projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME")

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION_ID: מזהה מיקום או אזור תקין, לדוגמה, us-central1.
  • KEY_RING_NAME: השם של אוסף המפתחות של CMEK. מידע נוסף על מחזיקי מפתחות זמין במאמר משאבי Cloud KMS.
  • KEY_NAME: השם של מפתח ה-CMEK.

הערה: Google Cloud יכול להיות שרכיבים שלא שייכים לפלטפורמת הסוכנים של Gemini Enterprise ידרשו הרשאות נוספות. לדוגמה, יכול להיות שרכיב BigQuery ידרוש הרשאה להצפנה ולפענוח. בנוסף, המיקום של מפתח ה-CMEK צריך להיות זהה למיקום של הרכיב. לדוגמה, אם רכיב BigQuery טוען נתונים ממערך נתונים שמבוסס על מיקום בארה"ב במספר אזורים, גם מפתח ה-CMEK צריך להיות מבוסס על מיקום בארה"ב במספר אזורים.

צריכה או יצירה של ארטיפקטים ברכיב

‫ Google Cloud SDK מגדיר קבוצה של סוגי ארטיפקטים של מטא-נתונים של ML שמשמשים כקלט ופלט של רכיבים. חלק מרכיבי Google Cloud Pipeline צורכים את הארטיפקטים האלה כקלט או מייצרים אותם כפלט.

בדף הזה מוסבר איך להשתמש בארטיפקטים האלה ואיך ליצור אותם.

שימוש בפריט מידע שנוצר בתהליך פיתוח (Artifact) של למידת מכונה

שימוש בפריט מידע שנוצר בתהליך פיתוח (Artifact) בקובץ YAML של רכיב

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

לדוגמה, רכיב ModelUploadOp יוצר ארטיפקט google.VertexModel שאפשר להשתמש בו ברכיב ModelDeployOp. כדי לאחזר משאב Model של Gemini Enterprise Agent Platform מהקלט (הפניה), משתמשים בקוד הבא בקובץ YAML של רכיב:

"model": "',"{{$.inputs.artifacts['model'].metadata['resourceName']}}", '"'

הסכימה המלאה של המטא-נתונים של הארטיפקט מופיעה בקובץ artifact_types.py במאגר Kubeflow ב-GitHub.

שימוש בארטיפקט ברכיב Python קל משקל

from kfp.dsl import Artifact, Input

@dsl.component
def classification_model_eval_metrics(
    project: str,
    location: str,  # "us-central1",
    model: Input[Artifact],
) :
   # Consumes the `resourceName` metadata
   model_resource_path = model.metadata["resourceName"]

דוגמה לשימוש בפריטי מידע מסוג Vertex ML Metadata זמינה במאמר אימון מודל סיווג באמצעות נתונים טבלאיים ו-Agent Platform AutoML.

יצירת פריט מידע שנוצר בתהליך פיתוח (Artifact) של למידת מכונה

בדוגמאות הקוד הבאות מוסבר איך ליצור ארטיפקט של Vertex ML Metadata שרכיב GCPC יכול לקבל כקלט.

שימוש בצומת ייבוא

בדוגמה הבאה נוצר צומת Importer שרושם רשומה חדשה של ארטיפקט ב-Vertex ML Metadata. צומת הייבוא מקבל את ה-URI ואת המטא-נתונים של הארטיפקט כפרימיטיבים, ואורז אותם בארטיפקט.

from google_cloud_pipeline_components import v1
from google_cloud_pipeline_components.types import artifact_types
from kfp.components import importer_node
from kfp import dsl

@dsl.pipeline(name=_PIPELINE_NAME)
def pipeline():
  # Using importer and UnmanagedContainerModel artifact for model upload
  # component.
  importer_spec = importer_node.importer(
      artifact_uri='gs://managed-pipeline-gcpc-e2e-test/automl-tabular/model',
      artifact_class=artifact_types.UnmanagedContainerModel,
      metadata={
          'containerSpec': {
              'imageUri':
                  'us-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server:prod'
          }
      })

  # Consuming the UnmanagedContainerModel artifact for the previous step
  model_upload_with_artifact_op = v1.model.ModelUploadOp(
      project=_GCP_PROJECT_ID,
      location=_GCP_REGION,
      display_name=_MODEL_DISPLAY_NAME,
      unmanaged_container_model=importer_spec.outputs['artifact'])

שימוש ברכיבים מבוססי-פונקציות של Python

בדוגמה הבאה אפשר לראות איך להפיק ארטיפקט של Vertex ML Metadata ישירות מרכיב Python.

from google_cloud_pipeline_components import v1
from kfp.components import importer_node
from kfp import dsl

@dsl.component(
    base_image='python:3.9',
    packages_to_install=['google-cloud-aiplatform'],
)
# Note currently KFP SDK doesn't support outputting artifacts in `google` namespace.
# Use the base type dsl.Artifact instead.
def return_unmanaged_model(model: dsl.Output[dsl.Artifact]):
  model.metadata['containerSpec'] = {
      'imageUri':
          'us-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server:prod'
  }
  model.uri = f'gs://automl-tabular-pipeline/automl-tabular/model'

@dsl.pipeline(name=_PIPELINE_NAME)
def pipeline():

  unmanaged_model_op = return_unmanaged_model()

  # Consuming the UnmanagedContainerModel artifact for the previous step
  model_upload_with_artifact_op = v1.model.ModelUploadOp(
      project=_GCP_PROJECT_ID,
      location=_GCP_REGION,
      display_name=_MODEL_DISPLAY_NAME,
      unmanaged_container_model=unmanaged_model_op.outputs['model'])

שימוש ברכיב משלכם שמבוסס על קונטיינר

בדוגמה הבאה מוצג איך ליצור פריט VertexBatchPredictionJob כפלט מרכיב מבוסס-קונטיינר באמצעות מחלקת כלי השירות artifact_types.py.

bp_job_artifact = VertexBatchPredictionJob(
    'batchpredictionjob', vertex_uri_prefix + get_job_response.name,
    get_job_response.name, get_job_response.output_info.bigquery_output_table,
    get_job_response.output_info.bigquery_output_dataset,
    get_job_response.output_info.gcs_output_directory)

    output_artifacts = executor_input_json.get('outputs', {}).get('artifacts', {})
    executor_output['artifacts'] = bp_job_artifact.to_executor_output_artifact(output_artifacts[bp_job_artifact.name])