Rancher は K8S クラスターを構築し、GPU 共有の完全なプロセスを構成します

この記事のすべての内容は、個人ブログ サイトjavafengから転送されています。この記事の問題のある部分については、ソース ステーションを確認してください。

声明

この記事のすべてのコンテンツは Docker に基づいています。k8s クラスターは rancher が提供するツールを使用して構築されています。GPU 共有テクノロジは Ali GPU Sharing を使用します。他のコンテナ テクノロジを使用するこの記事は適用できない場合があります。また、kubeadm を使用して構築された k8s の一部は適用できない場合があります。GPU 共有をデプロイする場合、kubeadm によって構築された k8s にはインターネット上で入手可能な情報や公式 Web サイトの情報が多数ありますが、 k8s の rancher バージョン これはネイティブの kubernetes とは異なり、いくつかの具体的な手順が後で含まれます。

docker と nvidia-docker2 をインストールする

Docker をインストールするには、公式のインストール スクリプトのインストールを直接実行します。

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

インストールが完了したら、Docker version「バージョンの表示」を使用します。通常、現在のインストールはバージョン 20.10 です。バージョンを正常に照会できれば、インストールは成功しています。

インストール後、次のコマンドを実行して、docker が自動的に起動するように設定します。

systemctl start docker
systemctl enable docker

nvidia-docker2のインストールについては、以前の記事「UbuntuがK8Sを実現するNVIDIA GPUのスケジューリングメモ」を参照してnvidia-dockerのインストールを行ってください。
インストールが完了したら、nvidia スケジューリングをサポートするように docker のデフォルトのランタイムを変更し、構成を編集する必要があります/etc/docker/daemon.json(存在しない場合は、新しいものを作成します)。

{
    
    
    "runtimes": {
    
    
        "nvidia": {
    
    
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia",
    "exec-opts": ["native.cgroupdriver=systemd"]
}

その中で、runtimesパラメーターはランタイムを定義するもので、ここでは nvidia という名前のランタイム環境が定義されています。default-runtimeこれは、指定されたデフォルトのランタイムが定義されているだけであることを意味しますnvidia

最後の文"exec-opts": ["native.cgroupdriver=systemd"]の影響は、K8S のファイル ドライバーが cgroupfs で、docker のファイル ドライバーが systemd であるため、この 2 つの違いによりイメージの起動に失敗するため、K8S のファイル ドライバーを指定する必要があるということです。システムとして。

GPUドライバー

GPU ドライバーのインストールと簡単なスケジュールについては、このサイトの以前の記事「Ubuntu が K8S を実現する NVIDIA GPU のスケジュールに関するメモ」の NVIDIA ドライバーのセクションを参照してください。

K8Sクラスタ構築

K8S クラスタの構築部分については、当サイトの「Rancher のインストールと K8S クラスタの作成」を参照してください。構築が完了したら、ホストの ~/.kube/config に設定ファイルを保存します。

その後、クラスターを管理するために kubectl をインストールします。

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
# 配置kubectl
chmod 755 ./kubectl
mv ./kubectl /usr/local/bin/kubectl
# 查看版本
kubectl version

kubectl を使用してポッドを表示します。

# 查看pod
kubectl get pods

GPU 共有の展開

  1. Scheduler-policy-config.json を github から取得し、ホスト /etc/kubernetes/ssl/ の下に置きます。複数のマスター ノードがある場合、各マスター ノードは次を実行する必要があります。
cd /etc/kubernetes/ssl/
curl -O https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/scheduler-policy-config.json
  1. GPU 共有スケジュール プラグイン gpushare-schd-extender をデプロイします。
cd /tmp/
curl -O https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/gpushare-schd-extender.yaml
# 因为是使用单节点,因此需要能够在master上进行调度,所以需要在gpushare-schd-extender.yaml中将
# nodeSelector:
#    node-role.kubernetes.io/master: ""
# 这两句删除,使k8s能够在master上进行调度
kubectl create -f gpushare-schd-extender.yaml
  1. デバイス プラグイン gpushare-device-plugin をデプロイする

クラスターが新しく構築されていない場合、以前に nvidia-device-plugin をインストールしている場合は、それを削除する必要があります。k8s の rancher バージョンの場合、kubectl get pods を使用して、nvidia-device-plugin の対応するポッドを確認できます。消して。次に、デバイス プラグイン gpushare-device-plugin をデプロイします。

cd /tmp/
wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-rbac.yaml
kubectl create -f device-plugin-rbac.yaml
wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-ds.yaml
# 默认情况下,GPU显存以GiB为单位,若需要使用MiB为单位,需要在这个文件中,将--memory-unit=GiB修改为--memory-unit=MiB
kubectl create -f device-plugin-ds.yaml
  1. GPU ノードにラベルを付ける

GPU を備えたサーバーに GPU プログラムをスケジュールするには、サービスにタグを付ける必要がありますgpushare=true

# 查看所有节点
kubectl get nodes
# 选取GPU节点打标
kubectl label node <target_node> gpushare=true
# 例如我这里主机名为master,则打标语句为:
# kubectl label node master gpushare=true
  1. kubectl 実行可能ファイルを更新します。
wget https://github.com/AliyunContainerService/gpushare-device-plugin/releases/download/v0.3.0/kubectl-inspect-gpushare
chmod u+x kubectl-inspect-gpushare
mv kubectl-inspect-gpushare /usr/local/bin

次にkubectl inspect gpushare、 を実行します。GPU 情報が表示されれば、インストールが成功したことを意味します。

GPU情報

この時点での合計 GPU メモリは 7981MiB で、使用量は 0 であることがわかります。

テスト

テストの次に、Alibaba Cloud のサンプル プログラムを入手します。

wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/samples/1.yaml
wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/samples/2.yaml
wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/samples/3.yaml

これら 4 つのファイルは、GPU をスケジュールする必要がある 4 つのサンプル コンテナーの yaml であり、kubectl create -f x.yaml直接起動できます。これらのファイルでスケジュールされた GPU はすべて G 単位です。ここでは、スケジューリング値を変更しました。スケジューリング値のパラメーターには次の名前が付けられています: aliyun.com/gpu-mem、最初のものは 128、2 つ目は 256、3 つ目は 512、1 つずつ開始し、GPU 使用率を観察します。
最初のものを開始します: 2 つ目
最初に始める
を開始します:
2番目を開始します
3 つ目を開始します:
3番目を開始します

これまでのところ、rancher バージョン k8s は GPU 共有を正常に構成しています。

おすすめ

転載: blog.csdn.net/u012751272/article/details/120566298