יצירת מכונה וירטואלית חסויה עם GPU

כדי להשתמש בGPU עם Confidential VMs, צריך ליצור מכונה וירטואלית באמצעות סוג מכונה נתמך ומודל הקצאה של מכונה. אחרי שיוצרים את מכונת ה-VM, מפעילים את מצב Confidential Computing ב-GPU המצורף.

מכונות וירטואליות (VM) חסויות עם מעבדי GPU של NVIDIA זמינות בסוגי המכונות הבאים:

  • מכונה מסוג A3 High: מעבדי GPU מסוג NVIDIA H100 עם Intel TDX. יש תמיכה במודלים של הקצאת משאבים לפי דרישה ושל הקצאת משאבים עם התחלה גמישה.

  • מכונה מסוג G4: NVIDIA RTX PRO 6000 עם AMD SEV. תמיכה במודלים של הקצאה רגילה (על פי דרישה), ספוט והתחלה גמישה (Flex-start), והזמנות.

    כשמשתמשים ב-GPU מסוג NVIDIA RTX Pro 6000 עם מכונות וירטואליות מסוג Confidential G4, משלמים באופן אוטומטי דמי רישיון על תוכנת המחשב והשירותים של NVIDIA Confidential Computing. לפרטים נוספים, קראו את המאמר תמחור של Confidential Computing עם GPUs.

לפני שיוצרים Confidential VM עם GPU, צריך לוודא שיש מספיק מכסת GPU. למידע נוסף, ראו מכסות.

יצירת Confidential VM עם GPU

כדי ליצור מכונה וירטואלית של Confidential VM עם GPU מצורף, משתמשים באחד ממודלי ההקצאה הבאים:

מודל רגיל (על פי דרישה) או מודל ספוט

gcloud

כדי ליצור מכונה רגילה (על פי דרישה) או VM במודל Spot שעברה אופטימיזציה למאיצים באמצעות ה-CLI של gcloud, משתמשים בפקודת המשנה instances create עם הדגל --provisioning-model.

gcloud compute instances create INSTANCE_NAME \
    --provisioning-model=PROVISIONING_MODEL \
    --confidential-compute-type=CONFIDENTIAL_COMPUTING_TECHNOLOGY \
    --machine-type=MACHINE_TYPE_NAME \
    --maintenance-policy=TERMINATE \
    --zone=ZONE_NAME \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY_NAME \
    --boot-disk-size=30G

כדי להפעיל אתחול מאובטח, אפשר להשתמש בדגל --shielded-secure-boot לאתחול של מכונות וירטואליות.

מספקים את הערכים הבאים:

  • ‫INSTANCE_NAME: השם של המכונה הווירטואלית החדשה.

  • ‫PROVISIONING_MODEL: מודל הקצאת המשאבים שנתמך על ידי סוג המכונה. צריך לבחור אחת מהאפשרויות:

    • סוג מכונה A3 High: SPOT למופעים של VM במודל Spot.

    • סוג מכונה G4: ‏STANDARD למכונות וירטואליות רגילות (על פי דרישה) או SPOT ל-VM במודל Spot. אם לא מציינים ערך, ברירת המחדל היא STANDARD.

  • ‫CONFIDENTIAL_COMPUTING_TECHNOLOGY: סוג טכנולוגיית Confidential Computing שבה רוצים להשתמש. צריך לבחור אחת מהאפשרויות:

    • סוג המכונה A3 High (a3-highgpu-1g): TDX

    • מכונה מסוג G4 ‏ (g4-standard-48): SEV

  • ‫MACHINE_TYPE_NAME: סוג המכונה הווירטואלית. בוחרים אחת מהאפשרויות הבאות:

    • a3-highgpu-1g

    • g4-standard-48

  • ‫ZONE_NAME: האזור הנתמך שבו רוצים ליצור את המכונה הווירטואלית.

  • ‫IMAGE_PROJECT: הפרויקט שמכיל את תמונת מערכת ההפעלה שנתמכת על ידי מכונה וירטואלית חסויה ל-GPU.

  • ‫IMAGE_FAMILY_NAME: משפחת התמונות של מערכת ההפעלה שנתמכת ב-Confidential VM ל-GPU.

REST

כדי ליצור מכונה רגילה (על פי דרישה) או מכונה של VM במודל Spot, שולחים את בקשת ה-POST הבאה עם תוכן הגוף המתאים.

משתמשים ב-method הבא ב-HTTP ובכתובת ה-URL:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

משתמשים בגוף בקשת ה-JSON הבא:

{
  "name": "INSTANCE_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE_NAME",
  "confidentialInstanceConfig": {
    "confidentialInstanceType": "CONFIDENTIAL_COMPUTING_TECHNOLOGY"
  },
  "scheduling": {
    "onHostMaintenance": "TERMINATE",
    "automaticRestart": true,
    "provisioningModel": "PROVISIONING_MODEL"
  },
  "disks": [
    {
      "boot": true,
      "autoDelete": true,
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY",
        "diskSizeGb": "30"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ]
}

מספקים את הערכים הבאים:

  • ‫PROJECT_ID: אופציונלי. מזהה הפרויקט שבו יוצרים את המכונה הווירטואלית.

  • ‫ZONE: האזור הנתמך שבו רוצים ליצור את המכונה הווירטואלית.

  • ‫INSTANCE_NAME: השם של המכונה הווירטואלית החדשה.

  • ‫MACHINE_TYPE_NAME: סוג המכונה הווירטואלית. בוחרים באחת מהאפשרויות הבאות:

    • a3-highgpu-1g

    • g4-standard-48

  • ‫CONFIDENTIAL_COMPUTING_TECHNOLOGY: סוג הטכנולוגיה של Confidential Computing שרוצים להשתמש בה. צריך לבחור אחת מהאפשרויות:

    • סוג המכונה A3 High (a3-highgpu-1g): TDX

    • סוג מכונה G4 (g4-standard-48): SEV

  • ‫PROVISIONING_MODEL: מודל ההקצאה שסדרת המכונות תומכת בו. צריך לבחור אחת מהאפשרויות:

    • סוג המכונה A3 High: SPOT למופעים של מכונות וירטואליות במודל Spot.

    • סוג מכונה G4: ‏STANDARD למכונות וירטואליות רגילות (על פי דרישה) או SPOT למכונות וירטואליות במודל Spot. אם לא מציינים ערך, ערך ברירת המחדל הוא STANDARD.

  • ‫IMAGE_PROJECT: הפרויקט שמכיל את תמונת מערכת ההפעלה שנתמכת על ידי מכונה וירטואלית חסויה ל-GPU.

  • ‫IMAGE_FAMILY: משפחת תמונות מערכת ההפעלה שנתמכות על ידי Confidential VM ל-GPU.

מודל Flex-start

כדי להשתמש במודל התחלה גמישה (Flex-start), צריך קודם ליצור תבנית של הגדרות מכונה, ואז להשתמש בתבנית הזו כדי ליצור קבוצת מופעי מכונה מנוהלים (MIG). אחרי זה תוכלו להוסיף מכונות וירטואליות עם GPU ל-MIG באמצעות בקשות לשינוי כמות.

שימוש בבקשה לשינוי גודל של MIG עם מודל ההקצאה flex-start משפר את הזמינות של מכונות וירטואליות עם GPU. מידע נוסף זמין במאמר מידע על בקשות לשינוי כמות בקבוצת MIG.

לפני שמתחילים

יצירת קבוצת מופעי מכונה מנוהלים (MIG) עם מכונות וירטואליות של GPU

כדי ליצור תבנית של הגדרות מכונה, ואז להשתמש בתבנית כדי ליצור קבוצת MIG, צריך לבצע את השלבים הבאים.

  1. יוצרים תבנית של הגדרות מכונה.

    gcloud

    gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
        --provisioning-model=FLEX_START \
        --confidential-compute-type=CONFIDENTIAL_COMPUTING_TECHNOLOGY \
        --machine-type=MACHINE_TYPE_NAME \
        --maintenance-policy=TERMINATE \
        --image-project=IMAGE_PROJECT \
        --image-family=IMAGE_FAMILY_NAME \
        --boot-disk-size=30G \
        --instance-termination-action=DELETE \
        --max-run-duration=RUN_DURATION \
        --project=PROJECT_ID
    

    מספקים את הערכים הבאים:

    • ‫INSTANCE_TEMPLATE_NAME: השם של תבנית של הגדרות מכונה חדשה.

    • ‫CONFIDENTIAL_COMPUTING_TECHNOLOGY: סוג הטכנולוגיה של Confidential Computing שרוצים להשתמש בה. צריך לבחור אחת מהאפשרויות:

      • סוג המכונה A3 High (a3-highgpu-1g): TDX

      • מכונה מסוג G4 ‏ (g4-standard-48): SEV

    • ‫MACHINE_TYPE_NAME: סוג המכונה הווירטואלית. בוחרים אחת מהאפשרויות הבאות:

      • a3-highgpu-1g

      • g4-standard-48

    • ‫IMAGE_PROJECT: הפרויקט שמכיל את התמונה של מערכת ההפעלה שנתמכת ב-Confidential VM ל-GPU.

    • ‫IMAGE_FAMILY_NAME: משפחת קובצי האימג' של מערכת ההפעלה שנתמכת ב-Confidential VM ל-GPU שבהם רוצים להשתמש.

    • ‫RUN_DURATION: משך הזמן שבו אתם רוצים שהמכונות הווירטואליות המבוקשות יפעלו. צריך להזין את הערך כמספר הימים, השעות, הדקות או השניות, ואחריו את האותיות d,‏ h,‏ m ו-s, בהתאמה. לדוגמה: 6d8h44m.

    • ‫PROJECT_ID: מזהה הפרויקט שבו יוצרים את המכונה הווירטואלית.

    REST

    כדי ליצור תבנית של הגדרות מכונה של Confidential VMs, שולחים את בקשת ה-POST הבאה עם תוכן הבקשה המתאים.

    משתמשים בשיטת ה-HTTP ובכתובת ה-URL הבאות:

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceTemplates
    

    משתמשים בתוכן הבא של בקשת JSON:

    {
      "name": "INSTANCE_TEMPLATE_NAME",
      "properties": {
        "confidentialInstanceConfig": {
          "confidentialInstanceType": "CONFIDENTIAL_COMPUTING_TECHNOLOGY"
        },
        "machineType": "MACHINE_TYPE_NAME",
        "scheduling": {
          "instanceTerminationAction": "DELETE",
          "maxRunDuration": {
            "seconds": "RUN_DURATION_IN_SECONDS"
          },
          "automaticRestart": true,
          "onHostMaintenance": "TERMINATE",
          "provisioningModel": "FLEX_START",
          "preemptible": false
        },
        "disks": [
          {
            "autoDelete": true,
            "index": 0,
            "boot": true,
            "kind": "compute#attachedDisk",
            "mode": "READ_WRITE",
            "initializeParams": {
              "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY_NAME",
              "diskSizeGb": "30"
            },
            "type": "PERSISTENT"
          }
        ],
        "networkInterfaces": [
          {
            "accessConfigs": [
              {
                "kind": "compute#accessConfig",
                "name": "external-nat",
                "networkTier": "PREMIUM",
                "type": "ONE_TO_ONE_NAT"
              }
            ],
            "kind": "compute#networkInterface",
            "name": "nic0",
            "network": "projects/PROJECT_ID/global/networks/default"
          }
        ],
        "canIpForward": false
      }
    }
    

    כדי להפעיל את Secure Boot, אפשר לכלול את האובייקט הבא להפעלת מכונות וירטואליות.

    "shieldedInstanceConfig": {
      "enableIntegrityMonitoring": true,
      "enableSecureBoot": true,
      "enableVtpm": true
    }
    

    מספקים את הערכים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את התבנית.

    • ‫REGION: האזור שבו רוצים ליצור את התבנית.

    • ‫INSTANCE_TEMPLATE_NAME: השם של התבנית החדשה של הגדרות המכונה הווירטואלית.

    • ‫CONFIDENTIAL_COMPUTING_TECHNOLOGY: סוג טכנולוגיית Confidential Computing שבה רוצים להשתמש. צריך לבחור אחת מהאפשרויות:

      • סוג המכונה A3 High (a3-highgpu-1g): TDX

      • מכונה מסוג G4 ‏ (g4-standard-48): SEV

    • ‫MACHINE_TYPE_NAME: סוג המכונה הווירטואלית. בוחרים אחת מהאפשרויות הבאות:

      • a3-highgpu-1g

      • g4-standard-48

    • ‫RUN_DURATION_IN_SECONDS: משך הזמן, בשניות, שבו אתם רוצים שהמכונות הווירטואליות המבוקשות יפעלו. הערך צריך להיות בין 600 ל-604800 שניות.

    • ‫IMAGE_PROJECT: הפרויקט שמכיל את התמונה של מערכת ההפעלה שנתמכת ב-Confidential VM ל-GPU.

    • ‫IMAGE_FAMILY_NAME: משפחת מערכת ההפעלה שנתמכת על ידי Confidential VM לשימוש ב-GPU.

  2. יוצרים MIG ובקשה לשינוי כמות כדי להוסיף מכונות וירטואליות של GPU בבת אחת.

  3. מציגים את רשימת המכונות שקיימות ב-MIG.

    gcloud

    gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
        --zone=ZONE_NAME \
        --project=PROJECT_ID
    

    מספקים את הערכים הבאים:

    • ‫INSTANCE_GROUP_NAME: השם של ה-MIG.

    • ‫ZONE_NAME: האזור הנתמך שממנו רוצים לקבל רשימה של מכונות וירטואליות.

    • ‫PROJECT_ID: אופציונלי. המזהה של הפרויקט שממנו רוצים לקבל רשימה של מכונות וירטואליות.

    REST

    כדי להציג רשימה של כל התבניות, שולחים את בקשת ה-GET הבאה.

    משתמשים ב-method הבא ב-HTTP ובכתובת ה-URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
    

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

    משתמשים ב-method הבא ב-HTTP ובכתובת ה-URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/ZONE_NAME/instanceTemplates
    

    מספקים את הערכים הבאים:

    • ‫ZONE_NAME: האזור הנתמך שממנו רוצים לקבל רשימה של מופעים של מכונות וירטואליות.

    • ‫PROJECT_ID: מזהה הפרויקט שממנו רוצים לקבל רשימה של מופעים של מכונות וירטואליות.

שימוש בהזמנות עם מכונות של Confidential VM

אתם יכולים להשתמש במקום שמור כדי לוודא שיש לכם קיבולת ל-Confidential VMs רק עם סוג המכונה G4.

כדי להשתמש בהזמנה ל-Confidential VM instance:

  1. יוצרים הזמנה רגילה באזור הנתמך. כדי לקבוע איך המכונות יצרכו את המקום השמור, אתם יכולים להשתמש בדגל --require-specific-reservation כשאתם יוצרים את המקום השמור.

  2. יצירת מכונה וירטואלית מסוג Confidential VM כדי להשתמש בהזמנה. כשיוצרים את המכונה הווירטואלית, צריך לכלול את הדגל --confidential-compute-type=SEV כדי להפוך אותה ל-Confidential VM. האופן שבו המכונה הזו צורכת את המקום השמור תלוי בהגדרות השיוך של המקום השמור.

בדוגמאות הבאות מוסבר איך להשתמש בהזמנות עם מופעים של Confidential VM. השיטה לניצול ההזמנה תלויה באופן שבו היא נוצרה:

  • שימוש אוטומטי: אם יוצרים הזמנה בלי הדגל --require-specific-reservation, אפשר ליצור מכונה וירטואלית של G4 Confidential VM עם מאפיינים תואמים (כמו סוג המכונה או האזור) כדי להשתמש בהזמנה באופן אוטומטי.

  • צריכה ספציפית: אם יוצרים הזמנה עם הדגל --require-specific-reservation, צריך לטרגט את ההזמנה באמצעות הדגלים --reservation-affinity=specific ו---reservation=RESERVATION_NAME כשיוצרים את המכונה:

    gcloud compute instances create INSTANCE_NAME \
        --project=PROJECT_ID \
        --zone=ZONE_NAME \
        --machine-type=g4-standard-48 \
        --confidential-compute-type=SEV \
        --image-project=ubuntu-os-cloud \
        --image-family=ubuntu-2404-lts-amd64 \
        --reservation-affinity=specific \
        --reservation=RESERVATION_NAME
    

    מספקים את הערכים הבאים:

    • ‫INSTANCE_NAME: השם של המכונה הווירטואלית החדשה.

    • ‫PROJECT_ID: אופציונלי. מזהה הפרויקט שבו רוצים ליצור את המכונה הווירטואלית.

    • ‫ZONE_NAME: האזור הנתמך שבו רוצים ליצור את המכונה הווירטואלית.

    • ‫RESERVATION_NAME: השם של ההזמנה.

במאמר צריכת הזמנות מוסבר איך מכונות וירטואליות צורכות הזמנות ואיך פועלת הזיקה.

הפעלת Confidential Computing ב-GPU

  1. מתחברים למכונה וירטואלית בקבוצת המכונות המנוהלת באמצעות הפקודה gcloud compute ssh.

    gcloud compute ssh
    
  2. מעדכנים את רשימת החבילות ומתקינים את הכלים והספריות הנדרשים.

    sudo apt-get update --yes
    sudo apt-get install linux-headers-$(uname -r)
    sudo apt install -y build-essential libxml2 libncurses5-dev pkg-config libvulkan1 gcc-12
    
  3. מתקינים את מנהלי ההתקנים המתאימים של ה-GPU במכונה הווירטואלית. למכונות וירטואליות עם אתחול מאובטח מופעל, אפשר לעיין במאמר בנושא התקנת דרייברים של GPU (מכונות וירטואליות עם אתחול מאובטח). אנחנו ממליצים להשתמש בגרסה 580 ומעלה של מנהלי ההתקנים של מודול הליבה (kernel) הפתוח של NVIDIA.

  4. כדי להגדיר תקשורת מאובטחת בין ה-GPU לבין מנהל ההתקן של ה-GPU, צריך להפעיל את Linux Kernel Crypto API‏ (LKCA).

    echo "install nvidia /sbin/modprobe ecdsa_generic; /sbin/modprobe ecdh; /sbin/modprobe --ignore-install nvidia" | sudo tee /etc/modprobe.d/nvidia-lkca.conf
    sudo update-initramfs -u
    
  5. מפעילים את מצב ההתמדה כדי ליצור חיבור מאובטח של פרוטוקול אבטחה ומודל נתונים (SPDM) בין ה-GPU לבין מנהל ההתקן של ה-GPU.

    sudo test -f /usr/lib/systemd/system/nvidia-persistenced.service && sudo sed -i "s/no-persistence-mode/uvm-persistence-mode/g" /usr/lib/systemd/system/nvidia-persistenced.service
    sudo systemctl daemon-reload
    
  6. מפעילים מחדש את המכונה הווירטואלית כדי להחיל את ההגדרות של LKCA ומצב ההתמדה.

    sudo reboot
    
  7. מתחברים למכונה וירטואלית בקבוצת המכונות המנוהלת באמצעות הפקודה gcloud compute ssh.

    gcloud compute ssh
    
  8. (אופציונלי) מתקינים את דוגמאות ה-CUDA שתומכות בגרסת מנהל ההתקן שאתם צריכים.

    wget -O cuda-samples.tar.gz https://github.com/NVIDIA/cuda-samples/archive/refs/tags/v12.9.tar.gz
    tar xzvf cuda-samples.tar.gz
    

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