1. บทนำ
ขอขอบคุณที่เปิด Codelab นี้ พร้อมที่จะประมวลผลตัวเลขบน Compute Engine แล้วหรือยัง
ใน Codelab นี้ เราจะแนะนำวิธีเริ่มเครื่องเสมือนใหม่และเรียกใช้โปรแกรมในการคำนวณ Pi
คุณจะต้องสร้างอินสแตนซ์ของ Compute Engine ดาวน์โหลด คอมไพล์ และเรียกใช้โปรแกรมเพื่อคำนวณ Pi คุณจะสร้างอินสแตนซ์ Compute Engine จากคอนโซลหรือบรรทัดคำสั่งก็ได้ ห้องทดลองนี้จะอธิบายการใช้เครื่องมือบรรทัดคำสั่ง
Compute Engine มีเครื่องเสมือนที่ทำงานในรูปร่างต่างๆ เช่น จำนวนแกน ขนาดหน่วยความจำ และพื้นที่เก็บข้อมูลที่แตกต่างกัน คุณสามารถใช้เครื่องที่มีแกนมากกว่า 100 แกนและมีหน่วยความจำหลายร้อย GB หากจำเป็น แต่ในตัวอย่างนี้ เราจะเปิดตัว vCPU ที่กำหนดไว้ล่วงหน้า 2 เครื่องและเครื่องเสมือนที่มีหน่วยความจำขนาด 8 GB
เราจะใช้ซีรีส์เครื่อง N2 ใน Codelab นี้ โดยเป็น VM ตระกูลเครื่องที่มีวัตถุประสงค์ทั่วไป ซึ่งกำหนดเป้าหมายเป็นภาระงานมาตรฐานและที่ดำเนินการบนระบบคลาวด์ส่วนใหญ่ ซีรีส์ N2 มีประสิทธิภาพต่อเธรดสูงกว่าและความยืดหยุ่นทั้งหมดที่ตระกูลเครื่องอเนกประสงค์มี
มาเริ่มกันเลย
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
Google Cloud Shell
แม้ว่า Google Cloud และ Compute Engine จะทำงานจากระยะไกลได้จากแล็ปท็อป แต่ใน Codelab นี้ เราจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เครื่องเสมือนแบบ Debian นี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก ซึ่งหมายความว่าสิ่งที่คุณต้องมีสำหรับ Codelab นี้คือเบราว์เซอร์ (ใช่แล้ว ทั้งหมดนี้ทำงานได้บน 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 นอกจากนี้ คุณยังสามารถใช้คอนโซลได้หากต้องการ แต่บรรทัดคำสั่งนั้นทำซ้ำและอธิบายได้ง่ายกว่า
ก่อนอื่นให้สร้างอินสแตนซ์ n2-standard-2 ชื่อ pi-codelab โดยใช้ระบบปฏิบัติการเป็น Debian 11 นอกจากนี้ เราจะใช้ Balanced Persistent Disk (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
คำสั่งจะแสดงชื่อโฮสต์ของสภาพแวดล้อม Shell ปัจจุบัน
pi-codelab
5. ทรัพยากร Dependency ของการติดตั้ง
ตอนนี้เราจะติดตั้งทรัพยากร Dependency ที่จำเป็นในการคอมไพล์โปรแกรมในการคำนวณ Pi
sudo apt update sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev
กระบวนการนี้ใช้เวลา 2-3 นาทีจึงจะเสร็จสมบูรณ์ ตอนนี้มาตรวจสอบว่าคุณมีคอมไพเลอร์ 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
โปรแกรม pi
จะใช้อาร์กิวเมนต์ 1 รายการ ซึ่งก็คือจำนวนหลักที่ใช้คำนวณ เช่น มาคำนวณทศนิยม 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 ตัวแรกของพาย ยินดีด้วย คอมพิวเตอร์คำนวณคณิตศาสตร์ให้คุณแล้ว
โปรแกรมสามารถคำนวณตัวเลขเพิ่มเติม (ปัจจุบันจำกัดที่ตัวเลข 1 แสนล้านหลัก) คราวนี้ลองคำนวณตัวเลข 10 ล้านหลักและวัดระยะเวลาที่ใช้ เราเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์เนื่องจากค่า Pi ยาว 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
สามบรรทัดสุดท้ายอธิบายถึงเวลาที่ใช้ในการเรียกใช้โปรแกรมและปริมาณ CPU ที่ใช้
- จริง: เวลาจริงตั้งแต่ต้นจนจบ ซึ่งหมายความว่าจะใช้เวลา 9.7 วินาทีในการคำนวณพาย 10 ล้านหลักของพายในตัวอย่างด้านบน
- user: เวลา CPU ที่ใช้ ซึ่งมากกว่า "จริง" เพราะเครื่องมี CPU 2 แกน และแต่ละแกนจะนับรวมในแกนทั้งหมด
- sys: เวลาที่ระบบปฏิบัติการต้องใช้ในการเรียกใช้โปรแกรมเพื่อประมวลผลงานของระบบ เช่น เครือข่ายและ I/O คราวนี้ใช้เวลาประมาณ 0.4 วินาที ซึ่งส่วนใหญ่จะใช้เวลาเขียนผลลัพธ์ลงในดิสก์
เราสามารถดูที่ pi10m.txt และเห็นตัวเลข 100 หลักแรกและตัวเลข 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 เสร็จแล้ว และคำนวณค่า Pi ได้ 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/
แสดงความคิดเห็น
- โปรดสละเวลาสักครู่เพื่อทำแบบสำรวจสั้นๆ ของเรา