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 エージェントを構成する
  • 必要なライブラリをインストールする
  • Parallelstore インスタンスを各 VM の /tmp/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}

次のステップ