Hub documentation

Mengambil Dataset

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Mengambil Dataset

Data umumnya tersimpan dalam basis data atau penyimpanan cloud dalam bentuk yang tidak cocok untuk alur kerja AI. Mengambil data ke Hub adalah cara yang baik untuk menerbitkannya sebagai dataset yang siap untuk AI, sehingga memungkinkan pemuatan, pemrosesan, pelatihan model, dan evaluasi data yang mudah dan efisien.

Menggunakan huggingface_hub

Cara termudah untuk memasukkan data adalah dengan mengunggah file data menggunakan huggingface_hub.

Perpustakaan Python huggingface_hub menyediakan set fitur yang kaya yang memungkinkan Anda mengelola repositori, termasuk membuat repos dan mengunggah dataset ke Hub. Kunjungi dokumentasi perpustakaan klien untuk mempelajari lebih lanjut.

Hal ini relevan jika data Anda statis/terkunci dan jika Anda dapat dengan mudah memperoleh dump lokal data dalam format yang didukung oleh Hub (misalnya, Parquet atau JSON Lines) dengan struktur yang dapat digunakan (misalnya, field yang terdefinisi dengan baik untuk pelatihan dan evaluasi).

Menggunakan dlt

dlt adalah pustaka Python open-source untuk perpindahan data (ETL), dan berguna bagi pengembang (dan agen mereka) yang membangun pipeline data. Ia dapat mengambil data dari berbagai jenis sumber:

  • Penyimpanan cloud atau file
  • REST APIs
  • Database SQL
  • Generator Python

Contoh tipe sumber:

  • filesystem (termasuk s3, gs, az, abff, dll.)
  • sql_database, mongodb, google_sheets
  • notion, hubspot, rest_api

Temukan jenis sumber Anda dari daftar sumber dan buat proyek dlt Anda:

dlt init <source-type> filesystem

Anda kemudian dapat membuat file konfigurasi .dlt/secrets.toml di root proyek dlt Anda untuk mendefinisikan Hub sebagai tujuan filesystem untuk dataset Anda, berdasarkan protokol hf://:

[destination.filesystem]
bucket_url = "hf://datasets/<namespace>"

[destination.filesystem.credentials]
hf_token = "hf_..."  # Your Hugging Face Access Token

Namespace harus berupa nama pengguna Anda atau nama organisasi/tim Anda di mana Anda ingin mengimpor dataset Anda.

Kemudian, setiap dataset dlt membuat atau memperbarui repositori dataset Hugging Face. Nama repositorinya adalah <namespace>/<dataset_name>, di mana <namespace> adalah namespace yang sama yang Anda gunakan di bucket_url (organisasi atau tim Anda), dan <dataset_name> adalah dataset_name dari pipeline tersebut.

Berikut adalah contoh pipeline:

import dlt

@dlt.resource
def my_data():
    # One of the functions auto-generated by `dlt init` that you can customize,
    # or you can define your own python generator function.

    # Here is an example from the `chess` source type:
    for player in ['magnuscarlsen', 'rpragchess']:
        response = requests.get(f'https://api.chess.com/pub/player/{player}')
        response.raise_for_status()
        yield response.json()

# Requires bucket_url = "hf://datasets/<namespace>" in .dlt/secrets.toml
pipeline = dlt.pipeline(
    pipeline_name="my_pipeline",
    destination="filesystem",
    dataset_name="dataset_name",
)

pipeline.run(my_data())

Sesuaikan sumber daya dlt untuk memuat data yang Anda inginkan dan mengurai bidang yang ingin Anda terbitkan dalam dataset Anda, misalnya teks yang Anda butuhkan untuk pelatihan dan evaluasi.

Menggunakan pustaka lain

Beberapa pustaka seperti 🤗 Datasets, Pandas, Polars, Dask, DuckDB, Spark, atau Daft dapat mengambil data dari berbagai tempat ke Hub. Lihat daftar Libraries supported by the Datasets Hub untuk informasi lebih lanjut.

Serap data mentah

Jika Anda mengingest data mentah yang memerlukan kurasi lebih lanjut sebelum dipublikasikan sebagai dataset siap-AI, atau jika Anda membutuhkan pengalaman serupa S3, pertimbangkan untuk mengingestnya ke Hugging Face Storage Buckets. Untuk memindahkan koleksi besar yang sudah ada ke bucket dari disk lokal atau cloud lain, lihat Panduan Migrasi.

Jika data Anda sudah berada di repositori dataset, model, atau Space, Anda dapat menyalinnya ke bucket di sisi server — tanpa perlu mengunduh atau mengunggah ulang — dengan hf buckets cp:

hf cp hf://datasets/username/my-dataset/ hf://buckets/username/my-bucket/

Hanya hash konten Xet yang dimigrasikan, sehingga bahkan file yang sangat besar pun disalin secara instan. Lihat Menyalin file antar repositori dan bucket.

Ingest terjadwal

Ada beberapa keterbatasan saat memperbarui file yang sama di Hub ribuan kali. Sebagai contoh, Anda mungkin ingin mengimpor generasi dari server inferensi LLM yang sedang berjalan, jejak agen live, atau log dari pelatihan model yang sedang berjalan. Dalam kasus seperti itu, mengunggah data sebagai dataset di Hub masuk akal, tetapi bisa sulit dilakukan dengan benar. Alasan utamanya adalah Anda tidak ingin memversikan setiap pembaruan data Anda karena hal itu akan membuat repositori git tidak dapat digunakan.

Tersedia tiga opsi:

  • Gunakan Storage Bucket alih-alih repositori Dataset: Storage Buckets menawarkan pengalaman serupa S3 yang memungkinkan pembaruan file dengan sangat sering, karena tidak berbasis git. Storage Buckets sangat berguna untuk data yang belum siap dipublikasikan sebagai dataset, misalnya data yang masih berkembang atau yang memerlukan kurasi lebih lanjut.
  • Gunakan CommitScheduler: CommitScheduler di huggingface_hub menyediakan ingest data hampir real-time untuk menjaga riwayat git repositori Dataset agar tetap terkendali. Komponen ini dapat dikonfigurasi untuk melakukan commit git pada interval yang didefinisikan dalam menit.
  • Gunakan Hugging Face Jobs untuk menjadwalkan skrip ingest: Hugging Face Jobs menyediakan cara untuk menjalankan dan menjadwalkan skrip python di infrastruktur Hugging Face. Jadwalkan skrip ingest untuk berjalan pada interval yang didefinisikan menggunakan sintaks Cron.

Frekuensi tinggi menggunakan Storage Buckets

Berbeda dengan repositori Dataset yang berbasis git, Anda dapat memperbarui file pada Storage Buckets dengan laju yang sangat tinggi, menawarkan ingest data yang hampir real-time.

Gunakan batch_bucket_files() di huggingface_hub untuk memperbarui file dalam sebuah bucket:

from huggingface_hub import batch_bucket_files

def update_bucket(local_files):
    destinations = [os.path.basename(local_file) for local_file in local_file]
    batch_bucket_files(bucket_id="username/bucket_name", add=[(local_file, dst) for local_file, dst in zip(local_files, destinations)])

Sebagai alternatif, Anda dapat menambahkan ke file dalam Bucket dan flush() pada setiap item baru:

from huggingface_hub import hffs

with hffs.open("buckets/username/bucket_name/texts.jsonl", "a") as f:
    for text in live_texts_stream:
        f.write(json.dumps({"text": text}) + "\n")
        f.flush()

HfFileSystem didasarkan pada fsspec yang memiliki blocksize default 5MiB, yang berarti flushing sebenarnya mengunggah data hanya setelah satu chunk penuh berisi 5MiB data baru ditambahkan. Jika Anda ingin mengunggah lebih sering, turunkan blocksize di hffs.open() (mis. hffs.open(..., blocksize=100 * 2 ** 10) untuk 100 kiB) atau gunakan f.flush(force=True).

Penyimpanan Hugging Face didasarkan pada Xet yang memungkinkan I/O yang efisien saat menambahkan data ke file: unggahan dideduplikasi dan hanya data baru yang diunggah. Temukan informasi lebih lanjut tentang pengambilan data dinamis di bucket dalam dokumentasi bucket tentang unggahan dan dalam dokumentasi pengeditan dataset.

Hampir real-time menggunakan CommitScheduler

Idenya adalah menjalankan tugas latar belakang yang secara berkala mendorong folder lokal ke Hub. Anda ingin menyimpan data ke Hub (mungkin jutaan entri), tetapi tidak perlu menyimpan input setiap pengguna secara real-time. Sebagai gantinya, Anda dapat menyimpan data secara lokal dalam file JSON dan mengunggahnya setiap 10 menit. Misalnya:

import json
from huggingface_hub import CommitScheduler

folder_path = "path/to/files/to/ingest"
every = 10  # ingest every 10min

with CommitScheduler(repo_id="username/dataset_name", repo_type="dataset", folder_path=folder_path, every=every) as scheduler:
    # Write to the folder to ingest every 10min
    # For example:
    with open(folder_path + "/texts.jsonl", "a") as f:
        f.write(json.dumps({"text": text}) + "\n")
    ...

Lihat cara memasukkan data dinamis tanpa harus mengunggah ulang semuanya setiap kali dalam dokumentasi tentang pengeditan dataset.

Temukan informasi lebih lanjut tentang unggahan terjadwal dalam dokumentasi huggingface_hub.

Berdasarkan Cron menggunakan Hugging Face Jobs

Jadwalkan skrip python untuk mengambil data sesuai dengan jadwal

Sebagai contoh, untuk menjalankan skrip ingest.py setiap 5 menit:

hf jobs scheduled uv run "*/5 * * * *" ingest.py

Nyatakan dependensi skrip di header skrip atau gunakan --with. Sebagai contoh, untuk menjalankan pipeline dlt setiap hari pada tengah malam:

hf jobs scheduled uv run --with "dlt[hf]" "0 0 * * *" pipeline.py

Anda dapat memeriksa log setiap run menggunakan hf jobs logs atau langsung di halaman Jobs pada akun Anda di Hugging Face.

Temukan informasi lebih lanjut tentang Hugging Face Jobs di dokumentasi Jobs.

Update on GitHub