データ分析プロジェクトを開始するときに、分析環境はどうするか。
ローカルマシンで Jupyter を動かすとか、Google Colab を利用するとか、Spark クラスタを構築するとか、選択肢は数多くありここには書ききれない。それぞれの選択肢にはメリデメがあって、データ量や分析手法やチーム構成やその他諸々の制約に応じてそのプロジェクトに最も適した分析環境を選択すべきである。
今回はデータ分析環境を構築する際に「どんな選択肢があるか」はひとまず置いておいて「どんな観点で考えるべきか」をまとめていく。
すべての観点を完璧に満たすことはできないので、「今回のプロジェクトではこれは重要だけどこれはどうでもいい」というように検討する材料にできればいい。
1. ストレージの耐久性
- データや Notebook ファイルを消失してしまうリスクがどの程度許容できるか
30分後にコーヒーをぶちまけてマシンごとデータがお亡くなりになるかもしれない。
ローカルマシンのストレージは信用してはいけない。
今日分析して明日プレゼンをするみたいなスピード感ならともかく、そうでないなら Notebook やデータは耐久性の高いクラウドストレージやデータベースなどに保存したほうがいいだろう。
2. ストレージ容量
- 将来的に必要なストレージ容量が確保されているか
データが増え続けていくプロジェクトの場合、今は大丈夫でも1年後に扱えなくなってしまうとまた分析環境を見直さないといけなくなる。
3. スペック
- 利用するアルゴリズムとデータ量に対して、CPU やメモリのスペックは十分か
- GPU や TPU を利用する必要があるか
4. ネットワーキング
- 利用するデータベースや API に対して、計算するマシンからアクセスすることが出来るか
- 分析作業に影響のないレベルで通信速度が出せるか
例えば Google Colab を利用するとき、ホストランタイムではグローバル IP アドレスを固定することができないので、IP アドレスでアクセス制限をかけているリソースに対してアクセスすることができない。
例えば US リージョンにあるデータソースに対して計算するマシンが東京にあったりすると、データロードが遅くてストレスになるかもしれない。
5. データ共有
- Notebook をチームメンバーや顧客に共有することができるか
- データをチームメンバーや顧客に共有することができるか
Google Colab や Databricks といったサービスはこの点で非常に便利だと思う。
6. セキュリティ
- 柔軟な権限設計ができるか
- Notebook やデータに対して、必要最小限のメンバーだけがアクセスできるように設定できるか
- Notebook やデータに対して、Read / Write 権限を個別に設定できるか
- 何かあったときに管理者が対応できるか
- PC 紛失時に情報漏えいリスクを最小化出来るか
- 退職者のアクセス権限を剥奪できるか
- 不正アクセスや脆弱性に対するリスクがどの程度あるか
- 自社や顧客のセキュリティポリシーを満たしているか
例えば1台のつよい物理サーバに Jupyter サーバを構築して複数の分析プロジェクトで共用にしたりすると、データや Notebook の権限管理がまったくできなくて非常に良くない。
7. スケーラビリティ
- よりつよいマシンパワーが必要になったときに課金すればスペックを高めることが出来るか
物理サーバはこの点できびしい。
8. 環境の再現性
- チームメンバーが増えたときに同じ環境を作って渡せるか
- 顧客に納品する際に再現性のある環境を提供できるか
9. 自由度
- 必要なツールやモジュールをその環境で動作させられるか
マネージドサービスだと Python のバージョンが固定だったり入れれないモジュールがあったりとかする。
10. 学習コスト
- 新メンバーがすぐに分析作業に着手できるか
11. 利便性
- 分析作業の妨げとなる面倒な制約などがないか
Google Colab がわかりやすくて、様々なメリットはあるものの、ホストランタイムの12時間ルールは面倒だし Google Drive との連携も面倒だし、制約が多くてデメリットも多い。
12. 運用コスト
- 費用が予算内に収まるか
- インフラ担当者の工数がかかりすぎないか
Databricks はすごい便利と思うけど、費用が高いし、インフラ担当者の手間もかかるので悩ましい。