最近、私は この質問 とこの Nvidia-docker プロジェクトに反対しました。これはNvidia Dockerの実装であり、このスキームがどこで、なぜ、どのように意味があるのか疑問に思いました。
この環境はビデオレンダラーやゲーム開発者、GPU計算を必要とするデータサイエンティストによって使用されていると述べているWeb上のいくつかの資料(例: this )を見つけました。さて、それが私の質問です:
高負荷のアプリが高速で並列化された計算を必要とするようなシナリオでは、Dockerは本当に必要ですか?
私の理解では、Dockerは、不必要な仮想化をもたらし、並列化のメリットをもたらさない、扱いにくい冗長な要素として立っています。
この組合が理にかなっている実際の例を挙げていただけますか?
コンテナ化は、「高負荷」または「並列化」と完全に直交しています。コンテナ化も仮想化を意味するものではなく、サンドボックスとしてより適切に解釈されます。
では、なぜ人々はコンテナを使用するのでしょうか? 画像。
イメージの階層化のおかげで、コンテナーイメージには、ホストシステムにインストールしなくても、すべての依存関係(他のサービス、ライブラリなど)を含む完全なアプリケーションを含めることができます。これにより、アプリケーションを永続的にインストールせずに実行したり、1つのアプリケーションの複数のインスタンスを実行したり、依存関係が競合する複数のアプリケーションを実行したりすることが可能になります。
これは、クラスターを実行している場合を除いて、ほとんどのユーザーにとってメリットが限られています。依存関係を永続的にインストールする代わりにコンテナーイメージを起動できることは大きなメリットであり、クラスターに多くの柔軟性をもたらします。明日は、依存関係のセットが異なるまったく異なるワークロードを実行したいと思います。
クラスターが一般的である2種類のユーザーについてはすでに説明しました。レンダーファームと科学計算です。これらはしばしばGPUを必要とします。具体的には、CUDAベースのプログラムにはNvidiaGPUが必要です。
そのため、クラスター管理のメリットのために、GPUコンテナーとコンテナーの両方を使用することが望まれます。この組み合わせ自体は、特別なDockerランタイムを必要としません。必要なリソースを通過するようにコンテナーランタイムを構成し、コンテナーからの追加のsyscallを許可し(サンドボックス化も弱める)、コンテナーに必要な構成をセットアップする必要があります。
しかし、なぜyouがそれを構成する必要があるのでしょうか?また、他の問題がある可能性があります。これは、GPUドライバーが関連しているにもかかわらず、コンテナーがドライバーをカーネルにロードできないシナリオです。コンテナは、GPUを排他的リソースとして使用したい場合があります。 LinuxでGPUを使用すると、重要な構成が必要になる場合があります。
したがって、GPUとコンテナの組み合わせの煩わしさを軽減したいという要望があることは明らかです。 Nvidia-dockerは1つのアプローチのようです。 KubernetesはGPUリソースの管理を実験的にサポートしており、GPUインターフェイスとしてnvidia-dockerまたはGoogleプラグインのいずれかを使用できますが、OpenCLはまだサポートされていないようです。