Amazon SageMaker HyperPod が efa-only ネットワークインターフェイスをサポートしたので試してみた
はじめに
2026 年 6 月、Amazon SageMaker HyperPod でコンピュートノードに EFA のみ(efa-only) のネットワークインターフェイスを指定できるようになりました。
efa-only を指定するとセカンダリ ENI は IP アドレスを持ちません。多数のネットワークカードを持つインスタンスをスケールするときの IP 枯渇を防げます。今回はml.g6e.24xlarge で実際に試し、efa-only ENI がプライベート IP を消費しないことを確認しました。
efa-only とは
EFA は、AI/ML や HPC アプリケーションを高速化するために EC2 インスタンスへアタッチするネットワークデバイスです。ENA と EFA を整理してから efa-only の位置づけを確認します。
| ENA | EFA(EFA with ENA) | efa-only | |
|---|---|---|---|
| IP アドレスの割り当て | される | される | されない |
| プライマリ ENI として使用 | できる | できる | できない |
| ENI アタッチ上限にカウント | される | される | される |
HyperPod では ClusterNetworkInterface.InterfaceType をインスタンスグループ単位で efa か efa-only から選びます。
efa-only で何がうれしいか
従来の HyperPod では、複数のネットワークカードを持つインスタンスを efa で構成すると、ネットワークカードごとの ENI それぞれにプライベート IP が割り当てられます。たとえば ml.p5.48xlarge(ネットワークカード 32 枚)を 100 ノード起動すると、3,200 個の IP を消費します。大規模なクラスターでは、この IP 消費を考慮したネットワーク設計が必要でした。
efa-only を指定したセカンダリ ENI には、プライベート IP アドレスが割り当てられません。IP コネクティビティ用のプライマリ ENI だけが IP を消費します。先ほどの例で比べると削減効果は次のとおりです。
ml.p5.48xlarge を 100 ノード |
従来(efa) |
efa-only |
|---|---|---|
| 1 ノードの IP 消費 | 32 個 | 1 個 |
| 100 ノードの IP 消費 | 3,200 個 | 100 個 |
EFA ファブリック自体は efa-only でも有効で、プライベート IP の割り当てがないだけで EFA の低レイテンシ通信はそのまま使えます。
確認結果
describe-network-interfaces で確認すると、efa-only 指定のセカンダリ ENI(card 1)は PrivateIpAddress が None でした。サブネットの消費 IP はコントローラーとコンピュートノードのプライマリ各 1 個の計 2 個のみで、efa-only ENI 分はゼロでした。
前提条件
efa-only は複数ネットワークカードを持つインスタンスでのみ使えます。ネットワークカードが 1 枚のインスタンスでは指定できません。
対象インスタンスは ml.g6e.24xlarge、ml.p4d.24xlarge、ml.p5.48xlarge、ml.trn2.48xlarge などです。同じ系統でも ml.p5.4xlarge のようにネットワークカードが 1 枚のサイズは対象外です。
やってみた
サブネットの起動前 IP 数をメモっておく
クラスター作成前にベースラインを取っておきます。
aws ec2 describe-subnets --region ap-northeast-1 \
--subnet-ids <private-subnet-id> \
--query "Subnets[].{Subnet:SubnetId,CIDR:CidrBlock,AvailableIPs:AvailableIpAddressCount}" \
--output table
10.0.1.0/24(256 アドレス)から AWS 予約 5 個を引いた 251 がベースラインです。この値と作成後の差分でサブネットの IP 消費を測ります。
AvailableIPs=251 CIDR=10.0.1.0/24 Subnet=subnet-05c759a6368ec347f
efa-only 指定でクラスターを作成する
コンピュートノードのインスタンスグループに NetworkInterface.InterfaceType: efa-only を指定します。--instance-groups で渡す JSON の骨子は次のとおりです。
NetworkInterface のないコントローラーグループは通常の ENA インターフェイスになります。コンピュートグループにのみ efa-only を指定します。
[
{
"InstanceGroupName": "controller-group",
"InstanceType": "ml.c5.xlarge",
"InstanceCount": 1,
"ExecutionRole": "arn:aws:iam::<アカウントID>:role/<HyperPodExecutionRole>",
"LifeCycleConfig": {
"SourceS3Uri": "s3://sagemaker-<bucket>/",
"OnCreate": "on_create.sh"
}
},
{
"InstanceGroupName": "compute-group",
"InstanceType": "ml.g6e.24xlarge",
"InstanceCount": 1,
"ExecutionRole": "arn:aws:iam::<アカウントID>:role/<HyperPodExecutionRole>",
"LifeCycleConfig": {
"SourceS3Uri": "s3://sagemaker-<bucket>/",
"OnCreate": "on_create.sh"
},
+ "NetworkInterface": {
+ "InterfaceType": "efa-only"
+ }
}
]
クラスターを作成します。
aws sagemaker create-cluster \
--region ap-northeast-1 \
--cluster-name hyperpod-efa-only-cluster \
--instance-groups file://create-cluster-instance-groups.json \
--vpc-config file://create-cluster-vpc-config.json
ClusterArn が返れば問題ないです。
{ "ClusterArn": "arn:aws:sagemaker:ap-northeast-1:<アカウントID>:cluster/53j01nb0oaw3" }
ステータスが InService になるまで待ちます。
aws sagemaker describe-cluster \
--region ap-northeast-1 \
--cluster-name hyperpod-efa-only-cluster \
--query "{Status:ClusterStatus,Nodes:InstanceGroups[].{Name:InstanceGroupName,Status:InstanceGroupGeneralStatus}}"
Creating から InService まで約 6 分でした。
{
"Status": "InService",
"Nodes": [
{ "Name": "controller-group", "Status": "Running" },
{ "Name": "compute-group", "Status": "Running" }
]
}
AWS マネジメントコンソールのクラスター一覧で hyperpod-efa-only-cluster のステータスが InService になっていることを確認できます。

コンピュートノードのプライベート IP 割り当てを確認する
HyperPod のノードは SageMaker マネージドです。aws ec2 describe-instances ではノードが見えません。ENI は VPC のサブネットに作られるため、describe-network-interfaces をサブネットで絞り込んで確認します。
aws ec2 describe-network-interfaces --region ap-northeast-1 \
--filters "Name=subnet-id,Values=<private-subnet-id>" \
--query "NetworkInterfaces[].{ID:NetworkInterfaceId,Type:InterfaceType,PrivateIP:PrivateIpAddress,Desc:Description}" \
--output table
Description 末尾でノードを識別できます。compute-group_0_0_1 が card 0(プライマリ)、compute-group_0_1_1 が card 1(セカンダリ)です。efa-only の card 1 ENI は PrivateIP が None になっていることを確認します。
Desc(末尾) ID Type PrivateIP
controller-group_0_0_1 eni-0db04c0af8dd41b37 interface 10.0.1.52
compute-group_0_0_1 eni-0a455a9a61364cb94 efa 10.0.1.114
compute-group_0_1_1 eni-088816dda0d540942 efa-only None
サブネットの IP 消費を確認する
コンピュートノード起動後に、再度サブネットの利用可能 IP 数を確認します。ベースライン 251 から 2 個減り 249 になっていることを確認します。
aws ec2 describe-subnets --region ap-northeast-1 \
--subnet-ids <private-subnet-id> \
--query "Subnets[].AvailableIpAddressCount" --output text
249
内訳はコントローラーの interface が 1 個、コンピュートのプライマリ(efa)が 1 個です。efa-only ENI は IP を消費していません。
まとめ
SageMaker HyperPod の efa-only ネットワークインターフェイスを使うと、コンピュートノードのセカンダリ EFA 用 ENI が IP アドレスを持ちません。今回の検証では ENI を 1 枚増やしても、サブネットの利用可能 IP は 1 個しか減りませんでした。ネットワークカードを多数持つ P5、P5e 系インスタンスをスケールするときほどこの差が効いてきます。
設定は ClusterNetworkInterface.InterfaceType をインスタンスグループ単位で指定するだけです。コントローラーノードは通常の ENA のまま、コンピュートノードだけ efa-only とするだけです。
おわりに
大規模クラスターを構築するときには抑えておきたい設定ですので確認してみました。ちなみに AWS ParallelCluster で同様のアップデートが 2026 年 3 月にありました。遅れて HyperePod にも更新が入りました。
参考
- Amazon SageMaker HyperPod が EFA のみのネットワークインターフェイスをサポートするようになりました
- ClusterNetworkInterface - Amazon SageMaker API Reference
- ClusterInstanceGroupSpecification - Amazon SageMaker API Reference
- Elastic Fabric Adapter for AI/ML and HPC workloads on Amazon EC2
- Maximize network bandwidth on Amazon EC2 instances with multiple network cards
- Prerequisites for using SageMaker HyperPod
- AWS managed policy: AmazonSageMakerClusterInstanceRolePolicy
- AWS ParallelCluster v3.15.0 で P6-B300 サポートなど主要な変更点を確認してみた








