Sao lưu model Hugging Face: đừng chỉ tải bản mới nhất trên nhánh main

Muốn sao lưu model Hugging Face thành một bản có thể tái lập, hãy phân giải repository về full commit hash, tải toàn bộ snapshot tại revision đó, lưu metadata kiểm kê và thử nạp lại từ kho độc lập. Chỉ tải bản mới nhất trên nhánh main không đáp ứng mục tiêu này, vì main có thể trỏ sang commit khác sau một lần cập nhật.
Tài liệu tải file của Hugging Face cho biết snapshot_download tải cả repository tại một revision, mặc định lấy revision mới nhất, còn commit hash phải được truyền ở dạng đầy đủ thay vì chuỗi rút gọn bảy ký tự. Vì vậy, bản sao cần gắn với commit bất biến; tên nhánh hoặc tag chỉ nên đóng vai trò thông tin tham chiếu.
1. Kiểm kê repository trước khi tải

Trước tiên, ghi lại repo ID, loại repository, revision nguồn và phạm vi quyền truy cập. Model, dataset và Space sử dụng các loại repo khác nhau; với dataset, các lệnh của huggingface_hub cần tham số repo_type="dataset".
Chạy hf download tổ-chức/tên-repo --dry-run để xem danh sách file, kích thước và phần dữ liệu chưa có trong cache. Kết quả này giúp phát hiện nhiều biến thể trọng số, các shard cùng file index, hoặc những tài sản lớn có thể bị bỏ sót nếu lọc bằng allow_patterns và ignore_patterns.
Danh mục kiểm kê nên bao gồm:
- trọng số model, toàn bộ shard và file index tương ứng;
- config, tokenizer, vocabulary, generation config và mã tùy chỉnh nếu repository có sử dụng;
- README.md, LICENSE, .gitattributes và tài liệu vận hành đi kèm;
- dataset hoặc base model được model card tham chiếu nếu mục tiêu là phục hồi cả pipeline;
- repo ID, repo type, full commit hash và phiên bản công cụ tải.
Không nên loại file chỉ vì chúng chưa được dùng trong môi trường hiện tại. Nếu cần giảm dung lượng, hãy ghi rõ từng mẫu bị loại và chứng minh rằng cấu hình cần phục hồi không phụ thuộc vào chúng.
2. Khóa revision và tách thông tin xác thực

Nếu đầu vào là main, một nhánh khác hoặc tag, hãy phân giải ref đó thành commit hash trước khi tải. Với Python, có thể lấy HfApi().model_info(REPO_ID, revision="main").sha; với dataset, dùng dataset_info. Chép nguyên giá trị trả về vào manifest rồi sử dụng chính hash đó cho bước tải snapshot.
Repository riêng tư hoặc gated chỉ tải được khi tài khoản có quyền phù hợp. hướng dẫn xác thực của huggingface_hub mô tả lệnh hf auth login, token chỉ đọc và biến môi trường HF_TOKEN; với tác vụ sao lưu không cần ghi dữ liệu lên Hub, quyền đọc là lựa chọn có phạm vi hẹp hơn.
Manifest có thể là JSON hoặc tệp văn bản, nhưng phải đọc được độc lập với cache. Tối thiểu, nó nên chứa repo_id, repo_type, ref ban đầu, resolved_commit, phiên bản huggingface_hub, thời điểm tạo bản sao và quy tắc lọc nếu có. Không ghi access token vào manifest: thông tin xác thực cần được quản lý riêng và có thể thay đổi mà không làm thay đổi danh tính snapshot.
3. Tải snapshot vào kho độc lập
Sau khi có hash, gọi snapshot_download(repo_id=REPO_ID, revision=COMMIT, local_dir=DEST). Với dataset, thêm repo_type="dataset". Tham số local_dir giữ cấu trúc thư mục gốc trong thư mục đích, thuận tiện cho việc đóng gói và chuyển sang ổ đĩa, object storage hoặc máy chủ khác.
Không chỉnh sửa trực tiếp snapshot sau khi tải. Nếu cần thay đổi config hoặc bổ sung mã nội bộ, hãy lưu phần sửa đổi bên ngoài và ghi quan hệ của nó với commit gốc. Sau đó tạo danh sách đường dẫn, kích thước và checksum SHA-256 cho từng file; commit hash xác định revision trên Hub, còn checksum giúp phát hiện hỏng hoặc thiếu dữ liệu trong những lần sao chép tiếp theo.
Giữ nguyên README.md, LICENSE và các file cấu hình có trong repository. Chúng có thể chứa mô tả cách dùng, giới hạn, giấy phép, base model hoặc dataset liên quan; chỉ có file trọng số chưa đủ để xác định điều kiện vận hành và nguồn gốc của tài sản.
4. Phân biệt snapshot với bản sao lịch sử Git
Snapshot đóng băng nội dung tại một commit nhưng không phải bản sao đầy đủ của lịch sử Git. Nếu mục tiêu là tái lập một lần huấn luyện hoặc triển khai cụ thể, một snapshot đầy đủ tại commit đã khóa thường phù hợp hơn. Nếu cần kiểm toán nhiều revision, hãy lưu thêm Git metadata, các branch và tag cần thiết, đồng thời ghi danh sách ref trong manifest.
Đối với dataset, hướng dẫn tải dataset của Hugging Face xác nhận các repository này dùng Git với backend Xet và có thể được clone cục bộ sau khi cài Git Xet. Khi lịch sử là yêu cầu bắt buộc, hãy cài git xet, clone repository, fetch các ref cần lưu rồi checkout từng commit quan trọng để xác nhận dữ liệu lớn thực sự có thể được dựng lại.
Một Git mirror có thể bảo toàn ref và object Git nhưng không nên được coi là bằng chứng duy nhất rằng mọi nội dung lớn ở mọi revision đã sẵn sàng ngoại tuyến. Cách kiểm tra thực tế là materialize những commit phải phục hồi, đối chiếu file với danh sách kiểm kê và lưu chúng trong tầng lưu trữ độc lập.
5. Thử khôi phục trong môi trường sạch

Bản sao chỉ hoàn tất sau khi vượt qua bài thử phục hồi. Chép snapshot và manifest sang thư mục hoặc máy sạch, vô hiệu hóa truy cập mạng nếu quy trình cho phép, rồi nạp model bằng đường dẫn cục bộ và chế độ chỉ dùng file local. Kiểm tra tokenizer, config, toàn bộ shard trọng số và mã tùy chỉnh cần thiết; với dataset, mở dữ liệu và xác nhận schema hoặc feature mà pipeline yêu cầu.
Tiếp theo, đối chiếu checksum, tổng số file và kích thước với manifest. Ghi lại phiên bản Python, framework, transformers, datasets cùng các thư viện chuyên biệt thực sự cần để nạp tài sản. Các dependency này có thể không nằm trong repository, vì vậy lockfile hoặc image môi trường nên được lưu cạnh snapshot nhưng tách khỏi nội dung nguyên bản.
Một bản sao có thể tái lập phải trả lời được bốn câu hỏi: dữ liệu đến từ repository nào, được khóa tại commit nào, đã có đủ file lớn và metadata hay chưa, và có phục hồi được mà không truy cập lại nhánh main hay không. Nếu chưa kiểm chứng được một trong bốn điểm này, đó mới là bản tải xuống phục vụ sử dụng trước mắt, chưa phải bản sao độc lập.
Đọc thêm:
Đăng ký bản tin
Nhận tin Web3, AI và tiền mã hóa mới nhất ngay trong hộp thư.