Compute Engine에서 파이 계산

1. 소개

이 Codelab을 열어 주셔서 감사합니다. Compute Engine에서 수치를 계산할 준비가 되셨나요?

이 Codelab에서는 새 가상 머신을 시작하고 프로그램을 실행하여 파이를 계산하는 방법을 살펴봅니다.

Compute Engine 인스턴스를 만들고, 파이를 계산하는 프로그램을 다운로드, 컴파일, 실행합니다. 콘솔 또는 명령줄에서 Compute Engine 인스턴스를 만들 수 있습니다. 이 실습에서는 명령줄 도구를 사용하는 방법을 안내합니다.

ComputeEngine_128px.png

Compute Engine은 다양한 코어 수, 메모리 크기, 스토리지와 같은 다양한 형태로 실행되는 가상 머신을 제공합니다. 필요한 경우 100개 이상의 코어와 수백 GB의 메모리를 갖춘 머신을 사용할 수 있지만 이 예시에서는 사전 정의된 vCPU 2개, 8GB 메모리 가상 머신을 시작하겠습니다.

이 Codelab에서는 N2 머신 시리즈를 사용합니다. 대부분의 표준 및 클라우드 기반 워크로드를 대상으로 하는 범용 머신 제품군 VM입니다. N2 시리즈는 스레드당 성능이 더 높고 범용 머신 제품군에서 제공하는 모든 유연성을 갖추고 있습니다.

그럼 시작하겠습니다.

2. 설정 및 요구사항

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔이 고유한 문자열을 자동으로 생성합니다. 보통은 그게 뭔지 상관하지 않습니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 무작위로 다른 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스를 삭제하거나 전체 프로젝트를 삭제하면 됩니다. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.

Google Cloud Shell

Google Cloud와 Compute Engine을 노트북에서 원격으로 실행할 수도 있지만 이 Codelab에서는 클라우드에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

이 Debian 기반 가상 머신에는 필요한 모든 개발 도구가 로드되어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 즉, 이 Codelab에 필요한 것은 브라우저뿐입니다(Chromebook에서도 작동 가능).

  1. Cloud Console에서 Cloud Shell을 활성화하려면 단순히 Cloud Shell 활성화b125d9eb26a46cc5.png를 클릭합니다. 환경을 프로비저닝하고 연결하는 데 몇 정도만 소요됩니다.

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

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 대시보드에서 확인하세요.

cc3895eeac80db2c.png

또한 Cloud Shell은 기본적으로 이후 명령어를 실행할 때 유용할 수 있는 몇 가지 환경 변수를 설정합니다.

echo $GOOGLE_CLOUD_PROJECT

명령어 결과

<PROJECT_ID>
  1. 마지막으로 기본 영역 및 프로젝트 구성을 설정합니다.
gcloud config set compute/zone us-central1-f

다양한 영역을 선택할 수 있습니다. 자세한 내용은 리전 및 영역을 참조하세요.

3. Compute Engine 인스턴스 만들기

먼저 gcloud 명령줄 도구로 가상 머신을 만들어 보겠습니다. 원한다면 콘솔을 사용할 수도 있지만 명령줄을 반복하고 설명하기가 더 쉽습니다.

먼저 운영체제가 Debian 11인 pi-codelab이라는 n2-standard-2 인스턴스를 만들어 보겠습니다. 또한 부팅 볼륨으로 균형 있는 영구 디스크 (PD)를 사용합니다. 균형 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 필드는 새 VM을 만들 때마다 변경됩니다.

gcloud compute instances create 명령어에 대해 자세히 알아보려면 참조 페이지를 확인하세요.

4. SSH를 통해 인스턴스에 연결

명령줄에서 SSH로 인스턴스에 연결하려면 다음 명령어를 실행합니다.

gcloud compute ssh pi-codelab

작업이 끝났습니다. 이제 가상 머신입니다. 호스트 이름 명령어를 실행하여 현재 호스트를 확인할 수 있습니다.

hostname

이 명령어는 현재 셸 환경의 호스트 이름을 표시합니다.

pi-codelab

5. 종속 항목 설치

이제 파이를 계산하기 위해 프로그램을 컴파일하는 데 필요한 종속 항목을 설치합니다.

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 프로그램은 계산할 자릿수인 인수 한 개를 사용합니다. 예를 들어 파이의 처음 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,000억 자릿수로 제한). 이제 1,000만 자리를 계산하고 소요 시간을 측정해 보겠습니다. 천만 자릿수의 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초가 걸렸음을 의미합니다.
  • 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 인스턴스를 종료하는 것을 잊지 마세요. 종료하지 않으면 인스턴스가 계속 실행되고 비용이 발생합니다.

SSH로 연결된 VM을 사용 중이라면 먼저 exit 명령어를 실행하여 로그아웃하세요.

exit

그런 후 다음 gcloud compute instances delete 명령어를 실행하여 인스턴스와 연결된 디스크를 삭제합니다. 리소스 삭제를 확인하라는 메시지가 표시됩니다.

gcloud compute instances delete pi-codelab

9. 다음 단계

축하합니다. 이 Compute Engine Codelab을 완료하고 1, 000만 자릿수의 파이를 계산했습니다.

2022년에는 동일한 인프라를 사용하여 100조 자릿수의 파이를 계산했습니다. Google의 결과를 알아보려면 공지사항을 읽어보세요. 전체 결과는 pi.delivery 데모 사이트에서 확인할 수 있습니다.

Google Cloud 블로그에서 컴퓨팅고성능 컴퓨팅에 관한 최신 소식을 확인하세요.

기타 Compute Engine 기능

Compute Engine에는 다양한 기능이 있습니다. 다음 중 몇 가지를 자세히 살펴보세요.

Google에 의견 보내기

  • 잠시 시간을 내어 간단한 설문조사에 응해주시기 바랍니다.