概要
huggingfaceからのdatasets.load_datasetが終わらなかったときのメモです。
環境
- jupyter notebook(Cursor上で実行)
- macOS M1
- uvで作成した仮想環境
- python 3.11.2
- datasets 3.0.2
- ipykernel 6.29.5
課題
以下のコードをjupyter notebook上で実行しました。
from datasets import load_dataset
# livedoor-news-corpus データセットをロード
dataset = load_dataset("shunk031/livedoor-news-corpus", split='train')
以下のwarningが出た以降20分待ってもセルの実行が完了しませんでした。
/***/.venv/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
livedoorコーパス(件数8000件くらい)なので、ネットワーク環境によりますが、あまり時間がかかるものではないと思います。
warningは進捗の表示に関することなので、遅延には直接的には関係ないように思われます。
解決方法(?)
なんとなくnotebookで実行していることが悪さをしているような気がしたので、.pyのスクリプトを作ってターミナル上で実行してみました。
test.py
from datasets import load_dataset
# livedoor-news-corpus データセットをロード
dataset = load_dataset("shunk031/livedoor-news-corpus", split='train')
実行したところ、custom codeを実行するかどうかを聞かれました。yesと回答したところ、数秒で処理が完了しました。
% uv run test.py
The repository for shunk031/livedoor-news-corpus contains custom code which must be executed to correctly load the dataset. You can inspect the repository content at https://hf.co/datasets/shunk031/livedoor-news-corpus.
You can avoid this prompt in future by passing the argument `trust_remote_code=True`.
Do you wish to run the custom code? [y/N] y
Downloading data: 31.6MB [00:00, 63.6MB/s]
Generating train split: 5894 examples [00:00, 11998.65 examples/s]
Generating validation split: 737 examples [00:00, 11827.01 examples/s]
Generating test split: 736 examples [00:00, 11270.15 examples/s]
完了後、notebook上で再度試すと今度はダウンロードに成功しました。
考察
test.py実行時の出力から考えると以下のような気がします。
- ダウンロードしようとしていたデータセットがカスタムコードの実行を要求するものだったので、ユーザ側で許可を与える必要があった。
- notebook側の表示の不具合で、対話的な入力ができなくなり、永遠に待機していた。
- ターミナルでスクリプトから一度実行すると、キャッシュが残るので、notebookからも実行できるようになった。
今回は状況を再現させることがすぐにはできなくなったのでこれ以上の追求はできませんが、今後同じ事象に遭遇したときにやれることとしては以下があると思います。
- パッケージが対話的な入力を要求しているがnotebook上でそれが正しく表示されない不具合があるかも
- custom code関連であれば、warningで出ていたtrust_remote_code=Trueを指定することで解決できるかも