私のディープラーニング開発環境: TensorFlow + Docker + PyCharm など。あなたの環境はどうですか?

私のディープラーニング開発環境: TensorFlow + Docker + PyCharm など。あなたの環境はどうですか?

著者: キリアン

マシンハートが編集

参加者: ヌルハチュ・ヌル、リー・ヤージョウ

この記事では、研究者の Killian がディープラーニング開発環境である TensorFlow + Docker + PyCharm + OSX Fuse + Tensorboard を紹介しました。しかし、それぞれの予算、言語習慣、開発ニーズに応じて、各自が異なる開発環境を構成し、さまざまな困難に遭遇することになります。そこで、記事の最後にアンケートを添付し、さまざまな開発者のディープラーニング環境を理解し、最終的にそれを記事にまとめて、皆さんにさまざまな洞察を提供したいと考えました。

私はディープラーニング環境を構成するためにさまざまなことを試してかなりの時間を費やしました。そこで、同じことをしようとしている他の人たちの役に立つかもしれないと思い、現在のワークフローを文書化しようと思いました。

ターゲット

モデルの作成を開始する前に、理想的な開発環境についていくつかの明確な目標を念頭に置いています。このブログ記事で詳しく説明する高レベルの目標をいくつか紹介します。

  • ローカルマシン(標準的なMacBookProラップトップ)でPycharmを使用してコードを編集する

  • 強力なリモートマシンを使用してモデルをトレーニングする

  • 同僚と衝突することなくこのリモートマシンを使用する

  • ローカルおよびリモートマシン上の Docker コンテナで開発/本番モードで TensorFlow コードを実行/デバッグする

  • モデルがリモート マシンでトレーニングされている間に、ローカル マシンでモデルのパフォーマンスをリアルタイムでグラフィカルに表示できます。

謝辞

この記事で紹介するいくつかの興味深いツールを教えてくれた研究室の同僚 Chris Saam に感謝します。

一度だけのインストール

リモートマシン上

したがって、他のことを行う前に、これらのいくつかのことを行うことをお勧めします。ちなみに、この投稿では、ディープラーニング マシン モデルをトレーニングする予定のリモート マシン (すべての GPU が接続されている) で super duper を使用する方法について説明します。

Nvidia-docker をインストールします。まず最初に、Nvidia-docker をインストールする必要があります。 Docker は確かに優れたツールですが、現時点では NVIDIA GPU ハードウェアや CUDA ドライバーを最大限に活用することはできないため、Docker を使用してディープ モデルをトレーニングすることはできません。 Nvidia-docker はこの問題を解決し、通常の docker に似たものになります。通常の Docker コマンドに加えて、NVIDIA GPU ハードウェアをより効率的に管理できるオプションも提供されます。

図 1: NVIDIA-Docker (NVIDIA-Docker 提供)

Slurm をインストールする: ディープラーニング マシンを同僚と共有する予定がある場合は、SLURM などのツールをインストールすることをお勧めします。 SLURM では、デフォルトで使用できるコマンドのセットを制限することで、チームメイトがマシン上でアクセスできるものをより細かく制御できるようになり、各チーム メンバーが特定の専用 GPU/CPU リソースを使用して「ジョブ」環境でコードを実行するように強制できます。これは、チームメイトが同時にマシンにアクセスすることによって発生するリソースの競合を回避したい場合に非常に便利です。

フォルダー設定を標準化する: 同僚とマシンを共有する予定の場合は、メンバー間でフォルダー構造を標準化することもお勧めします。私のディープラーニングマシンは次のように設定されています。

  • /home/myusername フォルダーには、独自のプライベート プロジェクト コードが含まれています。

  • /data フォルダーには、プロジェクト中にチームが共有するデータセットが含まれています。

  • /work フォルダには、現在の実験に必要な特定のデータセットが含まれています。このフォルダーは /data フォルダーより 1 つ下のレベルですが、トレーニング中のメモリ アクセスが高速になります。

ローカルマシン上

OS X Fuse をインストールする: 私のように最新バージョンの OS X を使用している場合は、OS X Fuse をインストールすることをお勧めします。 OS X Fuse を使用すると、SFTP/SSH を使用して、リモート マシンのフォルダーをローカル Finder にマウントできます。または、リモートの /home フォルダーをマウントするのに時間を費やしたくない場合は、GIT PUSH/PULL を使用してローカル マシンとリモート マシン間でコードを転送することもできますが、これはあまり効率的ではありません。したがって、これらのフォルダーをマウントすると、長時間実行されるプロセスで多くの時間を節約できます。

リモート Python インタープリターの設定: ローカル マシンとリモート マシンの両方で同じ Docker イメージを使用することは、後で環境構成の問題が発生する可能性を回避するもう 1 つの方法です。 Pycharm には、Docker コンテナ内でコードを実行できる優れた機能があります。 Pycharm でセットアップを行う前に、正しい TensorFlow Docker イメージを取得していることを確認してください。ローカル マシンでは、TensorFlow Docker イメージを取得するために次の手順のみが必要になる場合があります。

# Docker仮想マシンを起動します

docker-machine のデフォルト起動

# *** TensorFlow CPU バージョンの Docker イメージを取得します

docker pull gcr.io/tensorflow/tensorflow:latest

必要な Docker イメージを取得したら、Pycharm プロジェクト インタープリターをセットアップします。 Pycharm で、「環境設定」>「プロジェクト インタープリター」>「リモートの追加」に移動します (下記参照)。ローカル マシン上で Docker 仮想マシンのインスタンスの実行が開始されたら、Docker 構成を選択する必要があります。 Docker マシンに接続すると、取得した TensorFlow イメージが利用可能なイメージのリストに表示されます。これを設定したら、PyCharm が接続されていれば準備完了です。

日々のルーティン

ローカルマシン上

リモート フォルダーをマウントします。まず最初に、ローカル マシンで実行するスクリプトにアクセスできることを確認します。したがって、最初に行う必要があるのは、OS X Fuse を使用して Mac に home/myusername フォルダーをマウントし、オプションでディープラーニング データをマウントすることです。これらのコマンドは少し長くなるので、すべてのコマンドにエイリアスをいくつか用意しておくとよいでしょう。

# リモートホームフォルダをマウントする

sshfs -o uid=$(id -u) -o gid=$(id -g) [email protected]:/home/myusername/ /LocalDevFolder/MountedRemoteHomeFolder

# リモートデータフォルダをマウントする(オプション)

sshfs -o uid=$(id -u) -o gid=$(id -g) [email protected]:/data/myusername/ /LocalDevFolder/MountedRemoteDataFolder

ここで、uid と gid は、ローカル マシンとリモート マシンのユーザー ID とグループ ID が異なる可能性があるため、これらをマッピングするために使用されます。

ローカル マシンで Docker を起動します。次に、PyCharm が正しいライブラリにアクセスしてコードをローカルでコンパイルできるようにします。これを行うには、ローカルで docker 仮想マシンを起動するだけです。セットアップで何も変更していない場合は、TensorFlow CPU イメージがローカルの Docker 環境ですでに利用可能になっているはずです。

docker-machine のデフォルトの起動

pycharm を開き、マウントしたホーム フォルダー内のプロジェクトを選択します。プロジェクトインタープリターの設定に移動し、使用可能なプロジェクトインタープリターのリストから、先ほど作成したリモート TensorFlow インタープリターを選択します。Pycharm はコードを正しくコンパイルできるはずです。この時点で、いつでもどこでもコードを使用したり、必要な変更を加えたりすることができます。

リモートマシン上

さて、pycharm のコードを新しい機能で更新し、モデルをトレーニング/テストしたいと考えています。

SSH を使用してマシンにリモートでログインする: 最初に行う必要があるのは、ディープラーニング マシンにリモートでログインすることです。

ssh [email protected]

SLURM ジョブを実行します。続行する前に、チームの他のメンバーがジョブを実行していないことを確認します。これにより、タスクが必要なリソースを取得できなくなる可能性があるため、リモート マシンで現在実行されているタスクを常に確認することをお勧めします。 SLURM でこれを行うには、squeue コマンドを実行するだけで、マシン上で現在実行中のタスクが一覧表示されます。何らかの理由で以前のタスクの 1 つがまだ実行中の場合は、scancel コマンドを使用してキャンセルできます。他のタスクが実行されていないことを確認した後、新しいタスクを開始しましょう。次のコマンドで新しいタスクを開始できます。

srun --pty --share --ntasks=1 --cpus-per-task=9 --mem=300G --gres=gpu:15 bash

srun コマンドには、特定のタスクに必要なリソースを指定できるオプションが多数用意されています。この例では、cpus-per-task、mem、gres オプションを使用して、タスクに必要な CPU の数、合計メモリ、GPU の数をそれぞれ指定できます。 pty オプションは、単にきれいなコマンドライン インターフェイスを提供します。

Nvidia docker を起動します。タスクにリソースが割り当てられたので、docker コンテナを起動して適切な環境でコードを実行します。通常の Docker を使用する代わりに、NVIDIA-Docker を使用して GPU を最大限に活用します。また、ハードウェアを最大限に活用するには、docker CPU イメージではなく、TensorFlow の GPU docker イメージを実行していることを確認してください。プロジェクト フォルダーを Docker コンテナー内にマウントするには、-v オプションを使用することを忘れないでください。コンテナ内に入ったら、通常の Python コマンドを使用してコードを実行できます。

# コンテナを起動する

nvidia-docker run -v /home/myusername/MyDeepLearningProject:/src -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu /bin/bash

# ソースフォルダに切り替えることを忘れないでください

cd ソース

# モデルを実行する

python myDLmodel.py

ローカルマシン上

Tensorboard の視覚化を起動します。ほぼ完了です。コードがスムーズに実行されるようになったので、Tensorboard を使用して、モデル内の変数がリアルタイムでどのように変化するかを確認するとよいでしょう。これは実のところ最も簡単な部分です。まず、ローカル Docker マシンの IP アドレスを知っていることを確認します。次のコマンドを使用してこれを実行できます。

docker-machine ls

次に、マウントされたリモート ホーム フォルダーに切り替えて、TensorFlow Docker コンテナーを起動します。ローカル マシンで Tensorflow Docker コンテナを起動したので、Docker コンテナの CPU バージョンを起動していることを確認してください。前述のように、プロジェクト フォルダーを Docker コンテナーにマウントすることを忘れないでください。ローカル マシンでトレーニング中のモデルを視覚化するには、-p オプションを使用して、Tensorboard が使用するポート番号をコンテナーからローカル マシンにマップする必要もあります。

docker run -v /LocalDevFolder/MountedRemoteHomeFolder/MyDeepLearningProject:/src -p 6006:6006 -it gcr.io/tensorflow/tensorflow:latest /bin/bash

Docker コンテナ内に入ったら、モデルが変数を保存する場所へのパス (おそらくチェックポイント フォルダーへのパス) を指定して Tensorboard を起動します。

tensorboard --logdir=チェックポイント/最新チェックポイントフォルダー

すべてがうまくいけば、お気に入りのブラウザを使用して http://DOCKER_MACHINE_IP:6006 にアクセスするだけです。

これにより、モデル内で追跡しているすべての変数が Tensorboard に表示されます。

図 2. Tensorboard の視覚化 (Jimgoo 提供)

<<:  自然言語処理パート1: テキスト分類器

>>:  DeepXplore: 現実世界のディープラーニングシステムを体系的にテストするための初のホワイトボックスフレームワーク

ブログ    

推薦する

注意してください、これらの6つのアルゴリズムには落とし穴があります:中国消費者協会はビッグデータが古い顧客をターゲットにしていると指摘しています

ビッグデータの登場以来、「古い顧客を搾取する」問題はますます深刻になっています。テイクアウトでも旅行...

自然言語処理(NLP)はソーシャルエンジニアリング攻撃の解決に役立ちます

新しいツールは、件名や URL に基づいてソーシャル エンジニアリング攻撃を検出するのではなく、テキ...

ディープラーニングによる物体検出モデルの包括的なレビュー: 高速 R-CNN、R-FCN、SSD

[[204169]] Faster R-CNN、R-FCN、SSD は、最も人気があり、広く使用さ...

...

エッジ AI とエッジ コンピューティングとは何ですか?

[51CTO.com クイック翻訳] エッジ AI は、人工知能の分野で注目を集めている新しい分野...

最大65万ドル! 2021年の米国大手企業のプログラマーの収入をみる

アメリカのテクノロジー大手は、この流行に対して全力で対応し、その力は衰えるどこ​​ろか増した。これら...

...

Pika 1.0 はアニメーション業界に完全な革命をもたらします!ドリームワークスの創設者は、3年後にはアニメーションのコストが10分の1に下がると予測

最近、ドリームワークスの創設者ジェフリー・カッツェンバーグ氏は、生成AIの技術がメディアとエンターテ...

...

GoogleのAIチップのアップグレード:大規模モデルと生成AIをターゲットとし、主流のディープラーニングフレームワークを統合

Google は、AI を使用して最適化された新世代の人工知能とインフラストラクチャの開発をリードす...

AirPodsは「あなたの脳を読む」ことができるのか?あるいは汗中の乳酸濃度も監視できるタイプ|ネイチャー

AirPods は脳の信号を監視できますか? !それともアルツハイマー病やパーキンソン病を予測できる...

...

巨大企業間の今後の AI 戦争: マイクロソフトは左に進んで 2B、グーグルは右に進んで 2C

AI時代の到来非常にドラマチックなのは、Microsoft Build 開発者会議と Google...

GitHub、企業向けAI搭載コーディングアシスタント「Copilot Enterprise」をリリース

GitHub の新製品「GitHub Copilot Enterprise」は、企業独自のコードベー...