Hugging Face 内の Oraganization の Private リポジトリのデータセットをロードするときのトークンの設定
はじめに
Hugging Face 内の Organization の Private リポジトリにあるデータセットをローカル環境にロードする機会がありました。その際、アクセストークンの設定に不備があると、Organization の Private リポジトリにアクセスできないことが分かりました。本記事では、その際の対応方法を備忘録として記載します。
Hugging Face で使用できるアクセストークンについて
Hugging Face では 3 種類のアクセストークンを作成することができます。詳細は以下の公式ドキュメントをご参照ください。
FINEGRAINED
特定のモデルや特定の組織のモデルなど、特定のリソースへのきめ細かなアクセスを提供するために使用可能です。
READ
読み取り可能なリポジトリへの読み取りアクセスを提供するためにのみ使用可能。これには、自分または自分がメンバーである Oraganization が所有するパブリックリポジトリとプライベートリポジトリが含まれます。
WRITE
READ で与えられる読み取りアクセス件に加えて、書き込みアクセス権を持つリポジトリへの書き込みアクセスも付与されます。
事前準備
使用した各種ツール等
- Ubuntu 20.04 (Windows 11 の WSL2 上)
- Python 3.11.9
- 主要パッケージ類
-
datasets
: 3.2.0 -
python-dotenv
: 1.0.1
-
Hugging Face にデータセットを準備
所属している Organization に Private データセットをプッシュしておきます。
検証に使用したソースコード
以下は Hugging Face からデータセットをロードする Python スクリプトです。
from datasets import load_dataset
from dotenv import load_dotenv
DATASET_NAME = "TestOrg/private_data"
load_dotenv(".env")
# 検証のためキャッシュを使わないように指定
dataset = load_dataset(DATASET_NAME, cache_dir=None)
print(dataset)
環境変数に Hugging Face のトークンを設定する .env
ファイルの内容は以下です。
HF_TOKEN=hf_XXXXXXXXXXXXXXXXXXXXX
アクセストークンの発行
アクセストークン発行ページにアクセスし、FINEGRAINED、READ、WRITE の 3 種類を作成します。FINEGRAINED を作成する際は、特定の権限を設定せずに作成します。
検証結果
FINEGRAINED
以下のエラーが発生し、指定したデータセットが存在しない、または Hub にアクセスできないと返されました。
(.venv) user@USERPC:~/test$ python sample_load_dataset_from_hf.py
Traceback (most recent call last):
File "/home/user/test/sample_load_dataset_from_hf.py", line 9, in <module>
dataset = load_dataset(DATASET_NAME, cache_dir=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/test/.venv/lib/python3.11/site-packages/datasets/load.py", line 2129, in load_dataset
builder_instance = load_dataset_builder(
^^^^^^^^^^^^^^^^^^^^^
File "/home/user/test/.venv/lib/python3.11/site-packages/datasets/load.py", line 1849, in load_dataset_builder
dataset_module = dataset_module_factory(
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/test/.venv/lib/python3.11/site-packages/datasets/load.py", line 1719, in dataset_module_factory
raise e1 from None
File "/home/user/test/.venv/lib/python3.11/site-packages/datasets/load.py", line 1645, in dataset_module_factory
raise DatasetNotFoundError(f"Dataset '{path}' doesn't exist on the Hub or cannot be accessed.") from e
datasets.exceptions.DatasetNotFoundError: Dataset 'TestOrg/private_data' doesn't exist on the Hub or cannot be accessed.
READ および WRITE
READ および WRITE のアクセストークンでは、Organization の Private リポジトリからデータセットを正常にロードできました。
(.venv) user@USERPC:~/test$ python sample_load_dataset_from_hf.py
README.md: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 28.0/28.0 [00:00<00:00, 82.6kB/s]
test.jsonl: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 612k/612k [00:00<00:00, 2.02MB/s]
Generating train split: 100 examples [00:00, 11005.08 examples/s]
DatasetDict({
train: Dataset({
features: ['input', 'output'],
num_rows: 100
})
})
FINEGRAINED でデータセットにアクセスできなかった原因と対応
原因
FINEGRAINED はその名の通り「きめ細やかな」アクセスを提供するため、特定のリソースに対してアクセスする場合には適切な権限を設定する必要があります。今回、データセットのロードができなかった原因は、指定した Organization のリポジトリにアクセスする権限が付与されていなかったためです。
対応
以下の手順で権限を設定しなおしました。
1.アクセストークン発行ページにアクセスして、対象のトークンの右端にある三点リーダーをクリックして、Edit permissions
を選択します。
2. Org permissionsにあるSearch for orgs
と書かれた検索ボックスに所属している組織名を入力して検索し、表示された組織名をクリックします。
3. Read access to contents of all repos in selected organizations
にチェックを入れます。
4. Save Token
をクリックします。
権限を設定しなおした FINEGRAINED のアクセストークンで接続
権限を設定しなおした FINEGRAINED のアクセストークンを使用すると、READ や WRITE の場合と同様にデータセットを正常にロードできました。
(.venv) user@USERPC:~/test$ python sample_load_dataset_from_hf.py
README.md: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 28.0/28.0 [00:00<00:00, 82.6kB/s]
test.jsonl: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 612k/612k [00:00<00:00, 2.02MB/s]
Generating train split: 100 examples [00:00, 11005.08 examples/s]
DatasetDict({
train: Dataset({
features: ['input', 'output'],
num_rows: 100
})
})
最後に
Hugging Face で FINEGRAINED のアクセストークンを使用する際には、適切な権限を設定しないと Organization 内の Private データセットにアクセスできない場合があります。本記事を通じて、アクセストークン作成時にはドキュメントを丁寧に読み、必要な権限を理解した上で設定する重要性を学びました。
Discussion