Compute Engine에서 연결: 여러 클라이언트

Compute Engine 서비스는 gcloud compute instances bulk create 명령어를 사용하여 여러 VM을 만드는 것을 지원합니다.

다음 섹션에서는 시작 스크립트를 만들고 여러 Compute Engine VM에 배포하는 프로세스를 설명합니다.

단일 VM을 만들고 연결하는 방법에 관한 자세한 내용은 Compute Engine에서 연결: 단일 클라이언트를 참고하세요.

필수 권한

Compute Engine VM을 만들려면 다음 IAM 역할이 있어야 합니다.

  • Compute 인스턴스 관리자 (v1) (roles/compute.instanceAdmin.v1) 자세한 내용은 [Compute Engine 문서][gce-role]를 참고하세요.

환경 변수 설정하기

이 문서의 예시 명령어에는 다음 환경 변수가 사용됩니다.

export SSH_USER="daos-user"
export CLIENT_PREFIX="daos-client-vm"
export NUM_CLIENTS=10

원하는 값으로 업데이트합니다.

SSH 키 만들기

SSH 키를 만들고 로컬에 저장하여 클라이언트 VM에 배포합니다. 키는 환경 변수에 지정된 SSH 사용자와 연결되며 각 VM에서 생성됩니다.

# Generate an SSH key for the specified user
ssh-keygen -t rsa -b 4096 -C "${SSH_USER}" -N '' -f "./id_rsa"
chmod 600 "./id_rsa"

# Create a new file in the format [user]:[public key] user
echo "${SSH_USER}:$(cat "./id_rsa.pub") ${SSH_USER}" > "./keys.txt"

Parallelstore 네트워크 세부정보 가져오기

daos 에이전트에서 사용할 수 있는 형식으로 Parallelstore 서버 IP 주소를 가져옵니다.

export ACCESS_POINTS=$(gcloud beta parallelstore instances describe INSTANCE_NAME \
  --location LOCATION \
  --format "value[delimiter=', '](format("{0}", accessPoints))")

Parallelstore 인스턴스와 연결된 네트워크 이름을 가져옵니다.

export NETWORK=$(gcloud beta parallelstore instances describe INSTANCE_NAME \
  --location LOCATION \
  --format "value[delimiter=', '](format("{0}", network))") | awk -F '/' '{print $NF}' 

시작 스크립트 만들기

시작 스크립트는 VM에 연결되며 시스템이 시작될 때마다 실행됩니다. 시작 스크립트는 다음을 실행합니다.

  • daos 에이전트를 구성합니다.
  • 필수 라이브러리 설치
  • 각 VM의 /tmp/parallelstore/에 Parallelstore 인스턴스를 마운트합니다.

다음 스크립트는 HPC Rocky 8을 실행하는 VM에서 작동합니다.

# Create a startup script that configures the VM
cat > ./startup-script << EOF
sudo tee /etc/yum.repos.d/parallelstore-v2-6-el8.repo << INNEREOF
[parallelstore-v2-6-el8]
name=Parallelstore EL8 v2.6
baseurl=https://us-central1-yum.pkg.dev/projects/parallelstore-packages/v2-6-el8
enabled=1
repo_gpgcheck=0
gpgcheck=0
INNEREOF
sudo dnf makecache

# Install daos-client
dnf install -y epel-release # needed for capstone
dnf install -y daos-client

# Upgrade libfabric
dnf upgrade -y libfabric

systemctl stop daos_agent

mkdir -p /etc/daos
cat > /etc/daos/daos_agent.yml << INNEREOF
access_points: ${ACCESS_POINTS}

transport_config:
  allow_insecure: true

fabric_ifaces:
- numa_node: 0
  devices:
  - iface: eth0
    domain: eth0
INNEREOF

echo -e "Host *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null" > /home/${SSH_USER}/.ssh/config
chmod 600 /home/${SSH_USER}/.ssh/config

usermod -u 2000 ${SSH_USER}
groupmod -g 2000 ${SSH_USER}
chown -R ${SSH_USER}:${SSH_USER} /home/${SSH_USER}

chown -R daos_agent:daos_agent /etc/daos/

systemctl enable daos_agent
systemctl start daos_agent

mkdir -p /tmp/parallelstore
dfuse -m /tmp/parallelstore --pool default-pool --container default-container --disable-wb-cache --thread-count=16 --eq-count=8 --multi-user
chmod 777 /tmp/parallelstore

EOF

--thread-count--eq-count 값을 최적화하는 데 도움이 필요한 경우 성능 고려사항 페이지의 스레드 수 및 이벤트 큐 수 섹션을 참고하세요.

클라이언트 VM 만들기

워크로드의 전반적인 성능은 클라이언트 머신 유형에 따라 다릅니다. 다음 예에서는 c2-standard-30 VM을 사용합니다. machine-type 값을 수정하여 더 빠른 NIC로 성능을 높입니다. 사용 가능한 머신 유형에 관한 자세한 내용은 머신 계열 리소스 및 비교 가이드를 참고하세요.

VM 인스턴스를 일괄 생성하려면 gcloud compute instances bulk create 명령어를 사용합니다.

gcloud compute instances bulk create \
  --name-pattern="${CLIENT_PREFIX}-####" \
  --zone="LOCATION" \
  --machine-type="c2-standard-30" \
  --network-interface=subnet=${NETWORK},nic-type=GVNIC \
  --network-performance-configs=total-egress-bandwidth-tier=TIER_1 \
  --create-disk=auto-delete=yes,boot=yes,device-name=client-vm1,image=projects/cloud-hpc-image-public/global/images/hpc-rocky-linux-8-v20240126,mode=rw,size=100,type=pd-balanced \
  --metadata=enable-oslogin=FALSE \
  --metadata-from-file=ssh-keys=./keys.txt,startup-script=./startup-script \
  --count ${NUM_CLIENTS}

다음 단계