คำนวณ Pi บน Compute Engine

1. บทนำ

ขอขอบคุณที่เปิด Codelab นี้ พร้อมที่จะประมวลผลตัวเลขบน Compute Engine แล้วหรือยัง

ใน Codelab นี้ เราจะแนะนำวิธีเริ่มเครื่องเสมือนใหม่และเรียกใช้โปรแกรมในการคำนวณ Pi

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

ComputeEngine_128px.png

Compute Engine มีเครื่องเสมือนที่ทำงานในรูปร่างต่างๆ เช่น จำนวนแกน ขนาดหน่วยความจำ และพื้นที่เก็บข้อมูลที่แตกต่างกัน คุณสามารถใช้เครื่องที่มีแกนมากกว่า 100 แกนและมีหน่วยความจำหลายร้อย GB หากจำเป็น แต่ในตัวอย่างนี้ เราจะเปิดตัว vCPU ที่กำหนดไว้ล่วงหน้า 2 เครื่องและเครื่องเสมือนที่มีหน่วยความจำขนาด 8 GB

เราจะใช้ซีรีส์เครื่อง N2 ใน Codelab นี้ โดยเป็น VM ตระกูลเครื่องที่มีวัตถุประสงค์ทั่วไป ซึ่งกำหนดเป้าหมายเป็นภาระงานมาตรฐานและที่ดำเนินการบนระบบคลาวด์ส่วนใหญ่ ซีรีส์ N2 มีประสิทธิภาพต่อเธรดสูงกว่าและความยืดหยุ่นทั้งหมดที่ตระกูลเครื่องอเนกประสงค์มี

มาเริ่มกันเลย

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน 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)

  1. หากต้องการเปิดใช้งาน Cloud Shell จาก Cloud Console เพียงคลิกเปิดใช้งาน Cloud Shell b125d9eb26a46cc5.png (จะใช้เวลาเพียงไม่นานในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม)

1067942a9a93f70.png

Screen Shot 14-06-2017 เวลา 22.13.43 น.

เมื่อเชื่อมต่อกับ 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

cc3895eeac80db2c.png

Cloud Shell ยังตั้งค่าตัวแปรสภาพแวดล้อมโดยค่าเริ่มต้นด้วย ซึ่งอาจเป็นประโยชน์เมื่อคุณเรียกใช้คำสั่งในอนาคต

echo $GOOGLE_CLOUD_PROJECT

เอาต์พุตจากคำสั่ง

<PROJECT_ID>
  1. สุดท้าย ให้ตั้งค่าโซนและการกำหนดค่าโปรเจ็กต์เริ่มต้น
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 มีชุดฟีเจอร์มากมาย คุณอาจต้องการเจาะลึกเกี่ยวกับสิ่งเหล่านี้ :

แสดงความคิดเห็น

  • โปรดสละเวลาสักครู่เพื่อทำแบบสำรวจสั้นๆ ของเรา