Snowflake Notebooks でのエラーのトラブルシューティング¶
次のシナリオは、 Snowflake Notebooks 使用時に発生する可能性のある問題のトラブルシューティングに役立ちます。
Snowsight のノートブックの総数が、以下の制限を超えています。¶
アカウント内のノートブックの総数が6000を超え、Notebooksを更新すると、以下のエラーが発生します。
Result size for streamlit list exceeded the limit. Streamlit list was truncated.
ユーザーは引き続き新しいノートブックを作成できますが、Snowflakeではアカウントで使用しなくなったノートブックを削除することを推奨しています。
パッケージ更新時のNotebooks(ウェアハウスのランタイム)エラー¶
Snowflakeでは、サポートされなくなった古い snowflake-ml
パッケージを廃止しました。パッケージセレクターから削除され、Snowflake Anacondaチャンネルで利用することはできません。 snowflake-ml
を使用しており、ノートブックのパッケージを追加、削除、更新しようとすると、 snowflake-ml
にはすでにアクセスできないため、これらのノートブックは失敗します。
問題を回避するには、Snowflake ML の正しいパッケージである snowflake-ml-python
に切り替えてください。
プロトリーエラー¶
st.plotly_chart(fig, render_mode='svg')
WebGL is not supported by your browser - visit https://get.webgl.org for more info.
データポイントが1,000を超えると、Plotlyはwebglに切り替えます。
AttributeError: NoneType
¶
ノートブックの既存の変数と同じ名前にセル名を変更すると、以下のエラーが発生します。
AttributeError: ‘NoneType’ object has no attribute ‘sql’
たとえば、 cell1
というPythonのセルに以下があるとします。
session = get_active_session() #establishing a Snowpark session
その後、 cell2
の名前を「session」に変更し、 cell3
で「session」を参照すると、 NotebooksはSnowparkのセッションではなく、「session」(セル名)を参照しようとしてエラーになります。
早期切断¶
ノートブックセッションはストアドプロシージャとして実行されます。タイムアウトはウェアハウスのランタイムでは30分、コンテナーのランタイムでは60分です。タイムアウト前にノートブックが予期せず切断される場合、 ACCOUNTADMIN またはウェアハウスのオーナーが STATEMENT_TIMEOUT_IN_SECONDS パラメーターを特定の値(例えば、5分)にセットしている可能性があります。これは、ノートブックセッションを含む、ウェアハウス上ですべてのステートメントを実行できる時間を制限するものです。このパラメーターはウェアハウスまたはアカウントレベルで設定されますが、ウェアハウスとセッションの両方で設定された場合、ゼロでない最も小さい値が強制されます。
アイドル時間設定の詳細については、 アイドルタイムと再接続 をご参照ください。
再接続の失敗¶
ブラウザでCookieを有効にしていない場合、Notebooksセッションがまだアクティブである間(アクティビティがないためにタイムアウトする前)、自動的に再接続することはできません。ノートブックを再度開くと、エラーメッセージが表示されます。
Notebook connection lost and cannot reconnect. Restart or end session.
セッションを再起動すると、現在の EXECUTE NOTEBOOK クエリが終了し、新しいセッションが開始されます。セッションを終了すると、現在の EXECUTE NOTEBOOK クエリが終了します。
Query History どちらのアクションも行わなかった場合、現在の EXECUTE NOTEBOOK クエリはウェアハウス上で実行され続けます。
ファイアウォールにより接続できません¶
ノートブックを起動しようとすると、次のようなポップアップが表示されます。
Something went wrong. Unable to connect. A firewall or ad blocker might be preventing you from connecting.
コンテンツ フィルター システムを含むネットワークで、 *.snowflake.app
が許可リストに登録され、Snowflake に接続できることを確認してください。このドメインが許可リストにあると、アプリは何の制限もなくSnowflakeサーバーと通信できます。
さらに、Snowflakeバックエンドへの接続に問題が発生しないように、ネットワーク構成で WebSockets がブロックされていないことを確認してください。
欠落しているパッケージ¶
ノートブック環境にインストールされていないパッケージを使用しようとしている場合、セル出力に以下のメッセージが表示されます。
ModuleNotFoundError: Line 2: Module Not Found: snowflake.core. To import packages from Anaconda, install them first using the package
selector at the top of the page.
ノートブックで使用するPythonパッケージをインポートする ページの指示に従って、必要なパッケージをインポートします。
既存のノートブックから欠落しているパッケージ¶
ノートブックの新バージョンは継続的にリリースされ、ノートブックは最新バージョンに自動アップグレードされます。古いノートブックをアップグレードすると、ノートブック環境のパッケージがアップグレードに対応していないことがあります。ノートパソコンが起動しなくなる可能性があります。
以下は、 Libpython
パッケージが欠落している場合のエラーメッセージの例です。
SnowflakeInternalException{signature=std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool):"libpython_missing", internalMsg=[XP_WORKER_FAILURE: Unexpected error signaled by function 'std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool)'
Assert "libpython_missing"[{"function": "std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool)", "line": 1307, "stack frame ptr": "0xf2ff65553120", "libPythonOnHost": "/opt/sfc/deployments/prod1/ExecPlatform/cache/directory_cache/server_2921757878/v3/python_udf_libs/.data/4e8f2a35e2a60eb4cce3538d6f794bd7881d238d64b1b3e28c72c0f3d58843f0/lib/libpython3.9.so.1.0"}]], userMsg=Processing aborted due to error 300010:791225565; incident 9770775., reporter=unknown, dumpFile= file://, isAborting=true, isVerbose=false}
このエラーを解決するには、以下の手順をお試しください:
ウェブページをリフレッシュし、ノートブックを再度起動します。
問題が解決しない場合は、パッケージセレクターを開き、インストールされているすべてのパッケージが有効かどうかを確認してください。各パッケージのドロップダウンで、利用可能なバージョンを確認できます。最新バージョンのパッケージを選択すると、通常はエラーが解消されます。
読み取り専用ファイルシステムの問題¶
Pythonライブラリの中には、データをローカルユーザディレクトリにダウンロードしたりキャッシュしたりするものがあります。ただし、デフォルトのユーザーディレクトリ /home/udf
は読み取り専用です。これを回避するには、パスを書き込み可能な場所である /tmp
に設定します。書き込みディレクトリの設定に使用する環境変数は、使用するライブラリによって異なる場合があることに注意してください。以下は、この問題が発生する既知のライブラリのリストです。
matplotlib
HuggingFace
catboost
matplotlibの例¶
matplotlibを使用していると、このような警告が表示されることがあります。
Matplotlib created a temporary cache directory at /tmp/matplotlib-2fk8582w because the default path (/home/udf/.config/matplotlib) is
not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular
to speed up the import of Matplotlib and to better support multiprocessing.
以下のコードでは、この警告を解決するために MPLCONFIGDIR
変数を /tmp/
にセットします。
import os
os.environ["MPLCONFIGDIR"] = '/tmp/'
import matplotlib.pyplot as plt
Huggingfaceの例¶
Huggingfaceを使用していると、このような警告が表示されることがあります。
Readonly file system: `/home/udf/.cache`
次のコードでは、 HF_HOME
と SENTENCE_TRANSFORMERS_HOME
変数を /tmp/
に設定することで、このエラーを解消しています。
import os
os.environ['HF_HOME'] = '/tmp'
os.environ['SENTENCE_TRANSFORMERS_HOME'] = '/tmp'
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Snowflake/snowflake-arctic-embed-xs")
df.collect()
を使用する際の出力メッセージが大きすぎます。¶
df.collect()
を実行すると、セル出力に以下のメッセージが表示されます。
MessageSizeError: Data of size 522.0 MB exceeds the message size limit of 200.0 MB.
This is often caused by a large chart or dataframe. Please decrease the amount of data sent to the browser,
or increase the limit by setting the config option server.maxMessageSize.
Click here to learn more about config options.
Note that increasing the limit may lead to long loading times and large memory consumption of the client's browser and the Streamlit server.
Snowflake Notebooks 以下のような大規模なデータセットの場合、セル出力の結果は自動的に切り捨てられます。
すべてのSQLセル結果。
snowpark.Dataframe
の場合のPythonセル結果。
上のセルの問題は、 df.collect()
が snowpark.Dataframe
ではなく List
を返すことです。リストは自動的に切り捨てられません。この問題を回避するには、 DataFrame の結果を直接出力します。
df
Snowpark DataFrames 上で df.to_pandas()
を使用すると、ノートブックがクラッシュします。¶
df.to_pandas()
を実行すると、すべてのデータがメモリにロードされるため、データサイズが関連付けられたNotebookウェアハウスのメモリ制限を超えると、Notebookセッションが終了することがあります。
例 1: Snowpark テーブルを pandas DataFrame にエクスポートする場合¶
data = session.table("BIG_TABLE")
df = data.to_pandas() # This may lead to memory error
例1の回避策¶
次の例では、Snowpark pandasでテーブルを読み込むようにコードを書き換える方法を示します。
# Import Snowpark pandas
import modin.pandas as pd
import snowflake.snowpark.modin.plugin
# Create a Snowpark pandas DataFrame from BIG_TABLE
df = pd.read_snowflake("BIG_TABLE")
# Keep working with your data using the pandas API
df.dropna()
例2:大容量の結果を含む SQL セルを参照。¶
cell1
という SQL のセルに以下のコードがある場合、出力結果は 500M 行になります。
SELECT * from BIG_TABLE
その後、pandas DataFrame に結果を取得すると、データが大きすぎてメモリに収まらないため、Notebook がクラッシュします。
df = cell1.to_pandas() # This may lead to memory error
一般に、大容量のデータセットの場合、Snowflake では df.to_pandas()
の使用を避けることを推奨します。代わりに、pandasでデータを操作するには、Snowpark pandas API と Snowparkに最適化されたウェアハウス を使用します。 Snowpark pandas API を使用すると、Snowflake 上のデータに対して直接 pandas コードを実行し、 SQL でクエリを実行することができます。これにより、ノートブックのメモリに収まらないデータに対してpandasのコードを実行することができます。
例2の回避策¶
上記の2つ目のセル参照の例では、 SQL セルの結果をまず Snowpark DataFrame に変換します。そして、Snowpark pandasに変換することができます。
SELECT * from BIG_TABLE
snowpark_df = cell1.to_df()
df = snowpark_df.to_snowpark_pandas()
# Keep working with your data using the Snowpark pandas API
詳細は pandas on Snowflake in notebooks を参照してください。
VPN 分割トンネリングが原因で接続できません。¶
VPN がスプリットトンネリングを使用するように構成されている場合、 *.snowflake.com
と *.snowflake.app
の両方をネットワークポリシーの allowlist に追加する必要があります。