ホームページ  >  記事  >  運用・保守  >  Nvidia docker2とは何ですか

Nvidia docker2とは何ですか

藏色散人
藏色散人オリジナル
2021-12-08 17:27:524302ブラウズ

nvidia-docker2.0 は、主に docker の設定ファイル「/etc/docker/daemon.json」を変更することで、docker が NVIDIA Container ランタイムを使用できるようにするシンプルなパッケージです。

Nvidia docker2とは何ですか

この記事の動作環境: Windows 10 システム、Docker バージョン 20.10.11、Dell G3 コンピューター。

NVidia Docker の紹介

NVIDIA は、NVIDIA GPU を使用したコンテナーを容易にするために、2016 年に NVIDIA-Docker の設計を開始しました。第 1 世代の nvidia-docker1.0 は、Docker クライアントのカプセル化を実装し、コンテナーの起動時に必要な GPU デバイスとライブラリをコンテナーにマウントします。ただし、この設計方法は Docker ランタイムと高度に連携しているため、柔軟性に欠けます。既存の欠陥は次のとおりです。

この設計は Docker と高度に結合しており、他のコンテナー ランタイムをサポートしていません。例: LXC、CRI-O、将来追加される可能性のあるコンテナ ランタイム。

Docker エコシステム内の他のツールを有効に活用できません。例: docker compose。

GPU は、柔軟なスケジューリングのためのスケジューリング システムのリソースとして使用できません。

コンテナ実行時の GPU サポートを改善します。例: ユーザーレベルの NVIDIA ドライバー ライブラリ、NVIDIA カーネル モジュール、デバイスの順序などを自動的に取得します。

上記の欠点に基づいて、NVIDIA は次世代コンテナ ランタイム nvidia-docker2.0 の設計を開始しました。

nvidia-docker 2.0 の実装メカニズム

まず、nvidia-docker 2.0、containerd、nvidia-container-runtime、libnvidia-container との直接の関係を簡単に紹介します。ランク。

これらの関係は、次の図で関連付けることができます:

Nvidia docker2とは何ですか

nvidia-docker 2.0

nvidia -docker2.0 は、主に docker 構成ファイル /etc/docker/daemon.json を変更することで docker が NVIDIA コンテナー ランタイムを使用できるようにするシンプルなパッケージです。

nvidia-container-runtime

nvidia-container-runtime は実際のコア部分で、元の Docker コンテナー ランタイム runc に基づいて事前起動を追加します。フック、使用されます。 libnvidia-container ライブラリを呼び出します。

libnvidia-container

libnvidia-container は、Linux コンテナーで使用される NVIDIA GPU を作成するために使用できるライブラリとシンプルな CLI ツールを提供します。

Containerd

Containerd は主に次のことを担当します:

  • コンテナのライフ サイクルの管理 (コンテナの作成から破棄まで) )

  • #コンテナ イメージのプル/プッシュ

  • ストレージ管理 (イメージとコンテナ データのストレージの管理)

  • ##runc を呼び出してコンテナを実行します
  • コンテナのネットワーク インターフェイスとネットワークを管理します

Nvidia docker2とは何ですかcontainerd の場合 リクエストを受信したら、関連する準備を行います。runc を自分で呼び出すか、containerd-shim を作成して runc を呼び出すかを選択できます。Runc は、OCI ファイルに基づいてコンテナを作成します。以上が通常のコンテナ作成の基本的な流れです。

RunC

RunC は軽量ツールです。コンテナを実行するために使用されます。これは 1 つのことと 1 つのことを実行するためにのみ使用されます。適切に実行してください。これは、Docker エンジンを経由せずにコンテナを直接実行できるコマンド ライン ガジェットと考えることができます。実際、runC は標準化の産物であり、OCI 標準に従ってコンテナを作成および実行します。 OCI (Open Container Initiative) 組織は、コンテナ形式とランタイムに関するオープンな業界標準を開発することを目的としています。

RunC コマンド ラインを使用してコンテナを直接作成し、簡単な対話機能を提供できます。

各コンポーネントの機能とコンポーネント間の関係を紹介しました。次に、この図を詳しく説明します:

Nvidia docker2とは何ですか通常どおりコンテナを作成します。

docker --> dockerd --> containerd--> containerd-shim -->runc --> container-process

docker クライアントは、コンテナ作成リクエストを dockerd に送信します。 dockerd がリクエストタスクを受信すると、そのリクエストを containerd に送信します。 チェックと検証の後、containerd は、containerd-shim を起動します。コンテナプロセスを開始します。

GPU を使用するコンテナーの作成

GPU コンテナーを作成するプロセスは次のとおりです。

docker--> dockerd --> containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc -- > container-process

基本的なプロセスは次のプロセスと似ています。 GPU を使用しないコンテナー。ただし、docker のデフォルトのランタイムは、NVIDIA 独自の nvidia-container-runtime に置き換えられます。

このように、nvidia-container-runtime はコンテナを作成するときに、まず nvidia-container-runtime-hook フックを実行して、コンテナが GPU を使用する必要があるかどうかを確認します (環境変数 NVIDIA_VISIBLE_DEVICES によって判断されます)。 。必要に応じて、libnvidia-container を呼び出して GPU をコンテナーに公開します。それ以外の場合は、デフォルトの runc ロジックが使用されます。

そういえば、nvidia-docker2.0 の一般的な仕組みは基本的に明らかです。ただし、nvidia-container-runtime、libnvidia-container、containerd、および runc に関連するプロジェクトについては、この記事では 1 つずつ紹介しません。興味があれば、自分で調べて学ぶことができます。これらのプロジェクトのアドレスは記事内でリンクされています。

推奨学習: 「Docker ビデオ チュートリアル

以上がNvidia docker2とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。