1. 简介
感谢您打开此 Codelab!准备好在 Compute Engine 上处理数字了吗?
在此 Codelab 中,我们将介绍如何启动新的虚拟机并运行用于计算 pi 的程序。
您将创建一个 Compute Engine 实例,下载、编译并运行用于计算 pi 的程序。您可以通过控制台或命令行创建 Compute Engine 实例。本实验将指导您使用命令行工具。
Compute Engine 提供以各种形式运行的虚拟机,例如不同核心数量、内存大小和存储空间。如有必要,您可以使用具有超过 100 个核心和几百 GB 内存的机器,但在此示例中,我们将启动一个预定义的 2 个 vCPU、8 GB 内存的虚拟机。
在此 Codelab 中,我们将使用 N2 机器系列。它是一种通用机器家族虚拟机,适用于大多数标准工作负载和云原生工作负载。N2 系列具有更高的每线程性能以及通用机器家族提供的所有灵活性。
现在,我们开始吧!
2. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常您不在乎这是什么在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为
PROJECT_ID
)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且该 ID 在项目期间会一直保留。 - 此外,还有第三个值,即某些 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。如需关停资源,以免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除整个项目。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
Google Cloud Shell
虽然可以通过笔记本电脑远程操作 Google Cloud 和 Compute Engine,但在此 Codelab 中,我们将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
基于 Debian 的这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。这意味着在本 Codelab 中,您只需要一个浏览器(没错,它适用于 Chromebook)。
- 如需从 Cloud Console 激活 Cloud Shell,只需点击激活 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
?检查您在设置步骤中使用的 ID,或在 Cloud Console 信息中心查找该 ID:
默认情况下,Cloud Shell 还会设置一些环境变量,这对您日后运行命令可能会很有用。
echo $GOOGLE_CLOUD_PROJECT
命令输出
<PROJECT_ID>
- 最后,设置默认可用区和项目配置。
gcloud config set compute/zone us-central1-f
您可以选择各种不同的可用区。如需了解详情,请参阅区域和可用区。
3. 创建 Compute Engine 实例
首先,我们将使用 gcloud 命令行工具创建虚拟机。如果您愿意,也可以使用控制台,但命令行更便于重复和解释。
我们首先创建一个名为 pi-codelab 的 n2-standard-2 实例,并使用 Debian 11 作为操作系统。我们还将平衡永久性磁盘 (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 字段都会更改。
如需详细了解 gcloud compute instances create
命令,请访问参考页面。
4. 通过 SSH 登录实例
如需从命令行通过 SSH 连接到实例,请运行以下命令。
gcloud compute ssh pi-codelab
大功告成!现在您已进入虚拟机了。您可以通过运行主机名命令来确认当前的主机。
hostname
该命令将显示当前 shell 环境的主机名。
pi-codelab
5. 安装依赖项
现在,我们将安装编译程序以计算 pi 所需的依赖项。
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
程序接受一个参数,即要计算的位数。例如,我们来计算 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
最后一行是 pi 的前 100 位小数。恭喜,您刚刚让计算机为您计算!
该程序可以计算更多位数(目前上限为 1,000 亿位数)。现在,让我们计算 1 千万位数字,并测量需要多长时间。我们将输出重定向到一个文件,因为 1000 万位数的 pi 有点太长,无法在命令行控制台中查看。
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。
- 实际时间:从开始到结束的实际时间,这意味着在上例中,计算 1, 000 万位数的圆周率需要 9.7 秒。
- 用户:它占用了多少 CPU 时间,这比“实际”要长因为机器有两个 CPU 核心,每个核心都会计入总数。
- 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 实例,否则它将继续运行并产生费用。
如果您使用的是虚拟机(通过 SSH 连接),请先运行 exit 命令,以退出登录。
exit
然后,运行以下 gcloud compute instances delete
命令以删除该实例及关联的磁盘。系统会提示您确认删除资源。
gcloud compute instances delete pi-codelab
9. 接下来做什么?
恭喜,您已完成此 Compute Engine Codelab,并已计算了 1000 万位数的圆周率数值!
2022 年,我们使用相同的基础架构来计算 100 万亿位数的圆周率。请阅读公告,了解我们的表现。所有结果均可通过我们的 pi.delivery 演示网站获取。
阅读 Google Cloud 博客,及时了解有关计算和高性能计算的最新资讯!
更多 Compute Engine 功能
Compute Engine 具有丰富的功能。你可能需要深入了解以下内容:
- 抢占式虚拟机 - 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
- 将虚拟机迁移到 Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
向我们提供反馈
- 请抽空完成我们简短的调查问卷