Hub documentation
Bộ dữ liệu dạng luồng
Bộ dữ liệu dạng luồng
Các thư viện tích hợp
Nếu một dataset trên Hub tương thích với một thư viện được hỗ trợ cho phép streaming từ Hugging Face, bạn có thể stream dataset chỉ với vài dòng code. Để biết thông tin về cách truy cập dataset, bạn có thể nhấp vào nút “Use this dataset” trên trang dataset để xem cách thực hiện. Ví dụ, knkarthick/samsum cho thấy cách làm điều này với datasets bên dưới.


Sử dụng Thư viện Khách hàng Hugging Face
Bạn có thể sử dụng thư viện huggingface_hub để tạo, xóa và truy cập các tệp từ các kho lưu trữ. Ví dụ, để stream bộ dữ liệu allenai/c4 trong Python, bạn chỉ cần cài đặt thư viện (chúng tôi khuyến nghị sử dụng phiên bản mới nhất) và chạy đoạn mã sau.
pip install -U huggingface_hub
from huggingface_hub import hffs
repo_id = "allenai/c4"
path_in_repo = "en/c4-train.00000-of-01024.json.gz"
# Stream the file
with hffs.open(f"datasets/{repo_id}/{path_in_repo}", "r", compression="gzip") as f:
print(f.readline()) # read only the first line
# {"text":"Beginners BBQ Class Taking Place in Missoula!...}Xem tài liệu HfFileSystem để biết thêm thông tin.
Bạn cũng có thể tích hợp điều này vào thư viện của riêng mình! Ví dụ, bạn có thể nhanh chóng stream một tập dữ liệu CSV bằng Pandas theo từng lô.
import pandas as pd
repo_id = "YOUR_REPO_ID"
path_in_repo = "data.csv"
batch_size = 5
# Stream the file
with hffs.open(f"datasets/{repo_id}/{path_in_repo}") as f:
for df in pd.read_csv(f, iterator=True, chunksize=batch_size): # read 5 lines at a time
print(len(df)) # 5Streaming đặc biệt hữu ích để đọc các tệp lớn trên Hugging Face một cách tuần tự hoặc chỉ một phần nhỏ.
Ví dụ, tarfile có thể lặp qua các tệp trong các lưu trữ TAR, zipfile có thể đọc tệp từ các lưu trữ ZIP và pyarrow có thể truy cập các nhóm hàng (row groups) của các tệp Parquet.
Có một triển khai hệ thống tệp tương đương bằng Rust có sẵn trong OpenDAL.
Sử dụng cURL
Vì tất cả các tệp trên Hub đều có thể truy cập qua HTTP, bạn có thể stream tệp bằng cURL:
>>> curl -L https://huggingface.co/datasets/fka/awesome-chatgpt-prompts/resolve/main/prompts.csv | head -n 5
"act","prompt"
"An Ethereum Developer","Imagine you are an experienced Ethereum developer tasked with creating...
"SEO Prompt","Using WebPilot, create an outline for an article that will be 2,000 words on the ...
"Linux Terminal","I want you to act as a linux terminal. I will type commands and you will repl...
"English Translator and Improver","I want you to act as an English translator, spelling correct...Sử dụng yêu cầu phạm vi (range requests) để truy cập một phần cụ thể của tệp:
>>> curl -r 40-88 -L https://huggingface.co/datasets/fka/awesome-chatgpt-prompts/resolve/main/prompts.csv
Imagine you are an experienced Ethereum developerTruy xuất từ các kho riêng bằng token truy cập:
>>> export HF_TOKEN=hf_xxx
>>> curl -H "Authorization: Bearer $HF_TOKEN" -L https://huggingface.co/...Streaming Parquet
Parquet là một định dạng tuyệt vời cho các bộ dữ liệu AI. Định dạng này cung cấp khả năng nén tốt, cấu trúc cột cho phép xử lý và truy vấn hiệu quả, cùng với metadata nhiều cấp độ để lọc nhanh, và phù hợp với các bộ dữ liệu ở mọi quy mô.
Các tệp Parquet được chia thành các nhóm hàng (row groups), mỗi nhóm thường có kích thước khoảng 100MB. Điều này cho phép các trình tải dữ liệu và các khung xử lý dữ liệu truyền dữ liệu theo từng phần, lặp qua các nhóm hàng.
Bên trong các nhóm hàng (row groups) là các cột riêng lẻ, được chia thành các trang (pages). Trang là khối nén có kích thước khoảng 1MB chứa dữ liệu thực tế.

Dòng nhóm
Sử dụng PyArrow để phát trực tiếp các nhóm hàng (row groups) từ các tệp Parquet trên Hugging Face:
import pyarrow.parquet as pq
repo_id = "HuggingFaceFW/finewiki"
path_in_repo = "data/enwiki/000_00000.parquet"
# Stream the Parquet file row group per row group
with pq.ParquetFile(f"hf://datasets/{repo_id}/{path_in_repo}") as pf:
for row_group_idx in range(pf.num_row_groups):
row_group_table = pf.read_row_group(row_group_idx)
df = row_group_table.to_pandas()PyArrow hỗ trợ các đường dẫn
hf://ngay từ đầu và tự động sử dụngHfFileSystem
Tìm thêm thông tin trong tài liệu PyArrow.
Truy cập ngẫu nhiên hiệu quả
Các nhóm hàng (row groups) được chia tiếp thành các cột, và các cột được chia thành các trang (pages). Các trang thường có kích thước khoảng 1MB và là đơn vị dữ liệu nhỏ nhất trong Parquet, vì đây là nơi áp dụng nén. Việc truy cập các trang cho phép tải các hàng cụ thể mà không cần tải toàn bộ một nhóm hàng, và điều này khả thi nếu tệp Parquet có chỉ mục trang (page index). Tuy nhiên, không phải mọi framework Parquet đều hỗ trợ đọc ở cấp độ trang. Ví dụ, PyArrow không hỗ trợ, nhưng crate parquet trong Rust thì có:
use std::sync::Arc;
use object_store::path::Path;
use object_store_opendal::OpendalStore;
use opendal::services::Huggingface;
use opendal::Operator;
use parquet::arrow::async_reader::ParquetObjectReader;
use parquet::arrow::ParquetRecordBatchStreamBuilder;
use futures::TryStreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let repo_id = "HuggingFaceFW/finewiki";
let path_in_repo = Path::from("data/enwiki/000_00000.parquet");
let offset = 0;
let limit = 10;
let builder = Huggingface::default().repo_type("dataset").repo_id(repo_id);
let operator = Operator::new(builder)?.finish();
let store = Arc::new(OpendalStore::new(operator));
let reader = ParquetObjectReader::new(store, path_in_repo.clone());
let batch_stream =
ParquetRecordBatchStreamBuilder::new(reader).await?
.with_offset(offset as usize)
.with_limit(limit as usize)
.build()?;
let results = batch_stream.try_collect::<Vec<_>>().await?;
println!("Read {} batches", results.len());
Ok(())
}Trong Rust, chúng tôi sử dụng dịch vụ
Huggingfacecủa OpenDAL, tương đương vớiHfFileSystemtrong python
Truyền write_page_index=True trong PyArrow để bao gồm page index, cho phép truy cập ngẫu nhiên hiệu quả.
Điều này đặc biệt thêm “offset_index_offset” và “offset_index_length” vào các cột Parquet, mà bạn có thể xem trong trình xem metadata Parquet trên Hugging Face.
Page index cũng tăng tốc độ cho Hugging Face Dataset Viewer và cho phép nó hiển thị dữ liệu mà không bị giới hạn bởi kích thước row group.