$30 off During Our Annual Pro Sale. View Details »

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

wapa5pow
September 17, 2019

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

PyCon JP 2019 の発表資料です

wapa5pow

September 17, 2019
Tweet

More Decks by wapa5pow

Other Decks in Programming

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使っているよという⽅が いれば、ぜひお声がけください