1. מבוא
תודה שפתחת את Codelab הזה! מוכנים לנתח כמה מספרים ב-Compute Engine?
ב-Codelab הזה נסביר איך להפעיל מכונה וירטואלית חדשה ולהריץ תוכנית לחישוב פאי.
יוצרים מכונה של Compute Engine, מורידים, הידור ומריצים תוכנה כדי לחשב את פאי. אפשר ליצור מכונה של Compute Engine מהמסוף או משורת הפקודה. בשיעור ה-Lab הזה תלמדו איך להשתמש בכלי שורת הפקודה.
ב-Compute Engine יש מכונות וירטואליות שפועלות בצורות שונות, למשל מספרים שונים של ליבות, גודל זיכרון ונפח אחסון. אתם יכולים להשתמש במכונה עם יותר מ-100 ליבות וכמה מאותGB של זיכרון במידת הצורך, אבל בדוגמה הזו נשיק מכונה וירטואלית שהוגדרה מראש עם זיכרון בנפח 2vCPU ו-8GB.
נשתמש בסדרת מכונות N2 ב-Codelab הזה. זוהי מכונה וירטואלית לשימוש כללי, שמטרגטת את רוב עומסי העבודה הרגילים ומבוססי-הענן. סדרת N2 מספקת ביצועים גבוהים יותר לכל שרשור, ואת כל הגמישות שיש במשפחת המכונות לשימוש כללי.
שנתחיל?
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט. - לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
Google Cloud Shell
אפשר להפעיל את Google Cloud ואת Compute Engine מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
המכונה הווירטואלית הזו שמבוססת על Debian נטענת עם כל הכלים למפתחים שדרושים לכם. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כלומר, כל מה שדרוש ל-Codelab הזה הוא דפדפן (כן, הוא פועל ב-Chromebook).
- כדי להפעיל את Cloud Shell ממסוף Cloud, לוחצים על Activate 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:
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 היא מערכת ההפעלה. נשתמש גם בדיסק אחסון מתמיד (persistent disk) מאוזן (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 משתנים בכל פעם שיוצרים VM חדשה.
מידע נוסף על הפקודה gcloud compute instances create
זמין בדף העזר.
4. SSH למכונה
כדי להיכנס למכונה באמצעות SSH משורת הפקודה, מריצים את הפקודה הבאה.
gcloud compute ssh pi-codelab
זהו! עכשיו אנחנו משתמשים במכונה הווירטואלית. אפשר לאשר את המארח הנוכחי על ידי הרצת הפקודה של שם המארח.
hostname
הפקודה תציג את שם המארח של סביבת המעטפת הנוכחית.
pi-codelab
5. יחסי תלות בהתקנות
עכשיו נתקין את יחסי התלות שדרושים כדי להדר את התוכנה לחישוב פאי.
sudo apt update sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev
התהליך יימשך כמה דקות. עכשיו נבדוק אם יש לכם מהדר (compiler) 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
לאחר מכן, מריצים את המהדר (compiler) 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 מיליון ספרות של פאי בדוגמה שלמעלה.
- user: כמה זמן מעבד (CPU) נוצל, גדול יותר מזמן המעבד (CPU) כי למכונה יש שתי ליבות של מעבד (CPU) וכל ליבה נחשבת כחלק מהסכום הכולל.
- 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, אחרת היא תמשיך לפעול ולצבור עלויות.
אם משתמשים ב-VM (מחוברת באמצעות SSH), צריך להתנתק קודם על ידי הרצת פקודת היציאה.
exit
לאחר מכן, מריצים את פקודת gcloud compute instances delete
הבאה כדי למחוק את המכונה ואת הדיסקים המשויכים אליה. תופיע בקשה לאשר את מחיקת המשאב.
gcloud compute instances delete pi-codelab
9. מה השלב הבא?
כל הכבוד, השלמת את ה-codelab ב-Compute Engine וחישבת 10 מיליון ספרות פאי!
השתמשנו באותה תשתית כדי לחשב 100 טריליון ספרות של פאי בשנת 2022. בהודעה תוכלו לראות את סטטוס הטיפול שלנו. התוצאות המלאות זמינות באתר ההדגמה pi.delivery.
בבלוג של Google Cloud תוכלו להתעדכן בחדשות האחרונות לגבי Compute ו-High Performance Computeing.
תכונות נוספות של Compute Engine
Compute Engine כולל מגוון עשיר של תכונות. מומלץ להתעמק בחלק מהנושאים הבאים :
- Preemptible VMs – 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/
נשמח לקבל ממך משוב
- כדאי למלא את הסקר הקצר מאוד שלנו