TensorFlow | Databricks on AWS [2022/1/31時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
TensorFlowはGoogleによって開発された機械学習のオープンソースフレームワークです。CPU、GPU、GPUクラスターでのディープラーニング、一般的な数値計算をサポートしています。Apache License 2.0の元で提供されています。
Databricks機械学習ランタイムにはTensorFlowとTensorBoardが含まれているので、パッケージをインストールすることなしにこれらのライブラリを利用することができます。使用しているDatabricks機械学習ランタイムバージョンにインストールされているTensorFlowのバージョンについては、リリースノートをご覧ください。
注意
このガイドはTensorFlowの包括的なガイドではありません。TensorFlow websiteをご覧ください。
シングルノード、分散トレーニング
シングルマシンのワークフローをテストし移行するには、シングルノードクラスターを使用します。
ディープラーニングにおける分散トレーニングのオプションについては、分散トレーニングをご覧ください。
サンプルノートブック
以下のノートブックでは、シングルノードクラスターにおけるTensorFlow (1.xと2.x)とTensorBoardの実行方法を説明しています。
TensorFlow 1.15/2.xノートブック
TensorBoard
TensorBoardは、TensorFlow、PyTorchなどの機械学習プログラムのデバッグ、最適化、理解のための可視化ツールのスイートです。
TensorBoardを使う
Databricksランタイム7.2以降でのTensorBoardの使用
DatabricksにおけるTensorBoardの起動は、お使いのローカルマシンにおけるJupyterノートブックでの起動方法と違いはありません。
-
%tensorboard
マジックコマンドをロードし、ログのディレクトリを定義します。%load_ext tensorboard experiment_log_dir = <log-directory>
-
%tensorboard
マジックコマンドを実行します。%tensorboard --logdir $experiment_log_dir
TensorBoardサーバーが起動し、ノートブックのインラインにユーザーインタフェースを表示します。新規タブでTensorBoardを開くリンクも提供されます。
TensorBoardのnotebookモジュールを直接使用することで、TensorBoardを起動することもできます。
from tensorboard import notebook
notebook.start("--logdir {}".format(experiment_log_dir))
Databricksランタイム7.1以前でのTensorBoardの使用
ノートブックからTensorBoardを起動するには、dbutils.tensorboard
ユーティリティを使用します。
dbutils.tensorboard.start("/tmp/tensorflow_log_dir")
このコマンドを実行することで、クリックすると新規タブでTensorBoardが開くリンクが表示されます。
このAPIを用いて起動したTensorBoardは、dbutils.tensorboard.stop()
で停止するか、クラスターを停止するまでは動作し続けます。
注意
DatabricksのライブラリとしてクラスターにTensorFlowをアタッチした場合には、TensorBoardを起動する前にノートブックを再度アタッチする必要があるかもしれません。
TensorBoardのログとディレクトリ
TensorBoardは、TensorBoardやPyTorchのTensorBoardのコールバックと関数によって生成されるログを読み込むことで機械学習プログラムを可視化します。他の機械学習ライブラリのログを生成するには、TensorFlowのfile writerをもyいいて直接ログを書き出すことができます(TensorFlow 2.xに関してはModule: tf.summary、TensorFlow 1.xの古いAPIについてはModule: tf.compat.v1.summaryをご覧ください)。
エクスペリメントのログが適切に記録されていることを確実にするためには、クラスターの揮発的ファイルシステムではなく、DBFS(Databricksファイルシステム。すなわち/dbfs/
配下のログディレクトリ)に保存することをお勧めします。それぞれのエクスペリメントごとに、TensorBoardはユニークなディレクトリの元で起動します。ご自身のエクスペリメント内の機械学習コードの実行ごとにログが生成されるように、TensorBoardのコールバックあるいはfile writerがエクスペリメントディレクトリのサブディレクトリに書き込みを行うように設定します。このようにすることで、TensorBoard UIのデータはコードの実行ごとに分離されます。
ご自身の機械学習プログラムの情報をTensorBoardを用いて記録するには、公式のTensorBoard documentationをご覧ください。
TensorBoardプロセスの管理
Databricksノートブック内で起動されたTensorBoardのプロセスは、ノートブックがデタッチされた際やREPLが再起動した際(例えば、ノートブックの状態をクリアした際)には停止されません。手動でTensorBoardのプロセスを停止するには、%sh kill -15 pid
を用いて停止シグナルを送信します。TensorBoardプロセスを不適切に停止すると、notebook.list()
を破損する可能性があります。
お使いのクラスターで動作しているTensorBoardサーバーの一覧を表示するには、TensorBoardノートブックモジュールから、対応するログディレクトリとプロセスIDを指定してnotebook.list()
を実行します。
既知の問題
- インラインのTensorBoard UIはiframeの中で動作します。リンクを新規タブで開かない場合、ブラウザのセキュリティ機能がUI内の外部リンクの動作を妨げる場合があります。
- TensorBoardの
--window_title
オプションはDatabricksで上書きされます。 - デフォルトでは、TensorBoardはリッスンするポートを選択するためにポートレンジをスキャンします。クラスターで多くのTensorBoardプロセスが稼働していると、ポートレンジの全てのポートが利用できない場合があります。引数
--port
を用いてポート番号を指定することでこの制限を回避することができます。指定されるポートは6006と6106との間である必要があります。 - リンクをどうさせるためには、TensorBoardを新規タブで開く必要があります。
- TensorBoard 1.15.0を使用する際、Projectorタブはブランクとなります。ワークアラウンドとしては、Projectorページに直接アクセスします。URLの
#projector
をdata/plugin/projector/projector_binary.html
で置き換えます。 - TensorBoard 2.4.0には、アップグレードした際にTensorBoardのレンダリングに影響を及ぼす既知の課題があります。