(2025) Push model lên Huggingface

TL;DR: note lại cách push model lên Huggingface bằng cơm & bằng máy.

Đặt vấn đề (chỉ đúng với người nghèo như mỗ): thường sau khi train model xong mỗ sẽ lưu model weight (final weight/best checkpoints) & config xuống Google Drive, hoặc, lưu trong notebook output của Kaggle, lúc cần inference thì cứ load lên rồi xài. Chỉ có một vấn đề to-bự: mỗi lần load model là một lần mỗ phải căng não tìm đúng đường dẫn tới model (Google Drive) hoặc phải load đúng cái notebook đã lưu (Kaggle). 

Hướng giải quyết là upload lên một repository trên Huggingface (Húc-rinh-phây), mỗi lần cần xài thì cứ download về rồi xài. Khi đó model của anh chị em sẽ lưu dưới đường dẫn username/reponame, chỉ cần dẫn đúng đường dẫn vào là hoan-hỉ. Bài viết ngắn này mỗ chỉ mong sao hướng dẫn được anh chị em tới nơi tới chốn, quần-chúng nhân-dân nào cũng push được model lên Huggingface mà không tốn quá nhiều neural não. 

Chánh-yếu: tạo Huggingface token

Chuyện hiển-nhiên xưa giờ là phải có access token hợp lệ thì mới kéo/đẩy dữ liệu lên account của mình được. Anh chị em vô https://huggingface.co/settings/tokens (có thể yêu cầu nhập password) xong nhấn Create token.

Ở trang nầy anh chị em lẹ tay lẹ chân đặt tên cho access token, nhớ chọn mục Write thì token mới hợp lệ để đẩy data lên. Giả-dụ anh chị em có một repository Huggingface private thì tạo access token để download cũng y chang, nhưng nhớ chọn mục Read.

  • Nếu anh chị em thắc mắc là cái màn hình nầy ở đâu ra/password ở đâu ra thì coi lại coi mình có account Huggingface chưa. Chưa có thì tạo, đơn giản vô cùng, anh chị em có thể xài Gúc-gồ, Míc-rô-xốp hay Gít-húp đặng đăng-nhập một-lần đều oke. 
  • Access token generate ra chỉ hiện đúng một lần - nên copy vô Notepad/lưu liền vô Colab/Kaggle để sau nầy còn xài - nếu không mắc công xóa tạo lại -> rất phiền. Cái nầy là policy của Huggingface, họ có cái lí của riêng họ, mình .. không ý kiến được.

Push model bằng HfApi (Húc-rinh-phây Ây-pi-ai)

Ngon cơm nhất khúc nầy là anh chị em xài HfApi: train xong hết rồi thì dùng ây-pi-ai tải hết đống file lên Húc, không cần tư duy nhiều. Anh chị em chịu khó nhấn vô link đã đưa, kéo chuột đọc hết documentation là thao tác ngon lành. Đại thể cái anh chị em cần làm tựa tựa như vầy:


Tuy nhiên cách nầy có mấy điểm trừ to-bự:

  • Thứ nhứt, anh chị em nhớ lên Huggingface tạo repository trước thì mới có repo_id đặng mà xài. Tạo repository thì có thể tạo trên web (nhấn nút) hoặc theo cái link mỗ mới đưa để .. tạo bằng API.
  • Thứ nhì, anh chị em phải train xong, có save model thì mới có đường dẫn ở local đặng mà upload lên (!) - cái này quá hiển-nhiên nên thôi, không nói nhiều.
  • Cuối nhưng chưa chót, giả sử anh chị em train một lúc 11 cái model thì phải ngồi viết code upload từng cái lên, hoặc siêu việt hơn thì phải chèn code upload ở cuối script train. Thành ra mình lại có mấy cái mục tiếp theo.

Ngoài việc dùng HfApi thì anh chị em có thể làm theo thời nguyên-thủy là vô web rồi kéo-thả. Cái này cơ-bản quá nên mỗ không đề cập ở đây.

Push thần tốc, táo bạo với TrainingArgument (Rên-ninh Ác-gu-men)

Đây là một tính năng của class Trainer. Nếu anh chị em chưa biết class Trainer xài để làm gì thì nên đọc qua documentation (tóm tắt nhanh gọn: thằng Trainer sẽ hỗ trợ tận răng cho anh chị em train model ngon lành hơn giữa thời buổi vươn mình).

Anh chị em sẽ config mấy cái tương tự như cách upload bằng HfApi, nhưng ở đây nó gọn & lẹ hơn. Mình sẽ config thêm mấy argument trong TrainingArgument, trước khi gọi Trainer train model:


Trong đó anh chị em chú ý cho mỗ cái argument hub_strategy - cách xài chi tiết anh chị em đọc cụ thể ở đây. Tóm tắt gọn lẹ mấy lời như sau:

  • Set "end" thì Trainer sẽ upload cục weight cuối cùng lên repository, tuy nhiên anh chị em phải gọi Trainer.save_model. Không là train cho mãn kiếp cuối cùng cái repository chỉ có đúng 1 file .gitattributes (mà xui rủi dính trúng thì anh chị em cứ dùng HfApi upload lên bình thường)      
  • Set "every_save" (default) sẽ update cục weight lên repository sau mỗi training step. Hệ quả đau lòng là nhiều khi anh chị em chỉ muốn save cục checkpoint ngon lành nhất, tuy nhiên sau mỗi step training là nó bị overwrite mẹ mất. Lời khuyên là anh chị em cẩn thận set load_best_model_at_end=True để cục checkpoint ngon nhất được load lên ở step cuối, sau đó gọi Trainer.push_to_hub để upload cục nầy lên repository. Tuy nhiên cách nầy cũng .. phiền, thà vậy set "end" mẹ đi cho lẹ, đỡ tốn neural não.
  • Set "checkpoint" hay "all_checkpoint" sẽ upload checkpoint lên theo folder, cái nầy tốn space trời thần nên mỗ thường không đụng, nhưng anh chị em sẽ cần nếu muốn lưu checkpoint để train tiếp.

Điểm cộng của cách nầy so với cách upload bằng cơm ở trên, là nếu cái repository chưa tồn-tại trên cõi-đời thì Trainer sẽ call API tạo mới. Nếu ô kê thì anh chị em sẽ có cái repository tương tự như nầy. Cái model card sẽ được update tự động nếu anh chị em set hub_strategy là "end" (hoặc "every_save" & push_to_hub như mỗ đã bày). Giờ muốn xài thì cứ AutoModel mà phang thôi ..

Còn giả sử anh chị em thấy ngại xài TrainingArgument, vậy thì tới lúc train xong anh chị em cứ gọi thẳng Trainer.push_to_hub như bước cuối lúc xài "every_save" là được.

Kết bài

Trên đây là mấy ý mỗ tổng hợp nhanh gọn lẹ cho anh chị em tác-chiến theo kiểu mì ăn liền. Cũng có mấy cái chú ý cho anh chị em:

  • Mỗ hướng dẫn anh chị em push model lên public repository, nếu anh chị em muốn push lên private repository thì nhờ anh chị em đọc forum. Anh chỉ em cũng lưu ý là tiêu-chuẩn mỗi account chỉ có 100GB private storage, vượt quá là tính tiền. Trong khi đó anh chị em lại được tạo & upload model lên public repository không giới-hạn. Do vậy nếu model không nhậy-cảm thì mỗ khuyên anh chị em để public cho đỡ tốn private storage.
  • Thường nếu anh chị em không động chạm gì tới cái tokenizer (với các task NLP) thì Trainer sẽ ếu upload nó lên, muốn upload thì anh chị em phải upload bằng cơm. Cách upload anh chị em đọc cái nầy (tóm tắt gọn lẹ: cứ push_to_hub là ô kê).

Cũng nói luôn, nếu anh chị em có GPU xài thả ga, disk space vô-hạn và tài chánh dư-dả: tiền bạc đối với anh chị em như lá mít thì anh chị em có thể bỏ qua bài nầy. Như mỗ đã nói, vì mỗ nghèo (kèm dỏm, dốt, yếu kém, phản cảm, hê hê) nên mới phải tối-ưu mấy cái miễn-phí đang có.

Cuối lời, cầu ơn trên gia-hộ cho mỗ và anh chị em cùng thoát khỏi cơn điên mùa xoài mang tên ây-ai, mờ-lờ nầy.

Mùa Hạ năm 2025 Dương lịch.

Comments