

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

# Amazon EKS AWS Batch での のメモリと vCPU に関する考慮事項
<a name="memory-cpu-batch-eks"></a>

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

vCPU リソースを指定する際の制約は次のとおりです：
+ 少なくとも 1つのvCPU`requests`、または`limits`値 のいずれか指定する必要があります。
+ １つのvCPU ユニットは、１つの物理コアまたは仮想コアに相当します。
+ 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` 値にコピーされます。

## 例: ジョブ定義
<a name="memory-cpu-batch-eks-example-job-definition"></a>

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`を持ち、ジョブに最大 vCPUs `4` を割り当てます。

```
{
   "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"
                       }
                   }
               }
           ]
       }
   }
}
```

が Amazon EKS AWS Batch 上の ジョブを Amazon EKS ポッド AWS Batch に変換すると、 は `limits`値を `requests`値 AWS Batch にコピーします。これは、`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とメモリの予約
<a name="memory-cpu-batch-eks-node-cpu-memory-reservations"></a>

AWS Batch は、vCPU およびメモリ予約の `bootstrap.sh`ファイルのデフォルトロジックに依存します。`bootstrap.sh` ファイルの詳細については、[bootstrap.sh](https://github.com/awslabs/amazon-eks-ami/blob/al2/templates/al2/runtime/bootstrap.sh) を参照してください。vCPUメモリリソースのサイズを決定する場合、以下の例を検討してください。

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

## 例: ノード CPU 予約
<a name="memory-cpu-batch-eks-node-cpu-reservations"></a>

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


| 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 ユニットが必要なジョブには適しています。

## 例: ノードメモリ予約
<a name="memory-cpu-batch-eks-node-memory-reservations"></a>

メモリ予約値は、以下を使用してメビバイト単位で計算されます:
+ インスタンスキャパシティーは MB 単位です。例えば、8 GB のインスタンスは 7,748 です MiB。
+ `kubeReserved` 値。`kubeReserved` 値は、システムデーモン用に確保するメモリ量です。`kubeReserved` 値は次のように計算されます: *((11 \* インスタンスタイプでサポートされる最大ポッド数) \+ 255)*。インスタンスタイプでサポートされるポッドの最大数については、[「instance-info.jsonl」を参照してください。](https://github.com/awslabs/amazon-eks-ami/blob/main/nodeadm/internal/kubelet/instance-info.jsonl)
+ `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
<a name="memory-cpu-batch-eks-reservations-daemonset-scaling"></a>

DaemonSets を使用する場合は、以下を考慮してください：
+ Amazon EKS インスタンス AWS Batch で が実行されていない場合、 は最初に AWS Batch スケーリングロジックと意思決定に影響を与えるDaemonSets可能性があります。 AWS Batch は最初に、予想される に 0.5 vCPU ユニットと 500 MiB を割り当てますDaemonSets。インスタンスの実行後、 は初期割り当て AWS Batch を調整します。
+ で vCPU またはメモリの制限DaemonSetが定義されている場合、Amazon EKS ジョブ AWS Batch のリソースは少なくなります。 AWS Batch ジョブに割り当てられDaemonSetsる の数をできるだけ少なくしておくことをお勧めします。