Kubernetes(k8s)とJupyterHubで構築する 機械学習eラーニングサイト

B43dd238c66c74e28f206c74bff1308b?s=47 wapa5pow
September 17, 2019

Kubernetes(k8s)とJupyterHubで構築する 機械学習eラーニングサイト

PyCon JP 2019 の発表資料です

B43dd238c66c74e28f206c74bff1308b?s=128

wapa5pow

September 17, 2019
Tweet

Transcript

  1. Kubernetes(k8s)と JupyterHubで構築する 機械学習eラーニングサイト 2019.09 PyCon JP 2019 Koichi Ishida (@wapa5pow)

  2. ⾃⼰紹介 • Koichi Ishida (@wapa5pow) • => => => •

    10Xで献⽴アプリのタベリーを開発 • 他のスタートアップ⽀援もしている 今回は⽀援先の 「株式会社 STANDARD」の事例
  3. JupyterHubとは (https://jupyter.org/hub より) • 複数ユーザにJupyter Notebookを提供する • ユーザはブラウザだけで環境構築必要なし • ユーザ(⽣徒・研究者・データサイエンティス

    トなど)は管理された共有リソースを使って Notebookを使える
  4. ⼤学などでの教育でPythonist の育成に効果的 •⽣徒側で環境構築不要。ブラウザを 使って、すぐ本質の学習へ •演習課題を提出させたり、点数をつ けれる(nbgraderプラグイン使⽤) •共有のリソース(CPU, Memory)な ので無駄にリソースを消費せず⾼速 にモデルの学習ができる

  5. 発表で伝えたいこと⭐ 1. 機械学習eラーニングの⽣徒が最初に⼤ きくつまずくのは機械学習環境構築。 JupyterHubを使うとブラウザがあれ ばすぐ学習が始められる環境ができる 2. 既存サイトにどのようにJupyterHub を導⼊するか

  6. ⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ

  7. ⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ

  8. 1-1 ⽣徒がローカルで環境構築する場合 1. スペックのいいPCを⽤意 2. Python環境の構築 3. 機械学習⽤パッケージ(scikit-learn, TensorFlow, Keras等)をバージョン

    を指定してインストール 4. ローカルでJupyter Notebookを⽴ち 上げ学習開始
  9. 1-2 JupyterHubを使うと 1. ブラウザを⽴ち上げる

  10. 1-3 JupyterHubの仕組み

  11. 1.4 なぜGoogle Colaboratoryで はなくJupyterHubなのか • Pythonパッケージのバージョンを固定で きる • 事前にコンテンツファイルを⽤意できる •

    Notebookファイルを運営と簡単に共有で きる • サイトの同じドメイン上で⾃動でログイ ンでき、サイト内のコンテンツとして提 供できる
  12. JupyterHubを導⼊したい︕ でもどうやって︖

  13. ちょうどいいAI_STANDARDの 事例があるので紹介します

  14. ⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ

  15. 1年前にSTANDARD社から エンジニアリング⽀援の依頼がありました

  16. 2.1 1年前のシステム

  17. サイトのページ例

  18. 依頼内容# •ブラウザ上でユーザごとにテキスト に応じたJupyter Notebookの ファイル(.ipynb)を実⾏して写経さ せたり課題を提出させたい

  19. テキストに応じた Jupyter notebookを右ペインに表⽰

  20. 機械学習は環境構築が⼤変 $ ⽣徒 ローカルのPCに機械学習の環境を構築す るのに時間と⼿間がかかる % 運営 構築のサポートに時間が取られ本来必要 な学習のサポートの時間が少なくなる

  21. 解決策⚡ JupyterHubとk8sで⽣徒がブラウ ザ上で機械学習を実⾏できるように する

  22. Demo

  23. None
  24. None
  25. コンテンツに応じた Jupyter notebookを右ペインに表⽰

  26. AI_STANDARDサイトの紹介 •AI⼈材育成に特化した法⼈研修e ラーニングサイト •実践重視・体系的・⼿厚いサポート 体制で 92%の講座修了率を実現 •ブラウザのみでPython, scikit- learn, Kerasなどが実⾏できる

    • ローカルPCへの環境構築不要
  27. AIエンジニアリング講座-1

  28. AIエンジニアリング講座-2

  29. AI_STANDARDサイトの機能

  30. 現在の構成

  31. 現在の構成

  32. ⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ

  33. 3.1 k8sの導⼊

  34. 3.1 k8sの導⼊

  35. 3.2 DX(Developer Experience) 向上 # 開発者 •⼿でデプロイするのだるい •いつデプロイされたのかわからない •エラーが起こっても通知もこないし スタックトレースもわからない

  36. 解決策⚡

  37. 3.3 フロントエンド開発改善 $ ⽣徒 クリックするたびにロードが⾛り シームレスな体験ができない # 開発者 中規模のサイトを効率的に構築した い

  38. 解決策: Nuxt.jsの導⼊ ⚡

  39. Nuxt.js導⼊の理由 • SPAでユーザ体験があがる • コンポーネントの再利⽤で開発の⽣産 性があがり表現できることが増える • Reactなどに⽐べVue.jsの学習コストが 低い(と感じる) •

    ルーティングなど規約にそえば、実現 したい機能に集中して開発できる
  40. 3.4 Kubernetesの嬉しいところ •インフラをコードで記述できる •アプリケーション間の連携が楽 •オートスケールが簡単に設定できる •クーロンの管理が楽(再実⾏や並列 処理の禁⽌も設定でできる) •etc…

  41. 3.5 GKEの嬉しいところ •Podなどの標準出⼒・エラー出⼒が ⾃動でLoggingに出る •さらにそれをフィルタして BigQueryにエクスポートできる •k8sのメンテナンスが楽 •k8s⽤のダッシュボードが充実

  42. Podなどの標準出⼒・エラー 出⼒が⾃動でLoggingに出る

  43. k8sのメンテナスが楽

  44. k8s⽤のダッシュボード

  45. 3.6 JupyterHubをk8s上に構築 すぐできます

  46. JupyterHubのk8sへのインストール

  47. JupyterHubインストール後の構成

  48. JupyterHubの内部構造

  49. インストールしたてのJupyterHub

  50. JupyterHubのAuthenticator を設定しない場合

  51. ユーザがサイトを開いたときにログ インしていればJupyterHubにもログ インさせていたい 3.7 JupyterHubの認証を既存サイトと統合

  52. 解決策⚡ JupyterHubのCustom Authenticatorを使う

  53. ユーザ認証

  54. JupyterHubのCustom Authenticatorの設定 •HubにCookieに保存したTokenで認 証できるようにした token_authenticator.pyをコー ディングし、Dockerfileで追加しビ ルド •config.yamlに token_authenticatorを使うように 設定

  55. config.yaml Dockerfile

  56. URL: /chapters/75/coding /chapter_contents/ml7_1.html 3.8 Notebookにコンテンツを配置したい

  57. URL: /chapters/75/coding /jupyterhub/…/ml7_code.ipynb /chapter_contents/ml7_1.html 3.8 Notebookにコンテンツを配置したい

  58. 解決策: Notebook⽴ち上げ時 にファイルを取得・更新⚡ •Notebookコンテンツはgitで管理 •Notebookが⽴ち上がったときにgit のリポジトリとシンクする (Jupyter serverextensionの nbgitpullerを利⽤してk8sの Container

    Lifecycle Hooksの postStartで更新)
  59. None
  60. config.yaml コンテンツの設定

  61. ここまでで⼀通りJupyterHubを既存 のサイトに組み込めました

  62. ⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ

  63. はノウハウマーク

  64. テキスト・Notebookファイルの追加 や誤字脱字の更新をした際に Notebookが、CPUやメモリを想定以 上に消費したり、エラーで実⾏でき ない 4.1 テキストを安全に更新

  65. テキスト・Notebookファイルの例

  66. jupyter nbconvertとtimeコマンド を使いCircle CIでビルドし実⾏でき るか確かめる 解決策⚡

  67. None
  68. nbconvertの実⾏ コマンド 実⾏結果

  69. エラーになったときなどに表⽰され るテンプレートが英語なので⽇本語 表記にしたい 解決策⚡ Hubの設定でCustom Templatesを 使⽤ 4.2 Jupyter Hubページのカスタマイズ

  70. テンプレートの変更例

  71. テンプレートの変更 Dockerfile フォルダ構成

  72. 写経する際にバージョンの違いでエラー にならないように、Notebookのパッ ケージのバージョンを固定したい 解決策⚡ DockerfileでNotebookをビルドしてそ れを使う 4.3 パッケージのバージョン差異

  73. 再掲: JupyterHubの内部構造

  74. Jupyter Docker Stacks https://github.com/jupyter/docker-stacks

  75. Notebookイメージの設定 config.yaml Dockerfile

  76. ユーザがサイト上でNotebookの演習 課題を提出し運営チュータがサイト 上で採点したい 解決策⚡ JupyterHubのAdmin機能を使う 4.4 演習課題の採点

  77. 演習課題の例

  78. JupyterHubのAdmin画⾯

  79. チュータ⽤の採点ページ

  80. コンテンツの質を継続的に改善した い 解決策⚡ •進捗や問題の正答率を分析 •各コンテンツのNotebookのセルの 実⾏数を保存して分析 4.5 コンテンツの改善

  81. Message Extensionの説明

  82. ユーザ数が時間によって増減しても 適切なマシン数で運⽤したい 4.6 スケール

  83. 解決策(1): cull-idleサービス⚡ config.yaml

  84. 解決策(2): k8sでCPUとメモリを 制限しオートスケールさせる⚡ •コンテンツのCircle CIでの実⾏結果 をもとに最⼤CPUと最⼤メモリを決 定(limit) •保証CPUと保証メモリを決定 (guarantee)

  85. None
  86. スケールアウト時に短い起動時間で Notebookを起動したい ⚡ 解決策 config.yamlでuserPlaceholderを使 う 4.7 スケール時の起動時間

  87. userPlaceholderはNodeがNotebook のポッドでいっぱいになる前にオー トスケールさせる仕組み

  88. k8sクラスタ内にPodとしてNotebookが 動いても安全に運⽤したい 解決策⚡ • 新しいパッケージのインストール不可 • Notebookでdisable_user_config • k8sのNetwork Policyの適⽤

    4.8 セキュリティ
  89. Eラーニングを修了したユーザのディ スクを残したままにするとコストが かかる 解決策⚡ 基準をもうけてディスク(PVC: PersistentVolumeClaim)を削除す る 4.9 無駄なリソース削除

  90. JupyterHubやサイトを安定運⽤した い 解決策⚡ •New Relicを使⽤ •NodeあたりのPod数をStackdriver Monitoringでダッシュボード作成 4.10 監視

  91. まとめ • JupyterHubを導⼊すれば機械学習の ⽣徒が本質的でない作業につまずかず に学習ができる • 運営にはノウハウが必要だが JupyterHubの設定でカバーできるこ とも多く、それ以外は⾃分で作って快 適に運⽤できる

  92. ご清聴ありがとうございました JupyterHubでサービスを構築したい というご相談があればTwitterの @wapa5pow 宛にお知らせくださ い JupyterHub使っているよという⽅が いれば、ぜひお声がけください