3 điểm bởi GN⁺ 2024-07-11 | 1 bình luận | Chia sẻ qua WhatsApp
  • Kho lưu trữ MobileLLM cung cấp mã huấn luyện cho bài báo ICML 2024 “MobileLLM: Optimizing Sub-billion Parameter Language Models for On-Device Use Cases”, đề cập đến thiết kế nhằm nâng cao chất lượng của các mô hình ngôn ngữ dưới 1 tỷ tham số
  • Thiết kế mô hình tích hợp SwiGLU, cấu trúc sâu và mỏng, chia sẻ embedding, cùng grouped-query attention để tạo nên MobileLLM
  • MobileLLM-125M/350M đạt mức cải thiện độ chính xác lần lượt 2,7%/4,3% so với các mô hình SoTA 125M/350M hiện có trong các tác vụ suy luận kiến thức phổ thông zero-shot; phiên bản cập nhật cũng cho kết quả SoTA ở các mức 600M/1B/1.5B
  • Mã huấn luyện yêu cầu Python 3.9 và PyTorch 2.0 trở lên; pretrain.sh khởi chạy bằng torchrun trên nút 1x8 GPU, và nếu tăng số nút hoặc kích thước batch thì cần tăng learning rate tuyến tính
  • Chi phí huấn luyện với 1T token trên 32 GPU NVIDIA A100 80G là khoảng 3 ngày cho 125M, khoảng 6 ngày cho 350M, khoảng 8 ngày cho 600M, khoảng 12 ngày cho 1B và khoảng 18 ngày cho 1.5B

Mục tiêu và phạm vi công bố của MobileLLM

  • MobileLLM là kho lưu trữ chứa mã huấn luyện để tối ưu hóa mô hình ngôn ngữ dưới một tỷ tham số cho các trường hợp sử dụng trên thiết bị
  • Bài báo nền tảng là MobileLLM: Optimizing Sub-billion Parameter Language Models for On-Device Use Cases, được công bố tại ICML 2024
  • Mục tiêu cốt lõi là xem xét tổng hợp nhiều yếu tố thiết kế để tạo ra LLM chất lượng cao ngay cả khi có dưới 1 tỷ tham số

Các yếu tố thiết kế mô hình

  • MobileLLM tích hợp các yếu tố thiết kế sau
    • Hàm kích hoạt SwiGLU
    • Kiến trúc sâu và mỏng
    • Chia sẻ embedding

      • grouped-query attention
      • Trong phiên bản cập nhật, triết lý thiết kế này được trình bày là có thể mở rộng sang các mô hình lớn hơn, và cho thấy kết quả SoTA ở MobileLLM-600M/1B/1.5B

Công bố và tin tức về các mô hình kế tiếp

  • Ngày 30/10/2024, mô hình MobileLLM được công bố trên HuggingFace
  • Tháng 9/2025, công trình kế tiếp MobileLLM-R1 được công bố
    • Với khoảng 2T token tiền huấn luyện và tổng dưới 5T token, mô hình đạt ngang bằng hoặc vượt kết quả 36T token của Qwen3-0.6B trên MATH, GSM8K, MMLU và LiveCodeBench
    • Mã, mô hình, dữ liệu và công thức huấn luyện được công bố
    • Có cung cấp bộ sưu tập HuggingFace
  • Tháng 11/2025, MobileLLM-R1.5 được công bố
    • MobileLLM-R1.5-950M vượt DeepSeek-R1-Distill-Qwen-1.5B trên tất cả benchmark toán học và lập trình được đánh giá
    • Số tham số ít hơn: 0.95B so với 1.5B
  • Tháng 1/2026, MobileLLM-R1 được nhận vào ICLR 2026

Cấu hình chạy và huấn luyện

  • Yêu cầu gồm Python 3.9, PyTorch 2.0 trở lên, pip install -r requirement.txt
  • Tiền xử lý dữ liệu được thực hiện bằng cách chia tập dữ liệu đã token hóa hoặc token hóa tập dữ liệu riêng, rồi phân phối theo tổng số nút huấn luyện
    • Mỗi nút gồm 1x8 GPU
    • Cấu trúc dữ liệu là đặt các tệp xxx.jsonl dưới basepath/1, basepath/2, ..., basepath/#nodes
    • Mỗi dòng jsonl là cặp khóa-giá trị dữ liệu đã token hóa ở dạng {"token_ids": [1,2,3,4,...]}
    • Mã huấn luyện tương thích với cách tiền xử lý dữ liệu của LLM360/amber-data-prep
  • pretrain.sh là script khởi chạy huấn luyện bằng torchrun trong cấu hình nút 1x8
    • Có thể chỉnh --nnodes và các thiết lập khác cho phù hợp với cấu hình đa nút như Slurm hoặc TorchX
    • Learning rate trong script dựa trên cấu hình nút 1x8 và batch size 32
    • Nếu tăng số nút hoặc batch size thì cần tăng tuyến tính learning rate
  • Quy trình chạy là chỉ định --train_data_local_path trong pretrain.sh trỏ tới dữ liệu đã tiền xử lý, đặt --input_model_filename thành ./configs/{model_size}/, rồi chạy bash pretrain.sh
  • Đánh giá Wiki được chạy bằng cách tải mô hình, cập nhật đường dẫn checkpoint trong eval.sh, rồi chạy bash eval.sh

Chi phí huấn luyện

  • Khi huấn luyện MobileLLM với 1T token, thời gian cần thiết trên 32 GPU NVIDIA A100 80G như sau
    • 125M: khoảng 3 ngày
    • 350M: khoảng 6 ngày
    • 600M: khoảng 8 ngày
    • 1B: khoảng 12 ngày
    • 1.5B: khoảng 18 ngày

Kết quả suy luận kiến thức phổ thông zero-shot

  • MobileLLM-125M đạt 46.3 trung bình trên arc_easy, arc_challenge, boolq, piqa, siqa, hellaswag, obqa, winogrande
    • OPT-125M đạt 42.6, GPT-neo-125M đạt 42.9, Pythia-160M đạt 42.5
    • MobileLLM-LS-125M đạt trung bình 47.0
  • MobileLLM-350M đạt trung bình 51.3
    • OPT-350M đạt 43.9, Pythia-410M đạt 46.6
    • MobileLLM-LS-350M đạt trung bình 52.1
  • MobileLLM-600M đạt trung bình 54.3
    • Qwen1.5-500M đạt 48.8, BLOOM-560M đạt 44.2, MobiLlama-800M đạt 50.7
  • MobileLLM-1B đạt trung bình 57.3
    • Pythia-1B đạt 48.7, MobiLlama-1B đạt 55.2, Falcon-1B đạt 56.3, BLOOM-1.1B đạt 46.9, TinyLlama-1.1B đạt 54.2
  • MobileLLM-1.5B đạt trung bình 59.4
    • GPT-neo-1.3B đạt 50.6, OPT-1.3B đạt 52.3, BLOOM-1.7B đạt 49.6, Qwen1.5-1.8B đạt 56.5
    • GPT-neo-2.7B đạt 52.8, OPT-2.7B đạt 55.1, Pythia-2.8B đạt 55.8, BLOOM-3B đạt 52.3

Dự án liên quan và giấy phép

  • Mã được xây dựng một phần dựa trên kho Transformers của HuggingFace, kho này sử dụng Apache License
  • Các dự án liên quan được nêu gồm
    • SpinQuant: LLM Quantization with Learned Rotations, ICLR 2025 — Paper, Code
    • LLM-QAT: Data-Free Quantization Aware Training for Large Language Models — Paper, Code
  • Các bước tiếp theo được nêu là MobileLLM-R1 và mô hình MobileLLM-R1.5
  • MobileLLM hiện sử dụng giấy phép FAIR NC

1 bình luận

 
GN⁺ 2024-07-11
Ý kiến trên Hacker News
  • Các mô hình nhỏ đã được cải thiện đôi chút, nhưng dường như vẫn còn thiếu để dùng cho cùng mục đích như các mô hình trực tuyến. Dù vậy, bản thân sự tiến bộ từng bước cũng là điều tốt.
    Mô hình 1,5 tỷ tham số trông như một bước nhảy khá lớn, và cũng thắng các mô hình lớn hơn với chênh lệch đáng kể. Không rõ vì sao họ không làm lớn hơn nữa. Một mô hình hiệu quả hơn, chạy được trên phần cứng cỡ Raspberry Pi, có thể thay đổi cuộc chơi. Theo trí nhớ của tôi thì TinyLlama 7B cũng chỉ vừa đủ chạy được

    • Các mô hình ngôn ngữ nhỏ hơn cũng có vẻ hữu ích như một phần của hệ thống nhận dạng giọng nói. Trong tình huống mơ hồ hoặc có nhiễu, mô hình ngôn ngữ có thể giúp thu hẹp xem từ nào đã được nói
    • Hãy tưởng tượng một mô hình như thế được nhúng vào ứng dụng Instagram và được dùng cho nhắm mục tiêu quảng cáo bằng tính toán trên thiết bị của người dùng. Khi đó Facebook có thể xem được nhiều dữ liệu hơn nhiều với chi phí thấp hơn và rủi ro kiện tụng thấp hơn nhiều.
      Với trường hợp sử dụng này, so sánh mô hình nhỏ với mô hình đám mây là không công bằng. Chỉ cần độ chính xác của mô hình nhỏ tăng lên một chút cũng có ý nghĩa, và có thể trực tiếp chuyển thành doanh thu
    • Không chắc Raspberry Pi có phải mục tiêu phù hợp cho bước tiếp theo của LLM cục bộ hay không; việc triển khai qua web bằng các engine như WebLLM cũng đáng cân nhắc https://github.com/mlc-ai/web-llm
      Ngay cả nếu mô hình 7B “chạy tốt” trên Raspberry Pi, cá nhân tôi vẫn thấy mô hình 7B hơi lớn để tải xuống và chạy trong một giao diện dựa trên web. Trong khi đó, một mô hình 125M ổn có thể chạy trong trang web, và thời gian tải xuống cũng như chi phí băng thông cho trình duyệt cục bộ không quá lớn
    • Llama-3-8b chạy tốt trên Raspberry Pi
  • Nhất thiết phải chỉ ở trên thiết bị di động sao? Tuy là một ngách, nhưng nếu không ngốn nhiều tài nguyên, có vẻ có thể dùng trong game để làm đối thoại NPC thú vị hơn.
    Tốt hơn nữa là nếu có thể tinh chỉnh theo cách nào đó để cuộc đối thoại ảnh hưởng đến hành vi hoặc hành động của NPC

    • Cuộc đối thoại đó có thật sự thú vị không? Có thể tăng khối lượng hội thoại, nhưng tôi nghi ngờ liệu có nền tảng nào khiến người chơi thấy hứng thú không. Ví dụ dân làng có thể nói về phong cảnh địa phương hoặc quan hệ với NPC khác, nhưng những thứ họ mô tả có thể không thật sự tồn tại trong game. Cá nhân tôi sẽ thấy kỳ lạ nếu NPC bắt đầu bịa ra những thứ không có.
      Có thể hình dung việc huấn luyện LLM bằng dữ liệu game để NPC mô tả đúng thế giới game thực tế. Nhưng không rõ cần quy mô đến mức nào thì việc đó mới rẻ hơn so với để người viết lời thoại. Có lẽ ở quy mô như Ubisoft thì khả thi. Theo tôi biết, Ubisoft cũng đã nghiên cứu dùng AI để viết, nhưng chủ yếu cho các mục đích rất lặp lại và gần như chỉ là tiếng ồn, chẳng hạn các câu hô trong lúc chiến đấu
    • Nếu NPC có thêm nhiều cốt truyện nền và hành vi phức tạp hơn thì sẽ thú vị. Tuy nhiên, vì bất cứ thứ gì cũng có thể ảnh hưởng đến hành vi, việc kiểm thử có lẽ gần như bất khả thi
  • Hiện có ứng dụng nào chạy được các mô hình như thế này trên iPhone không? Tôi chỉ biết MLC, nhưng trong đó chỉ có 3 mô hình cũ

    • APK Android của MLC được cập nhật thường xuyên với các mô hình gần đây được tích hợp sẵn. Trên Samsung S24+, cả mô hình 7~8B cũng có thể chạy thoải mái ở tốc độ hợp lý, khoảng 10 token/giây.
      https://llm.mlc.ai/docs/deploy/android.html
    • Tôi đã đưa một ứng dụng dựa trên mlc-llm lên App Store, hỗ trợ hơn 20 mô hình, bao gồm cả các mô hình gần đây
    • cnvrs chạy GGUF trên iOS: https://testflight.apple.com/join/ERFxInZg
    • Các mô hình MLC cũng có ở đây: https://huggingface.co/mlc-ai
  • Tôi tò mò có thể đẩy cách làm sâu hơn và mỏng hơn đến mức nào. Đến một lúc nào đó, khi toàn bộ FFN vừa vào L2 cache, có lẽ sẽ xuất hiện một vùng mà hiệu năng tăng khá mạnh

    • Một nghiên cứu khác của Meta FAIR gợi ý rằng để tăng hiệu năng mà vẫn giữ độ chính xác, ngược lại cần phải cắt tỉa các tầng sâu https://arxiv.org/html/2403.17887v1
      Nếu vậy, hẳn phải có một giới hạn đối với các mạng nhỏ mà cách tiếp cận này còn hiệu quả. Nếu không thì các kết quả mâu thuẫn nhau. Hoặc cũng có thể điều đó có nghĩa là các mô hình mới này còn có thể được cải thiện hơn nhiều
    • Tôi nhớ đến kết quả trong bài báo EfficientT5 của Google https://arxiv.org/abs/2109.10686. Ở đó họ gọi cách này là “DeepNarrow”
  • Không biết tôi có bỏ lỡ gì không, nhưng những thứ như chưng cất tri thức chẳng phải sẽ giúp ích ở đây sao?

    • Trong bài báo có nói họ đã thử điều đó: https://arxiv.org/abs/2402.14905
      Deep link HTML đến phần liên quan: https://ar5iv.labs.arxiv.org/html/2402.14905#S3.SS5
      “Cho đến nay, chúng tôi đã huấn luyện các mô hình nhỏ từ đầu bằng cách dùng token kế tiếp làm nhãn cứng. Chúng tôi cũng đã khảo sát chưng cất tri thức (KD)... Đáng tiếc là KD làm tăng thời gian huấn luyện (chậm hơn 2,6~3,2 lần) và cho độ chính xác tương đương hoặc thấp hơn so với huấn luyện dựa trên nhãn (xem phụ lục để biết chi tiết).”
  • Hiện tôi thật sự cần nhận dạng giọng nói kiểu wake-word ngay trên thiết bị. Mô hình nào chạy được trên Raspberry Pi 4B mà có WER thấp nhất? Tôi đang xem openWakeWord cho một hệ thống kiểm kê DIY

  • Có vẻ với các mô hình nhỏ, cách giảm kích thước nhiều nhất là chia sẻ embedding/buộc trọng số giữa head tuyến tính và embedding token. Tôi tò mò liệu có nghiên cứu nào đang tiếp tục giảm thêm ở chỗ đó không

    • Nếu ý là LM-head chỉ là ma trận embedding bị đảo lại, thì việc đó đã được làm trong GPT-2 rồi
      Đáng tiếc là thứ tôi tìm được về chuyện này chỉ là các mô hình lớn được lợi từ một tầng riêng. Tuy nhiên đó là điều tôi thấy đâu đó trên Discord nên không có bài báo để đọc, và theo trực giác cá nhân thì nó cũng nên hoạt động với các mô hình lớn. Dù sao thì GPT-3 rốt cuộc cũng chỉ là GPT-2 được phóng to lên
      Trong các thử nghiệm cá nhân, khi giao cho mô hình nhiệm vụ khó hơn thì nó học tốt hơn. Trọng số bị buộc có thể là một trong những thứ như vậy, dự đoán nhiều token cũng có thể như vậy, và bitnet cũng có thể được nhìn theo cách đó. Dropout cũng tương tự
  • Nếu trên desktop không phải là AI tạo sinh mà chỉ là AI desktop thì sao. Sẽ rất tuyệt nếu nó sắp xếp tất cả tệp, email, ghi chú của tôi và cho phép tìm kiếm thông tin trong dữ liệu của tôi

  • Hay đấy. Có thể dùng cái này để huấn luyện mô hình cho PC Windows không? RAM không nhiều

    • Huấn luyện mô hình không phụ thuộc vào hệ điều hành. RAM tùy theo kích thước, và với cỡ này thì tôi nghĩ sẽ dễ fine-tune hơn nhiều với ít GPU RAM hơn
      Dù vậy, mục tiêu cuối cùng nhiều khả năng vẫn là tải các mô hình như thế này xuống, hoặc trả chi phí fine-tuning rồi nhận về, sau đó dùng chúng thông qua chip mạng nơ-ron đã được tối ưu
      Hiện giờ vấn đề gần như chỉ là khi nào điều đó xảy ra. Chứng nhận Windows mới nhất cũng đã yêu cầu một loại chip mạng nơ-ron nào đó, và Google Pixel 8 Pro của tôi cũng có thể host một mô hình nhỏ. Pixel không phải điện thoại rẻ, nhưng bộ đồng xử lý chắc chắn sẽ rẻ hơn nhiều so với GPU lớn
  • Dù thú vị, tôi vẫn tò mò ngoài tự động hoàn thành tốt hơn thì nó dùng vào việc gì

    • Có lẽ có thể fine-tune cho các tác vụ trong phạm vi hẹp như tiny-agent https://bair.berkeley.edu/blog/2024/05/29/tiny-agent/
      Tôi thích cách tiếp cận mà Apple có vẻ đang theo đuổi. Các tác vụ hằng ngày do một mô hình nhỏ đã được fine-tune xử lý, còn những việc nó không đủ tự tin thì chuyển cho mô hình lớn ngoài thiết bị. Có thể tạo một tập huấn luyện gồm các ví dụ mà mô hình nên đưa ra câu trả lời có độ tin cậy thấp, rồi thêm một đầu ra về cơ bản tương đương với “yêu cầu trợ giúp” để huấn luyện nó chọn phương án đó. Với mô hình nhỏ, cũng có thể chạy nhiều mô hình song song, rồi để một mô hình khác định tuyến yêu cầu tới chuyên gia phù hợp
    • Những việc như đọc email, trả lời email, lên lịch, dùng API của dịch vụ
      Về cơ bản là mọi tác vụ cần hành động chứ không phải kiến thức. Bạn nói “báo cho vợ tôi là tôi sẽ đến muộn”, rồi nó xử lý bằng cách nói chuyện với dịch vụ nào đó theo một cách kỳ diệu đã được thiết lập
      Siri làm tự động hóa nhà khá tốt ngay cả khi không có Internet, nhưng Google Assistant đời trước và Alexa thì hoàn toàn không như vậy, và tôi nghĩ chúng cũng chưa từng làm được offline. Điều này cho phép có một trợ lý hoạt động tốt theo hướng ưu tiên cục bộ
    • Một agent cục bộ kiểu Siri có thể xử lý các tác vụ đơn giản và định tuyến các yêu cầu phức tạp hơn
    • Có thể fine-tune cho các tác vụ liên quan đến thiết bị. Nói cách khác, một mô hình nhỏ về cơ bản cũng có thể sử dụng mọi chức năng mà ứng dụng hoặc dịch vụ trên thiết bị có
      Nó có thể chuyển yêu cầu của người dùng dưới dạng ngôn ngữ tự nhiên tới ứng dụng tương ứng và điều phối các ứng dụng. Những yêu cầu vượt quá chức năng của thiết bị có thể được gửi lên mô hình đám mây. Điều này mạnh mẽ vì nó có thể thay đổi cách ta tương tác với thiết bị
    • Tôi đã thử Google AI trên điện thoại, và khi mở trình duyệt rồi yêu cầu nó đọc trang, nó trả lời rằng không thể truy cập Internet
      Trợ lý AI tôi muốn là 1) hiểu tiếng Anh và tiếng mẹ đẻ của tôi, 2) biết rằng nó đang chạy trên Android hoặc KDE/Linux và hiểu các lệnh như “mở phần Ứng dụng trong Cài đặt Android”, “đọc trang đang mở trong trình duyệt”, “đọc văn bản trong popup đang mở hiện tại”, đồng thời phải được tích hợp với hệ điều hành qua API công khai. Các công ty AI lớn có thể cạnh tranh bằng cách bán trợ lý tốt hơn, đặc biệt cho người dùng đa ngôn ngữ
      3) Mô hình phải nhỏ và không cần biết kiến thức như địa lý, lịch sử hay các ban nhạc. Chỉ cần có tùy chọn chuyển các tác vụ người dùng hỏi sang công cụ tìm kiếm hoặc LLM trực tuyến