同時マルチスレッド処理(SMT)を構成する


このページでは、Google Kubernetes Engine(GKE)クラスタで同時マルチスレッド処理を構成する方法について説明します。

概要

GKE ノードは、GKE がユーザーの代わりに作成する Compute Engine 仮想マシン(VM)インスタンスです。これらの VM では、同時マルチスレッド(SMT)がデフォルトで有効になっていることが一般的です。SMT は、1 つの物理 CPU コアで複数の独立したスレッドを実行する機能です。SMT を有効にすると、1 つの物理コアが 2 つの仮想 CPU(vCPU)を独立した個別のスレッドとして実行できます。たとえば、n2-standard-32 GKE ノードは 16 個の物理 CPU コアで 32 個の vCPU を実行します。

SMT 構成を GKE ノードに導入することで、効果的な vCPU の数が物理コアの数と同じになるように SMT を構成できるようになりました。つまり、GKE ノードはフル vCPU ごとの物理コア数を使用できます。

利点

GKE で SMT を構成すると、次の利点があります。

パフォーマンスの向上

一部のハイ パフォーマンス コンピューティング(HPC)ワークロードでは、SMT を無効にするとパフォーマンスが向上する場合があります。通常、多くの一般的なコンピューティング タスクや、大量の I/O を必要とするタスクの場合、SMT によってアプリケーションのスループットを大幅に向上させることができます。一方、両方の仮想コアが計算依存型である計算依存型ジョブの場合、SMT はアプリケーションの全体的なパフォーマンスを妨げ、非決定的なバリアンスをジョブに追加する場合があります。したがって、SMT を無効にすると、一部の HPC アプリケーションではパフォーマンスとその予測可能性が向上する可能性があります。

ライセンス費用の削減

一部のソフトウェア ライセンス契約では、消費される vCPU の数と課金モデルが関連付けられています。SMT を無効にすると、各コアの vCPU の数が半減し、ライセンス費用を削減できる可能性があります。詳細については、使用許諾契約をご覧ください。

SMT が構成されている場合の Google Cloud の課金については、料金セクションをご覧ください。

制限事項

  • マシンタイプ: SMT は、vCPU が 2 個未満のマシンタイプn1-standard-1 など)または Tau T2D マシンタイプでは構成できません。
  • ノード自動プロビジョニング: ノードの自動プロビジョニングが有効になっているクラスタでは、SMT 構成はサポートされません。
  • クラスタ オートスケーラー: SMT 構成によるゼロノードからのスケーリングは、GKE バージョン 1.21 以降を実行するクラスタのクラスタ オートスケーラーでのみサポートされます。
  • GKE Sandbox: --threads-per-core フラグを使用すると、バージョン 1.24.2-gke.300 以降を実行する GKE Standard クラスタの GKE Sandbox ノードで SMT 設定を構成できます。また、以前のバージョンではスタンドアロン DaemonSet を使用します。手順については、GKE Sandbox をご覧ください。バージョン 1.24.2-gke.300 より前の GKE Sandbox ではマルチスレッドがデフォルトで無効になっているため、threads-per-core を使用した SMT の構成はサポートされていません。GKE Sandbox を使用していて SMT を有効にする場合は、SMT が無効になる場合をご覧ください。
  • クラスタモード: SMT の構成性は GKE Autopilot クラスタではサポートされていません。

料金

GKE の SMT は、基盤となる Compute Engine の SMT の料金に基づいて課金されます。各コアで実行されるスレッド数ではなく、VM のマシンタイプによって定義される vCPU の数に対して課金されます。SMT を構成した場合でも引き続き、VM のマシンタイプによって定義されるデフォルトの vCPU 数に対して課金されます。VM の課金方法の詳細については、VM インスタンスの料金をご覧ください。

たとえば、n2-standard-8 マシンタイプで作成された GKE ノードは、デフォルトで SMT を有効にして実行され、最大 8 個の vCPU(4 つの物理 CPU コアごとに 2 個の vCPU)を実行できます。コアごとに 1 つのスレッド(実質的には 4 個の vCPU)のみを使用するように SMT を構成した場合も、8 個の vCPU に対して課金されます。

SMT を構成する

新しいクラスタまたはノードプールで SMT を構成するには、コアあたりのスレッド数を指定します。

次の表に、コアあたりのスレッド数と、ノードの対応する SMT の動作を示します。

コアあたりのスレッド数 SMT の動作
null(指定なし) Compute Engine VM のデフォルト
0 無効
1 SMT オフ
2 SMT オン
> 2 無効

新しいクラスタで SMT を構成する

gcloud CLI または Google Cloud コンソールを使用して、新しいクラスタで SMT を構成できます。

gcloud

SMT を構成するには、次のコマンドを実行します。

gcloud container clusters create CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

次のように置き換えます。

  • CLUSTER_NAME: 新しいクラスタの名前。
  • MACHINE_TYPE: GKE ノードに使用するマシンタイプ。2 つ以上の vCPU を持つマシンタイプである必要があります。
  • THREADS_PER_CORE: 物理コアあたりのスレッド数。上の表に、指定できる値が示されています。

オプションの完全なリストについては、gcloud container clusters create のドキュメントをご覧ください。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. [クラスタを作成] ダイアログで、[GKE Standard] の横にある [構成] をクリックします。

  4. ナビゲーション メニューの [ノードプール] セクションで、ノードプールの名前をクリックし、[ノード] をクリックします。

  5. [マシンの構成] セクションで、サポートされている [マシンタイプ](e2-standard-2 など)を選択します。

  6. [ CPU プラットフォームと GPU] をクリックします。

  7. [vCPU とコアの比率] プルダウン メニューから、次のいずれかを選択します。

    • コアあたり 1 個の vCPU: SMT をオフにします。
    • コアあたり 2 個の vCPU: SMT をオンにします。
  8. 必要に応じてクラスタとノードプールを構成し、[作成] をクリックします。

新しいノードプールで SMT を構成する

gcloud CLI または Google Cloud コンソールを使用して、新しいノードプールで SMT を構成できます。

gcloud

SMT を構成するには、次のコマンドを実行します。

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

次のように置き換えます。

  • POOL_NAME: 新しいノード テンプレートの名前。
  • CLUSTER_NAME: 既存のクラスタの名前。
  • MACHINE_TYPE: GKE ノードに使用するマシンタイプ。2 つ以上の vCPU を持つマシンタイプである必要があります。
  • THREADS_PER_CORE: 物理コアあたりのスレッド数。上の表に、指定できる値が示されています。

オプションの完全なリストについては、gcloud container clusters create のドキュメントをご覧ください。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [ノードプールを追加] をクリックします。

  4. ナビゲーション メニューで、[ノード] をクリックします。

  5. [マシンの構成] セクションで、マシン ファミリーと、SMT をサポートするマシンタイプn2-standard-2 など)を選択します。

  6. [ CPU プラットフォームと GPU] をクリックします。

  7. [vCPU とコアの比率] プルダウン メニューから、次のいずれかのオプションを選択します。

    • コアあたり 1 個の vCPU: SMT をオフにします。
    • コアあたり 2 個の vCPU: SMT をオンにします。
  8. 必要に応じてノードプールを構成してから、[作成] をクリックします。

SMT 構成を確認する

Linux

Linux ノードの SMT 構成を確認するには、次の手順に沿って操作します。

  1. SSH でノードに接続します。

    gcloud compute ssh NODE_NAME
    

    NODE_NAME は、ノードの名前に置き換えます。

  2. vCPU の数を確認します。

    cat /proc/cpuinfo | grep processor | wc -l
    

    出力は次のようになります。

    16
    

    コアあたりのスレッド数を 1 に設定すると、Compute Engine VM のデフォルトの vCPU 数の半分が出力に表示されます。たとえば、SMT がオフの n2-standard-32 の出力は、デフォルト値の 32 ではなく 16 になります。

Windows

Windows ノードで SMT 構成を確認するには、次の操作を行います。

  1. ノードへの RDP にユーザー名とパスワードを設定します。

    gcloud compute reset-windows-password NODE_NAME
    

    NODE_NAME は、ノードの名前に置き換えます。

  2. VM の EXTERNAL_IP:3389 への接続を確立します。

  3. 次の PowerShell コマンドを実行します。

    Get-WmiObject -Class Win32_Processor -ComputerName. | Select-Object -Property [a-z]* | Select NumberOfCores,NumberOfLogicalProcessors
    

    コアあたりのスレッド数を 1 に設定した場合、次の出力例のように、NumberOfCores 値は NumberOfLogicalProcessors 値と同じになります。

    Output (example n1-standard-2 with SMT off)
    
    NumberOfCores NumberOfLogicalProcessors
    ------------- -------------------------
                1                         1
    

次のステップ