Zenn
💽

Hugging Face 内の Oraganization の Private リポジトリのデータセットをロードするときのトークンの設定

に公開

はじめに

Hugging Face 内の Organization の Private リポジトリにあるデータセットをローカル環境にロードする機会がありました。その際、アクセストークンの設定に不備があると、Organization の Private リポジトリにアクセスできないことが分かりました。本記事では、その際の対応方法を備忘録として記載します。

Hugging Face で使用できるアクセストークンについて

Hugging Face では 3 種類のアクセストークンを作成することができます。詳細は以下の公式ドキュメントをご参照ください。
https://huggingface.co/docs/hub/security-tokens

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 スクリプトです。

load_dataset.py
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 ファイルの内容は以下です。

.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

ログインするとコメントできます