פלטפורמת Agent Platform Pipelines מאפשרת לכם לתזמר את תהליכי העבודה של למידת מכונה (ML) בלי שרתים (serverless). כדי ש-Agent Platform Pipelines יוכל לתזמן את תהליך העבודה של למידת המכונה, צריך לתאר את תהליך העבודה כצינור. צינורות ML הם תהליכי עבודה ניידים וניתנים להרחבה של למידת מכונה שמבוססים על קונטיינרים ושירותים. Cloud de Confiance by S3NS
במדריך הזה מוסבר איך מתחילים לבנות צינורות עיבוד נתונים של ML.
באיזה SDK של צינורות צריך להשתמש?
צינורות של Agent Platform יכולים להריץ צינורות שנבנו באמצעות כל אחת מערכות ה-SDK הבאות:
Kubeflow Pipelines SDK גרסה 2.0 ואילך
TensorFlow Extended v0.30.0 ואילך
אם אתם משתמשים ב-TensorFlow בתהליך עבודה של ML שמעבד נתונים מובְנים או נתוני טקסט בנפח של טרה-בייט, מומלץ לבנות את צינור עיבוד הנתונים באמצעות TFX.
- כדי לקבל מידע נוסף על בניית צינור TFX, מומלץ לעיין במדריכים לתחילת העבודה עם TFX.
- כדי לקבל מידע נוסף על השימוש בצינורות של Agent Platform להפעלת צינור TFX, פועלים לפי ההדרכות של TFX ב-Cloud de Confiance by S3NS .
בתרחישי שימוש אחרים, מומלץ לבנות את צינור הנתונים באמצעות Kubeflow Pipelines SDK. כשיוצרים צינור באמצעות Kubeflow Pipelines SDK, אפשר ליישם את תהליך העבודה על ידי יצירת רכיבים מותאמים אישית או שימוש חוזר ברכיבים מוכנים מראש, כמו Cloud de Confiance by S3NS Pipeline Components. Cloud de Confiance by S3NS רכיבי Pipeline מקלים על השימוש בשירותי Gemini Enterprise Agent Platform, כמו AutoML ב-Pipeline.
במדריך הזה מוסבר איך ליצור צינורות עיבוד נתונים באמצעות Kubeflow Pipelines SDK.
לפני שמתחילים
לפני שיוצרים ומריצים את צינורות עיבוד הנתונים, צריך להגדיר את Cloud de Confiance הפרויקט ואת סביבת הפיתוח.
כדי להכין את Cloud de Confiance הפרויקט להרצת צינורות ML, פועלים לפי ההוראות במדריך בנושא הגדרתCloud de Confiance הפרויקט.
מתקינים את גרסה 2 ואילך של Kubeflow Pipelines SDK.
pip install --upgrade "kfp>=2,<3"
כדי להשתמש בלקוח Python של Gemini Enterprise Agent Platform בצינורות שלכם, צריך להתקין את ספריות הלקוח של Gemini Enterprise Agent Platform בגרסה 1.7 ואילך.
כדי להשתמש בשירותים של Gemini Enterprise Agent Platform בצינורות העיבוד, צריך להתקין את Cloud de Confiance by S3NS SDK.
תחילת העבודה עם פיתוח צינור עיבוד נתונים
כדי לתזמן את תהליך העבודה של למידת מכונה ב-Agent Platform Pipelines, קודם צריך לתאר את תהליך העבודה כצינור. בדוגמה הבאה אפשר לראות איך משתמשים בCloud de Confiance by S3NS רכיבי צינור עיבוד הנתונים עם Gemini Enterprise Agent Platform כדי ליצור מערך נתונים, לאמן מודל באמצעות AutoML ולפרוס את המודל המאומן לחיזויים.
לפני שמריצים את דוגמת הקוד הבאה, צריך להגדיר אימות.
איך מגדירים אימות
כדי להגדיר אימות, צריך ליצור מפתח של חשבון שירות ולהגדיר משתנה סביבה לנתיב של המפתח.
-
יוצרים חשבון שירות:
-
במסוף Cloud de Confiance , נכנסים לדף יצירת חשבון שירות.
- כותבים שם בשדה Service account name.
- אופציונלי: בשדה תיאור חשבון השירות, מזינים תיאור.
- לוחצים על יצירה.
- לוחצים על השדה בחירת תפקיד. בקטע All roles, בוחרים באפשרות Gemini Enterprise Agent Platform > Agent Platform User.
-
לוחצים על Done כדי ליצור את חשבון השירות.
חשוב לא לסגור את חלון הדפדפן. תשתמשו בו בשלב הבא.
-
-
יוצרים מפתח לחשבון השירות לצורך אימות:
- במסוף Cloud, לוחצים על כתובת האימייל של חשבון השירות שיצרתם. Cloud de Confiance
- לוחצים על Keys.
- לוחצים על Add key ואז על Create new key.
- לוחצים על Create. למחשב שלכם תתבצע הורדה של קובץ JSON עם המפתח.
- לוחצים על Close.
- נותנים לחשבון השירות החדש גישה לחשבון השירות שבו משתמשים להפעלת צינורות עיבוד הנתונים.
- לוחצים על כדי לחזור לרשימת חשבונות השירות.
לוחצים על השם של חשבון השירות שמשמש להפעלת צינורות עיבוד הנתונים. יופיע הדף פרטי חשבון השירות.
אם פעלתם לפי ההוראות במדריך להגדרת הפרויקט לצינורות עיבוד נתונים של Gemini Enterprise Agent Platform, זהו אותו חשבון שירות שיצרתם בקטע הגדרת חשבון שירות עם הרשאות גרנולריות. אחרת, Gemini Enterprise Agent Platform משתמש בחשבון השירות שמוגדר כברירת מחדל של Compute Engine כדי להפעיל צינורות. שם חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine הוא מהסוג הבא:
PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com- לוחצים על הכרטיסייה Permissions.
- לוחצים על הענקת גישה. החלונית Add principals מופיעה.
- בתיבה New principals, מזינים את כתובת האימייל של חשבון השירות שיצרתם בשלב הקודם.
- ברשימה הנפתחת Role בוחרים באפשרות Service accounts > Service account user.
- לוחצים על שמירה.
-
מגדירים את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS לנתיב של קובץ ה-JSON שמכיל את המַפְתח של חשבון השירות. המשתנה הזה חל רק על סשן המעטפת הנוכחי, כך שאם פותחים סשן חדש צריך להגדיר את המשתנה שוב.
למשל: Linux או macOS
מחליפים את [PATH] בנתיב של קובץ ה-JSON שמכיל את המַפְתח של חשבון השירות.
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
לדוגמה:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
למשל: Windows
מחליפים את [PATH] בנתיב של קובץ ה-JSON שמכיל את המפתח של חשבון השירות, ואת [FILE_NAME] בשם הקובץ.
עם PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
לדוגמה:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\[FILE_NAME].json"
באמצעות שורת הפקודה:
set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
הגדרת תהליך העבודה באמצעות חבילת Kubeflow Pipelines DSL
חבילת kfp.dsl מכילה את השפה הספציפית לדומיין (DSL) שבה אפשר להשתמש כדי להגדיר צינורות ורכיבים ולקיים איתם אינטראקציה.
רכיבי צינור עיבוד הנתונים של Kubeflow הם פונקציות ליצירת אובייקטים שיוצרות שלבים בצינור עיבוד הנתונים. בכל רכיב מתוארים הקלטים, הפלטים וההטמעה של הרכיב. לדוגמה, בדוגמת הקוד הבאה, ds_op הוא רכיב.
משתמשים ברכיבים כדי ליצור שלבים בצינור. כשמריצים צינור עיבוד נתונים, השלבים מבוצעים כשהנתונים שהם תלויים בהם הופכים לזמינים. לדוגמה, רכיב אימון יכול לקבל קובץ CSV כקלט ולהשתמש בו כדי לאמן מודל.
import kfp
from google.cloud import aiplatform
from google_cloud_pipeline_components.v1.dataset import ImageDatasetCreateOp
from google_cloud_pipeline_components.v1.automl.training_job import AutoMLImageTrainingJobRunOp
from google_cloud_pipeline_components.v1.endpoint import EndpointCreateOp, ModelDeployOp
project_id = PROJECT_ID
pipeline_root_path = PIPELINE_ROOT
# Define the workflow of the pipeline.
@kfp.dsl.pipeline(
name="automl-image-training-v2",
pipeline_root=pipeline_root_path)
def pipeline(project_id: str):
# The first step of your workflow is a dataset generator.
# This step takes a Google Cloud Pipeline Component, providing the necessary
# input arguments, and uses the Python variable `ds_op` to define its
# output. Note that here the `ds_op` only stores the definition of the
# output but not the actual returned object from the execution. The value
# of the object is not accessible at the dsl.pipeline level, and can only be
# retrieved by providing it as the input to a downstream component.
ds_op = ImageDatasetCreateOp(
project=project_id,
display_name="flowers",
gcs_source="gs://cloud-samples-data/vision/automl_classification/flowers/all_data_v2.csv",
import_schema_uri=aiplatform.schema.dataset.ioformat.image.single_label_classification,
)
# The second step is a model training component. It takes the dataset
# outputted from the first step, supplies it as an input argument to the
# component (see `dataset=ds_op.outputs["dataset"]`), and will put its
# outputs into `training_job_run_op`.
training_job_run_op = AutoMLImageTrainingJobRunOp(
project=project_id,
display_name="train-iris-automl-mbsdk-1",
prediction_type="classification",
model_type="CLOUD",
dataset=ds_op.outputs["dataset"],
model_display_name="iris-classification-model-mbsdk",
training_fraction_split=0.6,
validation_fraction_split=0.2,
test_fraction_split=0.2,
budget_milli_node_hours=8000,
)
# The third and fourth step are for deploying the model.
create_endpoint_op = EndpointCreateOp(
project=project_id,
display_name = "create-endpoint",
)
model_deploy_op = ModelDeployOp(
model=training_job_run_op.outputs["model"],
endpoint=create_endpoint_op.outputs['endpoint'],
automatic_resources_min_replica_count=1,
automatic_resources_max_replica_count=1,
)
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: הפרויקט ב- Cloud de Confiance שבו צינור העברת הנתונים הזה פועל.
PIPELINE_ROOT_PATH: מציינים URI של Cloud Storage שחשבון השירות של צינורות העיבוד יכול לגשת אליו. פריטי המידע של הרצות הצינור מאוחסנים בתיקיית הבסיס של הצינור. ה-URI של Cloud Storage צריך להתחיל ב-
gs://.אפשר להגדיר את שורש צינור עיבוד הנתונים כארגומנט של ההערה
@kfp.dsl.pipelineבפונקציית צינור עיבוד הנתונים, או להגדיר אותו כשמפעילים את הפונקציהcreate_run_from_job_specכדי ליצור הרצה של צינור עיבוד הנתונים.
קומפילציה של צינור עיבוד הנתונים לקובץ YAML
אחרי שמגדירים את תהליך העבודה של צינור עיבוד הנתונים, אפשר להמשיך לקומפילציה של צינור עיבוד הנתונים לפורמט YAML. קובץ ה-YAML כולל את כל המידע שנדרש להרצת הצינור ב-Agent Platform Pipelines.
from kfp import compiler
compiler.Compiler().compile(
pipeline_func=pipeline,
package_path='image_classif_pipeline.yaml'
)
שליחת ההרצה של צינור עיבוד הנתונים
אחרי שתהליך העבודה של הצינור יקומפל לפורמט YAML, תוכלו להשתמש בלקוח Python של Gemini Enterprise Agent Platform כדי לשלוח ולהריץ את הצינור.
import google.cloud.aiplatform as aip
# Before initializing, make sure to set the GOOGLE_APPLICATION_CREDENTIALS
# environment variable to the path of your service account.
aip.init(
project=project_id,
location=PROJECT_REGION,
)
# Prepare the pipeline job
job = aip.PipelineJob(
display_name="automl-image-training-v2",
template_path="image_classif_pipeline.yaml",
pipeline_root=pipeline_root_path,
parameter_values={
'project_id': project_id
}
)
job.submit()
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_REGION: האזור שבו הפייפליין הזה פועל.
בדוגמה הקודמת:
- פייפליין של Kubeflow מוגדר כפונקציית Python.
הפונקציה מסומנת באמצעות העיטור
@kfp.dsl.pipeline, שמציין את השם ואת נתיב הבסיס של צינור העיבוד. נתיב הבסיס של צינור העיבוד הוא המיקום שבו מאוחסנים פריטי המידע של צינור העיבוד. - שלבי תהליך העבודה של הצינור נוצרים באמצעות Cloud de Confiance by S3NS רכיבי צינור. כשמשתמשים בפלטים של רכיב מסוים כקלט של רכיב אחר, מגדירים את תהליך העבודה של צינור העיבוד כגרף. לדוגמה:
training_job_run_opתלוי בפלט שלds_op.dataset - מבצעים קומפילציה של צינור הנתונים באמצעות
kfp.compiler.Compiler. - אתם יוצרים הפעלה של צינור עיבוד נתונים ב-Agent Platform Pipelines באמצעות לקוח Python של Gemini Enterprise Agent Platform. כשמריצים צינור עיבוד נתונים, אפשר לשנות את שם צינור עיבוד הנתונים ואת נתיב הבסיס שלו. אפשר לקבץ הרצות של צינורות על סמך שם הצינור. שינוי השם של צינור עיבוד הנתונים יכול לעזור לכם להבחין בין הרצות של צינורות עיבוד נתונים בייצור לבין הרצות ניסיוניות.
כדי לקבל מידע נוסף על יצירת צינורות, אפשר לקרוא את הקטע יצירת צינורות Kubeflow ולעיין בדוגמאות ובמדריכים.
בדיקה של צינור עיבוד נתונים באופן מקומי (אופציונלי)
אחרי שמגדירים את צינורות העיבוד ואת הרכיבים, אפשר לבדוק את קוד הרכיב על ידי הפעלת הקוד בסביבת הכתיבה המקומית. הפעלת צינור עיבוד הנתונים או רכיב באופן מקומי מאפשרת לזהות ולפתור בעיות פוטנציאליות לפני יצירת הפעלה של צינור עיבוד הנתונים בסביבה מרוחקת, כמו Agent Platform Pipelines. מידע נוסף על הפעלת צינורות ורכיבים באופן מקומי זמין במאמר Local execution (הפעלה מקומית) בתיעוד של KFP.
בדף הזה מוסבר איך להגדיר ולהפעיל צינור עיבוד נתונים שכולל שתי משימות.
הגדרת הסביבה המקומית
אופציונלי: מתקינים את Docker.
אפשר להשתמש בקוד לדוגמה הבא כדי להגדיר צינור עיבוד נתונים ראשוני:
from kfp import dsl # Define a component to add two numbers. @dsl.component def add(a: int, b: int) -> int: return a + b # Define a simple pipeline using the component. @dsl.pipeline def addition_pipeline(x: int, y: int, z: int) -> int: task1 = add(a=x, b=y) task2 = add(a=task1.output, b=z) return task2.output
הפעלת ביצוע מקומי
מפעילים סשן מקומי באמצעות הפונקציה local.init(). כשמשתמשים ב-local.init(), ה-SDK של KFP מריץ באופן מקומי את צינורות העיבוד והרכיבים כשמפעילים אותם.
כשמשתמשים ב-local.init(), צריך לציין סוג של רץ. סוג הרצת התהליך מציין איך KFP צריך להריץ כל משימה.
אפשר להשתמש בדוגמה הבאה כדי לציין את סוג ה-Runner DockerRunner להרצת כל משימה במאגר. מידע נוסף על רצים מקומיים שנתמכים על ידי KFP זמין במאמר Local runners במסמכי התיעוד של KFP.
from kfp import local
local.init(runner=local.DockerRunner())
pipeline_task = addition_pipeline(x=1, y=2, z=3)
כדי לראות את הפלט של משימת צינור עיבוד הנתונים בהרצה מקומית, משתמשים בקוד הבא:
print(f'Result: {pipeline_task.output}')
פיתוח צינורות עיבוד נתונים של Kubeflow
כדי ליצור צינור, מבצעים את התהליך הבא.
מעצבים את צינור עיבוד הנתונים כסדרה של רכיבים. כדי לעודד שימוש חוזר, לכל רכיב צריכה להיות אחריות אחת. ככל האפשר, מומלץ לתכנן את צינור עיבוד הנתונים כך שיעשה שימוש חוזר ברכיבים מוכחים, כמו רכיבי צינור עיבוד הנתונים שלCloud de Confiance by S3NS .
ליצור רכיבים מותאמים אישית שנדרשים להטמעה של תהליך העבודה של למידת המכונה באמצעות Kubeflow Pipelines SDK. רכיבים הם קבוצות קוד עצמאיות שמבצעות שלב בתהליך העבודה של למידת מכונה. אפשר להשתמש באפשרויות הבאות כדי ליצור רכיבים של צינור עיבוד הנתונים.
אורזים את הקוד של הרכיב כקובץ אימג' של קונטיינר. האפשרות הזו מאפשרת לכם לכלול בפייפליין שלכם קוד שנכתב בכל שפה שאפשר לארוז כקובץ אימג' של קונטיינר.
מטמיעים את הקוד של הרכיב כפונקציית Python עצמאית ומשתמשים ב-Kubeflow Pipelines SDK כדי לארוז את הפונקציה כרכיב. האפשרות הזו מקלה על יצירת רכיבים מבוססי Python.
מפתחים את צינור עיבוד הנתונים כפונקציית Python.
משתמשים בקומפיילר של Kubeflow Pipelines SDK כדי לקמפל את צינור עיבוד הנתונים.
from kfp import compiler compiler.Compiler().compile( pipeline_func=PIPELINE_FUNCTION, package_path=PIPELINE_PACKAGE_PATH)מחליפים את מה שכתוב בשדות הבאים:
- PIPELINE_FUNCTION: השם של הפונקציה של צינור הנתונים.
- PIPELINE_PACKAGE_PATH: הנתיב למיקום שבו רוצים לאחסן את צינור העיבוד המהדר.
מריצים את צינור עיבוד הנתונים באמצעות מסוף Cloud de Confiance או Python.
גישה למשאבים בצינור Cloud de Confiance by S3NS
אם לא מציינים חשבון שירות כשמריצים צינור עיבוד נתונים, Agent Platform Pipelines משתמש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine כדי להריץ את צינור עיבוד הנתונים. צינורות עיבוד נתונים של Agent Platform משתמשים גם בחשבון השירות של הרצת צינור עיבוד נתונים כדי לאשר לצינור עיבוד הנתונים לגשת למשאבים שלCloud de Confiance by S3NS . כברירת מחדל, לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine יש את התפקיד 'עורך פרויקט'. יכול להיות שהפעולה הזו תעניק לצינורות שלכם גישה מוגזמת למשאבים של Cloud de Confiance by S3NS בפרויקט Cloud de Confiance .
בקישורים הבאים אפשר לקרוא מידע נוסף על שימוש בניהול זהויות והרשאות גישה כדי ליצור חשבון שירות ולנהל את הגישה שניתנה לחשבון שירות.
שמירה על עדכניות של צינורות הנתונים
לקוחות ה-SDK וקובצי האימג' של הקונטיינרים שבהם אתם משתמשים כדי ליצור ולהריץ צינורות, מתעדכנים מעת לעת לגרסאות חדשות כדי לתקן פרצות אבטחה ולהוסיף פונקציונליות חדשה. כדי שהצינורות שלכם יהיו מעודכנים עם הגרסה האחרונה, מומלץ לבצע את הפעולות הבאות:
כדאי לעיין במדיניות התמיכה במסגרות של Gemini Enterprise Agent Platform וברשימת המסגרות הנתמכות.
כדי להתעדכן בגרסאות חדשות, מומלץ להירשם לעדכונים של הערות על גרסאות של Gemini Enterprise Agent Platform ולעדכונים של פידים של RSS ב-PyPi.org לגבי ערכות ה-SDK שבהן אתם משתמשים (Kubeflow Pipelines SDK, Google Cloud Pipeline Components SDK או TensorFlow Extended SDK).
אם יש לכם תבנית או הגדרה של צינור שמתייחסות למאגר עם פגיעויות אבטחה, אתם צריכים לעשות את הפעולות הבאות:
מתקינים את הגרסה העדכנית של ה-SDK עם התיקונים.
צריך לבנות מחדש את תבנית או הגדרת צינור העיבוד ולהדר אותה מחדש.
מעלים מחדש את התבנית או ההגדרה ל-Artifact Registry או ל-Cloud Storage.
המאמרים הבאים
- במאמר הזה מוסבר איך לתזמר תהליכי עבודה של למידת מכונה.
- איך מריצים צינורות
- הצגה חזותית של התוצאות של הרצות צינורות וניתוח שלהן.