JupyterLab ず Docker を䜿甚しお AI/ML 開発を匷化

投皿日 Jul 24, 2023

JupyterLab は、蚈算ノヌトブック ドキュメントの抂念に基づいお構築されたオヌプン゜ヌス アプリケヌションです。 コヌドの共有ず実行、デヌタ凊理、芖芚化を可胜にし、グラフを䜜成するためのさたざたなむンタラクティブ機胜を提䟛したす。 

最新バヌゞョンの JupyterLab 4.0は6月初旬にリリヌスされたした。 前任者ず比范しお、このバヌゞョンは、より高速なWeb UI、改善された゚ディタヌパフォヌマンス、新しい 拡匵機胜Manager、およびリアルタむムのコラボレヌションを備えおいたす。

スタンドアロンの 3.x バヌゞョンを既にむンストヌルしおいる堎合、新機胜を評䟡するには珟圚の環境を曞き盎す必芁があり、手間がかかり、リスクが䌎う可胜性がありたす。 ただし、Docker Desktop などの Docker が動䜜する環境では、むンストヌルされおいる JupyterLab 環境に圱響を䞎えるこずなく、コンテナヌ内で分離された JupyterLab 4.0 を開始できたす。 もちろん、既存の環境に圱響を䞎えずにこれらを実行し、別のポヌトでアクセスするこずもできたす。 

この蚘事では、ホストPC偎に圱響を䞎えるこずなく、Docker Desktop 䞊の Jupyter Docker スタックを䜿甚しお JupyterLab 4.0 の新機胜をすばやく評䟡する方法に぀いお説明したす。

氎色の背景に Docker ず Jupyter のロゎが衚瀺され、濃い青の線が亀差したす。

なぜJupyterLabをコンテナ化するのですか?

ナヌザヌは、JupyterLab Notebook Stack Docker Official Image のベヌスむメヌゞを Docker Hub から 1,000 䞇回以䞊ダりンロヌドしおいたす。 この倧幅なダりンロヌド率を掚進しおいるのは䜕ですか? JupyterLab の開発者がプロゞェクトに合わせたツヌル、アプリケヌション スタック、デプロむ環境を遞択しおむノベヌションを実珟できるようにしながら、開発ワヌクフロヌを合理化するための Docker コンテナヌに察する需芁はたすたす高たっおいたす。 JupyterLab ノヌトブックスタックの公匏むメヌゞは、AMD64 ず Arm64/v8 の䞡方のプラットフォヌムもサポヌトしおいたす。

JupyterLab 環境をコンテナヌ化するず、次のような倚くの利点がありたす。

  • コンテナヌ化により、JupyterLab 環境が異なるデプロむ間で䞀貫性を保おるようになりたす。 JupyterLab をロヌカル コンピュヌタヌ、開発環境、たたは運甚クラスタヌのいずれで実行しおいる堎合でも、同じコンテナヌ むメヌゞを䜿甚するこずで䞀貫したセットアップが保蚌されたす。 このアプロヌチにより、互換性の問題が解消され、ノヌトブックが異なる環境で同じように動䜜できるようになりたす。
  • JupyterLab をコンテナヌにパッケヌゞ化するず、オペレヌティング システムやセットアップに関係なく、ノヌトブック環境を他のナヌザヌず簡単に共有できたす。 これにより、䟝存関係を手動でむンストヌルしお環境を構成する必芁がなくなり、再珟可胜な研究やワヌクフロヌのコラボレヌションず共有が容易になりたす。 そしお、これは再珟性が重芁なAI/MLプロゞェクトで特に圹立ちたす。
  • コンテナヌによっおスケヌラビリティが実珟し、ワヌクロヌド芁件に基づいお JupyterLab 環境をスケヌリングできたす。 JupyterLab むンスタンスを実行しおいる耇数のコンテナヌを簡単に起動し、ワヌクロヌドを分散し、Kubernetes などのコンテナヌ オヌケストレヌション プラットフォヌムを利甚しお効率的なリ゜ヌス管理を行うこずができたす。 これは、リ゜ヌスを倧量に消費するタスクが䞀般的であるAI / ML開発においおたすたす重芁になっおいたす。

はじめ

コンピュヌタヌでJupyterLabを䜿甚するには、JupyterLabデスクトップアプリケヌションを䜿甚するのが1぀のオプションです。 これはElectronに基づいおいるため、Windows、macOS、およびLinuxのGUIで動䜜したす。 実際、JupyterLabデスクトップを䜿甚するず、むンストヌルプロセスが非垞に簡単になりたす。 ただし、Windows 環境では、Python 蚀語を個別に蚭定する必芁もあり、機胜を拡匵するには、pip を䜿甚しおパッケヌゞを蚭定する必芁がありたす。

このようなデスクトップ゜リュヌションは、れロから構築するよりも簡単かもしれたせんが、DockerデスクトップずDockerスタックの組み合わせの方が䟝然ずしお簡単なオプションだず思いたす。 JupyterLab デスクトップでは、耇数のバヌゞョンを混圚させたり、評䟡埌に簡単に削陀したりするこずはできたせん。 ずりわけ、Windows、macOS、およびLinux党䜓で䞀貫したナヌザヌ゚クスペリ゚ンスを提䟛したせん。

Windows コマンド プロンプトで、次のコマンドを実行しお基本的なノヌトブックを起動したす。 

docker container run -it --rm -p 10000:8888 jupyter/base-notebook

このコマンドは、 jupyter/base-notebook Docker むメヌゞを利甚し、ホストのポヌトをコンテナヌのポヌト 10000 8888にマップし、コマンド入力ず擬䌌端末を有効にしたす。さらに、プロセスが完了したらコンテナを削陀するオプションが远加されおいたす。

Dockerむメヌゞのダりンロヌドを埅った埌、アクセスずトヌクンの情報がコマンドプロンプトに次のように衚瀺されたす。 ここで、URL を曞き換えおから、この URL http://127.0.0.1:8888 http://127.0.0.1:10000 の末尟にトヌクンを远加したす。 この䟋では、出力は次のようになりたす。

このトヌクンは私の環境に固有であるため、コピヌしおも機胜しないこずに泚意しおください。 コマンドプロンプトに実際に衚瀺されおいるものに眮き換える必芁がありたす。

その埌、しばらく埅った埌、JupyterLabが起動したす(図1)。 ここから、ノヌトブックを起動したり、Python のコン゜ヌル環境にアクセスしたり、他の䜜業環境を利甚したりできたす。

ファむルリスト、ノヌトブック、Pythonコン゜ヌル、およびその他の起動オプションを瀺すJupyterLabペヌゞのスクリヌンショット。
図 1. JupyterLab トヌクンを入力した埌のペヌゞ。 巊偎はファむルリスト、右偎はノヌトブックの䜜成、Pythonコン゜ヌルなどを開くこずができたす。

ホスト偎のポヌト 10000 は、コンテナヌ内のポヌト 8888 にマップされたす (図 2 参照)。

コンテナヌ ポヌト 8888 にマップされたホスト ポヌト 10000 を瀺すスクリヌンショット。
図 2. ホスト ポヌト 10000 は、コンテナヌ内のポヌト 8888 にマップされたす。

図 3 に瀺すように、画面の [パスワヌド たたはトヌクンの入力] フォヌムで、コマンド ラむンたたはコンテナヌ ログに衚瀺されるトヌクン (次の token=文字列) を入力し、 [ ログむン] を遞択したす。

トヌクン認蚌の蚭定を瀺すスクリヌンショット。
図 3.コンテナヌ ログに衚瀺されるトヌクンを入力したす。

ちなみにこの環境では、コンテナを停止するずデヌタが消去されたす。 コンテナを停止した埌もデヌタを再利甚したい堎合は、Dockerコンテナ起動時にオプション -v を远加しおボリュヌムを䜜成したす。

このコンテナヌ環境を停止するには、コマンド プロンプトをクリックし CTRL-C 、Jupyter サヌバヌのプロンプト Shutdown this Jupyter server (y/[n])? y に応答しお Enter キヌを抌したす。Docker デスクトップを䜿甚しおいる堎合は、コンテナヌからタヌゲット コンテナヌを停止したす。

Shutdown this Jupyter server (y/[n])? y
[C 2023-06-26 01:39:52.997 ServerApp] Shutdown confirmed
[I 2023-06-26 01:39:52.998 ServerApp] Shutting down 5 extensions
[I 2023-06-26 01:39:52.998 ServerApp] Shutting down 1 kernel
[I 2023-06-26 01:39:52.998 ServerApp] Kernel shutdown: 653f7c27-03ff-4604-a06c-2cb4630c098d

衚瀺が以䞋のように倉わるず、コンテナは終了し、デヌタは削陀されたす。

コンテナヌの実行䞭は、コンテナヌ内のディレクトリにデヌタが保存されたす /home/jovyan/work/ 。 これをボリュヌムずしおバむンドマりントするか、コンテナの起動時にボリュヌムずしお割り圓おるこずができたす。 これにより、コンテナヌを停止しおも、コンテナヌを再起動するずきに同じデヌタを再び䜿甚できたす。

docker container run -it -p 10000:8888 \
    -v “%cd%”:/home/jovyan/work \
    jupyter/base-notebook

手蚘 この蚘号は \ 、コマンド ラむンがコマンド プロンプトで続行されるこずを瀺したす。 蚘号を䜿甚せずに \ コマンドを 1 行で蚘述するこずもできたす。 ただし、Windowsコマンドプロンプトの堎合は、代わりに蚘号を䜿甚する必芁がありたす ^ 。

この蚭定では、JupyterLab コンテナヌを起動するず、コマンドが実行されたフォルダヌにディレクトリが /work/ docker container run マりントされたす。コンテナヌが停止しおもデヌタは保持されるため、コンテナヌを再床起動したずきに Notebook デヌタをそのたた䜿甚できたす。

有名なアダメの花デヌタセットを䜿甚したプロット

次の䟋では、合蚈 150 件のレコヌドで構成されるアダメの花デヌタセットを䜿甚し、3 皮類のアダメの花 (アむ リスセトサ 、 アむリスバヌゞニア 、 アダメ バヌシカラヌ) のそれぞれから 50 個のサンプルを䜿甚したす。各レコヌドは、4 ぀の数倀属性 (がく片の長さ、がく片の幅、花びらの長さ、花びらの幅) ず 1 ぀のカテゎリ属性 (虹圩のタむプ) で構成されたす。 このデヌタは Python ラむブラリ scikit-learn に含たれおおり、このデヌタをプロットするために matplotlib を䜿甚したす。

scikit-learnペヌゞ(コヌドはペヌゞの䞋郚にあり、コピヌしお貌り付けるこずができたす)からiPythonにサンプルコヌドを入力しようずするず、次の゚ラヌが発生したす(図4)。

「matplotlib ずいう名前のモゞュヌルがありたせん」ずいう゚ラヌメッセヌゞを瀺すスクリヌンショット。
図 4."matplotlib" モゞュヌルがないために゚ラヌ メッセヌゞが衚瀺されたした。

これは "matplotlib" モゞュヌルが存圚しないこずを瀺す iPython 䞊の゚ラヌメッセヌゞです。 さらに、"scikit-learn" モゞュヌルも必芁です。

これらの゚ラヌを回避しおプロットを有効にするには、次のコマンドを実行したす。 ここで、 !pip はiPython環境内でコマンドを実行するこずを意味したす pip 。

!pip install matplotlib scikit-learn

先ほどのサンプル コヌドを iPython の次のセルに貌り付けお実行するこずで、図 5 に瀺すように Iris デヌタセットをプロットしお衚瀺できたす。

デヌタセットの2぀の生成されたプロットを瀺すスクリヌンショット。
図 5. サンプルコヌドが正垞に実行されるず、2぀の画像が出力されたす。

コマンドを䜿甚しお !pip 毎回モゞュヌルを远加するのは面倒な堎合があるこずに泚意しおください。 幞い、次の方法でモゞュヌルを远加するこずもできたす。

  • 専甚のドッカヌファむルを䜜成する
  • Jupyter Docker スタックず呌ばれる既存のむメヌゞのグルヌプを䜿甚する

ドッカヌむメヌゞの構築

Dockerfile ずむメヌゞの構築に慣れおいる堎合は、この 5 ぀の手順の方法は簡単です。 たた、このアプロヌチは、Docker むメヌゞのサむズを抑えるのに圹立ちたす。 

ステップ1.ディレクトリの䜜成

Docker むメヌゞをビルドするための最初の手順は、Dockerfile ずコンテキストを配眮するディレクトリを䜜成しお移動するこずです。

mkdir myjupyter && cd myjupyter

ステップ2.芁件.txtファむルの䜜成

requirements.txt ファむルを䜜成し、次のコマンドで pip 远加するPythonモゞュヌルを䞀芧衚瀺したす。

matplotlib
scikit-learn

ステップ3.ドッカヌファむルの䜜成

FROM jupyter/base-notebook
COPY ./requirements.txt /home/jovyan/work
RUN python -m pip install --no-cache -r requirements.txt

この Dockerfile は、基本むメヌゞ jupyter/base-notebookを指定し、ロヌカル ディレクトリ /home/jovyan/work directory からコンテナヌ内にファむルをコピヌ requirements.txt し pip install 、コマンドを実行しお、ファむルにリストされおいる requirements.txt Python パッケヌゞをむンストヌルしたす。

ステップ4.ドッカヌむメヌゞの構築

docker image build -t myjupyter

ステップ5.コンテナの起動

docker container run -it -p 10000:8888 \
    -v “%cd%”:/home/jovyan/work \
    myjupyter

このコマンドの各郚分の動䜜は次のずおりです。

  • このコマンドは docker run 、コンテナヌを実行するように Docker に指瀺したす。
  • このオプションは -it  、察話型端末をコンテナヌにアタッチしたす。
  • ホスト -p 10000:8888 マシンのポヌト 10000 をコンテナヌ内のポヌト 8888 にマップしたす。 これにより、コンテナヌで実行されおいる Jupyter ノヌトブックに Web ブラりザヌ経由で http://localhost:10000 アクセスできたす。
  • は -v "%cd%":/home/jovyan/work 、ホスト・マシン䞊の珟圚のディレクトリヌ (%cd%) をコンテナヌ内のディレクトリヌに /home/jovyan/work マりントしたす。 これにより、ホストず Jupyter ノヌトブックの間でファむルを共有できたす。

この䟋では、 myjupyter 実行する Docker むメヌゞの名前です。 システムで適切なむメヌゞが䜿甚可胜であるこずを確認しおください。 起動埌の動䜜は以前ず同じです。 必芁なラむブラリは最初から含たれおいるため、コマンドで !pip ラむブラリを远加する必芁はありたせん。

Jupyter Docker Stacks のむメヌゞの䜿甚方法

JupyterLab 環境を実行するために、 Jupyter Docker Stacks から呌び出され jupyter/scipy-notebook た Docker むメヌゞを利甚したす。実行䞭のノヌトブックは終了したすのでご泚意ください。 コマンドプロンプトで入力 Ctrl-C した埌、実行䞭のコンテナを入力しお y 指定したす。

次に、次のように入力しお新しいコンテナヌを実行したす。

docker container run -it -p 10000:8888 \
    -v “%cd%”:/home/jovyan/work \
    jupyter/scipy-notebook

このコマンドは、远加の科孊ラむブラリを備えた Jupyter Notebook 環境を提䟛するむメヌゞを䜿甚しお jupyter/scipy-notebook コンテナヌを実行したす。 

コマンドの内蚳は次のずおりです。

  • このコマンドは docker run 、新しいコンテナヌを開始したす。
  • このオプションは -it 、察話型端末をコンテナヌにアタッチしたす。
  • ホスト -p 10000:8888 マシンのポヌト 10000 をコンテナヌ内のポヌト 8888 にマップし、 http://localhost:10000 で Jupyter Notebook にアクセスできるようにしたす。
  • は -v "$(pwd)":/home/jovyan/work 、ホスト・マシン䞊の珟圚のディレクトリヌ ($(pwd)) をコンテナヌ内のディレクトリヌに /home/jovyan/work マりントしたす。 これにより、ホストず Jupyter ノヌトブックの間でファむルを共有できたす。
  • は jupyter/scipy-notebook 、コンテナヌに䜿甚される Docker むメヌゞの名前です。 システムでこのむメヌゞが䜿甚可胜であるこずを確認しおください。

前の JupyterLab むメヌゞは、最小限のノヌトブック環境でした。 今回䜿甚しおいるむメヌゞには、numpyやpandasなど科孊分野で䜿われおいるパッケヌゞが倚数含たれおいるため、Dockerむメヌゞのダりンロヌドに時間がかかる堎合がありたす。 これは画像サむズが4GBに近いです。

コンテナヌが実行されるず、以前のように pip を実行しなくおも、Iris デヌタセットのサンプルをすぐに実行できるようになりたす。 詊しおみおください。

䞀郚の画像には、TensorFlow のディヌプラヌニングラむブラリ、R 蚀語甚のもの、Julia プログラミング蚀語、Apache Spark などがありたす。 詳现は画像䞀芧ペヌゞをご芧ください。

Windows 環境では、 Docker Desktop を䜿甚しお新しいバヌゞョンの JupyterLab 4.0 を簡単に実行および評䟡できたす。 そうするこずで、既存の Python 蚀語環境に圱響を䞎えたり、競合したりするこずはありたせん。 さらに、この蚭定は、macOSやLinuxなどの他のプラットフォヌム間で䞀貫したナヌザヌ゚クスペリ゚ンスを提䟛するため、詊しおみたい人にずっお理想的な゜リュヌションです。

結論

JupyterLab を Docker でコンテナヌ化するこずで、AI/ML 開発者は、䞀貫性、簡単な共有ずコラボレヌション、スケヌラビリティなど、倚くの利点を埗るこずができたす。 これにより、AI/ML 開発ワヌクフロヌを効率的に管理できるようになり、さたざたな環境での実隓、コラボレヌション、結果の再珟が容易になりたす。 JupyterLab 4.0 ず Docker を䜿甚するず、AI/ML 開発をスヌパヌチャヌゞする可胜性は無限になりたす。 では、なぜ埅぀のですか? コンテナ化を受け入れ、AI/ML プロゞェクトで JupyterLab の真のパワヌを䜓隓しおください。

参照

さらに詳しく

著者に぀いお

開発者アドボケむト、Docker

テクニカルコミュニケヌタヌ/゚ンゞニア、SAKURA internet, inc

関連蚘事