以下の方法は最新のJupyterでは実行できなくなってしまっています.(Jupyter バージョン 4.9.2)
日頃からJupyter Notebookを活用しています。GPU搭載マシーン(Linux)上でDockerを実行してJupyter Notebook(Tensor Flow Notebook)のコンテナを立てて利用しています。Notebook利用時にimportするライブラリはいつも似通っており、毎度毎度記載するのが煩雑であり、面倒くさい行程と感じていました。そこで、Notebookのテンプレート(Snippet)を設定して、import文の記載を楽にする試みをやってみることにしました。Jupyterにインターフェースが似ているGoogle Colaboratoryには設定メニューからSnippetの設定が可能ですが、Jupyterには専用のextensionをインストールする必要が有ります。本記事ではJupyter @ Docker環境を対象にしています。筆者が設定時に情報を探しましたが、Jupyter @ Dockerの情報は見つかりませんでした。。。 同様の環境構築を考えておられている方のお役に立てれば幸いです。
Jupyter Nbextensions Configuratorのインストール
まずJupyter Nbextensions Configuratorをインストールします。筆者はpip
コマンドでインストールを実施しました。
pip install jupyter_nbextensions_configurator
pipインストール完了後にjupyter
コマンドを用いて有効化するために、以下のコマンドを実行します。
jupyter contrib nbextension install --user
コンテナの再起動
Jupyterを実行しているコンテナの再起動を行います。利用しているコンテナ仮想化環境に合ったコマンドを実行して下さい。
docker container restart <CONTAINER_NAME>
docker-compose restart <CONTAINER_NAME>
Snippetsの有効化
コンテナ再起動後に、JupyterのURL(<base_url>/tree
例えばhttp://<ServerIP>:8080/tree
)にアクセスすると下図の様にNbextensions
タブが追加1されています。タブをクリックしてページを表示します。
Nbextensionsの有効化
disable configuration for nbextensions without explicit compatibility (they may break your notebook environment, but can be useful to show for nbextension development)
のチェックボックスを下図の様にオフにます。また、Snippets
のチェックボックスをオンにして有効化します。
Snippetsが有効化されていることの確認
新規Notebookを作成してSnippetsが有効化されているか確認します。下図の赤丸の部分に示すドロップダウンメニューが表示されていれば成功です。これでsnippetは使える様になりましたが、このままではサンプルsnippetしか利用出来ません。(因みにサンプルsnippetはZen of Pythonを表示させるimport this
コマンドが記載されているだけです。)
自作snippetの登録
自作snippetを登録する場合、.local/share/jupyter/nbextensions/snippets/snippets.json
に登録したい内容を追記します。筆者はPyTorchの専門書を読みながらNotebookを利用する時に大量にimport文を書きたくないので、必要なライブラリを直ぐにimport出来る状態にしておくためのsnippetを登録しました。
{
"snippets" : [
{
"name" : "example",
"code" : [
"# This is an example snippet!",
"# To create your own, add a new snippet block to the",
"# snippets.json file in your jupyter nbextensions directory:",
"# /nbextensions/snippets/snippets.json",
"import this"
]
},
{
"name" : "PyTorch NoteBook",
"code" : [
"import xml.etree.ElementTree as ET",
"import glob",
"import json",
"import os.path as osp",
"import random",
"",
"import cv2",
"import numpy as np",
"import matplotlib.pyplot as plt",
"import torch",
"import torch.nn as nn",
"import torch.optim as optim",
"import torch.utils.data as data",
"import torchvision",
"",
"from PIL import Image",
"from tqdm import tqdm",
"from torchvision import models, transforms",
"",
"%matplotlib inline",
"",
"torch.manual_seed(1234)",
"np.random.seed(1234)",
"random.seed(1234)"
]
}
]
}
まとめ
以前から気になっていたJupyter Notebookのsnippet登録が漸く出来ました。今後よく使うNotebookはテンプレート化して直ぐに利用出来る様に活用していこうと思います。
Reference
-
Web上の情報や公式docでは
<base_url>/nbextensions
でアクセスすると表示される旨の説明が記載されていますが、筆者の環境では上手くアクセス出来ませんでした。 ↩