1. מבוא
תודה שפתחת את ה-Codelab הזה! מוכנים לעבד נתונים ב-Compute Engine?
ב-Codelab הזה נלמד איך להפעיל מכונה וירטואלית חדשה ולהריץ תוכנית לחישוב פאי.
תצטרכו ליצור מכונה של Compute Engine, להוריד, לקמפל ולהריץ תוכנית לחישוב פאי. אפשר ליצור מכונה של Compute Engine דרך המסוף או שורת הפקודה. ב-Lab הזה תלמדו איך להשתמש בכלי שורת הפקודה.

ב-Compute Engine יש מכונות וירטואליות עם תצורות שונות, כמו מספר ליבות שונה, גודל זיכרון שונה ואחסון שונה. אפשר להשתמש במכונה עם יותר מ-100 ליבות וכמה מאות GB של זיכרון אם צריך, אבל בדוגמה הזו נפעיל מכונה וירטואלית עם 2 vCPU ו-8GB זיכרון.
ב-codelab הזה נשתמש בסדרת מכונות N2. זוהי משפחת מכונות VM לשימוש כללי שמתאימה לרוב עומסי העבודה הרגילים ולעומסי עבודה שמותאמים לענן. לסדרת N2 יש ביצועים טובים יותר לכל שרשור, וכל הגמישות שמשפחת המכונות לשימוש כללי מציעה.
עכשיו אפשר להתחיל!
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר כזו למשך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. כדי להשבית את המשאבים ולא לחייב אתכם מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את כל הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
Google Cloud Shell
אפשר להפעיל את Google Cloud ואת Compute Engine מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
המכונה הווירטואלית הזו מבוססת על Debian, וטעונים בה כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. כלומר, כל מה שצריך כדי לבצע את ההוראות במאמר הזה הוא דפדפן (כן, זה עובד ב-Chromebook).
- כדי להפעיל את Cloud Shell ממסוף Cloud, פשוט לוחצים על הפעלת Cloud Shell
(הקצאת המשאבים והחיבור לסביבה אמורים להימשך רק כמה רגעים).


אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות שכבר בוצע, ושהפרויקט כבר הוגדר ל-PROJECT_ID.
gcloud auth list
פלט הפקודה
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם מסיבה כלשהי הפרויקט לא מוגדר, פשוט מריצים את הפקודה הבאה:
gcloud config set project <PROJECT_ID>
מחפש את PROJECT_ID? כדאי לבדוק באיזה מזהה השתמשתם בשלבי ההגדרה, או לחפש אותו בלוח הבקרה של Cloud Console:

ב-Cloud Shell מוגדרים גם כמה משתני סביבה כברירת מחדל, שיכולים להיות שימושיים כשמריצים פקודות בעתיד.
echo $GOOGLE_CLOUD_PROJECT
פלט הפקודה
<PROJECT_ID>
- לבסוף, מגדירים את אזור ברירת המחדל ואת הגדרת הפרויקט.
gcloud config set compute/zone us-central1-f
אפשר לבחור מתוך מגוון אזורים שונים. מידע נוסף זמין במאמר בנושא אזורים ותחומים.
3. יצירת מכונה של Compute Engine
קודם ניצור מכונה וירטואלית באמצעות כלי שורת הפקודה של Google Cloud. אפשר גם להשתמש במסוף, אבל קל יותר לחזור על שורת הפקודה ולהסביר אותה.
קודם ניצור מכונה מסוג n2-standard-2 בשם pi-codelab עם Debian 11 כמערכת ההפעלה. נשתמש גם בדיסק אחסון מתמיד מאוזן (PD) לנפח האתחול. מכונות PD מאוזנות מגובות בכונני SSD, והן מאזנות בין ביצועים לעלות. אם לא בחרתם את אזור ברירת המחדל בקטע 'הגדרה ודרישות', תופיע שאלה לגבי האזור שבו אתם רוצים להשתמש.
gcloud compute instances create pi-codelab \ --machine-type=n2-standard-2 \ --image-project=debian-cloud \ --image-family=debian-11 \ --boot-disk-type=pd-balanced
התוצאה של הפקודה אמורה להיראות כך:
Created [https://www.googleapis.com/compute/v1/projects/xxx/zones/us-central1-f/instances/pi-codelab]. NAME: pi-codelab ZONE: us-central1-f MACHINE_TYPE: n2-standard-2 PREEMPTIBLE: INTERNAL_IP: 10.128.X.XX EXTERNAL_IP: XX.XX.XX.XX STATUS: RUNNING
שימו לב שהשדות INTERNAL_IP ו-EXTERNAL_IP משתנים בכל פעם שיוצרים מכונה וירטואלית חדשה.
מידע נוסף על הפקודה gcloud compute instances create זמין בדף העזר.
4. חיבור SSH למכונה
כדי להתחבר למופע באמצעות SSH משורת הפקודה, מריצים את הפקודה הבאה.
gcloud compute ssh pi-codelab
זהו! עכשיו אתם במכונה הווירטואלית. כדי לאשר את המארח הנוכחי, מריצים את הפקודה hostname.
hostname
הפקודה תציג את שם המארח של סביבת המעטפת הנוכחית.
pi-codelab
5. התקנת יחסי תלות
עכשיו נתקין את הרכיבים התלויים שנדרשים כדי לקמפל את התוכנית לחישוב פאי.
sudo apt update sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev
התהליך יימשך כמה דקות. עכשיו נבדוק אם יש לכם קומפיילר C++ תקין.
c++ --version
הפלט של הפקודה הזו יהיה פרטי הגרסה של הקומפיילר, אם הוא הותקן בצורה נכונה.
c++ (Debian 10.2.1-6) 10.2.1 20210110 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6. הידור התוכנית
עכשיו נקמפל את תוכנית C++ כדי לחשב את פאי. זה פשוט יותר ממה שזה נשמע, גם אם לא פיתחתם ב-C++ בעבר. כל התנאים המוקדמים הותקנו בשלב הקודם, לכן צריך רק לאחזר ולערוך את קוד המקור.
קודם כל, מאחזרים ושומרים את קוד המקור. בשלב הזה מורידים קובץ מקור מ-GitHub ושומרים אותו כ-pi.cc בספרייה הנוכחית.
curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/pi-delivery/main/codelab/pi.cc
לאחר מכן, מריצים את מהדר C++ כדי להדר את קוד המקור שנשמר.
c++ -opi pi.cc -std=c++17 -O3 -march=native -lgmp -lmpfr -lpthread -lfmt
הקומפיילר לא מוציא פלט במקרה של הצלחה. כדאי לוודא שיש לכם את קובץ ההפעלה:
ls pi
הפקודה ls אמורה להפיק פלט של שם הקובץ של התוכנית, אם הוא קיים.
pi
7. חישוב פאי
התוכנית pi מקבלת ארגומנט אחד, מספר הספרות לחישוב. לדוגמה, נחשב את 100 הספרות הראשונות אחרי הנקודה העשרונית של פאי.
./pi 100
התוכנית תסתיים תוך פחות משנייה ותציג פלט כזה:
Calculating 100 digits of pi... Internal precision = 348 bits Number of terms = 9, digits per term = 14.181647462725477 Summation series complete. Final steps... 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
השורה האחרונה היא 100 הספרות העשרוניות הראשונות של פאי. מזל טוב, המחשב חישב בשבילך!
התוכנית יכולה לחשב יותר ספרות (ההגבלה הנוכחית היא 100 מיליארד ספרות). עכשיו נחשב 10 מיליון ספרות ונמדוד כמה זמן זה ייקח. אנחנו מפנים את הפלט לקובץ כי 10 מיליון ספרות של פאי זה קצת ארוך מדי לצפייה במסוף של שורת הפקודה.
time ./pi 10000000 > pi10m.txt
הפלט של התוכנית ייראה בערך כך:
Calculating 10000000 digits of pi... Internal precision = 33219296 bits Number of terms = 705138, digits per term = 14.181647462725477 Summation series complete. Final steps... real 0m9.702s user 0m14.839s sys 0m0.364s
הפעם הוא לא כולל את הספרות כי הן נשמרות בקובץ pi10m.txt. בשלוש השורות האחרונות מתואר כמה זמן לקח להפעיל את התוכנית וכמה מעבד היא צרכה.
- ממשי: הזמן בפועל מההתחלה ועד הסוף, כלומר לקח 9.7 שניות לחשב 10 מיליון ספרות של פאי בדוגמה שלמעלה.
- משתמש: כמה זמן מעבד הוא צרך, שהוא גדול יותר מהזמן ה "אמיתי" כי למכונה יש שתי ליבות מעבד וכל ליבה נספרת בסך הכולל.
- sys: הזמן שנדרש למערכת ההפעלה להפעלת התוכנית כדי לעבד משימות מערכת כמו רשת וקלט/פלט. הפעם זה לקח בערך 0.4 שניות, שזה בעיקר הזמן שלוקח לכתוב את התוצאה בדיסק.
אפשר לעיין בקובץ pi10m.txt ולראות את 100 הספרות הראשונות והאחרונות.
בוא נבדוק את הספרות הראשונות. הפקודה הזו מפיקה את 100 הספרות העשרוניות הראשונות (ואת 3 הספרות הראשונות והנקודה העשרונית).
head -c 102 pi10m.txt
התוצאה אמורה להיראות כך.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
הפקודה הבאה מוציאה את 100 הספרות העשרוניות האחרונות.
tail -c 100 pi10m.txt
התוצאה אמורה להיראות כך.
610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897
8. ניקוי האשכול
אל תשכחו להשבית את המכונה שלכם ב-Compute Engine, אחרת היא תמשיך לפעול ולצבור עלויות.
אם אתם נמצאים במכונה הווירטואלית (מחוברים באמצעות SSH), צריך להתנתק קודם על ידי הפעלת הפקודה exit.
exit
לאחר מכן מריצים את הפקודה הבאה gcloud compute instances delete כדי למחוק את המכונה ואת הדיסקים המשויכים. תתבקשו לאשר את מחיקת המשאב.
gcloud compute instances delete pi-codelab
9. מה השלב הבא?
כל הכבוד, סיימתם את ה-Codelab הזה של Compute Engine וחישבתם 10 מיליון ספרות של פאי!
השתמשנו באותה תשתית כדי לחשב 100 טריליון ספרות של פאי בשנת 2022. בהודעה שלנו בנושא אפשר לקרוא מידע נוסף. התוצאות המלאות זמינות באתר ההדגמה שלנו pi.delivery.
בבלוג של Google Cloud תוכלו להתעדכן בחדשות האחרונות בנושא מחשוב ומחשוב עתיר ביצועים.
תכונות נוספות של Compute Engine
Compute Engine כולל מגוון רחב של תכונות. כדאי לעיין בחלק מהמאמרים הבאים :
- מכונות וירטואליות שניתן להפסיק את הפעולה שלהן – https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- שרתים לדייר יחיד (sole-tenant) – https://cloud.google.com/compute/docs/nodes/create-nodes
- מעבדי GPU ו-TPU – https://cloud.google.com/compute/docs/gpus/add-gpus
- מכונות Windows – https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- מקורות מידע בנושא תיוג – https://cloud.google.com/compute/docs/labeling-resources
- העברת מכונות וירטואליות ל-Compute Engine – https://cloud.google.com/compute/docs/vm-migration/
שליחת משוב
- נשמח אם תקדישו כמה רגעים למילוי הסקר הקצר שלנו.