Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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)

    View Slide

  2. ⾃⼰紹介
    • Koichi Ishida (@wapa5pow)
    • => => =>
    • 10Xで献⽴アプリのタベリーを開発
    • 他のスタートアップ⽀援もしている
    今回は⽀援先の
    「株式会社 STANDARD」の事例

    View Slide

  3. JupyterHubとは
    (https://jupyter.org/hub より)
    • 複数ユーザにJupyter Notebookを提供する
    • ユーザはブラウザだけで環境構築必要なし
    • ユーザ(⽣徒・研究者・データサイエンティス
    トなど)は管理された共有リソースを使って
    Notebookを使える

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. 1-1 ⽣徒がローカルで環境構築する場合
    1. スペックのいいPCを⽤意
    2. Python環境の構築
    3. 機械学習⽤パッケージ(scikit-learn,
    TensorFlow, Keras等)をバージョン
    を指定してインストール
    4. ローカルでJupyter Notebookを⽴ち
    上げ学習開始

    View Slide

  9. 1-2 JupyterHubを使うと
    1. ブラウザを⽴ち上げる

    View Slide

  10. 1-3 JupyterHubの仕組み

    View Slide

  11. 1.4 なぜGoogle Colaboratoryで
    はなくJupyterHubなのか
    • Pythonパッケージのバージョンを固定で
    きる
    • 事前にコンテンツファイルを⽤意できる
    • Notebookファイルを運営と簡単に共有で
    きる
    • サイトの同じドメイン上で⾃動でログイ
    ンでき、サイト内のコンテンツとして提
    供できる

    View Slide

  12. JupyterHubを導⼊したい︕
    でもどうやって︖

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. 2.1 1年前のシステム

    View Slide

  17. サイトのページ例

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. Demo

    View Slide

  23. View Slide

  24. View Slide

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

    View Slide

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

    View Slide

  27. AIエンジニアリング講座-1

    View Slide

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

    View Slide

  29. AI_STANDARDサイトの機能

    View Slide

  30. 現在の構成

    View Slide

  31. 現在の構成

    View Slide

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

    View Slide

  33. 3.1 k8sの導⼊

    View Slide

  34. 3.1 k8sの導⼊

    View Slide

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

    View Slide

  36. 解決策⚡

    View Slide

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

    View Slide

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

    View Slide

  39. Nuxt.js導⼊の理由
    • SPAでユーザ体験があがる
    • コンポーネントの再利⽤で開発の⽣産
    性があがり表現できることが増える
    • Reactなどに⽐べVue.jsの学習コストが
    低い(と感じる)
    • ルーティングなど規約にそえば、実現
    したい機能に集中して開発できる

    View Slide

  40. 3.4 Kubernetesの嬉しいところ
    •インフラをコードで記述できる
    •アプリケーション間の連携が楽
    •オートスケールが簡単に設定できる
    •クーロンの管理が楽(再実⾏や並列
    処理の禁⽌も設定でできる)
    •etc…

    View Slide

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

    View Slide

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

    View Slide

  43. k8sのメンテナスが楽

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. JupyterHubの内部構造

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  53. ユーザ認証

    View Slide

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

    View Slide

  55. config.yaml
    Dockerfile

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  59. View Slide

  60. config.yaml
    コンテンツの設定

    View Slide

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

    View Slide

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

    View Slide

  63. はノウハウマーク

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  73. 再掲: JupyterHubの内部構造

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  77. 演習課題の例

    View Slide

  78. JupyterHubのAdmin画⾯

    View Slide

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

    View Slide

  80. コンテンツの質を継続的に改善した

    解決策⚡
    •進捗や問題の正答率を分析
    •各コンテンツのNotebookのセルの
    実⾏数を保存して分析
    4.5 コンテンツの改善

    View Slide

  81. Message Extensionの説明

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  85. View Slide

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

    4.7 スケール時の起動時間

    View Slide

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

    View Slide

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

    View Slide

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

    4.9 無駄なリソース削除

    View Slide

  90. JupyterHubやサイトを安定運⽤した

    解決策⚡
    •New Relicを使⽤
    •NodeあたりのPod数をStackdriver
    Monitoringでダッシュボード作成
    4.10 監視

    View Slide

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

    View Slide

  92. ご清聴ありがとうございました
    JupyterHubでサービスを構築したい
    というご相談があればTwitterの
    @wapa5pow 宛にお知らせくださ

    JupyterHub使っているよという⽅が
    いれば、ぜひお声がけください

    View Slide