Hugging Face ra mắt Storage Buckets: Giải pháp lưu trữ linh hoạt cho Machine Learning

Hugging Face vừa giới thiệu Storage Buckets, một giải pháp lưu trữ đối tượng tương tự S3 được thiết kế riêng cho các tệp trung gian trong quy trình Machine Learning. Tính năng này giúp giải quyết những hạn chế của Git đối với các dữ liệu thay đổi thường xuyên như checkpoint, logs, và các bộ dữ liệu đã qua xử lý, mang lại tốc độ và hiệu quả cao hơn.
Hugging Face ra mắt Storage Buckets: Giải pháp lưu trữ linh hoạt cho Machine Learning
Các kho chứa (repository) Models và Datasets trên Hugging Face Hub là công cụ tuyệt vời để phát hành các sản phẩm cuối cùng. Tuy nhiên, quy trình Machine Learning trong thực tế lại liên tục tạo ra một luồng các tệp trung gian (như checkpoint, trạng thái optimizer, các phân mảnh dữ liệu đã xử lý, logs, traces, v.v.). Các tệp này thường xuyên thay đổi, được tạo ra từ nhiều tác vụ cùng lúc và hiếm khi cần đến việc quản lý phiên bản.
Storage Buckets được xây dựng để giải quyết chính xác vấn đề này: một không gian lưu trữ đối tượng linh hoạt (mutable), tương tự như S3, mà bạn có thể duyệt trên Hub, điều khiển bằng script Python, hoặc quản lý thông qua giao diện dòng lệnh (CLI) hf. Và bởi vì được xây dựng trên nền tảng Xet, chúng đặc biệt hiệu quả cho các tệp trung gian trong ML có nội dung trùng lặp giữa các tệp.
Khi Git không còn là lựa chọn tối ưu
Việc sử dụng Git nhanh chóng cho thấy sự bất cập khi bạn phải xử lý:
- Các cụm máy huấn luyện (training clusters) liên tục ghi checkpoint và trạng thái optimizer trong suốt quá trình chạy.
- Các luồng xử lý dữ liệu (data pipelines) xử lý lặp đi lặp lại các bộ dữ liệu thô.
- Các Agent lưu trữ dấu vết (traces), bộ nhớ (memory) và các biểu đồ tri thức dùng chung.
Nhu cầu lưu trữ trong tất cả các trường hợp này đều giống nhau: ghi nhanh, ghi đè khi cần, đồng bộ hóa thư mục, xóa các tệp cũ và duy trì luồng công việc một cách trôi chảy.
Storage Buckets là gì?
Một Bucket là một vùng chứa lưu trữ không được quản lý phiên bản trên Hub. Nó tồn tại dưới không gian tên của người dùng hoặc tổ chức, tuân thủ các quyền truy cập tiêu chuẩn của Hugging Face, có thể ở chế độ riêng tư hoặc công khai, có một trang riêng để bạn mở trên trình duyệt và có thể được truy cập theo chương trình thông qua một định danh như hf://buckets/username/my-training-bucket.
Sức mạnh từ công nghệ Xet
Buckets được xây dựng trên Xet, hạ tầng lưu trữ dựa trên các khối dữ liệu (chunk-based) của Hugging Face, và điều này quan trọng hơn vẻ bề ngoài.
Thay vì xem các tệp là những khối dữ liệu đơn nhất (monolithic blobs), Xet chia nhỏ nội dung thành các "chunk" và thực hiện chống trùng lặp dữ liệu giữa chúng. Khi bạn tải lên một bộ dữ liệu đã xử lý có phần lớn nội dung tương tự bộ dữ liệu thô, nhiều chunk đã tồn tại sẵn. Khi bạn lưu trữ các checkpoint kế tiếp nhau mà phần lớn trọng số của mô hình không thay đổi, câu chuyện cũng tương tự. Buckets sẽ bỏ qua việc tải lên những byte đã có, giúp giảm băng thông, tăng tốc độ truyền tải và lưu trữ hiệu quả hơn.
Đây là một sự kết hợp tự nhiên cho các tác vụ ML. Các quy trình huấn luyện liên tục tạo ra các họ tệp có liên quan — dữ liệu thô và đã xử lý, các checkpoint kế tiếp, dấu vết của Agent và các bản tóm tắt được suy ra — và Xet được thiết kế để tận dụng sự chồng chéo đó.
Đối với khách hàng Doanh nghiệp, chi phí được tính dựa trên dung lượng lưu trữ đã được chống trùng lặp, vì vậy các chunk được chia sẻ sẽ trực tiếp làm giảm chi phí. Công nghệ chống trùng lặp giúp cải thiện cả tốc độ và chi phí.
Lưu trữ toàn cầu và tính năng "Làm nóng trước" (Pre-warming)
Buckets tồn tại trên Hub, đồng nghĩa với việc lưu trữ mang tính toàn cầu theo mặc định. Tuy nhiên, không phải tác vụ nào cũng có thể kéo dữ liệu từ một vị trí bất kỳ. Đối với huấn luyện phân tán và các quy trình quy mô lớn, vị trí lưu trữ ảnh hưởng trực tiếp đến thông lượng.
Tính năng "Làm nóng trước" (Pre-warming) cho phép bạn đưa dữ liệu cần dùng đến gần hơn với nhà cung cấp đám mây và khu vực nơi tài nguyên tính toán của bạn đang chạy. Thay vì dữ liệu phải di chuyển qua các khu vực mỗi lần đọc, bạn chỉ cần khai báo nơi bạn cần nó và Buckets sẽ đảm bảo dữ liệu đã sẵn sàng ở đó khi tác vụ của bạn bắt đầu. Điều này đặc biệt hữu ích cho các cụm máy huấn luyện cần truy cập nhanh vào các bộ dữ liệu lớn hoặc checkpoint, và cho các thiết lập đa khu vực nơi các phần khác nhau của quy trình chạy trên các đám mây khác nhau.
Chúng tôi đang hợp tác với AWS và GCP để bắt đầu, và sẽ hỗ trợ thêm nhiều nhà cung cấp đám mây khác trong tương lai.
Bắt đầu với CLI
Bạn có thể tạo và vận hành một bucket trong vòng chưa đầy 2 phút với hf CLI. Đầu tiên, hãy cài đặt và đăng nhập:
curl -LsSf https://hf.co/cli/install.sh | bash
hf auth login
Tạo một bucket cho dự án của bạn:
hf buckets create my-training-bucket --private
Giả sử tác vụ huấn luyện của bạn đang ghi các checkpoint vào thư mục cục bộ ./checkpoints. Hãy đồng bộ thư mục đó vào Bucket:
hf buckets sync ./checkpoints hf://buckets/username/my-training-bucket/checkpoints
Đối với các lần truyền dữ liệu lớn, bạn có thể muốn xem trước những gì sẽ xảy ra. Cờ --dry-run sẽ in ra kế hoạch mà không thực thi:
hf buckets sync ./checkpoints hf://buckets/username/my-training-bucket/checkpoints --dry-run
Bạn cũng có thể lưu kế hoạch ra một tệp để xem xét và áp dụng sau:
hf buckets sync ./checkpoints hf://buckets/username/my-training-bucket/checkpoints --plan sync-plan.jsonl
hf buckets sync --apply sync-plan.jsonl
Sau khi hoàn tất, hãy kiểm tra Bucket từ CLI:
hf buckets list username/my-training-bucket -h
Hoặc duyệt trực tiếp trên Hub tại https://huggingface.co/buckets/username/my-training-bucket.
Tích hợp với Python và hệ sinh thái
Mọi thao tác trên cũng hoạt động từ Python thông qua thư viện huggingface_hub (có sẵn từ phiên bản v1.5.0). API tuân theo cùng một mẫu: tạo, đồng bộ, kiểm tra.
from huggingface_hub import create_bucket, list_bucket_tree, sync_bucket
create_bucket("my-training-bucket", private=True, exist_ok=True)
sync_bucket(
"./checkpoints",
"hf://buckets/username/my-training-bucket/checkpoints",
)
for item in list_bucket_tree(
"username/my-training-bucket",
prefix="checkpoints",
recursive=True,
):
print(item.path, item.size)
Điều này giúp việc tích hợp Buckets vào các kịch bản huấn luyện, luồng xử lý dữ liệu hoặc bất kỳ dịch vụ nào quản lý các tệp trung gian một cách lập trình trở nên đơn giản. Thư viện Python cũng hỗ trợ tải lên hàng loạt, tải xuống có chọn lọc, xóa và di chuyển bucket khi bạn cần kiểm soát chi tiết hơn.
Buckets cũng hoạt động thông qua HfFileSystem, hệ thống tệp tương thích với fsspec trong huggingface_hub. Điều này có nghĩa là bạn có thể liệt kê, đọc, ghi và tìm kiếm nội dung Bucket bằng các thao tác hệ thống tệp tiêu chuẩn — và bất kỳ thư viện nào hỗ trợ fsspec đều có thể truy cập Buckets trực tiếp.
from huggingface_hub import hffs
# Liệt kê các tệp trong một thư mục của bucket
hffs.ls("buckets/username/my-training-bucket/checkpoints", detail=False)
# Tìm kiếm các tệp cụ thể
hffs.glob("buckets/username/my-training-bucket/**/*.parquet")
# Đọc trực tiếp một tệp
with hffs.open("buckets/username/my-training-bucket/config.yaml", "r") as f:
print(f.read())
Vì fsspec là giao diện Python tiêu chuẩn cho các hệ thống tệp từ xa, các thư viện như pandas, Polars và Dask có thể đọc và ghi vào Buckets bằng cách sử dụng đường dẫn hf:// mà không cần thêm bất kỳ thiết lập nào:
import pandas as pd
# Đọc một tệp CSV trực tiếp từ Bucket
df = pd.read_csv("hf://buckets/username/my-training-bucket/results.csv")
# Ghi kết quả trở lại
df.to_csv("hf://buckets/username/my-training-bucket/summary.csv")
Điều này giúp dễ dàng kết nối Buckets vào các quy trình làm việc với dữ liệu hiện có mà không cần thay đổi cách mã của bạn đọc hoặc ghi tệp.
Tầm nhìn tương lai
Buckets là nơi lưu trữ nhanh chóng và linh hoạt cho các tệp trung gian khi chúng vẫn đang trong quá trình xử lý. Một khi một thứ gì đó trở thành một sản phẩm ổn định, nó thường thuộc về một kho chứa model hoặc dataset được quản lý phiên bản.
Trong lộ trình phát triển, chúng tôi dự định hỗ trợ việc chuyển dữ liệu trực tiếp giữa Buckets và các kho chứa theo cả hai chiều: đưa các trọng số checkpoint cuối cùng vào kho chứa model, hoặc commit các phân mảnh dữ liệu đã xử lý vào kho chứa dataset sau khi một quy trình hoàn tất. Lớp làm việc và lớp phát hành vẫn tách biệt, nhưng khớp nối với nhau thành một quy trình làm việc liên tục và nguyên bản trên Hub.
Lời kết
Storage Buckets mang đến một lớp lưu trữ còn thiếu cho Hugging Face Hub. Chúng cung cấp cho bạn một không gian nguyên bản trên Hub cho khía cạnh linh hoạt, thông lượng cao của ML: checkpoint, dữ liệu đã xử lý, dấu vết của Agent, logs và mọi thứ khác hữu ích trước khi chúng trở thành sản phẩm cuối cùng.
Được xây dựng trên nền tảng Xet, Buckets không chỉ dễ sử dụng hơn việc ép buộc mọi thứ qua Git, mà còn hiệu quả hơn đối với các loại tệp trung gian liên quan mà các hệ thống AI liên tục tạo ra. Điều đó có nghĩa là truyền tải nhanh hơn, chống trùng lặp tốt hơn, và trên các gói Doanh nghiệp, chi phí được hưởng lợi từ dung lượng lưu trữ đã được tối ưu hóa.
Nguồn: Hugging Face Blog

