[kubernetes]k 8 s gpu-nvidia devicepluginインストール、サンプルテスト


目的

  • Nvidia GPUを有するサーバ/PC環境において、KubernetesはGPUを識別し、
  • を使用する.
  • Kubernetes Nvidia GPUを使用したアプリケーションYAMLテスト
  • 用意する。


    いつもまずOfficial Docをチェック

  • https://github.com/NVIDIA/nvidia-docker
  • nvidia gpuドックコンテナのnvidia-docker
  • に使用可能
  • https://github.com/NVIDIA/k8s-device-plugin
  • k 8 sはnvidia gpuインストールノード上のデバイスにアクセスして管理し、k 8 s-device-plugin
  • を使用することができる.
  • helmバージョン:https://github.com/NVIDIA/k8s-device-plugin#deployment-via-helm2
  • https://www.nvidia.com/ko-kr/drivers/unix/
  • Linux環境におけるnvidia汎用ドライバ
  • GPUノードの準備

  • nvidia GPUドライバのインストール
    ダウンロード
  • ドライバ:https://www.nvidia.com/ko-kr/drivers/unix/2
  • runファイル
  • chmod +x NVIDIA-Linux-x86_64*.run
    ./NVIDIA-Linux-x86_64*.run

  • nvidia-dockerインストール
  • パッケージリポジトリを追加し、nvidia-docker
  • をインストールします.
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
    curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
    
    sudo apt-get update && sudo apt-get install -y nvidia-docker2
    sudo systemctl restart docker
  • /etc/docker/daemon.jsonをチェックしてdefault runtimeを変更したかどうかを確認します.
    ない場合は、次のように編集されます.
      {
          "default-runtime": "nvidia",
          "runtimes": {
              "nvidia": {
                  "path": "/usr/bin/nvidia-container-runtime",
                  "runtimeArgs": []
              }
          }
      }
  • 設定


    k 8 s nvidia device plugin(v 0.11.0)のインストール


    yamlバージョン(開発用)


    ダウンロード
  • yamlファイル
  • コンテナ画像名:nvcr.io/nvidia/k8s-device-plugin:v0.11.0
  • curl -o nvidia-device-plugin.yml https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.11.0/nvidia-device-plugin.yml

    helmバージョン(本番用)

  • helmrepo
    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
  • を追加
  • helm pull
    helm pull --untar nvdp/nvidia-device-plugin
  • 常に熟知値
  • vi nvidia-device-plugin/values.yaml
  • helm custom valuesファイルの作成
    カスタム値ファイル
  • nvidia gpuを使用してインストールノードにのみインストール
    cp nvidia-device-plugin/values.yaml values/value-nvidia-device-plugin.yml
  • ノードセレクタnvidia GPUがインストールノードにのみ追加するノードラベル
  • を指定する.
    vi values/value-nvidia-device-plugin.yml
    nodeSelector:
      node.resource/gpu: "true"
  • helm install
    helm install \
    --values=values/value-nvidia-device-plugin.yml \
    nvidia-device-plugin \
    nvidia-device-plugin/
  • インストールオプション
  •  failOnInitError:
          fail the plugin if an error is encountered during initialization, otherwise block indefinitely
          초기화 중에 오류가 발생하면 플러그인을 실패로 처리하고, 다른 경우엔 무기한 차단
          (default 'true')
      compatWithCPUManager:
          run with escalated privileges to be compatible with the static CPUManager policy
          고정된 CPUManger 정책과 호환되도록 상승된 권한으로 실행
          (default 'false')
      legacyDaemonsetAPI:
          use the legacy daemonset API version 'extensions/v1beta1'
          예전 daemonset 'extensions/v1beta1' API 버전을 호환
          (default 'false')
      migStrategy:
          the desired strategy for exposing MIG devices on GPUs that support it
          MIG를 지원하는 GPU에 MIG 장치를 노출하는 방법 선택
          [none | single | mixed] (default "none")
      deviceListStrategy:
          the desired strategy for passing the device list to the underlying runtime
          기본 런타임에 장치 목록을 전달하기 위해 사용하는 방법 선택
          [envvar | volume-mounts] (default "envvar")
      deviceIDStrategy:
          the desired strategy for passing device IDs to the underlying runtime
          기본 런타임에 장치 ID를 전달하기 위해 사용하는 방법 선택
          [uuid | index] (default "uuid")
      nvidiaDriverRoot:
          the root path for the NVIDIA driver installation (typical values are '/' or '/run/nvidia/driver')
          NVIDIA 드라이버 설치하는 루트 경로 지정 (/ 혹은 /run/nvidia/drive)
      runtimeClassName:
          the runtimeClassName to use, for use with clusters that have multiple runtimes. (typical value is 'nvidia')
          여러 런타임이 있는 클러스터를 사용하는 경우 runtimeClassNmae 지정 (defaul 는 nvidia)

    インストールの確認


    指定されたノードにのみインストールされていることを確認します.
  • テスト

  • nvidia-simテスト導入
  • の作成
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cuda-gpu-test
      labels:
        app: gpu-test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gpu-test
      template:
        metadata:
          labels:
            app: gpu-test
        spec:
          containers:
            - name: cuda
              image: nvidia/cuda:10.0-base
              command: [ "sh", "-c" ]
              args: ["nvidia-smi && sleep 300"]
              resources:
                limits:
                  nvidia.com/gpu: 2
    
  • kubectl apply-f{ファイル名}を使用してテスト
  • またはレンズにおいて
  • を生成する.