1. Giới thiệu
Cảm ơn bạn đã mở lớp học lập trình này! Bạn đã sẵn sàng xử lý một vài con số trên Compute Engine?
Trong lớp học lập trình này, chúng ta sẽ tìm hiểu cách khởi động một máy ảo mới và chạy một chương trình để tính số pi.
Bạn sẽ tạo một phiên bản Compute Engine, tải xuống, biên dịch và chạy một chương trình để tính số pi. Bạn có thể tạo một phiên bản Compute Engine từ Bảng điều khiển hoặc dòng lệnh. Phòng thí nghiệm này sẽ hướng dẫn bạn cách sử dụng các công cụ dòng lệnh.
Compute Engine cung cấp các máy ảo chạy ở nhiều hình dạng, chẳng hạn như số lượng lõi, dung lượng bộ nhớ và dung lượng lưu trữ khác nhau. Bạn có thể sử dụng một máy có hơn 100 lõi và vài trăm GB bộ nhớ nếu cần, nhưng trong ví dụ này chúng ta sẽ khởi chạy một máy ảo 2 vCPU, bộ nhớ 8 GB được xác định trước.
Chúng ta sẽ sử dụng loạt máy N2 trong lớp học lập trình này. Đây là một máy ảo dòng máy đa năng, nhắm đến hầu hết tải công việc tiêu chuẩn và tải công việc trên nền tảng đám mây. Dòng N2 có hiệu suất theo từng luồng cao hơn và tính linh hoạt mà dòng máy đa năng mang lại.
Giờ thì chúng ta cùng bắt đầu nào!
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (mã này thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án. - Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Google Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud và Compute Engine từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, chúng ta sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Đám mây.
Máy ảo dựa trên Debian này được tải tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Tức là tất cả những gì bạn cần để thực hiện lớp học lập trình này là một trình duyệt (vâng, trình duyệt này hoạt động trên Chromebook).
- Để kích hoạt Cloud Shell trong Cloud Console, bạn chỉ cần nhấp vào Kích hoạt Cloud Shell (chỉ mất vài phút để cấp phép và kết nối với môi trường).
Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành PROJECT_ID
.
gcloud auth list
Kết quả lệnh
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Kết quả lệnh
[core] project = <PROJECT_ID>
Nếu vì lý do nào đó mà dự án không được thiết lập, chỉ cần phát hành lệnh sau:
gcloud config set project <PROJECT_ID>
Bạn đang tìm PROJECT_ID
? Hãy xem mã nhận dạng bạn đã sử dụng ở các bước thiết lập hoặc tra cứu trong trang tổng quan Cloud Console:
Cloud Shell cũng đặt một số biến môi trường theo mặc định. Điều này có thể hữu ích khi bạn chạy các lệnh sau này.
echo $GOOGLE_CLOUD_PROJECT
Kết quả lệnh
<PROJECT_ID>
- Cuối cùng, đặt cấu hình dự án và vùng mặc định.
gcloud config set compute/zone us-central1-f
Bạn có thể chọn nhiều vùng khác nhau. Để biết thêm thông tin, hãy xem Khu vực và Vùng.
3. Tạo một thực thể Compute Engine
Trước tiên, chúng ta sẽ tạo một máy ảo bằng công cụ dòng lệnh gcloud. Bạn cũng có thể sử dụng Bảng điều khiển nếu muốn, nhưng dòng lệnh sẽ dễ lặp lại và giải thích hơn.
Trước tiên, hãy tạo một phiên bản n2-standard-2 có tên là pi-codelab với hệ điều hành Debian 11. Chúng ta cũng sẽ dùng Balanced Persistent Disk (PD) cho ổ đĩa khởi động. PD cân bằng được hỗ trợ bởi ổ thể rắn (SSD) giúp cân bằng giữa hiệu suất và chi phí. Hệ thống sẽ hỏi bạn muốn sử dụng vùng nào nếu bạn không chọn vùng mặc định trong phần Thiết lập và yêu cầu.
gcloud compute instances create pi-codelab \ --machine-type=n2-standard-2 \ --image-project=debian-cloud \ --image-family=debian-11 \ --boot-disk-type=pd-balanced
Kết quả của lệnh sẽ có dạng như sau:
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
Xin lưu ý rằng các trường INTERNAL_IP và EXTERNAL_IP thay đổi mỗi khi bạn tạo máy ảo mới.
Nếu bạn muốn tìm hiểu thêm về lệnh gcloud compute instances create
, vui lòng truy cập vào trang tham khảo.
4. SSH vào Phiên bản
Để tạo SSH vào thực thể từ dòng lệnh, hãy chạy lệnh sau.
gcloud compute ssh pi-codelab
Vậy là xong! Giờ bạn đang ở trên máy ảo. Bạn có thể xác nhận máy chủ hiện tại bằng cách chạy lệnh tên máy chủ.
hostname
Lệnh này sẽ hiển thị tên máy chủ của môi trường shell hiện tại.
pi-codelab
5. Cài đặt phần phụ thuộc
Bây giờ, chúng ta sẽ cài đặt các phần phụ thuộc cần thiết để biên dịch chương trình nhằm tính số pi.
sudo apt update sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev
Quá trình này sẽ mất vài phút để hoàn tất. Giờ hãy kiểm tra xem bạn có trình biên dịch C++ đang hoạt động hay không.
c++ --version
Lệnh này sẽ xuất thông tin phiên bản của trình biên dịch nếu được cài đặt đúng cách.
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. Biên dịch chương trình
Bây giờ, hãy biên dịch chương trình C++ để tính số pi. Việc này nghe có vẻ đơn giản hơn ngay cả khi bạn chưa từng phát triển bằng C++. Mọi điều kiện tiên quyết đã được cài đặt ở bước trước, nên chúng ta chỉ cần tìm nạp và biên dịch mã nguồn.
Trước tiên, hãy tìm nạp và lưu mã nguồn. Bước này sẽ tải tệp nguồn xuống qua GitHub và lưu dưới dạng pi.cc trong thư mục hiện tại.
curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/pi-delivery/main/codelab/pi.cc
Tiếp theo, hãy chạy trình biên dịch C++ để biên dịch mã nguồn đã lưu.
c++ -opi pi.cc -std=c++17 -O3 -march=native -lgmp -lmpfr -lpthread -lfmt
Trình biên dịch không xuất ra bất kỳ nội dung nào nếu thành công. Hãy kiểm tra để đảm bảo bạn có tệp thực thi:
ls pi
Lệnh ls này sẽ xuất tên tệp của chương trình nếu có.
pi
7. Tính số Pi
Chương trình pi
sẽ lấy một đối số là số chữ số để tính toán. Ví dụ: hãy tính 100 số thập phân đầu tiên của pi.
./pi 100
Chương trình sẽ hoàn tất trong chưa đầy một giây và cho ra nội dung như sau:
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
Dòng cuối cùng là 100 số thập phân đầu tiên của pi. Xin chúc mừng! Bạn vừa được máy tính làm phép toán cho bạn!
Chương trình này có thể tính nhiều chữ số hơn (hiện có giới hạn là 100 tỷ chữ số). Bây giờ, hãy tính 10 triệu chữ số và đo lường thời gian cần thiết. Chúng tôi chuyển hướng đầu ra đến một tệp vì 10 triệu chữ số pi là quá dài nên không xem được trong bảng điều khiển dòng lệnh.
time ./pi 10000000 > pi10m.txt
Chương trình sẽ xuất ra nội dung như sau:
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
Báo cáo này không bao gồm các chữ số lần này vì chúng được lưu trong tệp pi10m.txt
. Ba dòng cuối cùng mô tả thời gian chạy chương trình và lượng CPU sử dụng.
- true: thời gian thực tế từ đầu đến cuối, tức là mất 9,7 giây để tính 10 triệu chữ số số pi trong ví dụ ở trên.
- người dùng: thời gian CPU đã sử dụng, lớn hơn thời gian "thực" vì máy có hai lõi CPU và mỗi lõi đều được tính vào tổng số lõi.
- sys: thời gian mà hệ điều hành cần để chạy chương trình nhằm xử lý các tác vụ của hệ thống, chẳng hạn như mạng và I/O. Lần này mất khoảng 0,4 giây, chủ yếu là thời gian để ghi kết quả vào đĩa.
Chúng ta có thể xem xét pi10m.txt và biết 100 chữ số đầu tiên và cuối cùng của mỗi tệp.
Hãy kiểm tra các chữ số đầu tiên. Lệnh này cho ra 100 số thập phân đầu tiên (và 3 dấu thập phân đầu tiên).
head -c 102 pi10m.txt
Kết quả sẽ có dạng như sau.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Lệnh tiếp theo cho ra 100 số thập phân cuối cùng.
tail -c 100 pi10m.txt
Kết quả sẽ có dạng như sau.
610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897
8. Dọn dẹp Cụm
Đừng quên tắt phiên bản Compute Engine của bạn, nếu không nó sẽ tiếp tục chạy và tích luỹ chi phí.
Nếu bạn đang sử dụng máy ảo (được kết nối với SSH), trước tiên, hãy đăng xuất bằng cách chạy lệnh thoát.
exit
Sau đó, chạy lệnh gcloud compute instances delete
sau để xoá phiên bản này và các ổ đĩa liên kết. Bạn sẽ được yêu cầu xác nhận việc xoá tài nguyên.
gcloud compute instances delete pi-codelab
9. Tiếp theo là gì?
Xin chúc mừng, bạn đã hoàn thành lớp học lập trình này về Compute Engine và tính được 10 triệu chữ số số pi!
Chúng tôi dùng chính cơ sở hạ tầng đó để tính toán 100 nghìn tỷ chữ số pi vào năm 2022. Hãy đọc thông báo này để xem cách thức xử lý của chúng tôi. Toàn bộ kết quả có sẵn trên trang web minh hoạ pi.delivery của chúng tôi.
Nắm bắt tin tức mới nhất về Điện toán và Điện toán hiệu suất cao tại Blog của Google Cloud!
Các tính năng khác của Compute Engine
Compute Engine có một bộ tính năng phong phú. Bạn có thể muốn tìm hiểu sâu hơn về một số yếu tố sau :
- Máy ảo có thể giành trước – https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Nút cho đối tượng thuê duy nhất – https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU và TPU – https://cloud.google.com/compute/docs/gpus/add-gpus
- Các phiên bản Windows – https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Tài nguyên gắn nhãn – https://cloud.google.com/compute/docs/labeling-resources
- Di chuyển máy ảo sang Compute Engine – https://cloud.google.com/compute/docs/vm-migration/
Gửi ý kiến phản hồi cho chúng tôi
- Vui lòng dành chút thời gian để hoàn thành bản khảo sát rất ngắn của chúng tôi