Hub documentation
Thư viện
Thư viện
Hub Datasets hỗ trợ một số thư viện trong hệ sinh thái Mã nguồn mở. Nhờ có thư viện Python huggingface_hub, việc bật chia sẻ bộ dữ liệu của bạn trên Hub trở nên dễ dàng. Chúng tôi rất vui mừng chào đón một loạt các thư viện Mã nguồn mở đang thúc đẩy Machine Learning tiến lên trên Hub.
Bảng thư viện
Bảng dưới đây tóm tắt các thư viện được hỗ trợ và mức độ tích hợp của chúng.
| Thư viện | Mô tả | Tải xuống từ Hub | Truyền trực tiếp từ Hub | Đẩy lên Hub | Truyền trực tiếp đến Hub | Tệp Parquet được tối ưu |
|---|---|---|---|---|---|---|
| Argilla | Công cụ hợp tác dành cho các kỹ sư AI và chuyên gia trong lĩnh vực coi trọng chất lượng dữ liệu cao. | ✅ | ❌ | ✅ | ❌ | ❌ |
| Daft | Động cơ dữ liệu cho xử lý dữ liệu đa phương thức quy mô lớn với giao diện Python-native. | ✅ | ✅ | ✅ | ✅ | ✅ |
| Dask | Thư viện tính toán song song và phân tán giúp mở rộng hệ sinh thái Python và PyData hiện có. | ✅ | ✅ | ✅ | ✅ | ✅* |
| Trình thiết kế dữ liệu | Khung NVIDIA NeMo để tạo các bộ dữ liệu tổng hợp bằng LLM. | ✅ | ❌ | ✅ | ❌ | ❌ |
| Datasets | 🤗 Datasets là một thư viện để truy cập và chia sẻ các bộ dữ liệu cho Audio, Computer Vision và Natural Language Processing (NLP). | ✅ | ✅ | ✅ | ✅ | ✅ |
| Distilabel | Khung làm việc cho việc tạo dữ liệu tổng hợp và phản hồi từ AI. | ✅ | ❌ | ✅ | ❌ | ❌ |
| DuckDB | Hệ thống quản lý cơ sở dữ liệu OLAP SQL chạy trong tiến trình. | ✅ | ✅ | ❌ | ❌ | ❌ |
| Atlas nhúng | Công cụ trực quan hóa và khám phá tương tác cho các embedding lớn. | ✅ | ✅ | ❌ | ❌ | ❌ |
| Fenic | Khung DataFrame lấy cảm hứng từ PySpark để xây dựng các ứng dụng AI và agentic ở quy mô sản xuất. | ✅ | ✅ | ❌ | ❌ | ❌ |
| FiftyOne | FiftyOne là một thư viện để tuyển chọn và trực quan hóa dữ liệu ảnh, video và 3D. | ✅ | ✅ | ✅ | ❌ | ❌ |
| Lance | Định dạng hồ dữ liệu mở (lakehouse) cho AI đa phương thức. | ✅ | ✅ | ❌ | ❌ | ❌ |
| Pandas | Bộ công cụ phân tích dữ liệu Python. | ✅ | ❌ | ✅ | ❌ | ✅* |
| Polars | Một thư viện DataFrame trên nền tảng một động cơ truy vấn OLAP. | ✅ | ✅ | ✅ | ❌ | ❌ |
| PyArrow | Apache Arrow là một định dạng cột và một bộ công cụ cho việc trao đổi dữ liệu nhanh và phân tích trong bộ nhớ. | ✅ | ✅ | ✅ | ❌ | ✅* |
| Spark | Công cụ xử lý dữ liệu quy mô lớn theo thời gian thực trong môi trường phân tán. | ✅ | ✅ | ✅ | ✅ | ✅ |
| WebDataset | Thư viện để viết các pipeline I/O cho các bộ dữ liệu lớn. | ✅ | ✅ | ❌ | ❌ | ❌ |
* Yêu cầu truyền các đối số bổ sung để ghi các tệp Parquet đã tối ưu
Các thư viện xử lý dữ liệu
Streaming
Dataset streaming cho phép lặp qua một dataset từ Hugging Face một cách tuần tự mà không cần tải về hoàn toàn. Nó tiết kiệm dung lượng ổ đĩa cục bộ vì dữ liệu không bao giờ được lưu trên đĩa. Nó tiết kiệm bộ nhớ vì chỉ một phần nhỏ của dataset được sử dụng tại một thời điểm. Và nó tiết kiệm thời gian, vì không cần phải tải dữ liệu trước khi thực hiện tác vụ trên CPU hoặc GPU.
Ngoài việc stream từ Hugging Face, nhiều thư viện cũng hỗ trợ stream trở lại Hugging Face. Do đó, chúng có thể chạy các pipeline stream end-to-end: stream từ một nguồn và ghi dần vào Hugging Face, thường là xen kẽ các bước tải xuống, tải lên và xử lý.
Để biết thêm chi tiết về cách thực hiện streaming, hãy xem tài liệu của một thư viện hỗ trợ streaming (xem bảng ở trên) hoặc tài liệu streaming datasets nếu bạn muốn tự stream các datasets từ Hugging Face.
Tệp Parquet được tối ưu
Các tệp Parquet trên Hugging Face được tối ưu hóa để cải thiện hiệu quả lưu trữ, tăng tốc quá trình tải xuống và tải lên, cũng như cho phép phát trực tiếp và chỉnh sửa bộ dữ liệu một cách hiệu quả.

Các tệp Parquet được tối ưu hóa là các tệp Parquet có thêm các tính năng sau:
- Phân chia chunk theo nội dung Parquet tối ưu hóa Parquet cho Xet, hệ thống lưu trữ phía sau của Hugging Face. Nó tăng tốc quá trình tải lên và tải xuống nhờ khử trùng lặp dựa trên chunk và cho phép chỉnh sửa tệp hiệu quả
- Chỉ mục trang (Page index) tăng tốc bộ lọc khi phát trực tiếp và cho phép truy cập ngẫu nhiên hiệu quả, ví dụ như trong Dataset Viewer
Một số thư viện yêu cầu thêm đối số để ghi các tệp Parquet đã tối ưu hóa như Pandas và PyArrow:
use_content_defined_chunking=Trueđể bật Parquet Content Defined Chunking, phục vụ cho loại bỏ trùng lặp và chỉnh sửawrite_page_index=Trueđể bao gồm chỉ mục trang trong metadata Parquet, phục vụ cho streaming và truy cập ngẫu nhiên
Các thư viện huấn luyện
Các thư viện huấn luyện tích hợp với bộ dữ liệu Hub để huấn luyện mô hình. Bảng dưới đây cho thấy khả năng streaming của chúng - khả năng huấn luyện trên các bộ dữ liệu mà không cần tải về trước.
| Thư viện | Mô tả | Truyền trực tiếp từ Hub |
|---|---|---|
| Axolotl | Khung tinh chỉnh LLM ít mã | ✅ |
| LlamaFactory | Tinh chỉnh thống nhất cho hơn 100 LLM | ✅ |
| Sentence Transformers | Nhúng văn bản và độ tương đồng ngữ nghĩa | ✅ |
| Transformers | 🤗 Trainer của Transformers để tinh chỉnh mô hình | ✅ |
| TRL | Huấn luyện LLM bằng học tăng cường (SFT, DPO, GRPO) | ⚠️* |
| Unsloth | Tinh chỉnh LLM nhanh (tăng tốc 2 lần, giảm 70% bộ nhớ) | ✅ |
* SFTTrainer và DPOTrainer hỗ trợ streaming; GRPOTrainer hiện chưa hỗ trợ đầu vào dạng streaming
Truyền trực tiếp từ Hub
Streaming cho phép huấn luyện trên các bộ dữ liệu khổng lồ mà không cần tải chúng về trước. Điều này có giá trị khi:
- Bộ dữ liệu của bạn quá lớn để lưu trữ trên đĩa
- Bạn muốn bắt đầu huấn luyện ngay lập tức
- Bạn đang sử dụng HF Jobs, nơi tính toán đồng vị trí cung cấp khả năng phát trực tiếp nhanh hơn
Những cải tiến gần đây đã giúp streaming hiệu quả hơn tới 100 lần nhờ khởi động nhanh hơn, prefetching tốt hơn và khả năng mở rộng tốt hơn cho nhiều worker.
Lưu ý: Streaming yêu cầu max_steps trong các đối số huấn luyện vì độ dài của tập dữ liệu không xác định, và sử dụng xáo trộn dựa trên bộ đệm. Xem streaming datasets để biết thêm chi tiết.
Ghi nhật ký vào Hub
Một số công cụ có thể truyền trực tiếp dữ liệu huấn luyện trở lại Hub trong quá trình huấn luyện:
- Trackio: Truyền các chỉ số huấn luyện đến một tập dữ liệu Hub theo thời gian thực
Tích hợp các thư viện và công cụ dữ liệu với Hub
Hướng dẫn này được thiết kế dành cho các nhà phát triển và người duy trì các thư viện và công cụ dữ liệu muốn tích hợp với Hugging Face Hub. Dù bạn đang xây dựng một thư viện xử lý dữ liệu, công cụ phân tích, hay bất kỳ phần mềm nào cần tương tác với các bộ dữ liệu, tài liệu này sẽ giúp bạn triển khai tích hợp Hub.
Hướng dẫn bao gồm:
- Các cách tiếp cận có thể để tải dữ liệu từ Hub vào thư viện/công cụ của bạn
- Các cách tiếp cận có thể để tải dữ liệu từ thư viện/công cụ của bạn lên Hub
Tải dữ liệu từ Hub
Nếu bạn có một thư viện để làm việc với dữ liệu, việc cho phép người dùng tải dữ liệu từ Hub có thể rất hữu ích.
Nhìn chung, chúng tôi khuyên bạn nên dựa vào một thư viện có sẵn như datasets, pandas hoặc polars để thực hiện việc này, trừ khi bạn có lý do cụ thể để tự triển khai. Nếu bạn cần kiểm soát nhiều hơn quá trình tải, bạn có thể sử dụng thư viện huggingface_hub, cho phép bạn, ví dụ, tải xuống một tập con cụ thể các tệp từ một kho lưu trữ.
Bạn có thể tìm thêm thông tin về việc tải dữ liệu từ Hub tại đây.
Tích hợp thông qua Dataset Viewer và các tệp Parquet
Trình xem dataset và hệ thống chuyển đổi Parquet của Hub cung cấp một cách tiếp cận chuẩn hóa để tích hợp với các dataset, bất kể định dạng gốc của chúng. Cơ sở hạ tầng này là một lớp tích hợp đáng tin cậy giữa Hub và các thư viện bên ngoài.
Nếu tập dữ liệu chưa ở định dạng Parquet, Hub sẽ tự động chuyển đổi 5GB đầu tiên của mọi tập dữ liệu sang định dạng Parquet để hỗ trợ trình xem tập dữ liệu và cung cấp các mẫu truy cập nhất quán. Việc chuẩn hóa này mang lại một số lợi ích cho các tích hợp thư viện:
- Mẫu truy cập dữ liệu nhất quán bất kể định dạng gốc
- Xem trước và khám phá bộ dữ liệu tích hợp thông qua trình xem bộ dữ liệu của Hub. Trình xem bộ dữ liệu cũng có thể được nhúng dưới dạng iframe trong các ứng dụng của bạn, giúp việc cung cấp các bản xem trước bộ dữ liệu phong phú trở nên dễ dàng. Để biết thêm thông tin về việc nhúng trình xem, hãy xem tài liệu nhúng trình xem bộ dữ liệu.
- Lưu trữ dạng cột hiệu quả, được tối ưu hóa cho truy vấn. Ví dụ, bạn có thể sử dụng một công cụ như DuckDB để truy vấn hoặc lọc một tập con dữ liệu cụ thể.
- Parquet được hỗ trợ tốt trên toàn hệ sinh thái học máy và khoa học dữ liệu.
Để biết thêm chi tiết về việc làm việc với Dataset Viewer API, hãy xem tài liệu Dataset Viewer API
Tải dữ liệu lên Hub
Phần này đề cập đến các cách tiếp cận có thể để thêm khả năng tải dữ liệu lên Hub trong thư viện của bạn, tức là cách triển khai phương thức push_to_hub.
Hướng dẫn này sẽ đề cập đến ba cách chính để tải dữ liệu lên Hub:
- sử dụng thư viện
datasetsvà phương thứcpush_to_hub - sử dụng
pandasđể ghi vào Hub - sử dụng thư viện
huggingface_hubvà phương thứcupload_folder
Sử dụng thư viện datasets
Cách đơn giản nhất để đẩy dữ liệu lên Hub là dựa vào phương thức push_to_hub có sẵn trong thư viện datasets. Phương thức push_to_hub sẽ tự động xử lý:
- việc tạo kho lưu trữ
- việc chuyển đổi bộ dữ liệu sang Parquet
- chia nhỏ bộ dữ liệu thành các phần phù hợp
- tải dữ liệu lên
Ví dụ, nếu bạn có một thư viện tạo dữ liệu tổng hợp trả về một danh sách các từ điển, bạn có thể đơn giản thực hiện các bước sau:
from datasets import Dataset
data = [{"prompt": "Write a cake recipe", "response": "Measure 1 cup ..."}]
ds = Dataset.from_list(data)
ds.push_to_hub("USERNAME_OR_ORG/repo_ID")Các ví dụ về loại tích hợp này:
Dựa vào tích hợp với Hub của các thư viện hiện có
Polars, Pandas, Dask, Spark, DuckDB và Daft đều có thể ghi vào một kho lưu trữ trên Hugging Face Hub. Xem bảng Libraries ở trên để biết thêm chi tiết.
Nếu bạn đã đang sử dụng một trong những thư viện này trong mã của mình, việc thêm khả năng đẩy lên Hub rất đơn giản. Ví dụ, nếu bạn có một thư viện tạo dữ liệu tổng hợp có thể trả về một Pandas DataFrame, đây là mã bạn cần viết để đẩy lên Hub:
from huggingface_hub import HfApi
# Initialize the Hub API
hf_api = HfApi()
# Create a repository (if it doesn't exist)
hf_api.create_repo(repo_id="username/my-dataset", repo_type="dataset", exist_ok=True)
# Convert your data to a DataFrame and save directly to the Hub
df.to_parquet("hf://datasets/username/my-dataset/data.parquet")Sử dụng thư viện Python huggingface_hub
Thư viện Python huggingface_hub cung cấp cách tiếp cận linh hoạt hơn để tải dữ liệu lên Hub. Thư viện cho phép bạn tải lên các tệp cụ thể hoặc các tập con của tệp lên một kho lưu trữ. Điều này hữu ích nếu bạn có một bộ dữ liệu lớn mà không muốn chuyển đổi sang Parquet, muốn tải lên một tập con tệp cụ thể, hoặc muốn kiểm soát nhiều hơn về cấu trúc kho.
Tùy thuộc vào trường hợp sử dụng của bạn, bạn có thể tải lên một tệp hoặc thư mục tại một điểm cụ thể trong mã của mình, ví dụ như xuất chú thích từ một công cụ lên Hub khi người dùng nhấp vào “push to Hub”. Ví dụ,
from huggingface_hub import HfApi
api = HfApi()
api.upload_folder(
folder_path="/my-cool-library/data-folder",
repo_id="username/my-dataset",
repo_type="dataset",
commit_message="Push annotations to Hub",
allow_patterns="*.jsonl",
)Bạn có thể tìm thêm thông tin về các cách tải dữ liệu lên Hub tại đây.
Ngoài ra, có những trường hợp bạn có thể muốn tải dữ liệu lên nền, chẳng hạn như dữ liệu tổng hợp được tạo ra mỗi 10 phút. Trong trường hợp này, bạn có thể sử dụng lớp CommitScheduler của thư viện huggingface_hub. Để biết thêm chi tiết, hãy xem tài liệu về tải lên theo lịch.
Bạn có thể xem một ví dụ về việc sử dụng cách tiếp cận này để tải dữ liệu lên Hub tại
Hỗ trợ thêm
Nếu có câu hỏi kỹ thuật về tích hợp, hãy liên hệ với nhóm datasets qua datasets@huggingface.co.
Update on GitHub