ב-Managed Service for Apache Spark אפשר לחבר יחידות עיבוד גרפיות (GPU) לצומתי המאסטר וה-worker של Compute Engine באשכול של Managed Service for Apache Spark. אתם יכולים להשתמש במעבדי ה-GPU האלה כדי להאיץ עומסי עבודה ספציפיים במכונות, כמו למידת מכונה ועיבוד נתונים.
במאמר מעבדי GPU ב-Compute Engine מוסבר מה אפשר לעשות עם מעבדי GPU ואילו סוגי חומרה של מעבדי GPU זמינים.
לפני שמתחילים
- מעבדים גרפיים דורשים מנהלי התקנים ותוכנות מיוחדים. הפריטים האלה מותקנים מראש בתמונות של Managed Service for Apache Spark
-ml(מומלץ להשתמש בתמונות של-ml), ואפשר להתקין אותם ידנית אם צריך. - כדי להבין את עלות השימוש ביחידות GPU במכונות, קראו על תמחור GPU ב-Compute Engine.
- במאמר הגבלות על מכונות עם GPUs מוסבר איך המכונות האלה פועלות באופן שונה ממכונות ללא GPUs.
- בודקים את דף המכסות של הפרויקט כדי לוודא שיש לכם מספיק מכסות GPU (
NVIDIA_T4_GPUS,NVIDIA_P100_GPUSאוNVIDIA_V100_GPUS) בפרויקט. אם יחידות ה-GPU לא מופיעות בדף המכסות או שאתם צריכים מכסה נוספת של יחידות GPU, אתם יכולים לבקש הגדלה של המכסה.
סוגי GPU
הצמתים של Managed Service for Apache Spark תומכים בסוגי ה-GPU הבאים. כשמצרפים מעבדים גרפיים לאשכול של Managed Service for Apache Spark, צריך לציין את סוג המעבד הגרפי.
nvidia-tesla-l4– NVIDIA® Tesla® L4nvidia-tesla-a100– NVIDIA® Tesla® A100nvidia-tesla-p100– NVIDIA® Tesla® P100nvidia-tesla-v100– NVIDIA® Tesla® V100nvidia-tesla-p4– NVIDIA® Tesla® P4nvidia-tesla-t4– NVIDIA® Tesla® T4nvidia-rtx-pro-6000– NVIDIA® RTX® PRO 6000nvidia-tesla-p100-vws– תחנות עבודה וירטואליות של NVIDIA® Tesla® P100nvidia-tesla-p4-vws– תחנות עבודה וירטואליות של NVIDIA® Tesla® P4nvidia-tesla-t4-vws– תחנות עבודה וירטואליות של NVIDIA® Tesla® T4
צירוף מעבדי GPU לאשכול
כדי לצרף יחידות GPU לאשכול של Managed Service for Apache Spark, כשיוצרים את האשכול צריך לציין קובץ אימג' של -ml (מומלץ) או להשתמש בפעולת אתחול כדי להתקין מנהלי התקנים של GPU.
בדוגמאות הבאות מצוין או מונח השימוש בתמונה 2.3-ml-ubuntu כשיוצרים אשכול.
מסוףGoogle Cloud
כדי לצרף מעבדים גרפיים לאשכול Managed Service for Apache Spark:
- פותחים את הדף Create cluster.
- בקטע Worker configuration, לוחצים על הכרטיסייה GPUs ומציינים את הסוג והמספר של יחידות ה-GPU.
- כברירת מחדל, ההגדרות של צומת ה-driver (הראשי) זהות להגדרות של ה-primary worker. בקטע Additional configuration, אפשר ללחוץ על Driver node כדי לבטל את הסימון של התיבה Default driver node to the same as primary worker ולציין את סוג המכונה של צומת הדרייבר.
CLI של gcloud
כדי לצרף מעבדים גרפיים לצומת הראשי ולצומתי העובדים הראשיים והמשניים באשכול Managed Service for Apache Spark, יוצרים את האשכול באמצעות הדגלים gcloud dataproc clusters create
‑‑master-accelerator,
‑‑worker-accelerator ו-
‑‑secondary-worker-accelerator. אלה הערכים של הדגלים האלה:
- סוג ה-GPU שרוצים לצרף לצומת
- מספר יחידות ה-GPU שרוצים לצרף לצומת
חובה לציין את סוג ה-GPU, ואפשר לציין את מספר יחידות ה-GPU (ברירת המחדל היא GPU אחד).
לדוגמה:
gcloud dataproc clusters create cluster-name \ --image-version=2.3-ml-ubuntu \ --region=region \ --master-accelerator type=nvidia-tesla-t4 \ --worker-accelerator type=nvidia-tesla-t4,count=4 \ --secondary-worker-accelerator type=nvidia-tesla-t4,count=4 \ ... other flags
API בארכיטקטורת REST
כדי לצרף מעבדים גרפיים לצומת הראשי ולצומת העובד הראשי והמשני באשכול של Managed Service for Apache Spark, ממלאים את השדות InstanceGroupConfig.AcceleratorConfig
acceleratorTypeUri ו-acceleratorCount כחלק מבקשת ה-API של cluster.create. אלה הערכים שאפשר להזין בשדות האלה:
- סוג ה-GPU שרוצים לצרף לצומת
- מספר יחידות ה-GPU שצריך לצרף לצומת
התקנת מנהלי התקנים של GPU
כדי להשתמש ב-GPU שמחוברים לצמתים של Managed Service for Apache Spark, צריך להתקין מנהלי התקנים (דרייברים) של GPU.
במקום להשתמש במנהלי ההתקנים של ה-GPU שמותקנים בתמונות של -ml ב-Managed Service for Apache Spark, אתם יכולים להשתמש בפעולות האתחול הבאות כדי להתקין מנהלי התקנים של GPU כשאתם יוצרים אשכול:
אימות ההתקנה של מנהל ההתקן של ה-GPU
כדי לוודא שמנהל ההתקן של ה-GPU הותקן באשכול, מתחברים באמצעות SSH לצומת הראשי של האשכול ומריצים את הפקודה הבאה:
nvidia-smi
אם הדרייבר פועל כמו שצריך, הפלט יציג את גרסת הדרייבר ואת הנתונים הסטטיסטיים של ה-GPU (ראו אימות ההתקנה של דרייבר ה-GPU).
הגדרות אישיות של Spark
כששולחים משימה ל-Spark, אפשר להשתמש במאפיין סביבת זמן הריצה של הגדרת Spark spark.executorEnv עם משתנה הסביבה LD_PRELOAD כדי לטעון מראש את הספריות הנדרשות.
דוגמה:
gcloud dataproc jobs submit spark --cluster=CLUSTER_NAME \ --region=REGION \ --class=org.apache.spark.examples.SparkPi \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \ --properties=spark.executorEnv.LD_PRELOAD=libnvblas.so,spark.task.resource.gpu.amount=1,spark.executor.resource.gpu.amount=1,spark.executor.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh
משימת GPU לדוגמה
כדי לבדוק את ה-GPU ב-Managed Service for Apache Spark, אתם יכולים להריץ כל אחד מהג'ובים הבאים, שפועלים טוב יותר עם GPU:
- מריצים את אחת מהדוגמאות של Spark ML.
- מריצים את הדוגמה הבאה עם
spark-shellכדי להריץ חישוב מטריצה:
import org.apache.spark.mllib.linalg._
import org.apache.spark.mllib.linalg.distributed._
import java.util.Random
def makeRandomSquareBlockMatrix(rowsPerBlock: Int, nBlocks: Int): BlockMatrix = {
val range = sc.parallelize(1 to nBlocks)
val indices = range.cartesian(range)
return new BlockMatrix(
indices.map(
ij => (ij, Matrices.rand(rowsPerBlock, rowsPerBlock, new Random()))),
rowsPerBlock, rowsPerBlock, 0, 0)
}
val N = 1024 * 4
val n = 2
val mat1 = makeRandomSquareBlockMatrix(N, n)
val mat2 = makeRandomSquareBlockMatrix(N, n)
val mat3 = mat1.multiply(mat2)
mat3.blocks.persist.count
println("Processing complete!")