Hugging Face: Blog
67

Sản phẩm

Chạy tác vụ AI trên mọi nền tảng đám mây với SkyPilot và lưu trữ không tốn phí egress tại Hugging Face

(giờ Việt Nam)

Tóm tắt AI

SkyPilot tích hợp với Hugging Face cho phép người dùng chạy các tác vụ AI trên nhiều hạ tầng đám mây khác nhau mà không phải trả phí truyền tải dữ liệu (egress), giúp tối ưu chi phí và đơn giản hóa quy trình triển khai.

Bản dịch AI

Quay lại các bài viết

Đối với hầu hết các nhóm, các mô hình và tập dữ liệu thường nằm trong một bucket thuộc một vùng của một nền tảng đám mây duy nhất. Các GPU mà bạn có thể tiếp cận, dù là cho mục đích phát triển, huấn luyện hay phục vụ (serving), ngày càng nằm trên một nền tảng đám mây khác với nơi lưu trữ dữ liệu của bạn. Ngay khi hai thành phần này tách rời, bạn phải trả một khoản phí chuyển dữ liệu liên đám mây (cross-cloud transfer tax) chỉ để đọc dữ liệu của chính mình vào GPU của mình.

Cùng với Hugging Face, chúng tôi đã kết nối hai nửa này lại với nhau: các mô hình và tập dữ liệu của bạn vẫn nằm trên Hub, còn SkyPilot sẽ chạy các tác vụ tính toán (phát triển, huấn luyện hoặc phục vụ) trên bất kỳ cụm máy chủ nào có GPU. Bạn chỉ cần mount một Hugging Face Bucket hoặc bất kỳ repo nào trên Hub vào một tác vụ SkyPilot bằng một URL hf:// và HF_TOKEN mà bạn đã có, sau đó khởi chạy nó ở bất cứ nơi nào có tài nguyên. Hugging Face không tính phí egress (phí truyền dữ liệu ra ngoài), vì vậy việc đọc dữ liệu vào các GPU đó hoàn toàn miễn phí, trên bất kỳ nền tảng đám mây nào.

Đây là những điểm mới:

Hugging Face Storage hiện đã trở thành một backend hạng nhất của SkyPilot.

Các tác vụ của SkyPilot vốn đã có thể đọc và ghi vào các kho lưu trữ đối tượng đám mây (S3, GCS, Azure, R2 và nhiều loại khác) bằng cách mount chúng vào một đường dẫn cục bộ. Hugging Face Storage hiện đã gia nhập danh sách đó với tư cách là store: hf, được truy cập thông qua scheme hf://:

Scheme hf:// duy nhất đó bao phủ toàn bộ vòng đời: đọc mô hình và tập dữ liệu từ các repo của chúng, ghi các checkpoint vào một Bucket trong khi bạn huấn luyện, xuất bản mô hình đã hoàn thiện trở lại repo và kéo nó về các máy chủ suy luận (inference servers) khi bạn phục vụ. Hầu hết các nhóm đã lưu trữ mô hình và tập dữ liệu của họ trên Hub, vì vậy không cần bước di chuyển dữ liệu hay tạo tài khoản lưu trữ mới.

MOUNT sử dụng backend FUSE hf-mount của Hugging Face, vì vậy một bucket hoặc repo sẽ hiển thị như một đường dẫn cục bộ bên cạnh các mount FUSE khác của SkyPilot (gcsfuse, blobfuse2, rclone, goofys). Việc tìm nạp dữ liệu diễn ra ở tầng hệ thống tệp: khi mã của bạn thực hiện lệnh read(), driver chỉ kéo đúng các byte đó từ backend Xet, vì vậy chỉ những dữ liệu bạn thực sự chạm vào mới đi qua mạng. Ngoài ra, hf-mount duy trì một bộ nhớ đệm trên đĩa (on-disk cache) để các lần đọc lặp lại vẫn giữ được tốc độ cục bộ. Bộ nhớ đệm trên đĩa đó là hành vi mà SkyPilot cung cấp cho các backend khác dưới chế độ MOUNT_CACHED, trong khi MOUNT thông thường sẽ truyền phát mọi lần đọc từ bucket mà không lưu giữ gì cục bộ. Đối với store hf, MOUNT và MOUNT_CACHED hoạt động giống hệt nhau, vì vậy cả hai chế độ đều duy trì bộ nhớ đệm.

Vì các lần đọc là "lười" (lazy), một tiến trình có thể bắt đầu xử lý một tệp lớn trước khi toàn bộ tệp được tải xuống, thay vì phải chờ đợi việc sao chép toàn bộ tệp trước. Điều đó giúp GPU hoạt động gần như ngay lập tức, huấn luyện trên dữ liệu khi nó được truyền phát vào thay vì để GPU nhàn rỗi (và vẫn bị tính phí) trong khi tập dữ liệu hoặc checkpoint đang sao chép xuống. Điều này mang lại hiệu quả cao nhất ở epoch đầu tiên, khi chưa có gì được lưu trong bộ nhớ đệm. COPY đi theo hướng khác và tải xuống thông qua huggingface_hub ngay từ đầu, không có yêu cầu đặc biệt nào.

Xác thực được thực hiện bằng token mà bạn đã có. Hãy thiết lập HF_TOKEN trong môi trường của bạn và truyền nó vào một lần chạy với --secret HF_TOKEN; SkyPilot sẽ sử dụng nó để mount trên bất kỳ nền tảng đám mây nào mà công việc được thực thi. Một token duy nhất hoạt động bất kể công việc đó chạy trên AWS, GCP, Azure, Nebius, Lambda hay cụm Kubernetes của riêng bạn, vì vậy bạn không cần phải quản lý các khóa bucket riêng cho từng nền tảng đám mây.

Không phí egress: lưu trữ không còn quyết định nơi bạn chạy tác vụ

Tài nguyên GPU hiếm khi đến từ một nơi duy nhất. Để có đủ H100 và H200, các nhóm thường giữ tài nguyên đã đặt trước và cam kết trên nhiều nhà cung cấp cùng lúc (một khối trên hyperscaler, một cụm trên neocloud, hoặc có thể là một rack tại chỗ) và chạy ở bất cứ nơi nào họ có phân bổ. SkyPilot được xây dựng cho điều này: một đặc tả công việc (job spec), được lập lịch trên hơn 20 nền tảng đám mây, Kubernetes và hạ tầng tại chỗ, chạy trên bất kỳ cụm máy chủ nào đang rảnh rỗi.

Lưu trữ đối tượng (Object storage) từng là rào cản. Các kho lưu trữ đối tượng thường theo vùng và theo từng nền tảng đám mây, vì vậy việc cung cấp dữ liệu cho một GPU hoặc một máy chủ suy luận nằm trong trung tâm dữ liệu của nhà cung cấp khác đồng nghĩa với việc hoặc là phải giữ một bản sao dữ liệu của bạn trong bucket của mọi nhà cung cấp, hoặc phải trả phí để kéo dữ liệu qua lại. Hầu hết các nền tảng đám mây đều tính phí egress (khoảng $0.09/GB khi ra khỏi AWS) ngay khi dữ liệu rời khỏi mạng của họ, và thường là cả giữa các vùng trong cùng một nền tảng đám mây. Việc kéo một mô hình cơ sở về mọi node suy luận, hoặc lặp lại một tập dữ liệu qua nhiều epoch từ một cụm trên đám mây khác, sẽ cộng thêm một hóa đơn nặng nề bên cạnh chi phí GPU mà bạn đã đặt trước. Các nhóm cuối cùng phải gắn chặt mỗi lần chạy vào nhà cung cấp đang giữ dữ liệu và để phần tài nguyên còn lại của họ nhàn rỗi.

Hugging Face Storage loại bỏ chi phí đó ở nơi nó gây ảnh hưởng nhất: phía đọc dữ liệu. Với việc không có phí egress hay phí CDN và chi phí lưu trữ ở mức $12-18/TB/tháng (so với AWS S3 ở mức khoảng $23/TB cộng thêm phí egress), cùng một bucket có thể truy cập được từ mọi cụm máy chủ đó, và việc đọc từ đó là miễn phí bất kể GPU chạy ở đâu. Việc ghi dữ liệu trở lại vẫn tốn phí egress thông thường của nền tảng đám mây tính toán của bạn, giống như bất kỳ kho lưu trữ ngoài đám mây nào khác, nhưng đối với hầu hết các công việc AI, các thao tác đọc chiếm ưu thế: một tập dữ liệu được truyền phát qua nhiều epoch, hoặc trọng số mô hình được kéo về mọi node huấn luyện hoặc suy luận mới. Vì vậy, bạn không còn phải gắn chặt mỗi lần chạy vào nhà cung cấp đang giữ bản sao dữ liệu nữa.

Một bài kiểm tra hiệu năng nhanh

Để thu thập một số con số hiệu năng, chúng tôi đã chạy một quá trình tinh chỉnh (fine-tune) nhỏ: Qwen/Qwen3.5-4B trên tập dữ liệu HuggingFaceH4/Multilingual-Thinking với SFTTrainer của TRL, mount mô hình ở chế độ chỉ đọc từ repo Hub của nó và ghi mọi checkpoint vào một Hugging Face Bucket. Cùng một tệp YAML của SkyPilot đã chạy trên AWS, GCP và Lambda, chỉ thay đổi tham số --infra. SkyPilot đã đặt mỗi công việc vào nơi có GPU rảnh rỗi, và cả ba đều đọc và ghi vào cùng một bucket.

Những gì chúng tôi đã đo lường:

Trên mỗi nền tảng đám mây, các checkpoint được ghi vào bucket với tốc độ:

Lưu trữ dựa trên Xet: khử trùng lặp (dedup) cho các checkpoint và các biến thể mô hình

Hugging Face Buckets được xây dựng trên Xet, sử dụng kỹ thuật phân đoạn dựa trên nội dung (content-defined chunking) để chia tệp thành các đoạn ~64 KB và lưu trữ mỗi đoạn duy nhất một lần. Vì các ranh giới phân đoạn tuân theo nội dung, một chỉnh sửa chỉ làm thay đổi các đoạn mà nó tác động, còn các phần còn lại được nhận diện là đã được lưu trữ. Điều này mang lại lợi ích ở một vài khía cạnh:

Mức độ tiết kiệm phụ thuộc vào mức độ trùng lặp của các tệp tin (artifacts) của bạn, nhưng việc khử trùng lặp là tự động: bạn ghi một checkpoint như bình thường, và chỉ những đoạn mới mới rời khỏi máy.

Bắt đầu

Thêm một mount hf:// vào bất kỳ tác vụ SkyPilot nào và khởi chạy. MOUNT yêu cầu một image cơ sở với glibc 2.34+ và /dev/fuse.

Được xây dựng cùng nhau: Hugging Face và SkyPilot

Hỗ trợ store: hf ban đầu là một đóng góp từ Nikhil Jha. Đội ngũ Hugging Face đã tiếp tục phát triển và đưa các bản sửa lỗi FUSE cho hf-mount vào upstream, cho phép nó mount trong các container không đặc quyền (unprivileged containers) - vốn là mặc định trên nhiều cụm Kubernetes. Đội ngũ SkyPilot đã tích hợp nó vào backend lưu trữ. Toàn bộ lộ trình này đều là mã nguồn mở: SkyPilot, hf-mount của Hugging Face và client huggingface_hub.

Tài nguyên

SkyPilotHugging FaceCloud AITối ưu chi phíHạ tầng AI
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Hugging Face: Blog. Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.