仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

Microk8sのPodでGPUを使う(2023年7月版)

今回のネタは以前同じような記事を書いたので、そのアップデート版です。 次の記事も併せてご覧ください。2019年ごろの記事です。今もだいたい通じます。

tech.virtualtech.jp

さて、本題に入る前にそれぞれざっくり説明します。

MicroK8sとは

MicroK8sとはUbuntuを開発するCanonicalが開発しているKubernetesクラスターを簡単にセットアップできるツールです。次が公式サイトで、一般的なx86PCやサーバーからRaspberry PiのようなARMボードなどでKubernetesクラスターを作成できます。

microk8s.io

[追記]

MicroK8s自身は色々なLinux ディストリビューションで動作します。「Users by distribution」を見ると、Ubuntuで動かす方が多いですね。ただ今回は特別なハードウェアを使うため、Ubuntuベースで動かしています。

snapcraft.io

KubernetesでGPUを使うとは

Kubernetesはコンテナオーケストレーションツールの標準ツールです。このツールを使うことでラップトップから大規模クラスターへのコンテナ実行基盤を展開できます。

そのようなKubernetesでGPUを使うメリットとしては、アプリケーションの並列性と高速なメモリーの提供、コンテナアプリケーションのグラフィックパフォーマンス向上などが挙げられます。

最初期はNVIDIAのGPUのみをサポートしていましたが、現在はNVIDIAのGPUの他、AMDやIntelのGPUの一部もサポートしています。どのようなアプリケーションをコンテナーで実行したいかで選択すれば良いと思います。

kubernetes.io

KubernetesでGPUを使うメリットをざっくり説明しましたが、当然ながらデメリットも存在します。コンテナでアプリケーションを動かすということは、コンテナを多数並べることで並列性や耐障害性を高めるというメリットがあります。アプリが落ちたら自動的に復旧して適切な状態に復元されます。

一方で、そのようなコンテナに物理デバイスを割り当てると、スケール性や耐障害性に課題が発生することになります。メリットとデメリットをよく知った上で、うまく活用したいですね。

最近の構成でMicroK8sでGPUを使う時の注意点

MicroK8sにはアドオンという仕組みが用意されており、gpuアドオンを使うとNVIDIA GPUをKubernetesで使うために必要なソフトウェアが提供されます。 具体的にはNVIDIA GPU Operatorとnvidia-container-runtimeの導入が自動的に行われます。

microk8s.io

MicroK8sはKubernetesのリリースにタイムリーで追従しており、現在Microk8s 1.27が利用可能ですが、GPUアドオンを使う場合はGPU Operator Platform Support にまとめられています。手元では次の構成で手元で動作するのを確認しています。

  • Ubuntu Server 22.04.2
  • CUDA Driver 12.0.1
  • Microk8s 1.26/stable (テスト時点では1.26.5)

CUDA DriverCUDAドライバーのバージョンは、ホストOSと実行するアプリケーションが対応するCUDAバージョンにあったバージョンのCUDA Driverをインストールします。

またコンテナイメージの生成とイメージのチェック用に、次のソフトウェアもインストールしています。バージョンは普通にインストールされる新しいものを入れればOKだと思います。

  • Docker Engine 24.0.2
  • 最新のNVIDIA Container Toolkit

Microk8sのPodでGPUを使うためのインストール概要

詳細な説明は次の記事 でご紹介しますが、事前準備が済んでいればおおよそ次の三つのコマンドを実行するとKubernetesでGPUが利用できます。

sudo snap install microk8s --classic --channel=1.26/stable
sudo microk8s.start
sudo microk8s enable gpu

詳細は次の記事をご覧ください。

tech.virtualtech.jp