Docker Compose + GPU + TensorFlow が生み出す魔法の火花

Docker Compose + GPU + TensorFlow が生み出す魔法の火花

Docker は素晴らしいです。開発と配布に Docker を使用する人が増えています。 Docker には、即時の環境設定、プラットフォームに依存しないアプリ、既成のソリューション、優れたバージョン管理、メンテナンスの簡素化など、多くの利点があります。

しかし、データ サイエンスやディープラーニングに関しては、Docker を使用する上でいくつかの障害があります。ホストとコンテナ間でポートとファイルを共有し、不要な run.sh スクリプトを作成し、CUDA バージョンと GPU 共有に対処するには、すべての Docker フラグを覚えておく必要があります。次のようなエラーを見たことがあるなら、その苦痛はわかるでしょう。

  1. $ nvidia-smi
  2. NVML の初期化に失敗しました: ドライバー/ライブラリのバージョンが一致しません

[[204696]]

私たちの目標

この記事の目的は、当社で頻繁に使用する Docker ユーティリティと GPU 対応のボイラープレートのセットを紹介することです。

したがって、次の結果は発生しません。

  1. ドッカー実行
  2. --rm
  3. --device /dev/nvidia0:/dev/nvidia0
  4. --device /dev/nvidiactl:/dev/nvidiactl
  5. --device /dev/nvidia-uvm:/dev/nvidia-uvm
  6. -p 8888:8888
  7. -v `pwd`:/home/user
  8. gcr.io/tensorflow/tensorflow:最新のGPU

代わりに、次の結果になります。

  1. ドキュメントアップ

いいね!

私たちが実際に達成したいこと:

  • 1つのコマンドでアプリケーションの状態(実行、停止、削除)を管理します
  • すべてのランタイムフラグを単一の設定ファイルに保存し、gitリポジトリにコミットできるようにします。
  • GPUドライバーのバージョンの不一致と共有を忘れる
  • KubernetesやRancherなどのプロダクションツールでGPU対応コンテナを使用する

以下は、すべてのディープラーニングのユーザーに強くお勧めするツールのリストです。

1. CUDA

まず、CUDA ツールキットが必要です。これは、自分でモデルをトレーニングする予定がある場合に必須です。将来のアップデート時に依存関係が混乱することがないように、deb ではなく runfile インストーラー タイプを使用することをお勧めします。

(オプション) 動作したかどうかを確認する方法:

  1. cd /usr/local/cuda/samples/1_Utilities/deviceQuery
  2. 作る
  3. ./deviceQuery #「結果= PASS と表示されるはずです

2. ドッカー

膨大な数のライブラリでコンピューターを汚染したくないし、バージョンの問題も心配です。同様に、自分でビルドしてインストールする必要もありません。通常、ソフトウェアはすでに作成され、イメージにパッケージ化されています。 Docker のインストールは簡単です:

  1. curl -sSL https://get.docker.com/ | sh

3. エヌビディアドッカー

Docker を使用する場合は、NVIDIA のこのユーティリティ (https://github.com/NVIDIA/nvidia-docker) が必要です。これにより、Docker コンテナー内で GPU を使用する手順が非常に簡素化されます。

インストールは非常に簡単です:

  1. wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
  2. sudo dpkg -i /tmp/nvidia-docker*.deb

今では、NVIDIA デバイスを毎回共有する代わりに、次のことが可能になります。

  1. docker 実行 --rm --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm nvidia/cuda nvidia-smi

nvidia-docker コマンドを使用できます:

  1. nvidia-docker 実行 --rm nvidia/cuda nvidia-smi

同様に、ドライバー バージョンの不一致についても心配する必要はありません。NVIDIA の Docker プラグインがそれを処理します。

4. Dockerコンポーズ

docker 実行構成をファイルに保存し、アプリケーションの状態をより簡単に管理できる非常に便利なユーティリティです。複数の Docker コンテナを組み合わせるように設計されていますが、サービスが 1 つしかない場合でも、docker compose は非常に便利です。安定版はここにあります

(https://github.com/docker/compose/releases):

  1. curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose

5. Nvidia Docker Compose

残念ながら、Docker Compose は Nvidia Docker の存在を認識しません。幸いなことに、回避策があります。nvidia-docker ドライバーを使用して構成を生成できる小さな Python スクリプトがあります。 pip 経由で Nvidia Docker Compose をインストールします。

  1. pip で nvidia-docker-compose をインストールします

これで、docker-compose の代わりに nvidia-docker-compose コマンドを使用できるようになりました。

代替案

nvidia-docker-compose を使用しない場合は、ボリューム ドライバーを手動で渡すことができます。そのためには、docker-compose.yml に次のオプションを追加するだけです。

  1. #NVIDIA ドライバーのバージョンはこちら
  2. ボリューム:
  3. nvidia_driver_375.26:
  4. 外部:true
  5. ...
  6. ボリューム:
  7. -nvidia_driver_375.26:/usr/local/nvidia:ro

6. Bash エイリアス

しかし、nvidia-docker-compose では 21 文字の入力が必要で、これは多すぎます。

[[204697]]

幸いなことに、bash エイリアスを使用できます。お気に入りのエディターで ~/.bashrc (場合によっては ~/.bash_profile) を開き、次の行を入力します。

  1. エイリアスdoc = 'nvidia-docker-compose'  
  2. エイリアスdocl = 'doc logs -f --tail=100'  

source ~/.bashrc を実行して設定を更新します。

TensorFlow Servingを開始する

これで、上記のすべてのツールを活用する準備が整いました。たとえば、Tensorflow GPU 対応の Docker コンテナを実行します。

プロジェクト ディレクトリに次の内容の docker-compose.yml ファイルを作成します。

  1. バージョン:'3'
  2. サービス:
  3. tf:
  4. 画像:gcr.io/tensorflow/tensorflow:latest-gpu
  5. ポート:
  6. -8888:8888
  7. ボリューム:
  8. -.:/ノートブック

これで、1 つのコマンドで TensorFlow Jupiter を起動できるようになりました。

  1. ドキュメントアップ

doc は nvidia-docker-compose のエイリアスです。正しいボリューム ドライバーを使用して変更された構成ファイル nvidia-docker-compose.yml を生成し、docker-compose を実行します。

同じコマンドを使用してサービスを管理できます。

  1. ドキュメントログ
  2. ドックストップ
  3. ドキュメントrm
  4. #...等

結論は

しかし、それだけの価値があるのでしょうか? 以下に長所と短所を見てみましょう。

アドバンテージ

  • GPUデバイスの共有を考慮する必要はありません
  • NVIDIA ドライバーのバージョンを心配する必要はもうありません
  • コマンドフラグをなくし、シンプルでクリーンな構成にする
  • コンテナの状態を管理するために --name フラグを使用する必要がなくなりました
  • よく知られ、文書化され、広く使用されているユーティリティ
  • Kubernetesなどのdocker-composeファイルを理解するオーケストレーションツールの設定が完了しました。

欠点

  • さらにツールをインストールする必要があります

生産準備はできていますか?

はい。映画推奨アプリ Movix では、GPU アクセラレーション TensorFlow ネットワークを使用して、ユーザー入力に基づいてリアルタイムで映画の選択を計算します。

プロキシ API 用の Rancher クラスターには、Nvidia Titan X を搭載したコンピューターが 3 台あります。構成は通常の docker-compose.yml ファイルに保存されるため、アプリケーションを新しいサーバーにデプロイしたり、開発環境をセットアップしたりすることが容易になります。これまでのところ、そのパフォーマンスは優れています。

機械学習の未来に備えましょう!

オリジナル: https://hackernoon.com/docker-compose-gpu-tensorflow-%EF%B8%8F-a0e2011d36

[この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  60年間の浮き沈みを経て、人工知能はどれだけの偏見や誤った判断を経験するのでしょうか?

>>:  プライベートコレクション、オープンソースのトップディープラーニングプロジェクト9つ

ブログ    

推薦する

ChatGPTが見知らぬ人の自撮り写真を流出!モデルによって個人データが盗まれたのですか?ネットユーザーはパニックに

最近、ChatGPTの返信に見知らぬ男性の写真が現れるという事件が多くのネットユーザーに衝撃を与えま...

...

組み込み物流ロボットの用途は何ですか?

ネットワーク技術やグリッドコンピューティングの発展により、組み込み型モバイル機器を中核とした「ユビキ...

テンセントの無人運転車が初登場!将来的には運転席がペンギンに置き換わる予定!プレート分析

人工知能と新技術の研究開発に関して、新たなブレークスルーがもう一つありました。 テンセントの無人運転...

洪水期に緊急通信を確保するにはどうすればよいでしょうか?ドローンは誰もが好む新たな力となる

現在、わが国の南北は本格的な洪水期に入っており、水利部門が洪水・干ばつ災害対策の緊急対応をレベルIV...

ワークフローをよりスマートにする 5 つの AI ツール

生成 AI の流行は、昨年の ChatGPT の登場から始まりました。わずか 1 年で、このテクノロ...

...

世界をより高いレベルのイノベーションへと導く AI テクノロジー トップ 10

Analytics Insight は、世界を次のレベルのイノベーションに押し上げるトップ 10 ...

...

...

...

コロナウイルス:スマートシティ変革のきっかけ

都市環境は、物理的、デジタル的、人間的システムを統合し、住民と企業に優れた成果をもたらします。 [[...

YOLOプロジェクト復活!マスターが後を継ぎ、YOLOの父が2か月間引退し、v4バージョンが正式にリリースされました

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

Caffeine ソースコード解釈 - キャッシュ有効期限の削除に関連するアルゴリズム

[[410588]]この記事はWeChatの公開アカウント「Muscular Coder」から転載し...

AIはクラウドコンピューティング大手の次の競争の焦点となる

人工知能が今日の情報技術分野で最もホットな話題であることは疑いの余地がなく、情報産業を豊かにし、改善...