翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EKSAWS BatchのメモリとvCPUに関する考慮事項
Amazon EKSのAWS Batchでは、コンテナで使用できるリソースを指定できます。たとえば、vCPUとメモリリソースのrequests
値、またはlimits
値を指定できます。
vCPU リソースを指定する際の制約は次のとおりです:
-
少なくとも 1つのvCPU
requests
、または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 の数は、できるだけ少なくすることをお勧めします。