DatabricksにおけるGlowの使用

[Glow \| Databricks on AWS](https://docs.databricks.com/applications/genomics/tertiary-analytics/glow.html) [2022/3/2時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

[Glow](https://projectglow.io/)は、DatabricksとRegeneron Genetics Centerとコラボレーションを通じて開発されたオープンソースプロジェクトです。Glowの機能に関する情報については、[Glow documentation](https://glow.readthedocs.io/en/latest/)をご覧ください。

# Glowノートブックをワークスペースに同期

1. [Glow github repo](https://github.com/projectglow/glow)をフォークします。
1. [Repos](https://qiita.com/taka_yayoi/items/b89f199ff0d3a4c16140#%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88git%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3)を用いて、フォークをDatabricksワークスペースにクローンします。
1. ノートブックは`docs/source/_static`の下に配置されます。
![](https://docs.databricks.com/_images/glow-repo-notebooks.png)

# Glow環境のセットアップ

[Databricks Container Services](https://docs.databricks.com/clusters/custom-containers.html)を用いて、Dockerを通じてDatabricksクラスターにGlowをインストールします。

[ProjectGlow Dockerhub](https://hub.docker.com/r/projectglow)ページでコンテナを見つけることができます。これらは、GlowやDatabricks Runtime for Genomics(非推奨となりました)の他のライブラリを含む環境をセットアップします。`projectglow/databricks-glow:<databricks_runtime_version>`のタグを利用可能なDatabricksランタイムバージョンで置き換えて使用してください。

あるいは、これら両方を[クラスターライブラリ](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#2-%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA)としてインストールします。

- Maven: `io.projectglow:glow-spark3_2.12:<version>`
- PyPI: `glow.py==<version>`

:::note warn
**重要！**
- GlowをスタンドアローンのPyPiパッケージとしてインストールする場合は、%pipマジックコマンドを使う[ノートスコープライブラリ](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#3-%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA)ではなく、[クラスターライブラリ](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#2-%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA)としてインストールしてください。
- MavenコーディネートとPyPIパッケージの両方がクラスターでインストールされ、バージョンがマッチしていることを確認してください。
-  デフォルトでGlow v0.6がインストールされているDatabricks Runtime for Genomics (deprecated)ではなく、Databricksランタイム上に最新のGlowをインストールしてください。
- [Hail Matrix Table](https://glow.readthedocs.io/en/latest/etl/hail.html)から遺伝子型を抽出する場合を除き、Glowと一緒にクラスターに[Hail](https://docs.databricks.com/applications/genomics/tertiary-analytics/hail.html)をインストールしないでください。
:::

# Glowを使い始める

リアルなデータを使う前に、ノートブックで提供されるデータに対してテストノートブックを実行することをお勧めします。これらのノートブックは最新バージョンのGlow Dockerコンテナでテストされています。

:::note warn
**重要！**
- 遺伝子型データの取り込み、変換の後にはDelta Lakeにチェックポイントを作成してください。
:::

# 自動化ジョブのセットアップ 

サンプルノートブックを実行した後は、リアルなデータにコードを実行し、[ジョブ](https://qiita.com/taka_yayoi/items/b3275a1983c51a8bbe1a)を用いてお使いのパイプラインを自動化する準備ができたことになります。

:::note warn
**重要！**
- スモールにスタートしてください。個々の変異体、サンプル、染色体で実験してください。
- 実行する計算処理のタイプによっては、パイプラインのステップが異なるクラスター設定を必要とする場合があります。
:::

:::note info
**ティップス**
- クラウドオブジェクトストレージから変異体データを読み込む際にはコンピュート最適化VMを使ってください。
- 変異体データをクエリーする際にはDeltaキャッシュ高速化VMを使用してください。
- 遺伝子関連解析にはメモリー最適化VMを使ってください。
    - 大規模マシンのクラスターよりも、複数の小規模マシンのクラスターの方がコストパフォーマンスが優れています。
- Glow Pipe Transformerは、[GPU](https://docs.databricks.com/clusters/gpu.html#gpu-scheduling)で実行するディープラーニングツールの並列化をサポートしています。
:::

以下のサンプルのクラスター設定は、単一の染色体に対して遺伝子関連解析を実行します。必要に応じて[notebook\_path](https://qiita.com/taka_yayoi/items/c306161906d6d34e8bd5#%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AE%E3%83%91%E3%82%B9%E3%81%AE%E3%82%B3%E3%83%94%E3%83%BC)と`<databricks_runtime_version>`を編集します。

```bash:Bash
databricks jobs create --json-file glow-create-job.json
```

`glow-create-job.json`

```json:JSON
{
  "name": "glow_gwas",
  "notebook_task": {
    "notebook_path" : "/Users/<user@organization.com>/glow/docs/source/_static/notebooks/tertiary/gwas-quantitative",
    "base_parameters": {
      "allele_freq_cutoff": 0.01
    }
  },
  "new_cluster": {
    "spark_version": "<databricks_runtime_version>.x-scala2.12",
    "aws_attributes": {
      "availability": "SPOT",
      "first_on_demand": 1
    },
    "node_type_id": "r5d.4xlarge",
    "driver_node_type_id": "r5d.4xlarge",
    "num_workers": 32,
    "spark_conf": {
      "spark.sql.execution.arrow.maxRecordsPerBatch": 100
    },
    "docker_image": {
      "url": "projectglow/databricks-glow:<databricks_runtime_version>"
    }
  }
}
```

### Databricks 無料トライアル

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