Amazon Web Services ブログ

Bottlerocket が NVIDIA GPU をサポートしました

この記事は Bottlerocket support for NVIDIA GPUs を翻訳したものです。

2022 年 3 月、Bottlerocket がコンピューティングワークロードの高速化のために NVIDIA GPU をサポートするようになったことをお知らせします。Bottlerocket は オープンソースのコンテナに最適化された OS です。NVIDIA ベースの Amazon Elastic Compute Cloud (EC2) インスタンスタイプを Bottlerocket とともに使用して、GPU コンピューティングデバイスを必要とする機械学習 (ML)、人工知能 (AI)、および同様のワークロードを加速できるようになりました。

このリリースには、Amazon Elastic Kubernetes Service (Amazon EKS) 用の新しい NVIDIA Bottlerocket バリアントが含まれています。このバリアントには、コンテナランタイム用にプリインストールおよび設定された GPU ドライバが付属しています。GPU ドライバをインストールまたは設定したり、k8s-device-plugin を実行したりする必要はありません。これは、すべてのライブラリとカーネルモジュールがイメージ内ですでに利用可能だからです。ドライバーを AMI に直接含めることで、GPU ベースの EC2 インスタンスのプロビジョニング時間を短縮し、外部からの依存関係を回避し、デバイスとカーネルの互換性に関するエラーを減らすことができます。

NVIDIA Bottlerocket バリアントは、Amazon EKS のセルフマネージド型ノードグループおよびノードオートケーラーの Karpenter でサポートされます。提供された AMI は、EC2 インスタンスを使用するあらゆる Kubernetes クラスターに対して、カスタムプロビジョニングツールまたは kops などのコミュニティツールとともに使用できます。

ノードの OS に Bottlerocket を使用した NVIDIA GPU インスタンスを用いて、Amazon EKS クラスターを作成する方法を見てみましょう。

クラスターの作成

Amazon EKS の公式コマンドラインインターフェイスである eksctl を使用してサンプルクラスターを作成します。新しい Bottlerocket NVIDIA バリアントを使用するには eksctl 0.86.0 以降を使用する必要があります。

この例では、NVIDIA T4 Tensor Core GPU を搭載した Amazon EC2 G4dn ノードグループを持つ「br-gpu」という名前のクラスターを作成します。Bottlerocket AMI ファミリーを使用することで、GPU インスタンスタイプに対して正しい Bottlerocket バリアントが自動的に使用されます。NVIDIA Bottlerocket バリアントは、x86_64 と arm64 の両方のインスタンスタイプをサポートしています。使用するアーキテクチャに合わせてコンテナがビルドされていることを確認します。

eksctl create cluster --name br-gpu \
    --node-type g4dn.xlarge \
    --node-ami-family Bottlerocket \
    --managed=false

クラスターが作成されたら、以下のコマンドでクラスター内のインスタンスを表示できます。

kubectl get node -L node.kubernetes.io/instance-type

NAME                                          STATUS   ROLES    AGE   VERSION   INSTANCE-TYPE
ip-192-168-27-24.us-west-2.compute.internal   Ready    <none>   18m   v1.21.9   g4dn.2xlarge

GPU アクセラレートされたワークロードのデプロイ

GPU がアタッチされたノードが作成されたので、最初の GPU ワークロードをデプロイして GPU リソースをコンテナにアタッチできます。

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: nvidia-smi
spec:
  restartPolicy: OnFailure
  containers:
  - name: vectoradd
    image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.1
    command: ["nvidia-smi"]
    resources:
      limits:
         nvidia.com/gpu: 1
EOF

この Pod は nvidia-smi コマンドを実行するため、Pod 内で利用可能な NVIDIA GPU を確認できます。
出力は次のように表示できます。

kubectl logs nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.82.01    Driver Version: 470.82.01    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:00:1E.0 Off |                    0 |
| N/A   27C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

470.X ドライバーと NVIDIA T4 GPU がコンテナで利用できることがわかります。

これで Kubernetes 上で Bottlerocket を使用した GPU アクセラレートされたワークロードを実行する準備が整いました。ワークロードの例をさらに探す場合は、AWS Marketplace の NVIDIA NGC カタログで NVIDIA GPU 最適化コンテナを確認してください。

クラスターの削除

クラスターとプロビジョニングされたすべての EC2 インスタンスを削除するには、次のコマンドを実行します。

eksctl delete cluster --name br-gpu

もっと詳しく知るには

AI/ML ワークロードで Bottlerocket を使ってみませんか?新しい Bottlerocket NVIDIA バリアントは、GPU アクセラレートされたワークロードを迅速かつ安全に実行するのに役立ちます。必要なドライバとライブラリを含む最小限の OS によって、構成や互換性の問題が軽減されます。また、統合されたドライバにより、OS のシームレスな更新が可能になり、プロビジョニング時間が短縮されます。

Amazon EKS マネージド型ノードグループと Amazon Elastic Container Service (ECS) は、今後のアップデートでサポートされる予定です。Bottlerocket と NVIDIA GPU のユースケースに関するフィードバックをお待ちしています。Bottlerocket GitHub リポジトリで、実行したいワークロードや Bottlerocket がそれらのワークロードの保護にどのように役立つかを教えてください。

翻訳はソリューションアーキテクト加治が担当しました。原文はこちらです。