Amazon EKSAWS BatchのメモリとvCPUに関する考慮事項 - AWS Batch

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EKSAWS BatchのメモリとvCPUに関する考慮事項

Amazon EKSのAWS Batchでは、コンテナで使用できるリソースを指定できます。たとえば、vCPUとメモリリソースのrequests値、またはlimits値を指定できます。

vCPU リソースを指定する際の制約は次のとおりです:

  • 少なくとも 1つのvCPUrequests、またはlimits値 のいずれか指定する必要があります。

  • 1つのvCPU ユニットは、1つの物理コアまたは仮想コアに相当します。

  • vCPUの値は、整数または0.25単位で入力する必要があります。

  • 有効な最小値は0.25です。

  • 両方が特定される場合、requestsの値はlimitsの値以下でなくてはなりません。このようにして、ソフトとハードのvCPU設定の両方を行うことができます。

  • vCPU値をミリCPU形式で指定することはできません。たとえば、100mは有効な値ではありません。

  • AWS Batchは、この requests 値をスケーリングの決定に使用します。requests値が指定されていない場合、limits値はrequests値にコピーされます。

メモリリソースを指定する際の制約は、次のとおりです:

  • 少なくとも1つのメモリrequests または limits 値を指定する必要があります。

  • メモリ値は mebibytes (MiBs) 内である必要があります。

  • 両方を指定する場合、requests 値はlimits 値と等しくなければなりません。

  • AWS Batchは、この requests 値をスケーリングの決定に使用します。requests 値が指定されていない場合、limits 値は requests 値にコピーされます。

GPUリソースを指定する際の制約は、次のとおりです:

  • 両方を指定する場合、requests 値はlimits 値と等しくなければなりません。

  • AWS Batchは、この requests 値をスケーリングの決定に使用します。requests値が指定されていない場合、limits値はrequests値にコピーされます。

例: ジョブ定義

Amazon EKS ジョブ定義の以下のAWS Batch では、ソフトvCPU共有を設定します。これにより、Amazon EKS のAWS Batchは、インスタンスタイプの vCPU容量のすべて使用できるようになります。ただし、実行中の他のジョブがある場合、そのジョブには最大数の 2 vCPUs が割り当てられます。メモリは、2 GBに制限されています。

{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "requests": { "cpu": "2", "memory": "2048Mi" } } } ] } } }

Amazon EKS AWS Batch の以下のジョブ定義のrequest 値は 1 で、最大の 4 vCPUs をジョブに割り当てます。

{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "requests": { "cpu": "1" }, "limits": { "cpu": "4", "memory": "2048Mi" } } } ] } } }

以下のAmazon EKS のAWS Batchジョブ定義では 、vCPU limits 値をに 1を、メモリ limits 値を 1 GB に設定します。

{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } } } ] } } }

AWS Batch Amazon EKS 上のジョブを Amazon EKS ポッドにAWS Batch 変換するときに、AWS Batch limits 値をその requests 値にコピーします。これは、requests 値が指定されていない場合です。前述のジョブ定義の例を送信すると、ポッドspec は次のようになります。

apiVersion: v1 kind: Pod ... spec: ... containers: - command: - sleep - 60 image: public.ecr.aws/amazonlinux/amazonlinux:2 resources: limits: cpu: 1 memory: 1024Mi requests: cpu: 1 memory: 1024Mi ...

ノードCPUとメモリの予約

AWS Batch は、vCPU とメモリの予約に関してbootstrap.shファイルのデフォルトロジックに依存します。bootstrap.shファイルの詳細については、 の bootstrap.sh を参照してください。vCPUメモリリソースのサイズを決定する場合、以下の例を検討してください。

注記

実行中のインスタンスがない場合、vCPUとメモリの予約が最初にAWS Batchスケーリングロジックと意思決定に影響を与える可能性があります。インスタンス実行されたら、AWS Batchは初期割り当てを調整します。

例: ノード CPU 予約

CPU予約値は、インスタンスで使用可能なvCPUsの総数を使用してミリコア単位で計算されます。

vCPU番号 予約率
1 6%
2 1%
3~4 0.5%
4以上 0.25%

上記の値を使用すると、次のようになります:

  • 仮想CPUが2つある c5.large インスタンスのvCPUs予約値は,70 m です。これは次の方法で計算されます:(1*60) + (1*10) = 70 m 。

  • 96個のvCPUsを搭載したc5.24xlarge インスタンスのCPU予約値は、 310 mです。これは次の方法で計算されます:(1*60) + (1*10) + (2*5) + (92*2.5) = 310 m。

この例では、c5.large インスタンスでジョブを実行するために使用できるミリコアvCPU ユニットは、1930(計算は2000-70) です。ジョブに 2 (2*1000 m) の vCPU ユニットが必要で、そのジョブが 単一のc5.large インスタンスに収まらないとします。ただし、1.75 vCPU ユニットが必要なジョブには適しています。

例: ノードメモリ予約

メモリ予約値は、以下を使用してメビバイト単位で計算されます:

  • インスタンスキャパシティーは MB 単位です。たとえば、8 GB のインスタンスは 7,748 です MiB。

  • kubeReserved 値。kubeReserved 値は、システムデーモン用に確保するメモリ量です。kubeReserved 値は次のように計算されます:((11 * インスタンスタイプでサポートされる最大ポッド数) + 255)。各インスタンスタイプによりサポートされるポッドの最大数のリストは、GitHub のeni-max-pods.txtを参照してください。

  • HardEvictionLimit 値。使用可能なメモリがHardEvictionLimit 値を下回ると、インスタンスはポッドを削除しようとします。

割り当て可能なメモリの計算式は次のとおりです:(Instance_Capacity_IN_MIB)-(11 * (最大ポッド数))-255-( HardEvictionLimit 値。 ))。

1つの c5.large インスタンスは最大29個のポッドをサポートします。HardEvictionLimit 値が100 MiBの8 GB c5.large インスタンスの場合、割り当て可能なメモリは7074ですMiB。これは次の方法で計算されます:(7748-(11 * 29) -255 -100) = 7074 MiB。この例では、8,192件のMiB のタスクジョブは 、8 gibibyte (GiB) インスタンスであるにもかかわらず、このインスタンスには当てはまりません。

DaemonSets

DaemonSets を使用する場合は、以下を考慮してください:

  • Amazon EKS インスタンスでAWS Batchがまったく実行されていない場合、最初はDaemonSets AWS Batch のスケーリングロジックと意思決定に影響する可能性があります。AWS Batchは最初に0.5 のvCPU ユニットと、500 MiB を想定されるDaemonSetsに割り当てます。インスタンス実行されたら、AWS Batchは初期割り当てを調整します。

  • DaemonSetがvCPUまたはメモリの制限を定義している場合、Amazon EKSジョブのAWS Batchが少なくなります。AWS Batchジョブに割り当てられる DaemonSets の数は、できるだけ少なくすることをお勧めします。