1. บทนำ
ขอขอบคุณที่เปิด Codelab นี้ พร้อมที่จะประมวลผลตัวเลขบางอย่างใน Compute Engine แล้วหรือยัง
ในโค้ดแล็บนี้ เราจะมาดูวิธีเริ่มเครื่องเสมือนใหม่และเรียกใช้โปรแกรมเพื่อคำนวณค่าพาย
คุณจะสร้างอินสแตนซ์ Compute Engine ดาวน์โหลด คอมไพล์ และเรียกใช้โปรแกรมเพื่อคำนวณค่าพาย คุณสร้างอินสแตนซ์ Compute Engine ได้จากคอนโซลหรือบรรทัดคำสั่ง แล็บนี้จะแนะนำวิธีใช้เครื่องมือบรรทัดคำสั่ง

Compute Engine มีเครื่องเสมือนที่ทำงานในรูปแบบต่างๆ เช่น จำนวนคอร์ ขนาดหน่วยความจำ และพื้นที่เก็บข้อมูลที่แตกต่างกัน คุณใช้เครื่องที่มีมากกว่า 100 คอร์และหน่วยความจำหลายร้อย GB ได้หากจำเป็น แต่ในตัวอย่างนี้ เราจะเปิดใช้เครื่องเสมือนที่มี vCPU 2 เครื่องและหน่วยความจำ 8 GB ที่กำหนดไว้ล่วงหน้า
เราจะใช้ชุดเครื่อง N2 ใน Codelab นี้ ซึ่งเป็น VM ในกลุ่มเครื่องอเนกประสงค์ที่กำหนดเป้าหมายไปยังภาระงานมาตรฐานและภาระงานแบบ Cloud-Native ส่วนใหญ่ ซีรีส์ N2 มีประสิทธิภาพต่อเธรดสูงกว่าและมีความยืดหยุ่นทั้งหมดที่ตระกูลเครื่องอเนกประสงค์มีให้
มาเริ่มกันเลย
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณจะลองใช้ชื่อของคุณเองเพื่อดูว่าพร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
Google Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud และ Compute Engine จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้เราจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เครื่องเสมือนที่ใช้ Debian นี้มาพร้อมเครื่องมือพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก ซึ่งหมายความว่าคุณจะต้องมีเพียงเบราว์เซอร์เท่านั้นสำหรับโค้ดแล็บนี้ (ใช่แล้ว ใช้ได้ใน Chromebook)
- หากต้องการเปิดใช้งาน Cloud Shell จาก Cloud Console เพียงคลิกเปิดใช้งาน 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
ก่อนอื่นเราจะสร้างเครื่องเสมือนด้วยเครื่องมือบรรทัดคำสั่ง gcloud คุณจะใช้ Console ก็ได้หากต้องการ แต่บรรทัดคำสั่งจะทำซ้ำและอธิบายได้ง่ายกว่า
ก่อนอื่นมาสร้างอินสแตนซ์ n2-standard-2 ที่ชื่อ pi-codelab โดยใช้ Debian 11 เป็นระบบปฏิบัติการกัน นอกจากนี้ เราจะใช้ดิสก์ถาวร (PD) ที่มีการจัดสรรสำหรับวอลุ่มการบูตด้วย PD แบบสมดุลได้รับการสนับสนุนจาก Solid State ไดรฟ์ (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
hostname
คำสั่งจะแสดงชื่อโฮสต์ของสภาพแวดล้อมเชลล์ปัจจุบัน
pi-codelab
5. ติดตั้งการอ้างอิง
ตอนนี้เราจะติดตั้งทรัพยากร Dependency ที่จำเป็นในการคอมไพล์โปรแกรมเพื่อคำนวณค่าพาย
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 รับอาร์กิวเมนต์ 1 รายการ ซึ่งก็คือจำนวนหลักที่จะคำนวณ ตัวอย่างเช่น มาคำนวณทศนิยม 100 ตำแหน่งแรกของค่าพายกัน
./pi 100
โปรแกรมจะทำงานเสร็จในเวลาไม่ถึง 1 วินาทีและแสดงผลคล้ายกับตัวอย่างต่อไปนี้
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 ตำแหน่งแรกของค่าพาย ขอแสดงความยินดี คุณเพิ่งใช้คอมพิวเตอร์คำนวณให้คุณ
โปรแกรมสามารถคำนวณตัวเลขได้มากขึ้น (ปัจจุบันจำกัดไว้ที่ 1 แสนล้านหลัก) ตอนนี้เรามาคำนวณเลขทศนิยม 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 3 บรรทัดสุดท้ายอธิบายระยะเวลาที่โปรแกรมใช้ในการเรียกใช้และปริมาณ CPU ที่ใช้
- จริง: เวลาจริงตั้งแต่ต้นจนจบ ซึ่งหมายความว่าตัวอย่างข้างต้นใช้เวลา 9.7 วินาทีในการคำนวณค่าพาย 10 ล้านหลัก
- user: เวลา CPU ที่ใช้ ซึ่งมากกว่า "จริง" เนื่องจากเครื่องมี 2 คอร์ CPU และแต่ละคอร์จะนับรวมในเวลาทั้งหมด
- sys: เวลาที่ระบบปฏิบัติการต้องใช้ในการเรียกใช้โปรแกรมเพื่อประมวลผลงานของระบบ เช่น เครือข่ายและ I/O ครั้งนี้ใช้เวลาประมาณ 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 ก่อน
exit
จากนั้นเรียกใช้gcloud compute instances deleteคำสั่งต่อไปนี้เพื่อลบอินสแตนซ์และดิสก์ที่เชื่อมโยง โดยจะขอให้คุณยืนยันการลบทรัพยากร
gcloud compute instances delete pi-codelab
9. ขั้นตอนต่อไปคืออะไร
ยินดีด้วย คุณทำ Codelab ของ Compute Engine นี้เสร็จแล้วและคำนวณค่าพายได้ 10 ล้านหลัก
เราใช้โครงสร้างพื้นฐานเดียวกันนี้ในการคำนวณค่าพาย 100 ล้านล้านหลักในปี 2022 อ่านประกาศเพื่อดูผลการดำเนินงานของเรา ดูผลลัพธ์ทั้งหมดได้ในเว็บไซต์สาธิต pi.delivery
ติดตามข่าวสารล่าสุดเกี่ยวกับ Compute และการประมวลผลประสิทธิภาพสูงได้ที่บล็อก Google Cloud
ฟีเจอร์เพิ่มเติมของ Compute Engine
Compute Engine มีฟีเจอร์มากมาย คุณอาจต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อต่อไปนี้
- VM ที่ถูกขัดจังหวะได้ - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- โหนดของผู้เช่ารายเดียว - 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
- การย้ายข้อมูล VM ไปยัง Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
แสดงความคิดเห็น
- โปรดสละเวลาสักครู่เพื่อทำแบบสำรวจสั้นๆ ของเรา