すべてのプロダクト
Search
ドキュメントセンター

Elastic GPU Service:Dockerコマンドラインを実行してcGPUを使用する

最終更新日:Oct 21, 2024

cGPUを使用して、GPUリソースを分離できます。 これにより、複数のコンテナが単一のGPUを共有できます。 cGPUは、Container Service for Kubernetes (ACK) のコンポーネントとして外部サービスを提供し、機械学習、深層学習、科学計算のシナリオなど、ハイパフォーマンスコンピューティング (HPC) 機能を必要とするシナリオに適用できます。 cGPUを使用して、GPUリソースを効率的に利用し、コンピューティングタスクを高速化できます。 このトピックでは、のcGPUをインストールして使用する方法について説明します。

説明

cGPUを使用してGPUリソースを分離する場合、UVM (Unified Virtual memory) を使用してGPUメモリを要求することはできません。 したがって、Compute Unified Device Architecture (CUDA) APIのcudaMallocManaged() を呼び出してGPUメモリを要求することはできません。 他の方法を使用してGPUメモリをリクエストできます。 たとえば、cudaMalloc() を呼び出すことができます。 詳細については、「CUDA初心者向け統合メモリ」をご参照ください。

前提条件

操作を実行する前に、GPUアクセラレーションインスタンスが次の要件を満たしていることを確認してください。

  • インスタンスは、gn7i、gn6i、gn6v、gn6e、gn5i、gn5、ebmgn7i、ebmgn6i、ebmgn7e、およびebmgn6eのいずれかのインスタンスファミリーに属します。.

  • インスタンスによって実行されるOSは、CentOS、Ubuntu、またはAlibaba Cloud Linux (Alinux) です。

  • バージョン418.87.01以降のTeslaドライバがインスタンスにインストールされています。

  • バージョン19.03.5以降のDockerがインスタンスにインストールされています。

cGPUのインストール

エンタープライズユーザーでも個人ユーザーでも、ACKのDockerランタイム環境を使用してcGPUをインストールして使用することを推奨します。

重要

バージョン1.5.7のcGPUをインストールすると、並列プロセスが互いに干渉するため、cGPUカーネルドライバーがロックされる可能性があります。 その結果、Linuxカーネルパニックの問題が発生します。 新しいビジネスによるカーネルの問題を防ぐために、バージョン1.5.8以降のcGPUをインストールするか、バージョン1.5.8以降にcGPUを更新することを推奨します。

  1. クラスターを作成します。

    詳細については、「マネージド Kubernetes クラスターの作成」をご参照ください。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[アプリケーション] > [クラウドネイティブAIスイート] を選択します。

  3. [クラウドネイティブAI Suite] ページで、[デプロイ] をクリックします。

  4. [基本機能] セクションで、[スケジューリングポリシー拡張 (バッチタスクスケジューリング、GPU共有、トポロジ対応のGPUスケジューリング)] を選択します。

  5. ページの下部にある [クラウドネイティブAIスイートのデプロイ] をクリックします。

    cGPUがインストールされた後、Cloud-native ai Suiteページでack-AI-installerコンポーネントが [デプロイ済み] 状態であることを確認できます。

cGPUの使用

このセクションでは、cGPUを使用して2つのコンテナーが1つのGPUを共有できるようにする方法の例を示します。 この例では、ecs.gn6i-c4g1.xlargeインスタンスが使用されています。

cGPUに影響を与える可能性のある環境変数

コンテナを作成するときに、環境変数の値を指定して、コンテナがcGPUを使用して取得する計算能力を制御できます。

環境変数名

値のタイプ

説明

CGPU_DISABLE

Boolean

cGPUを無効にするかどうかを指定します。 有効な値:

  • false: cGPUを有効にします。

  • true: cGPUを無効にし、デフォルトのNVIDIAコンテナサービスを使用します。

デフォルト値:false

true です。

ALIYUN_COM_GPU_MEM_DEV

Integer

GPUアクセラレーションインスタンスの各GPUの合計メモリ。

この変数の値はインスタンスタイプによって異なり、整数である必要があります。 単位は USD / GiB です。

NVIDIA Tesla T4 GPUで構成されているecs.gn6i-c4g1.xlargeインスタンスを使用する場合、インスタンスでnvidia-smiコマンドを実行して、GPUの合計メモリを取得できます。

15 GiB です。 サンプルのコマンド出力は、GPUの総メモリが15,109 MiBであり、15 GiBに丸められていることを示しています。

ALIYUN_COM_GPU_MEM_CONTAINER

Integer

コンテナーに割り当てられているGPUメモリ。 この変数は、ALIYUN_COM_GPU_MEM_DEVと共に使用されます。

合計メモリが15 GiBのGPUの場合、ALIYUN_COM_GPU_MEM_DEVを15に、ALIYUN_COM_GPU_MEM_CONTAINERを1に設定すると、コンテナには1 GiBのGPUメモリが割り当てられます。

説明

この変数を空のままにするか、0に設定すると、cGPUの代わりにデフォルトのNVIDIAコンテナサービスが使用されます。

1 GiB。

ALIYUN_COM_GPU_VISIBLE_DEVICES

整数またはUUID

コンテナーに割り当てられているGPU。

4つのGPUで構成されているGPUアクセラレーションインスタンスでnvidia-smi -Lコマンドを実行して、GPUのデバイス番号とUUIDを取得すると、次のコマンド出力が返されます。

GPU 0: Tesla T4 (UUID: GPU-b084ae33-e244-0959-cd97-83****)
GPU 1: Tesla T4 (UUID: GPU-3eb465ad-407c-4a23-0c5f-bb****)
GPU 2: Tesla T4 (UUID: GPU-2fce61ea-2424-27ec-a2f1-8b****)
GPU 3: Tesla T4 (UUID: GPU-22401369-db12-c6ce-fc48-d7****)

次に、次のいずれかの値にALIYUN_COM_GPU_VISIBLE_DEVICESを設定できます。

  • ALIYUN_COM_GPU_VISIBLE_DEVICESを0,1に設定すると、1番目と2番目のGPUがコンテナーに割り当てられます。

  • ALIYUN_COM_GPU_VISIBLE_DEVICESをGPU-b084ae33-e244-0959-cd97-83 **** 、GPU-3eb465ad-407c-4a23-0c5f-bb **** 、GPU-2fce61ea-2424-27ec-a2f1-8b **** に設定した場合、指定されたUUIDの3つのGPUがコンテナに割り当てられます。

0,1

ALIYUN_COM_GPU_SCHD_WEIGHT

Integer

コンテナが計算能力を取得する際の重み。 有効値: 1〜max_inst。

なし。

ALIYUN_COM_GPU_HIGH_PRIO

Integer

コンテナーに高い優先度を設定するかどうかを指定します。 有効な値:

  • 0: コンテナーの通常の優先度を設定します。

  • 1: コンテナに高い優先度を設定します。

デフォルト値:0

説明

各GPUに少なくとも1つの高優先度コンテナを設定することを推奨します。 GPUコンピューティングパワーは、ポリシーパラメーターで指定されたスケジューリングポリシーに基づいて、複数の高優先度コンテナに割り当てられます。

  • GPUタスクが優先度の高いコンテナーで実行される場合、コンテナーはスケジューリングポリシーによって制限されず、GPUの計算能力を先取りできます。

  • 優先度の高いコンテナーでGPUタスクが実行されない場合、コンテナーはスケジューリングプロセスに関与せず、GPUの計算能力を割り当てることができません。

0 です。

cGPUの実行

  1. 次のコマンドを実行してコンテナーを作成し、コンテナーに割り当てられるGPUメモリを指定します

    この例では、コンテナに割り当てられたGPUメモリを指定するALIYUN_COM_GPU_MEM_CONTAINERと、GPUメモリの合計を指定するALIYUN_COM_GPU_MEM_DEVが設定されています。 次のコンテナが作成されます。

    • gpu_test1: このコンテナには6 GiBのGPUメモリが割り当てられています。

      sudo docker run -d -t --gpus all --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --name gpu_test1 -v /mnt:/mnt -e ALIYUN_COM_GPU_MEM_CONTAINER=6 -e ALIYUN_COM_GPU_MEM_DEV=15 nvcr.io/nvidia/tensorflow:19.10-py3
    • gpu_test2: このコンテナには8 GiBのgpuメモリが割り当てられています。

      sudo docker run -d -t --gpus all --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --name gpu_test2 -v /mnt:/mnt -e ALIYUN_COM_GPU_MEM_CONTAINER=8 -e ALIYUN_COM_GPU_MEM_DEV=15 nvcr.io/nvidia/tensorflow:19.10-py3
    説明

    上記のコマンドでは、TensorFlowイメージnvcr.io/nvidia/tensorflow:19.10-py3が使用されています。 ビジネス要件に基づいて、イメージをコンテナーイメージに置き換えます。 TensorFlowイメージを使用してTensorFlow深層学習フレームワークを構築する方法の詳細については、「深層学習開発のためのNGC環境のデプロイ」をご参照ください。

  2. 次のコマンドを実行して、GPUメモリなどのコンテナーに関するGPU情報を表示します。

    sudo docker exec -i gpu_test1 nvidia-smi

    この例では、gpu_test1コンテナが使用されています。 次の図は、コンテナのGPUメモリがMiB 6,043であることを示しています。gpu_test1

procfsノードを使用したcGPUの表示

cGPUランタイムは、/proc/cgpu_kmディレクトリに複数のprocファイルシステム (procfs) ノードを生成し、ノードを自動的に管理します。 procfsノードを使用して、cGPU情報を表示し、cGPU設定を構成できます。

  1. 次のコマンドを実行して、procfsノードに関する情報を表示します。

    ls /proc/cgpu_km/

    コマンドの出力を次の図に示します。

    Dingtalk_20240911164737.jpg

    ノード数

    ノード

    読み書きタイプ

    説明

    0

    Read と write

    GPUのディレクトリ。 cGPUは、GPUアクセラレーションインスタンス上の各GPUのディレクトリを生成し、ディレクトリ名として0、1、2などの番号を使用します。

    この例では、単一のGPUが使用され、GPUのディレクトリ名は0です。

    default_memsize

    Read と write

    作成されたコンテナーに割り当てられるデフォルトのメモリ。

    inst_ctl

    Read と write

    制御ノード。

    アップグレード

    Read と write

    cGPUのホットアップデートを制御します。

    version

    読み取り専用

    cGPUのバージョン。

  2. 次のコマンドを実行して、GPUのディレクトリにあるパラメーターを表示します。

    この例では、0 GPUディレクトリが使用されます。

    ls /proc/cgpu_km/0

    コマンドの出力を次の図に示します。

    Dingtalk_20240911170725.jpg

    GPUディレクトリのパラメータ

    パラメーター

    読み書きタイプ

    説明

    012b2edccd 7aまたは0852a381c 0cf

    Read と write

    コンテナのディレクトリ。

    cGPUは、GPU高速化インスタンスで実行される各コンテナのディレクトリを生成し、コンテナIDをディレクトリ名として使用します。

    説明

    docker psコマンドを実行して、作成されたコンテナーを表示できます。

    free_weight

    読み取り専用

    GPUの重み。 このパラメーターを使用して、GPUの使用可能な重みを照会および変更できます。

    free_weightが0に設定されている場合、新しく作成されたコンテナの重みは0です。 この場合、コンテナーはGPUの計算能力を得ることができず、GPUの計算能力を必要とするアプリケーションの実行には使用できません。

    major

    読み取り専用

    cGPUのプライマリデバイス番号。 この値は、異なるデバイスタイプを示します。

    max_inst

    Read と write

    コンテナーの最大数。 有効な値: 1 ~ 25。

    policy

    Read と write

    計算能力のスケジューリングポリシー。 cGPUは、次のスケジューリングポリシーをサポートしています。

    • 0: 公平共有スケジューリング。 各コンテナは、固定されたタイムスライスを占有する。 タイムスライスの割合は1/max_instです。

    • 1: プリエンプティブスケジューリング。 各コンテナは、できるだけ多くのタイムスライスを占有する。 タイムスライスの割合は、1 /コンテナーの数です。

    • 2: 重みベースのプリエンプティブスケジューリング。 ALIYUN_COM_GPU_SCHD_WEIGHTが1より大きい値に設定されている場合、重みベースのプリエンプティブスケジューリングが使用されます。

    • 3: 固定スケジューリング。 計算能力は一定の割合でスケジュールされます。

    • 4: ソフトスケジューリング。 プリエンプティブスケジューリングと比較して、ソフトスケジューリングはよりソフトな方法でGPUリソースを分離します。

    • 5: ネイティブスケジューリング。 GPUドライバーの組み込みスケジューリングポリシー。

    ポリシーパラメーターの値を変更して、スケジューリングポリシーを調整できます。 スケジューリングポリシーの詳細については、「cGPUの使用例」をご参照ください。

    prio_ratio

    Read と write

    マルチタイプのワークロードのコロケーションで、優先度の高いコンテナがプリエンプトできる最大計算能力。 有効な値: 20 ~ 99。

  3. 次のコマンドを実行して、コンテナーのディレクトリにあるパラメーターを表示します。

    この例では、012b2edccd7aコンテナディレクトリが使用されます。

    ls /proc/cgpu_km/0/012b2edccd7a

    コマンドの出力を次の図に示します。

    Dingtalk_20240911171620.jpg

    コンテナーディレクトリのパラメーター

    パラメーター

    読み書きタイプ

    説明

    highprio

    Read と write

    コンテナの優先度が高い。 デフォルト値:0

    ALIYUN_COM_GPU_HIGH_PRIOが1に設定され、highprioが指定されている場合、コンテナはprio_ratioで指定された最大計算能力を先取りできます。

    説明

    このパラメーターは、マルチタイプのワークロードのコロケーションで使用されます。

    id

    読み取り専用

    コンテナID。

    memsize

    Read と write

    コンテナーのGPUメモリ。 cGPUは、ALIYUN_COM_GPU_MEM_DEVの値に基づいてこのパラメーターの値を生成します。

    meminfo

    読み取り専用

    コンテナー内の残りのGPUメモリ、GPUを使用しているプロセスのID、プロセスのGPUメモリ使用量など、GPUメモリに関する情報。 サンプル出力:

    Free: 6730809344
    PID: 19772 Mem: 200278016

    PID: 19772

    重み

    Read と write

    コンテナーがGPUの最大計算能力を取得する際に基づく重み。 デフォルト値は 1 です。 実行中のすべてのコンテナの重みの合計は、max_instの値を超えることはできません。

  4. (オプション) 次のコマンドを実行してcGPUを設定します。

    procfsノードを理解したら、GPU高速化インスタンスでコマンドを実行して操作を実行できます。 たとえば、スケジューリングポリシーを変更したり、重みを変更したりできます。 コマンドのサンプルを次の表に示します。

    コマンド

    効果

    エコー2 > /proc/cgpu_km/0 /ポリシー

    スケジューリングポリシーを重みベースのプリエンプティブスケジューリングに変更します。

    cat /proc/cgpu_km/0/free_weight

    GPUで使用可能な重みを照会します。 free_weightが0に設定されている場合、新しく作成されたコンテナの重みは0です。 この場合、コンテナーはGPUの計算能力を得ることができず、GPUの計算能力を必要とするアプリケーションの実行には使用できません。

    cat /proc/cgpu_km/0/$dockerid/weight

    指定されたコンテナの重量を照会します。

    エコー4 > /proc/cgpu_km/0/$dockerid /重量

    コンテナーがGPUの計算能力を取得する際の重みを変更します。

cGPU-smiを使用したcgpuコンテナの表示

cgpu-smiを使用して、cGPUが使用されているコンテナに関する情報を表示できます。 この情報には、コンテナID、GPU使用率、計算能力制限、GPUメモリ使用率、および割り当てられたメモリの合計が含まれます。

説明

cgpu-smiは、cGPUに関するサンプルモニタリング情報を提供します。 Kubernetesアプリケーションをデプロイする際に、サンプルモニタリング情報を参照または使用して、カスタム開発と統合を実行できます。

次の図は、cgpu-smiによって提供されるサンプルモニタリング情報を示しています。

cgpu-smi

cGPUの更新またはアンインストール

cGPUの更新

cGPUはコールドアップデートとホットアップデートをサポートしています。

  • コールドアップデート

    cGPUがDockerに使用されていない場合は、cGPUでコールドアップデートを実行できます。 次の操作を実行します。

    1. 次のコマンドを実行して、実行中のすべてのコンテナを停止します。

      sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2) 
    2. 次のコマンドを実行して、cGPUを最新バージョンに更新します。

      sudo sh upgrade.sh
  • ホットアップデート

    cGPUがDockerに使用されている場合、cGPUカーネルドライバーでホットアップデートを実行できます。 更新可能なバージョンには特定の制限が課されます。 サポートが必要な場合は、Alibaba Cloudのアフターサービスエンジニアにお問い合わせください。

cGPUのアンインストール

ノードから以前のバージョンのcGPUをアンインストールする方法の詳細については、「CLIを使用したノードのcGPUバージョンのアップグレード」をご参照ください。

cGPUの使用例

cGPUを使用した計算能力のスケジュール

cGPUがcgpu_kmモジュールをロードすると、cGPUはコンテナの最大数 (max_inst) に基づいて各GPUのタイムスライス (X ms) を設定し、GPUの計算能力をコンテナに割り当てます。 以下の例では、スライス1、スライス2、及びスライスN個のタイムスライスが使用される。 次の例は、異なるスケジューリングポリシーを使用してGPUコンピューティングパワーを割り当てる方法を示しています。

  • 公正共有スケジューリング (ポリシー=0)

    コンテナを作成すると、cGPUはタイムスライスをコンテナに割り当てます。 cGPUはスライス1からスケジューリングを開始します。 スケジューリングタスクは、物理GPUに提出され、タイムスライス (X ms) 内のコンテナ内で実行される。 次いで、cGPUは、次のタイムスライスに移動する。 各コンテナは、1/max_instである同じ計算能力を得る。 詳細は以下の図をご参照ください。

    image
  • プリエンプティブスケジューリング (ポリシー=1)

    コンテナを作成すると、cGPUはタイムスライスをコンテナに割り当てます。 cGPUはスライス1からスケジューリングを開始します。 ただし、スライス1内でコンテナが使用されていない場合、またはGPUデバイスがコンテナ内のプロセスによって開始されていない場合、cGPUはスライス1内のスケジューリングをスキップして次のタイムスライスに移動します。

    例:

    1. Docker 1という名前のコンテナのみを作成し、Slice 1を割り当てて、コンテナ内で2つのTensorFlowプロセスを実行します。 この場合、Docker 1は、物理GPU全体の計算能力を得ることができる。

    2. 次に、Docker 2という名前のコンテナを作成し、Slice 2をコンテナに割り当てます。 GPUデバイスがDocker 2のプロセスによって起動されていない場合、cGPUはスライス2内のDocker 2のスケジューリングをスキップします。

    3. GPUデバイスがDocker 2のプロセスによって起動された場合、cGPUはスライス1とスライス2内でスケジューリングを実行します。 Docker 1とDocker 2は、物理GPUの最大半分の計算能力を得ることができます。 詳細は以下の図をご参照ください。

      image
  • 重みベースのプリエンプティブスケジューリング (ポリシー=2)

    コンテナーの作成時にALIYUN_COM_GPU_SCHD_WEIGHTが1より大きい値に設定されている場合、重みベースのプリエンプティブスケジューリングが使用されます。 cGPUは、コンテナの数 (max_inst) に基づいて、物理GPUの計算能力をmax_inst部分に分割する。 ALIYUN_COM_GPU_SCHD_WEIGHTが1より大きい値に設定されている場合、cGPUは複数のタイムスライスをより大きいタイムスライスに結合し、そのタイムスライスをコンテナに割り当てます。

    サンプル設定:

    • Docker 1: ALIYUN_COM_GPU_SCHD_WEIGHT = m

    • Docker 2: ALIYUN_COM_GPU_SCHD_WEIGHT = n

    スケジューリング結果:

    • Docker 1のみが実行されている場合、Docker 1は物理GPU全体の計算能力を先取りします。

    • Docker 1とDocker 2が実行されている場合、Docker 1とDocker 2は理論上の比率m:nで計算能力を取得します。 プリエンプティブスケジューリングと比較して、Docker 2は、GPUデバイスがDocker 2のプロセスによって起動されていない場合でも、n個のタイムスライスを消費します。

      説明

      m:nを2:1と8:4に設定すると、コンテナの実行パフォーマンスが異なります。 m:nを2:1とした場合の1秒以内のタイムスライス数は、m:nを8:4とした場合の1秒以内のタイムスライス数の4倍である。

      image

    重みベースのプリエンプティブスケジューリングは、コンテナが取得できる理論上の最大GPU計算能力を制限します。 ただし、NVIDIA V100 GPUなどの強力なコンピューティング能力を提供するGPUでは、小さなGPUメモリが使用される場合、コンピューティングタスクは単一のタイムスライス内でのみ完了できます。 この場合、m:nが8:4に設定されると、残りのタイムスライスの間、GPU計算能力はアイドル状態になり、理論上の最大GPU計算能力の制限は無効になる。

  • 固定スケジューリング (ポリシー=3)

    max_instと一緒にALIYUN_COM_GPU_SCHD_WEIGHTを使用して、計算能力の割合を修正できます。

  • ソフトスケジューリング (ポリシー=4)

    コンテナを作成すると、cGPUはタイムスライスをコンテナに割り当てます。 プリエンプティブスケジューリングと比較して、ソフトスケジューリングはよりソフトな方法でGPUリソースを分離します。 詳細については、「プリエンプティブスケジューリング (policy = 1) 」をご参照ください。

  • ネイティブスケジューリング (ポリシー=5)

    このポリシーを使用して、GPUメモリのみを分離できます。 ポリシーが使用されると、計算能力はNVIDIA GPUドライバーの組み込みスケジューリング方法に基づいてスケジュールされます。

コンピューティングパワーのスケジューリングポリシーは、Tesla P4、Tesla P100、Tesla T4、Tesla V100、Tesla A10および GPUを含む、すべてのAlibaba Cloud異種GPUアクセラレーションインスタンスおよびインスタンスに使用されるNVIDIA GPUでサポートされています。 この例では、Tesla A10 GPUで構成されたGPUアクセラレーションインスタンスを共有する2つのコンテナーがテストされます。 コンテナの計算能力比は1:2です。 各コンテナは12 GiBのGPUメモリを取得します。

説明

次の性能テストデータは参照だけのために提供されます。

  • テスト1: TensorFlowフレームワークを使用して異なるbatch_size値でトレーニングされたResNet50モデルのパフォーマンスデータを比較します。 FP16精度が使用されます。 次のセクションはテスト結果を示します。

    フレームワーク

    モデル

    batch_size

    精度

    Docker 1の1秒あたりのイメージ数

    Docker 2の1秒あたりのイメージ数

    TensorFlow

    ResNet50

    16

    FP16

    151

    307

    TensorFlow

    ResNet50

    32

    FP16

    204

    418

    TensorFlow

    ResNet50

    64

    FP16

    247

    503

    TensorFlow

    ResNet50

    128

    FP16

    257

    516

  • テスト2: TensorRTフレームワークを使用して異なるbatch_size値でトレーニングされたResNet50モデルのパフォーマンスデータを比較します。 FP16精度が使用されます。 次のセクションはテスト結果を示します。

    フレームワーク

    モデル

    batch_size

    精度

    Docker 1の1秒あたりのイメージ数

    Docker 2の1秒あたりのイメージ数

    TensorRT

    ResNet50

    1

    FP16

    568.05

    1132.08

    TensorRT

    ResNet50

    2

    FP16

    940.36

    1884.12

    TensorRT

    ResNet50

    4

    FP16

    1304.03

    2571.91

    TensorRT

    ResNet50

    8

    FP16

    1586.87

    3055.66

    TensorRT

    ResNet50

    16

    FP16

    1783.91

    3381.72

    TensorRT

    ResNet50

    32

    FP16

    1989.28

    3695.88

    TensorRT

    ResNet50

    64

    FP16

    2105.81

    3889.35

    TensorRT

    ResNet50

    128

    FP16

    2205.25

    3901.94

cGPUを使用して複数のGPUにメモリを割り当てる

次の例では、4つのGPUが設定されています。 GPU0、GPU1、GPU2、およびGPU3は、メモリの3 GiB、4 GiB、5 GiB、および6 GiBを別々に割り当てられる。 サンプルコード:

docker run -d -t --runtime=nvidia  --name gpu_test0123 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -v /mnt:/mnt -e ALIYUN_COM_GPU_MEM_CONTAINER=3,4,5,6 -e ALIYUN_COM_GPU_MEM_DEV=23 -e NVIDIA_VISIBLE_DEVICES=0,1,2,3 nvcr.io/nvidia/tensorflow:21.03-tf1-py3
docker exec -i gpu_test0123   nvidia-smi

次のコマンド出力は、GPUのメモリの詳細を示しています。回显结果

ALIYUN_COM_GPU_MEM_CONTAINERを使用して、複数のGPUにメモリを割り当てることができます。 次の表に、ALIYUN_COM_GPU_MEM_CONTAINERの値を示します。

説明

ALIYUN_COM_GPU_MEM_CONTAINER=3

4つのGPUのそれぞれのメモリは3 GiBに設定されています。

ALIYUN_COM_GPU_MEM_CONTAINER=3,1

4つのGPUのメモリは、順に、3 GiB、1 GiB、1 GiB、および1 GiBに設定される。

ALIYUN_COM_GPU_MEM_CONTAINER=3,4,5,6

4つのGPUのメモリは、順に3 GiB、4 GiB、5 GiB、および6 GiBに設定される。

ALIYUN_COM_GPU_MEM_CONTAINER指定なし

cGPUは無効です。

ALIYUN_COM_GPU_MEM_CONTAINER=0

ALIYUN_COM_GPU_MEM_CONTAINER=1,0,0