データサイエンティスト向けの10個のシンプルなDatabricksノートブック tips & tricks

[Ten Simple Databricks Notebook Tips & Tricks for Data Scientists \- The Databricks Blog](https://databricks.com/blog/2020/10/29/ten-simple-databricks-notebook-tips-tricks-for-data-scientists.html)の翻訳です。

"ベストなアイデアのいくつかはシンプルなものである！(some of the best ideas are simple!)"と言う格言が示す通り、小さな物事の積み重ねが大きな違いに繋がると言うことはよくあることです。2020年を通じて何回かのリリースを通じて、Databricksをよりシンプルするために、大きな違いに繋がる小さな機能追加を行いました。

本記事および[関連ノートブック](https://github.com/dmatrix/data-assets/blob/main/notebooks/dbcs/DSBlog.dbc)においては、データサイエンティストの開発経験を改善し、開発時間を短縮するために追加した、シンプルなマジックコマンドおよびノートブックにおけるユーザーインタフェースをご紹介します。

これらの機能は以下の通りとなります：

1. %pip install
1. %conda env export および update
1. %matplotlib inline
1. %load_ext tensorboard および %tensorboard
1. コードをモジュール化するために %run による外部ノートブックの実行
1. データのアップロード
1. MLflow: Experimentの動的カウンター および Reproduce run ボタン
1. UIに関するちょっとしたノウハウ
1. SQLコードのフォーマット
1. クラスターにログインするためのWebターミナル

シンプルにするために、個々の機能の使い方をこちらにまとめています。しかし、[ノートブック](https://github.com/dmatrix/data-assets/blob/main/notebooks/dbcs/DSBlog.dbc)をダウンロードすることをお勧めします。もし、[Databricksの統合データ分析プラットフォーム](https://databricks.com/product/unified-data-analytics-platform)を利用したことが無いのでしたら、[こちら](https://databricks.com/try-databricks)から利用できます。ノートブックをDatabricks統合データ分析プラットフォームにインポートして実行するだけです。

<iframe width="532" height="311" src="https://www.youtube.com/embed/YEB_V-rjhK8" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## 1. %pipマジックコマンド: Pythonパッケージのインストール及びPython環境の管理

Databricks Runtime(DBR)あるいはDatabricks Runtime for Machine Learning(MLR)には一連のPython及び機械学習(ML)ライブラリがインストールされています。しかし、実行したいタスクに適合したライブラリやバージョンが存在しないケースがあります。この場合、%pipや%condaを使用することで簡単にクラスター上のPythonパッケージをカスタマイズすることができます。

この機能がリリースされる前は、データサイエンティストはinit scriptを作成し、wheelファイルをローカルで構築し、dbfs上にアップロードし、パッケージをインストールするためにinit scriptを実行する必要がありました。これは脆弱なプロセスです。今では、プライベートあるいはパブリックなリポジトリに対して`%pip install <package>`を実行するだけで済みます。

あるいは、複数のパッケージをインストールする必要がある場合には、`%pip install -r <path>/requirements.txt`を実行することができます。

pipとcondaを用いて、どの様にnotebookスコープのPython環境を管理するのかに関して理解を深めるのでしたら、こちらの[ブログ](https://databricks.com/blog/2020/06/17/simplify-python-environment-management-on-databricks-runtime-for-machine-learning-using-pip-and-conda.html)を参考にしてください。

## 2. %condaおよび%pipマジックコマンド: Notebook環境の共有

クラスター環境がセットアップされると、いくつかのことが実行できる様になります。
a) 以降のセッションで再インストールできる様にファイルを保存する
b) 他の人に保存したファイルを共有する

クラスターは揮発性なものですので、クラスターがシャットダウンされるとインストールされたライブラリは削除されます。インストールされたパッケージのリストを保存することは良いプラクティスです。これにより、再現性を確保できるとともに、データチームのメンバーが検証開発のために環境を再構築できる様になります。%condaマジックコマンドは2020年に[リリースされた新機能](https://databricks.com/blog/2020/06/17/simplify-python-environment-management-on-databricks-runtime-for-machine-learning-using-pip-and-conda.html)の一部となっています。これにより作業がシンプルになります。インストールされたPythonパッケージのリストをエクスポートして保存するだけです。

```
%conda env export -f /jsd_conda_env.yml or %pip freeze > /jsd_pip_env.txt
```
共通のシャードあるいはパブリックdbfsから、別のデータサイエンティストが`%conda env update -f <yaml_file_path>`を実行することでPythonパッケージを再現することができます。

## 3. %matplotlibマジックコマンド: 画像をインラインに表示

探索的データ分析(EDA)においては、データの可視化は重要なステップとなります。データのクレンジング後に限らず、特徴量エンジニアリング、モデルトレーニングに至るまで、データにおけるパターン、関係性を見出すために可視化を行いたくなるでしょう。

数多くの[データ可視化のためのPythonライブラリ](https://mode.com/blog/python-data-visualization-libraries/)のなかで、`matplotlib`が共通して用いられています。DBRやMLRにおいてはいくつかの[Pythonライブラリ](https://docs.databricks.com/notebooks/visualizations/index.html)がインストールされていますが、現状`matplotlib inline`機能のみがノートブックセルでサポートされています。

DBR 6.5以降で[ビルトイン](https://docs.databricks.com/notebooks/visualizations/matplotlib.html)されているマジックコマンドにより、`display(figure)`や`display(figure.show())`の明示的な呼び出しや、`spark.databricks.workspace.matplotlibInline.enabled = true`の設定なしにノートブックセルのインラインでグラフを表示することができます。

## 4. PyTorch、TensorFlowにおける%tensorboardマジックコマンド

[最近発表](https://databricks.com/blog/2020/08/25/tensorboard-a-new-way-to-use-tensorboard-on-databricks.html)した通り、Databricks Runtime(DBR)の一部としてリリースされたこのマジックコマンドは、ノートブックに[TensorBoard](https://www.tensorflow.org/tensorboard)から得られるトレーニングメトリクスを表示するものです。この新機能はこれまで提供していた`dbutils.tensorboard.start()`を置き換えるものになります。旧機能は別のタブでTensorBoardのメトリクスを参照する必要があり、データ分析者がノートブックから離れることでフローを切断するものでした。

もはや、データ分析者はノートブックを離れて別のタブでTensorBoardを参照する必要はありません。インラインでの可視化は開発者の体験とシンプルさを改善するものです。

DBRやMLRにインストールされている[TensorFlow](https://www.tensorflow.org/)や[PyTorch](https://pytorch.org/)ライブラリを利用することができますが、この記事ではPyTorch(ノートブックを参照ください)を使用しています。

```
%load_ext tensorboard

%tensorboard --logdir=./runs
```

## 5. 外部ノートブックを実行するための%runマジックコマンド

ソフトウェアエンジニアリングにおける一般的なデザインパターンおよびプラクティスを参考にして、データサイエンティストはクラス、変数、ユーティリティメソッドを外部のノートブックを定義できます。すなわち、データサイエンティストは、IDEでPythonモジュールをimportする様に、これらのクラスを"インポート"することができます。厳密に言うと、ノートブックの場合は、`%run auxiliary_notebook`コマンドを通じて、外部ノートブックで定義されたクラスが、現在実行しているノートブックのスコープに読み込まれる形になります。

これまで述べてきた新機能と異なり、これは新しいものではありませんが、この機能を利用することで、全体をまとまりあるものにし、driver(メイン)ノートブックの可読性を高めます。何人かの開発者は、データ処理を別のノートブックに分割するために外部ノートブックを活用しています。個々のノートブックがデータ処理、探索のためのデータ分析を行い、結果を呼び出し元のノートブックに返却します。

外部ノートブックの他の使い道としては、クラス、変数、ユーティリティ関数の再利用が挙げられます。例えば、`Utils`や`RFRModel`などのクラスが外部ノートブック`cls/import_classes`で定義されます。`%run ./cls/import_classes`を実行することで、呼び出し元のノートブックのスコープにこれら全てのクラスが読み込まれます。このシンプルな手順で、ノートブックが散在することが無くなります。クラスを定義し、コードをモジュール化し、再利用するだけです！

## 6. データのアップロード

ラップトップにあるローカルのデータをDatabricksで分析したくなるケースがあるかと思います。ノートブックの**File**メニューにある新たな[データアップロード機能](https://docs.databricks.com/data/databricks-file-system.html)でローカルデータをワークスペースにアップロードできます。デフォルトのアップロード先は */shared_uploads/your-email-address* となりますが、アップロード先を選択できますし、Upload Fileダイアログからファイルを読み込むためのコードを取得することができます。今回のケースでは、CSVファイルを読み込むためのpandasのコードを選択しています。
![](https://databricks.com/wp-content/uploads/2020/10/upload-opt.gif)

## 7.1 MLflow Experimentの動的カウンター

MLflowのUIはDatabricksと密に連携しています。MLflow APIを用いてモデルをトレーニングする都度、データサイエンティストにビジュアルなフィードバックを提供するために`Experiment`ラベルのカウンターが動的に増加します。
<img width="200" alt="" src="https://databricks.com/wp-content/uploads/2020/10/notebook-experiment.gif">
`Experiment`をクリックすることで、画面横に個々のRunのMLflowエンティティであるrun、パラメーター、メトリクス、モデルなどを含むサマリーを一覧で表示します。

## 7.2 MLflow Reproduce Runボタン

他の改善点として、Experimentを再現するためのノートブックを再作成する機能があります。MLflowのrunページからReproduce Runボタンをクリックすることでノートブックを生成し現在のクラスターにアタッチされます。
![](https://databricks.com/wp-content/uploads/2020/10/reproducerun-1.gif)

## 8. UIに関するちょっとしたノウハウ

データサイエンティストが自身のタスクを効率的にこなすために、データの中身を確認する、セル削除のアンドゥ、分割スクリーンの表示などを含め、ノートブックにおいては以下の改善がなされています：

**より高速な処理実行のための電球ヒント(light bulb hint):** ノートブック上のセルが実行される都度、Databricks runtimeは目の前のタスクを効率的にするためのヒントを提示することがあります。例えば、モデルのトレーニングを行なっている際には、MLflowによるパラメーター、メトリクスのトラッキングを提案します。
![](https://databricks.com/wp-content/uploads/2020/10/blog-ten-db-tips-5.png)

あるいは、SQLテーブルとしてParquet形式のデータフレームをSQLテーブルとして永続化しようとした際に、より効率的、信頼性のあるDelta Lakeのテーブルをお勧めします。また、バックエンドのエンジンが、最適化の余地がある複雑なSpark処理、あるいは、不均一なデータフレーム(一方が非常に大きく、一方が非常に小さい)のJOINを実行しようとしていることを検知した場合には、より良いパフォーマンスのためにApache Spark 3.0の[適合クエリ実行](https://databricks.com/blog/2020/05/29/adaptive-query-execution-speeding-up-spark-sql-at-runtime.html)を提案します。

これらの小さなノウハウによって、データサイエンティストやデータエンジニアが、最適化されたSparkの機能や、トレーニングを容易に管理できるMLflowの様なツールを活用できる様になります。

**セル削除のアンドゥ:** 重要なコードを開発する過程で、不可逆的にセルを削除してしまい、取り返しのつかない状態になって初めてそれに気づくと言うことを何度経験したことがありますでしょうか。今となっては、ノートブックが削除されたセルを追跡していますので、簡単にセル削除をアンドゥできます。
<img width="150" alt="" src="https://databricks.com/wp-content/uploads/2020/10/blog-ten-db-tips-6.png">
**ここまでを全て実行（Run All Above）:** いくつかのシナリオにおいては、現在のセルの上までのセルにあったバグを修正し、上にあるセル全てを実行したいと言うケースがあるかと思います。この作業を簡単に実行できます。
<img width="150" alt="" src="https://databricks.com/wp-content/uploads/2020/10/blog-ten-db-tips-7.png">
**コードコンプリーションのためのタブキー:** 一般的なPython3の関数、Spark 3.0のメソッド両方に対して、メソッド名の後でタブキーを押すと、メソッド、プロパティがドロップダウンリストが表示されます。
![](https://databricks.com/wp-content/uploads/2020/10/spark_tab_completion-2.gif)
**Side-by-Sideビュー:** PyCharmの様なPython IDE同様、ノートブック上でマークダウンの内容とレンダリング結果を横並びで表示することができます。メニューのView->Side-by-Sideを選択することでビューを切り替えることができます。
![](https://databricks.com/wp-content/uploads/2020/10/blog-ten-db-tips-9-min.png)

## 9. SQLコードのフォーマット

新たな機能ではないですが、このノウハウによって、フリーフォーマットで書かれたSQLを簡単にフォーマットできます。
![](https://databricks.com/wp-content/uploads/2020/10/blog-ten-db-tips-10.png)

## 10. クラスターにログインするためのWebターミナル

データサイエンティストを含むデータチームの方々は、ノートブックから直接ドライバーノードにログインできます。面倒なsshの設定が必要となるsshマジックコマンドの%shは不要です。さらに、システム管理者、セキュリティ担当は仮想プライベートネットワークにsshポートを開けることを嫌がります。ユーザー視点からしても、ドライバーノードにアクセスするためにSSHキーのセットアップが不要です。お使いのワークスペースの管理者が、クラスターに対して"Can Attach To"権限を付与していれば、すぐにWebターミナルを利用できます。

[こちらの記事](https://databricks.com/blog/2020/08/31/introducing-the-databricks-web-terminal.html)で発表されている様に、完全にインタラクティブなシェルとドライバーノードに対して制御されたアクセスを提供します。Webターミナルを使うためには、ドロップダウンメニューからTerminalを選択します。
![](https://databricks.com/wp-content/uploads/2020/10/blog-ten-db-tips-11.png)
![](https://databricks.com/wp-content/uploads/2020/10/blog-ten-db-tips-12-min.png)
これらの機能は小さいながらも、実験、プレゼンテーション、データ探索に至るプロセスにおける摩擦を軽減し、コードフローを円滑にします。次回は、これらのシンプルなアイデアをDatabricksノートブック上で実現してみてください。

[サンプルノートブック](https://github.com/dmatrix/data-assets/blob/main/notebooks/dbcs/DSBlog.dbc)をダウンロードいただき、[Databricks統合データ分析プラットフォーム](https://databricks.com/product/unified-data-analytics-platform)(DBR 7.2以降あるいはMLR 7.2以降)で[インポート](https://docs.databricks.com/notebooks/notebooks-manage.html)の上、活用してみてください。

データチームがどのように困難な課題を解決するのかを知りたいのでしたら、是非[Data + AI Summit Europe](https://databricks.com/dataaisummit/europe-2020)を見てください。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)