こちらで説明されているノートブックスコープライブラリをより詳細に説明した内容となっています。
名前の通り「ノートブック」がスコープとなるライブラリなのですが、自分もきちんと理解しているのか不安になったので動作を確認してみました。
あるクラスターにアタッチしているすべてのノートブックに反映されるのがクラスターライブラリです。
一方、ノートブックスコープライブラリで疑問に思うのは以下の点でしょうか。
疑問1
同じユーザーが同じクラスターに複数のノートブックをアタッチしている際、一方のノートブック(ノートブックA)でノートブックスコープライブラリをインストールしたら、もう一方のノートブック(ノートブックB)はどうなるのか?
これに関しては、こちらで説明している通りなのですが、以下で実際に確認します。
ノートブックスコープライブラリをインストールすると、現在のノートブックとそのノートブックに関連づけられているジョブがそのライブラリにアクセスすることができます。同じクラスターにアタッチされている他のノートブックは影響を受けません。
疑問2
ノートブックスコープライブラリをインストールした後、それまで使えていた変数にアクセスできなくなったのだけどなぜ?他のノートブックは影響を受けないの?
これらの疑問に答えるべく、実際に試してみます。
ノートブックの準備
以下の2つのノートブックを準備します。疑問2の確認をするために変数を宣言しておきます。
test = "A"
test = "B"
これらを同じクラスターにアタッチします。
ノートブックスコープライブラリのインストール
notebook_Aの2番目のセルで以下を実行して、ノートブックスコープライブラリをインストールします。
%pip install deepchem
この後で以下を実行するとimportできることが確認できます。
import deepchem
一方、notebook_Bでも同じライブラリをimportしようとしてみます。
import deepchem
同じクラスターにアタッチしているにも関わらずimportすることはできません。これで疑問1に対する答えが分かったことになります。同じユーザーであろうが同じクラスターであろうが、%pip
を実行したノートブックのみがスコープなので、別のノートブックからはライブラリを利用できないとなります。
それでは疑問2はどうでしょうか。
test
これも、こちらに記載があります。
ノートブックの一番最初に
%pip
を記述してください。%pip
が実行された後に、ノートブックの内部状態がリセットされます。ノートブックでPythonメソッドあるいは変数を宣言した後に%pip
を実行するとそれらは消去されてしまいます。
このため、%pip
を実行したnotebook_Aでは内部状態がリセットされてしまうため変数が参照できなくなっています。それでは、notebook_Bではどうでしょうか。
test
以下のように、notebook_Bでは問題なく変数を参照できます。
これによって、疑問2に対する回答も分かりました。同じユーザーであろうが同じクラスターであろうが、%pip
を実行したノートブックのみがスコープなので、内部状態のリセットも別のノートブックは影響を受けないとなります。
まとめ
疑問1
同じユーザーが同じクラスターに複数のノートブックをアタッチしている際、一方のノートブック(ノートブックA)でノートブックスコープライブラリをインストールしたら、もう一方のノートブック(ノートブックB)はどうなるのか?
同じユーザーであろうが同じクラスターであろうが、%pip
を実行したノートブックのみがスコープなので、別のノートブックからはライブラリを利用できません。
疑問2
ノートブックスコープライブラリをインストールした後、それまで使えていた変数にアクセスできなくなったのだけどなぜ?他のノートブックは影響を受けないの?
同じユーザーであろうが同じクラスターであろうが、%pip
を実行したノートブックのみがスコープなので、%pip
を実行したノートブックの内部状態がリセットされるので変数が参照できなくなります。なお、内部状態のリセットも別のノートブックは影響を受けません。