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つ

ブログ    

推薦する

Google の最も強力な NLP モデル BERT はなぜこれほどクールで強力なのでしょうか?テンセントのプログラマーが最初から教えてくれる

1. 背景検索シナリオでは、ユーザーの検索クエリと思い出された記事のタイトルとの関連性は、ユーザーの...

ビジネスオートメーション、斗山の市場成功の鍵

ますます激化する競争の中で、どのように効率的に生産するかと問われれば、答えは自動化の助けを借りること...

ロボットがすべての仕事を奪ったら、人間はどうなるでしょうか?

[51CTO.com クイック翻訳] 過去1年間、人工知能と自動化技術が人間の雇用と労働市場に与え...

人工知能とクラウドコンピューティングの組み合わせは、企業ビジネスの飛躍的成長をどのように促進するのでしょうか?

Statistaの最近のレポートによると、「AI市場の世界的価値は2025年までに年間890億ドル...

Googleは、ニュースコンテンツを作成するために生成AIツールを使用するためにいくつかの出版社と提携していると報じられている。

2月28日、Adweekは、Googleがいくつかの出版社と、ニュースコンテンツを作成するための新...

中国は、インターネット、ビッグデータ、人工知能などの分野における知的財産保護に関する研究と実践を実施します。

[[432777]]中国新聞社、北京、11月1日(記者:孫子発)中国国家知識産権局の沈長宇局長は1...

2020年におすすめの優れた人工知能システム

優れた AI システムは、企業に大きな競争上の優位性をもたらすことができます。理論的には、AI と機...

機械学習プロジェクトにおけるデータの前処理とデータ ラングリング

要点一般的な機械学習/ディープラーニング プロジェクトでは、データ準備が分析パイプライン全体の 60...

...

...

...

...

[Dry Goods] グラフニューラルネットワークの学習リソーストップ10の共有

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

将来の人々は現在のロボットをどのように見るでしょうか?

[51CTO.com クイック翻訳] 最近、ロボットスタートアップのMarbleがYelpと提携し...

...