私のディープラーニング開発環境: 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: 現実世界のディープラーニングシステムを体系的にテストするための初のホワイトボックスフレームワーク

ブログ    
ブログ    
ブログ    

推薦する

新たな AI の冬を回避するにはどうすればよいでしょうか?

人工知能はここ数年で大きな進歩を遂げてきましたが、開発者の過剰な約束とエンドユーザーの非現実的な期待...

画期的なニューラルネットワークが量子AI研究への道を開く可能性

海外メディアの報道によると、イタリアの研究者らは最近、量子コンピュータ上で特殊なアルゴリズムを実行す...

WEF: 2023 年のトップ 10 新興テクノロジー

世界経済フォーラム(WEF)は毎年、世界経済と社会に大きな影響を与える可能性のあるトップイノベーショ...

...

GTA6のトレーラーは1億回以上再生されており、3人のAI巨人も数秒でGTAギャングに変身できる

新しいGTAゲームの予告編を見ましたか?この予告編は3つのギネス世界記録を破り、再生回数は1億回を超...

エネルギー効率を向上させるために、脳は予測知覚能力を発達させた。

[[436377]]この記事はLeiphone.comから転載したものです。転載する場合は、Lei...

毎日のアルゴリズム: 文字の繰り返しのない最長の部分文字列

[[421075]]この記事はWeChatの公開アカウント「3分でフロントエンドを学ぶ」から転載した...

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

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

人工知能アルゴリズムがバーベキューの香りを再現。ネットユーザー:料理番組を見ながらその香りを嗅ぎますか?

近年、人工肉は急速に発展していますが、本物の肉と比較すると、味や食感にはまだ明らかな差があります。最...

権威ある業界レポートが発表されました。我が国のロボット開発の特徴と傾向は何ですか?

ロボットは「製造業の至宝」とみなされており、ロボット産業の発展は国家のイノベーションと産業競争力の向...

2021年、AIはどんな未来を迎えるのでしょうか?

人工知能は新しい時代の「電気」であると主張する人もいます。市場調査会社IDCのデータによると、AIハ...

AIとIoTはどのように連携するのでしょうか?

人工知能 (AI) とモノのインターネット (IoT) の統合により、技術革新と機能の新しい時代が到...

...

COVID-19患者のどの症状が悪化するかを予測する新しいアルゴリズム

[[373238]]ミシガン大学の研究者らは、COVID-19患者約400人のデータを分析し、時間の...

自動化はウエスタン証券のデジタル従業員にとっての出発点

金融テクノロジーと伝統テクノロジーの相互支援は、徐々に証券業界の発展の中核的な原動力となってきました...