Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kubernetes(k8s)とJupyterHubで構築する機械学習eラーニングサイト
Search
wapa5pow
September 17, 2019
Programming
2
1.2k
Kubernetes(k8s)とJupyterHubで構築する 機械学習eラーニングサイト
PyCon JP 2019 の発表資料です
wapa5pow
September 17, 2019
Tweet
Share
More Decks by wapa5pow
See All by wapa5pow
ベンチャーに朗報!! (ほぼ)無料で高度な分析ができる環境を整える
wapa5pow
0
590
Other Decks in Programming
See All in Programming
Azure OpenAI Serviceのプロンプトエンジニアリング入門
tomokusaba
3
910
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
180
Java 22 Overview
kishida
1
200
Introducing Kotlin Multiplatform in an existing mobile app - Workshop Edition | AndroidMakers Paris
prof18
0
160
Ruby Pattern Matching
bkuhlmann
0
930
AppRouter Panel Talk
yosuke_furukawa
PRO
1
480
SIMD Parallel Programming with the Vector API
josepaumard
0
240
VS Code をプロダクトにどう取り込むか
onomax
1
770
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
130
GitLab CI/CD で C#/WPFアプリケーションのテストとインストーラーのビルド・デプロイを自動化する
hacarus
0
460
Try creating your own orderedmap
kazamori
1
250
Goのエラースタックトレースの歴史と今後
sonatard
10
1.8k
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Designing for Performance
lara
601
67k
Building a Modern Day E-commerce SEO Strategy
aleyda
22
6.4k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Unsuck your backbone
ammeep
664
57k
The Mythical Team-Month
searls
217
42k
Embracing the Ebb and Flow
colly
80
4.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
Statistics for Hackers
jakevdp
790
220k
Happy Clients
brianwarren
92
6.4k
Become a Pro
speakerdeck
PRO
13
4.6k
Faster Mobile Websites
deanohume
300
30k
Transcript
Kubernetes(k8s)と JupyterHubで構築する 機械学習eラーニングサイト 2019.09 PyCon JP 2019 Koichi Ishida (@wapa5pow)
⾃⼰紹介 • Koichi Ishida (@wapa5pow) • => => => •
10Xで献⽴アプリのタベリーを開発 • 他のスタートアップ⽀援もしている 今回は⽀援先の 「株式会社 STANDARD」の事例
JupyterHubとは (https://jupyter.org/hub より) • 複数ユーザにJupyter Notebookを提供する • ユーザはブラウザだけで環境構築必要なし • ユーザ(⽣徒・研究者・データサイエンティス
トなど)は管理された共有リソースを使って Notebookを使える
⼤学などでの教育でPythonist の育成に効果的 •⽣徒側で環境構築不要。ブラウザを 使って、すぐ本質の学習へ •演習課題を提出させたり、点数をつ けれる(nbgraderプラグイン使⽤) •共有のリソース(CPU, Memory)な ので無駄にリソースを消費せず⾼速 にモデルの学習ができる
発表で伝えたいこと⭐ 1. 機械学習eラーニングの⽣徒が最初に⼤ きくつまずくのは機械学習環境構築。 JupyterHubを使うとブラウザがあれ ばすぐ学習が始められる環境ができる 2. 既存サイトにどのようにJupyterHub を導⼊するか
⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ
⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ
1-1 ⽣徒がローカルで環境構築する場合 1. スペックのいいPCを⽤意 2. Python環境の構築 3. 機械学習⽤パッケージ(scikit-learn, TensorFlow, Keras等)をバージョン
を指定してインストール 4. ローカルでJupyter Notebookを⽴ち 上げ学習開始
1-2 JupyterHubを使うと 1. ブラウザを⽴ち上げる
1-3 JupyterHubの仕組み
1.4 なぜGoogle Colaboratoryで はなくJupyterHubなのか • Pythonパッケージのバージョンを固定で きる • 事前にコンテンツファイルを⽤意できる •
Notebookファイルを運営と簡単に共有で きる • サイトの同じドメイン上で⾃動でログイ ンでき、サイト内のコンテンツとして提 供できる
JupyterHubを導⼊したい︕ でもどうやって︖
ちょうどいいAI_STANDARDの 事例があるので紹介します
⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ
1年前にSTANDARD社から エンジニアリング⽀援の依頼がありました
2.1 1年前のシステム
サイトのページ例
依頼内容# •ブラウザ上でユーザごとにテキスト に応じたJupyter Notebookの ファイル(.ipynb)を実⾏して写経さ せたり課題を提出させたい
テキストに応じた Jupyter notebookを右ペインに表⽰
機械学習は環境構築が⼤変 $ ⽣徒 ローカルのPCに機械学習の環境を構築す るのに時間と⼿間がかかる % 運営 構築のサポートに時間が取られ本来必要 な学習のサポートの時間が少なくなる
解決策⚡ JupyterHubとk8sで⽣徒がブラウ ザ上で機械学習を実⾏できるように する
Demo
None
None
コンテンツに応じた Jupyter notebookを右ペインに表⽰
AI_STANDARDサイトの紹介 •AI⼈材育成に特化した法⼈研修e ラーニングサイト •実践重視・体系的・⼿厚いサポート 体制で 92%の講座修了率を実現 •ブラウザのみでPython, scikit- learn, Kerasなどが実⾏できる
• ローカルPCへの環境構築不要
AIエンジニアリング講座-1
AIエンジニアリング講座-2
AI_STANDARDサイトの機能
現在の構成
現在の構成
⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ
3.1 k8sの導⼊
3.1 k8sの導⼊
3.2 DX(Developer Experience) 向上 # 開発者 •⼿でデプロイするのだるい •いつデプロイされたのかわからない •エラーが起こっても通知もこないし スタックトレースもわからない
解決策⚡
3.3 フロントエンド開発改善 $ ⽣徒 クリックするたびにロードが⾛り シームレスな体験ができない # 開発者 中規模のサイトを効率的に構築した い
解決策: Nuxt.jsの導⼊ ⚡
Nuxt.js導⼊の理由 • SPAでユーザ体験があがる • コンポーネントの再利⽤で開発の⽣産 性があがり表現できることが増える • Reactなどに⽐べVue.jsの学習コストが 低い(と感じる) •
ルーティングなど規約にそえば、実現 したい機能に集中して開発できる
3.4 Kubernetesの嬉しいところ •インフラをコードで記述できる •アプリケーション間の連携が楽 •オートスケールが簡単に設定できる •クーロンの管理が楽(再実⾏や並列 処理の禁⽌も設定でできる) •etc…
3.5 GKEの嬉しいところ •Podなどの標準出⼒・エラー出⼒が ⾃動でLoggingに出る •さらにそれをフィルタして BigQueryにエクスポートできる •k8sのメンテナンスが楽 •k8s⽤のダッシュボードが充実
Podなどの標準出⼒・エラー 出⼒が⾃動でLoggingに出る
k8sのメンテナスが楽
k8s⽤のダッシュボード
3.6 JupyterHubをk8s上に構築 すぐできます
JupyterHubのk8sへのインストール
JupyterHubインストール後の構成
JupyterHubの内部構造
インストールしたてのJupyterHub
JupyterHubのAuthenticator を設定しない場合
ユーザがサイトを開いたときにログ インしていればJupyterHubにもログ インさせていたい 3.7 JupyterHubの認証を既存サイトと統合
解決策⚡ JupyterHubのCustom Authenticatorを使う
ユーザ認証
JupyterHubのCustom Authenticatorの設定 •HubにCookieに保存したTokenで認 証できるようにした token_authenticator.pyをコー ディングし、Dockerfileで追加しビ ルド •config.yamlに token_authenticatorを使うように 設定
config.yaml Dockerfile
URL: /chapters/75/coding /chapter_contents/ml7_1.html 3.8 Notebookにコンテンツを配置したい
URL: /chapters/75/coding /jupyterhub/…/ml7_code.ipynb /chapter_contents/ml7_1.html 3.8 Notebookにコンテンツを配置したい
解決策: Notebook⽴ち上げ時 にファイルを取得・更新⚡ •Notebookコンテンツはgitで管理 •Notebookが⽴ち上がったときにgit のリポジトリとシンクする (Jupyter serverextensionの nbgitpullerを利⽤してk8sの Container
Lifecycle Hooksの postStartで更新)
None
config.yaml コンテンツの設定
ここまでで⼀通りJupyterHubを既存 のサイトに組み込めました
⽬次 1. なぜ機械学習環境構築は⼤変か 2. AI_STANDARDの紹介 3. 既存のサイトにどのように JupyterHubを導⼊するか 4. 運営ノウハウ
はノウハウマーク
テキスト・Notebookファイルの追加 や誤字脱字の更新をした際に Notebookが、CPUやメモリを想定以 上に消費したり、エラーで実⾏でき ない 4.1 テキストを安全に更新
テキスト・Notebookファイルの例
jupyter nbconvertとtimeコマンド を使いCircle CIでビルドし実⾏でき るか確かめる 解決策⚡
None
nbconvertの実⾏ コマンド 実⾏結果
エラーになったときなどに表⽰され るテンプレートが英語なので⽇本語 表記にしたい 解決策⚡ Hubの設定でCustom Templatesを 使⽤ 4.2 Jupyter Hubページのカスタマイズ
テンプレートの変更例
テンプレートの変更 Dockerfile フォルダ構成
写経する際にバージョンの違いでエラー にならないように、Notebookのパッ ケージのバージョンを固定したい 解決策⚡ DockerfileでNotebookをビルドしてそ れを使う 4.3 パッケージのバージョン差異
再掲: JupyterHubの内部構造
Jupyter Docker Stacks https://github.com/jupyter/docker-stacks
Notebookイメージの設定 config.yaml Dockerfile
ユーザがサイト上でNotebookの演習 課題を提出し運営チュータがサイト 上で採点したい 解決策⚡ JupyterHubのAdmin機能を使う 4.4 演習課題の採点
演習課題の例
JupyterHubのAdmin画⾯
チュータ⽤の採点ページ
コンテンツの質を継続的に改善した い 解決策⚡ •進捗や問題の正答率を分析 •各コンテンツのNotebookのセルの 実⾏数を保存して分析 4.5 コンテンツの改善
Message Extensionの説明
ユーザ数が時間によって増減しても 適切なマシン数で運⽤したい 4.6 スケール
解決策(1): cull-idleサービス⚡ config.yaml
解決策(2): k8sでCPUとメモリを 制限しオートスケールさせる⚡ •コンテンツのCircle CIでの実⾏結果 をもとに最⼤CPUと最⼤メモリを決 定(limit) •保証CPUと保証メモリを決定 (guarantee)
None
スケールアウト時に短い起動時間で Notebookを起動したい ⚡ 解決策 config.yamlでuserPlaceholderを使 う 4.7 スケール時の起動時間
userPlaceholderはNodeがNotebook のポッドでいっぱいになる前にオー トスケールさせる仕組み
k8sクラスタ内にPodとしてNotebookが 動いても安全に運⽤したい 解決策⚡ • 新しいパッケージのインストール不可 • Notebookでdisable_user_config • k8sのNetwork Policyの適⽤
4.8 セキュリティ
Eラーニングを修了したユーザのディ スクを残したままにするとコストが かかる 解決策⚡ 基準をもうけてディスク(PVC: PersistentVolumeClaim)を削除す る 4.9 無駄なリソース削除
JupyterHubやサイトを安定運⽤した い 解決策⚡ •New Relicを使⽤ •NodeあたりのPod数をStackdriver Monitoringでダッシュボード作成 4.10 監視
まとめ • JupyterHubを導⼊すれば機械学習の ⽣徒が本質的でない作業につまずかず に学習ができる • 運営にはノウハウが必要だが JupyterHubの設定でカバーできるこ とも多く、それ以外は⾃分で作って快 適に運⽤できる
ご清聴ありがとうございました JupyterHubでサービスを構築したい というご相談があればTwitterの @wapa5pow 宛にお知らせくださ い JupyterHub使っているよという⽅が いれば、ぜひお声がけください