JupyterHub、たたは数癟人のPythonナヌザヌを管理する方法。 ダンデックス講矩

Jupyterプラットフォヌムを䜿甚するず、初心者の開発者、デヌタアナリスト、孊生がPythonでプログラミングをすぐに開始できたす。 あなたのチヌムが成長したずしたす-今ではプログラマヌだけでなく、マネヌゞャヌ、アナリスト、研究者も含たれおいたす。 遅かれ早かれ、共有䜜業環境の欠劂ず蚭定の耇雑さにより、䜜業が遅くなり始めたす。 JupyterHubは、ボタン1぀でJupyterを起動できるマルチナヌザヌサヌバヌであり、この問題に察凊するのに圹立ちたす。 Pythonを教える人だけでなく、アナリストにも最適です。 ナヌザヌはブラりザのみを必芁ずしたす。ラップトップぞの゜フトりェアのむンストヌル、互換性、パッケヌゞに問題はありたせん。 Jupyterメンテナは、JupyterLabおよびnteractずずもにJupyterHubを積極的に開発しおいたす。



私の名前はAndrey Petrinです。Yandexの成長分析グルヌプの責任者です。 Moscow Python Meetupでのレポヌトで、Jupyterの利点を思い出し、JupyterHubのアヌキテクチャず原則、およびこれらのシステムをYandexで䜿甚した経隓に぀いお話したした。 最埌に、任意のコンピュヌタヌでJupyterHubを䞊げる方法を孊びたす。





-たず、Yandexのアナリストは誰ですか。 これは、䞀床に倚くの異なるこずを実行でき、倚くの圹割を兌ね備えた倚腕シノァであるずいうアナロゞヌがありたす。



みなさんこんにちは 私の名前はAndrey Petrinです。Yandexの成長分析グルヌプの責任者です。 JupyterHubラむブラリに぀いお説明したす。JupyterHubラむブラリは、か぀おYandexアナリティクスの人生を倧幅に簡玠化したしたが、文字通り、倚数のチヌムの生産性の向䞊を感じたした。









たずえば、Yandexのアナリストは小さなマネヌゞャヌです。 アナリストは垞に、プロセスのタむミング、タむムラむン、どの時点で䜕を行う必芁があるかを知っおいたす。



これらは小さな開発者であり、デヌタ凊理のさたざたな方法に粟通しおいたす。 たずえば、Shivaの手によるスラむドでは、思い浮かぶPythonラむブラリは完党なリストではなく、日垞的に䜿甚されるものです。 圓然、開発はPythonだけでなく、䞻にPythonに぀いおも説明したす。



アナリストはほんの少しの数孊であり、慎重に決定を䞋し、管理の芳点ではなく実際のデヌタを芋る必芁がありたすが、䜕らかの真実を探しおこれを理解する必芁がありたす。



これらすべおにおいお、Jupyter゚コシステムは非垞に圹立ちたす。







これは、むンタラクティブなプログラミングずレポヌトのノヌトブックのためのそのようなプラットフォヌムです。 Jupyterノヌトブックの重芁な本質は、そのようなノヌトブックです。このノヌトブックには、倉曎可胜なむンタラクティブな芁玠が倚数ありたす。 䞻な本質は、プログラムするコヌドの埮小芁玠です。 これらは、ブラりザのラップトップで印刷でき、垞に䜿甚しおいたす。 これらは、画像たたはむンタラクティブなHTML掟生芁玠のいずれかです。 芁玠を印刷、印刷、衚瀺するだけで、さたざたなこずができたす。



Jupyterシステムは長い間開発されおおり、さたざたなバヌゞョンのさたざたなプログラミング蚀語、Python 2および3、Go、さたざたなものをサポヌトしおいたす。 日垞のタスクを冷静に解決できたす。



分析で䜕をしおいお、Jupyterはこの点でどのように圹立぀のでしょうか







最初のタスクは、Webサむトの分類です。 むンタヌネット党䜓を熟知しおいる倧芏暡なYandexにずっお、特定のサむトを芋るのは非垞に時間がかかりたす。 私たちには非垞に倚くのサむトがあり、それぞれが独自の詳现を持぀こずができるので、それをいく぀かのトピックに集玄する必芁がありたす。



このタスクでは、すべおのむンタヌネットホストの隣接関係グラフ、぀たり2぀のサむトの盞互の類䌌性のグラフを䜜成しおいたす。 ホストの手動マヌクアップを䜿甚しお、むンタヌネット䞊のサむトずは䜕かに関するプラむマリデヌタベヌスを取埗し、むンタヌネット党䜓に手動マヌクアップを倖挿したす。 文字通り、各タスクでJupyterを䜿甚したす。 隣接グラフの構築の芳点から、MapReduceで操䜜を絶えず実行し、そのようなグラフを構築し、そのようなデヌタ分析を行うこずができたす。



入力りィゞェットを䜿甚しお、Jupyterでの手動マヌクアップを自動化したした。 各ホストには、疑わしいテヌマがありたすが、これはおそらく正しいでしょう。 私たちはほずんど垞にトピックを掚枬したすが、手動でマヌクを付けるには人が必芁です。



そしお、あらゆる皮類の興味深い写真が埗られたす。







たずえば、スポヌツ関連のトピックに存圚するスポヌツ関連のサむトおよび関連する怜玢ク゚リがここに衚瀺されたす。







䞻題癟科事兞。 サむトは少なく、䞀般的に䞀意のリク゚ストがありたすが、䞻なものは倧きくなっおいたす。







件名の宿題-宿題を終えた。 興味深いのは、内郚に互いに䌌たサむトの2぀の独立したクラスタヌがあるが、他のサむトずは異なるためです。 これは、2぀のトピックに分けたいトピックの良い䟋です。 サむトの半分は明らかに宿題内の1぀の問題を解決し、もう1぀は他の問題を解決したす。







入札オプティマむザヌを䜜成するこずは非垞に興味深いこずでした。たったく異なるタスクです。 Yandexはお金を含めお倚くのモバむルアプリケヌションを賌入し、ナヌザヌごずに䜕らかの皮類のアプリケヌションをむンストヌルするこずで埗られるナヌザヌの寿呜を予枬する方法を既に知っおいたすが、残念ながら、この知識をマヌケティング担圓者に䌝えるこずは困難です。トラフィックの賌入を凊理する請負業者。 これは通垞、垞に䜕らかの予算があり、かなり倚くの制限があるずいう事実によるものです。 このような倚次元最適化タスクを分析の芳点から興味深いものにする必芁がありたすが、マネヌゞャヌ甚のデバむスを䜜成する必芁がありたす。







Jupyterはここで非垞に圹立ちたす。 これはJupyterで開発したむンタヌフェむスであり、Pythonの知識がないナヌザヌマネヌゞャヌがログむンしお予枬の結果を取埗できるようにしたす。 ここで、Androidを遞択するかiOSを遞択するか、どの囜でどのアプリケヌションを遞択するかを遞択できたす。 いく぀かの進行状況バヌ、予算のサむズ、ある皮のリスク蚱容床など、倉曎できる非垞に耇雑なマネヌゞャヌずペンがありたす。 これらのタスクはJupyterの助けを借りお解決されたした。倚腕のシバであるアナリストがこれらの問題を単独で解決できるこずを非垞に嬉しく思いたす。



箄5幎前、私が察凊したいいく぀かの制限ずプラットフォヌムの問題があるずいう結論に達したした。 最初の問題は、倚くの異なるアナリストがいお、それぞれが垞に異なるバヌゞョン、オペレヌティングシステムなどを䜿甚しおいるこずです。ある人のために機胜するコヌドは、別の人に察しお実行されないこずがよくありたす。



さらに倧きな問題は、パッケヌゞのバヌゞョンです。 すべおをすぐに開始できるように、䜕らかの䞀貫した環境を維持するこずがどれほど難しいかを蚀う必芁はないず思いたす。



そしお䞀般的に、チヌムに参加したばかりの新しいアナリストに、すべおがセットアップされる事前構成された環境を提䟛するず、すべおのパッケヌゞが珟圚のバヌゞョンにむンストヌルされ、1か所で維持されるず、分析䜜業ず同じくらい良いこずを理解し始めたしたおよび開発甚。 䞀般的に、開発者にずっお思考は䞀貫性がありたすが、分析の倉化が絶えず行われおいるため、分析者に垞に圓おはたるわけではありたせん。



ここで、JupyterHubラむブラリが圹立ちたした。







これは非垞に単玔なアプリケヌションであり、単玔に分離された4぀のコンポヌネントで構成されおいたす。



アプリケヌションの最初の郚分は承認を担圓したす。 パスワヌドずログむンを確認する必芁がありたす。この人を手攟すこずができたすか。



2番目はJupyterサヌバヌの起動です。Jupyterラップトップを実行できる同じJupyterサヌバヌが各ナヌザヌから起動されたす。 同じこずがクラりド䞊でのみコンピュヌタヌで発生し、クラりド展開の堎合、たたは同じマシン䞊でさたざたなプロセスが生成されたす。



プロキシ。 サヌバヌ党䜓ぞの単䞀のアクセスポむントがあり、JupyterHubはどのナヌザヌがどのポヌトにアクセスする必芁があるかを決定したす。すべおはナヌザヌに察しお完党に透過的です。 圓然、デヌタベヌスずシステム党䜓の䞀郚の制埡。







JupyterHubの倖芳を衚面的に説明するず、ナヌザヌブラりザヌがJupyterHubシステムにアクセスし、このナヌザヌがサヌバヌを実行しおいないか、承認されおいない堎合。 JupyterHubがゲヌムに入り、いく぀かの質問をし、サヌバヌを䜜成し、環境を準備し始めたす。



ナヌザヌがすでにログむンしおいる堎合、ナヌザヌは自分のサヌバヌに盎接プロキシされ、Jupyterラップトップは実際に盎接ナヌザヌず通信し、サヌバヌにアクセスに぀いお尋ねたり、このナヌザヌにこのラップトップぞのアクセスを蚱可したりしたす。







むンタヌフェむスは非垞にシンプルで䟿利です。 既定では、展開は展開先のコンピュヌタヌのナヌザヌ名ずパスワヌドを䜿甚したす。 耇数のナヌザヌがいるサヌバヌがある堎合、ログむンずパスワヌドはシステムのログむンずパスワヌドであり、ナヌザヌは自分のホヌムディレクトリずしお自分のホヌムディレクトリを衚瀺したす。 非垞に䟿利で、ナヌザヌに぀いお考える必芁はありたせん。











残りのむンタヌフェヌスは党䜓ずしお非垞によく知られおいたす。 これらは、皆さんが芋たこずがある暙準のJupyterラップトップです。 アクティブなラップトップを芋るこずができたす。







あなたはおそらくこのこずを芋たこずがないでしょう。 これはJupyterHubのコントロヌルりィンドりです。サヌバヌの電源をオフにしお起動するか、たずえばJupyterHubず通信するトヌクンを取埗しお、たずえばJupyterHub内の䞀郚のマむクロサヌビスを開始できたす。







最埌に、管理者は、各ナヌザヌの管理、個々のJupyterサヌバヌの起動、停止、ナヌザヌの远加、削陀、すべおのサヌバヌのオフ、オフ、ハブのオンが可胜です。 これらはすべお、蚭定なしで非垞に䟿利なブラりザで実行されたす。



䞀般的に、システムは非垞に発展しおいたす。







写真では、今幎12月に終了したUC Berkleyのコヌスは、䞖界最倧のデヌタサむ゚ンスコヌスでした。私の意芋では、プログラミングの方法を知らない1,200人の孊生が参加し、プログラミングを勉匷したした。 これはJupyterHubプラットフォヌムで行われ、生埒はコンピュヌタヌにPythonをむンストヌルする必芁がなく、ブラりザヌでこのサヌバヌにアクセスするだけでした。



圓然、トレヌニングのさらなる段階で、パッケヌゞをむンストヌルする必芁性が珟れたしたが、これにより最初の゚ントリヌの問題が冷静に解決されたす。 Pythonを教えおいる人がこれに完党に慣れおいない堎合、パッケヌゞのむンストヌル、ある皮のシステムの保守などに関連するいく぀かのルヌチンが少し冗長であるこずに気付くこずがよくありたす。 あなたは人を錓舞し、これがどんな䞖界であるかに぀いお話し、人が将来習埗できる詳现を掘り䞋げるこずなくしたいのです。



むンストヌル



python3 -m pip install jupyterhub sudo apt-get install npm nodejs-legacy npm install -g configurable-http-proxy
      
      





Python 3のみがサポヌトされおおり、JupyterHub内では2番目のPythonでセルを実行できたすが、JupyterHub自䜓は3番目のPythonでのみ動䜜したす。 唯䞀の䟝存関係は、この蚭定可胜なHTTPプロキシです。これは、Pythonが単玔化するために䜿甚するものです。



構成



 jupyterhub --generate-config
      
      





最初に行うこずは、構成の生成です。 すべおは蚭定なしでも機胜したす。デフォルトでは、䜕らかのポヌト8000​​を持぀ロヌカルサヌバヌが生成され、ログむンずパスワヌドによるナヌザヌぞのアクセスがあり、法廷でのみ機胜したす。 JupyterHub configファむルを䜜成したす。文字通りドキュメントの圢匏で、すべおの蚭定を完党に読むこずができたす。 これは非垞に䟿利です。ドキュメントに行かなくおも、どの行を含める必芁があるかを理解でき、すべおコメントアりトされ、管理でき、すべおのデフォルト蚭定が衚瀺されたす。







䞀時停止ず予玄をしたいです。 デフォルトでは、デプロむするずきにサヌバヌにデプロむしたす。努力しない堎合、぀たりHTTPSを䜿甚しない堎合、サヌバヌはHTTP経由で起動し、ナヌザヌのパスワヌドずログむンJupyterHubず通信するずきにオヌプンになりたす。 これは非垞に危険な話であり、ここで信じられないほど倚くの問題に察凊できたす。 したがっお、HTTPSの問題を無芖しないでください。 独自のHTTPS蚌明曞がない堎合は、蚌明曞を䜜成できたす。たたは、無料の蚌明曞を入手できるすばらしいletsencrypt.orgサヌビスがあり、問題なくお金なしでドメむンで実行できたす。 それは十分に䟿利です、無芖しないでください。



デフォルトでは、ハブはルヌトずしお実行され、明らかに、特定のナヌザヌの䞋から独自のラップトップを生成したす。 これは倉曎できたすが、デフォルトでは倉曎できたす。 たた、すべおのナヌザヌはロヌカルであり、ホヌムディレクトリは特定のナヌザヌごずにスクロヌルしたす。 他に䜕ができるかを詳しく説明したす。



JupyterHubの玠晎らしい点は、このようなコンストラクタヌであるずいうこずです。 文字通り、私が瀺した図のすべおの芁玠に、独自の芁玠を挿入、埋め蟌むこずができ、䜜業が簡単になりたす。 たずえば、ナヌザヌにシステムのログむンずパスワヌドを入力させたくない堎合、それはあたり安党でも䞍䟿でもありたせん。 別のログむンシステムを䜜成したす。 これは、oauthず、たずえばgithubを䜿甚しお実行できたす。







ナヌザヌにナヌザヌ名ずパスワヌドの入力を匷制する代わりに、githubで2行のコヌドを䜿甚しお承認を有効にするだけで、ナヌザヌはgithubで自動的にログむンし、githubナヌザヌ名でロヌカルにスクロヌルされたす。







ナヌザヌ認蚌の他の方法は、すぐにサポヌトされたす。 LDAPがある堎合-それは可胜です。 任意のOAuthが可胜です。リモヌトサヌバヌがロヌカルサヌバヌぞのアクセスを確認できるREMOTE_USERオヌセンティケヌタヌがありたす。 魂が望むすべお。







いく぀かのタむプのタスクがあるずしたす。 たずえば、GPUを䜿甚する堎合、1぀のテクノロゞヌスタック、特定のパッケヌゞセットが必芁であり、異なるナヌスケヌスでCPUから分離する必芁がありたす。 これを行うには、独自のスポヌナヌを䜜成できたす。 これは、カスタムJupyterラップトップを䜜成するシステムです。 ここでは、Dockerを䜿甚しおチンキを瀺したす。ナヌザヌごずにデプロむされるDockerファむルをコンパむルできたす。ナヌザヌはロヌカルではなく、内郚コンテナヌに配眮されたす。



JupyterHubサヌビスには、他にも䟿利な機胜がいく぀かありたす。







メモリが限られおいるマシンで実行しおおり、リ゜ヌスを保存しお、ナヌザヌがリ゜ヌスを䜿甚しおいないためにナヌザヌを切断するずしたす。ナヌザヌがシステムにいなかった埌、メモリが䜿甚されたす。 たたは、たずえば、クラりドを展開しおおり、倜間に䜿甚されおいないものを無効にするこずで仮想マシンの費甚を節玄し、必芁なずきにのみオンにするこずができたす。



既補のサヌビスcull_idle_serversがありたす。これにより、非アクティブの埌にナヌザヌサヌバヌをオフにするこずができたす。 すべおのデヌタが保存され、リ゜ヌスは䜿甚されたせん。少し節玄できたす。







文字通り、このスキヌムのすべおの郚分に、独自のものを含めるこずができるず蚀いたした。 プロキシに䜕らかのアドオンを䜜成し、䜕らかの方法でナヌザヌプロキシを䜜成できたす。 独自のオヌ゜ラむザヌを䜜成し、サヌビスを䜿甚しおデヌタベヌスず盎接通信できたす。 独自のスポヌナヌを䜜成できたす。



このようなプロゞェクト、Kubernetes䞊のシステムをお勧めしたす。これにより、サポヌトしおいるKubernetクラりドに文字通り特定の蚭定をせずに盎接デプロむできるようになりたした。 これは、自分のサヌバヌ、devops、およびサポヌトに煩わされたくない堎合に非垞に䟿利です。 すべおがすぐに䜿える、非垞に玠晎らしい詳现なガむドです。







Jupyterを䜿甚しおいる人が耇数いる堎合は、JupyterHubが必芁です。 そしお、同じこずのためにJupyterを䜿甚する必芁はありたせん。 これは、これらの人々が団結し、さらなる問題を回避できるようにする䟿利なシステムです。 さらに、圌らがさらに同じタスクを実行する堎合-おそらく、圌らは倚かれ少なかれ䞀貫したパッケヌゞのセットを必芁ずしたす。



私のモデルが著しく構築されおいるずいう苊情を受け取った堎合も同様です。䞀郚のアナリストVasechkinはそれを再珟しようずしおおり、動䜜したせん。 か぀おは、䞀定の問題がありたした。 そしおもちろん、䞀貫したサヌバヌ状態は倧いに圹立ちたす。



Pythonの孊習にこれを䜿甚するのは非垞にクヌルです。 サヌビスnbgraderがありたす。これはJupyterHubの䞊にあり、孊生に宿題を送るこずで䟿利な電池を䜜るこずができたす。 ゜リュヌション自䜓を蚘入し、返送したす。Jupyterセルをチェックし、すぐにグレヌドを蚭定できる自動テストがありたす。 非垞に䟿利なシステム、私はお勧めしたす。



Pythonで䜕かを芋せたいセミナヌに参加したず想像しおください。 同時に、最初から3時間をかけお、誰もが自分のやり方で仕事をするこずは望たしくありたせん。 あなたはすぐに䜕か面癜いこずを始めたいです。



サヌバヌ䞊でこのようなシステムを立ち䞊げ、ログむンできるむンタヌネットアドレスをナヌザヌに提䟛し、䞍必芁なルヌチンに時間を浪費するこずなく䜿甚を開始できたす。 それだけです、ありがずう。



All Articles