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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
wapa5pow
September 17, 2019
Programming
1.7k
2
Share
Kubernetes(k8s)とJupyterHubで構築する 機械学習eラーニングサイト
PyCon JP 2019 の発表資料です
wapa5pow
September 17, 2019
More Decks by wapa5pow
See All by wapa5pow
ベンチャーに朗報!! (ほぼ)無料で高度な分析ができる環境を整える
wapa5pow
0
650
Other Decks in Programming
See All in Programming
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
150
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
2
210
Rethinking API Platform Filters
vinceamstoutz
0
11k
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
140
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
340
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
220
AI活用のコスパを最大化する方法
ochtum
0
380
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
3
440
おれのAgentic Coding 2026/03
tsukasagr
1
140
ふりがな Deep Dive try! Swift Tokyo 2026
watura
0
140
実践CRDT
tamadeveloper
0
390
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
230
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
エンジニアに許された特別な時間の終わり
watany
106
240k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
350
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
RailsConf 2023
tenderlove
30
1.4k
Code Review Best Practice
trishagee
74
20k
Crafting Experiences
bethany
1
110
The browser strikes back
jonoalderson
0
930
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.7k
Fireside Chat
paigeccino
42
3.9k
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使っているよという⽅が いれば、ぜひお声がけください