8 điểm bởi GN⁺ 2024-01-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • rasbt/LLMs-from-scratch là kho mã chứa code để xây dựng, tiền huấn luyện, tinh chỉnh một LLM tương tự GPT, đồng thời là kho mã chính thức cho cuốn sách Manning Build a Large Language Model (From Scratch)
  • Cách học được tổ chức như một quá trình tạo ra một mô hình nhỏ nhưng hoạt động được từ đầu nhằm mục đích giáo dục, theo luồng tiếp cận tương tự cách xây dựng các mô hình nền tảng quy mô lớn đứng sau ChatGPT
  • Nội dung cung cấp mã và notebook theo từng chương, từ xử lý dữ liệu văn bản, cơ chế attention, triển khai GPT, tiền huấn luyện với dữ liệu không gán nhãn, tinh chỉnh cho phân loại văn bản, đến tinh chỉnh theo chỉ dẫn
  • Mã của các chương chính được thiết kế để chạy trong thời gian hợp lý trên laptop thông thường, tự động tận dụng GPU khi có thể, và được triển khai bằng PyTorch mà không cần thư viện LLM bên ngoài
  • Phụ lục và tài liệu bonus mở rộng sang LoRA, KV Cache, MoE, triển khai họ Llama/Qwen/Gemma, đánh giá, DPO và cả ví dụ UI, giúp mở rộng quá trình học LLM theo hướng thực hành

Mục đích của kho mã và mối liên hệ với cuốn sách

  • rasbt/LLMs-from-scratch là kho mã để triển khai một LLM tương tự GPT từ con số 0
  • Đây là kho mã chính thức của cuốn sách Manning Build a Large Language Model (From Scratch)
  • Cuốn sách được xây dựng để giúp hiểu cách LLM hoạt động bên trong thông qua việc viết code từng bước
    • Phần giải thích bao gồm văn bản, sơ đồ và ví dụ
    • Người học sẽ trực tiếp phát triển và huấn luyện một mô hình nhỏ nhưng hoạt động được, phục vụ mục đích giáo dục
  • Kho mã cũng bao gồm code để nạp trọng số mô hình tiền huấn luyện lớn hơn rồi tinh chỉnh
  • Thông tin sách:

Cài đặt và sử dụng mã nguồn

  • Có thể tải kho mã qua ZIP hoặc bằng git clone
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
  • Nếu nhận gói code từ website Manning, tài liệu hướng dẫn khuyên kiểm tra các bản cập nhật mới nhất trên kho chính thức GitHub
  • Việc cài đặt Python, package và cấu hình môi trường chạy code được trình bày tại setup/README.md
  • Tài liệu xử lý sự cố được cung cấp tại Troubleshooting Guide

Lộ trình học theo từng chương

Kiến thức nền và môi trường chạy

  • Kiến thức nền quan trọng nhất là cơ bản về lập trình Python
  • Nếu có kinh nghiệm với mạng nơ-ron deep learning, một số khái niệm sẽ quen thuộc hơn
  • Mã được triển khai hoàn toàn từ đầu bằng PyTorch mà không dùng thư viện LLM bên ngoài
    • Không bắt buộc phải thành thạo PyTorch
    • Kiến thức cơ bản về PyTorch sẽ hữu ích
    • Appendix A cung cấp phần giới thiệu ngắn gọn về PyTorch
  • Mã của các chương chính được thiết kế để chạy trong thời gian hợp lý trên laptop thông thường
  • Không cần phần cứng chuyên dụng; nếu có GPU thì sẽ tự động sử dụng

Video khóa học và cuốn sách tiếp theo

  • Manning cũng có khóa video đi kèm dài 17 giờ 15 phút đi theo cấu trúc của cuốn sách
    • Phản ánh cấu trúc chương và mục của sách
    • Có thể dùng như một lựa chọn độc lập hoặc tài liệu bổ sung để vừa học vừa code theo
  • Bài viết cũng giới thiệu cuốn sách tiếp theo Build A Reasoning Model (From Scratch)
    • Đây là một cuốn sách độc lập nhưng có thể xem là phần tiếp nối của Build A Large Language Model (From Scratch)
    • Bắt đầu từ mô hình tiền huấn luyện và triển khai các cách tiếp cận nhằm cải thiện năng lực suy luận
    • Các hướng tiếp cận gồm: inference-time scaling, reinforcement learning, distillation
    • Kho mã liên quan: rasbt/reasoning-from-scratch

Bài tập và tài liệu bonus

  • Mỗi chương đều có nhiều bài tập
  • Lời giải được tóm tắt trong Appendix C, còn notebook code tương ứng nằm trong thư mục của từng chương
  • Có thể tải miễn phí bản PDF 170 trang Test Yourself On Build a Large Language Model (From Scratch) từ website Manning
    • Bao gồm khoảng 30 câu hỏi trắc nghiệm theo từng chương cùng đáp án
  • Các chủ đề bonus chính

    • Setup:
    • Mẹo thiết lập Python
    • Cài đặt package và thư viện
    • Cấu hình môi trường Docker
    • Ch 2:
    • Triển khai tokenizer BPE từ đầu
    • So sánh nhiều cách triển khai BPE
    • Sự khác biệt giữa embedding layer và linear layer
    • Trực giác về dataloader bằng các con số đơn giản
    • Ch 3:
    • So sánh các cách triển khai multi-head attention hiệu quả
    • Hiểu về PyTorch buffers
    • Ch 4:
    • Phân tích FLOPs
    • KV Cache
    • Grouped-Query Attention, Multi-Head Latent Attention, Sliding Window Attention
    • Gated DeltaNet, DeepSeek Sparse Attention, Cross-Layer KV Sharing
    • Mixture-of-Experts
    • Ch 5:
    • Các cách nạp trọng số thay thế
    • Tiền huấn luyện trên bộ dữ liệu Project Gutenberg
    • Cải thiện vòng lặp huấn luyện
    • Tối ưu siêu tham số
    • UI để tương tác với LLM tiền huấn luyện
    • Chuyển GPT sang Llama
    • Nạp trọng số mô hình theo cách tiết kiệm bộ nhớ
    • Mở rộng tokenizer BPE của Tiktoken
    • Mẹo hiệu năng PyTorch để huấn luyện LLM nhanh hơn
    • Triển khai Llama 3.2, Qwen3, Gemma 3, Olmo 3, Tiny Aya, Qwen3.5, Gemma 4
    • Ch 6:
    • Thử nghiệm bổ sung với việc tinh chỉnh các layer khác và các mô hình lớn hơn
    • Tinh chỉnh phân loại trên bộ dữ liệu 50k đánh giá phim IMDb
    • UI cho bộ phân loại spam dựa trên GPT
    • Ch 7:
    • Tiện ích dataset để phát hiện gần trùng lặp và tạo mục ở thể bị động
    • Đánh giá phản hồi chỉ dẫn bằng OpenAI API và Ollama
    • Tạo và cải thiện dataset tinh chỉnh theo chỉ dẫn
    • Tạo preference dataset bằng Llama 3.1 70B và Ollama
    • Triển khai căn chỉnh LLM bằng DPO
    • UI cho mô hình GPT đã tinh chỉnh theo chỉ dẫn

Đóng góp và trích dẫn

  • Có thể gửi phản hồi và câu hỏi qua Manning Forum hoặc GitHub Discussions
  • Vì đây là kho mã đi kèm với sách in, hiện tại dự án không thể nhận các đóng góp mở rộng nội dung của main chapter code
    • Mục tiêu của giới hạn này là tránh tạo ra khác biệt giữa sách giấy và mã nguồn
  • Nếu cuốn sách hoặc mã nguồn hữu ích cho nghiên cứu, tác giả khuyến nghị trích dẫn
    • Có cung cấp trích dẫn theo chuẩn Chicago và mục BibTeX

1 bình luận

 
GN⁺ 2024-01-28
Ý kiến trên Hacker News
  • Tôi đang viết một cuốn guidebook làm tài liệu bổ sung, nhưng vẫn đang hoàn thiện qua nhiều giai đoạn
    Cho đến nay, hướng dẫn fine-tuning có vẻ là tài liệu tốt nhất
    https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
  • Trông thật sự rất tuyệt. Tôi tò mò mục tiêu chính là tăng cường hiểu biết và gỡ bỏ sự thần bí hóa, hay là giúp mọi người tự tạo các mô hình nhỏ phù hợp với nhu cầu của họ
    • Động lực chính gần với mục đích giáo dục hơn: giúp mọi người hiểu LLM hoạt động như thế nào bằng cách tự tay xây dựng chúng
      LLM là một chủ đề quan trọng, nhưng có nhiều video và bài viết chỉ lướt qua. Tôi nghĩ việc code một LLM từ nền tảng sẽ làm rõ rất nhiều khái niệm
      Mục tiêu phụ cũng là giúp những ai cần có thể tạo LLM của riêng mình. Trong sách, tôi code toàn bộ pipeline, bao gồm pretraining và fine-tuning, nhưng vì xét về tài chính thì pretrain một LLM là không thực tế, nên tôi cũng sẽ trình bày cách tải trọng số đã pretrain
      Tôi dùng một LLM tương tự GPT-2 để triển khai mọi thứ từ đầu, và cho phép tải trọng số từ mô hình 124M chạy được trên laptop đến mô hình 1558M chạy trên GPU nhỏ. Trong thực tế có lẽ người ta sẽ dùng các framework như HF transformers hoặc axolotl, nhưng tôi hy vọng cách tự triển khai này sẽ khiến quy trình bớt giống một hộp đen hơn
  • Viết công khai một cuốn sách kỹ thuật chắc hẳn là việc gây bất an đến mức khó tưởng tượng, xin vỗ tay cho tác giả
    • Ở một mức nào đó thì đúng, nhưng đồng thời cũng khá tạo động lực :)
    • Thậm chí rủi ro có thể còn thấp hơn. Vì bạn có thể nhận được lợi ích của việc viết sách mà không cần thực sự hoàn thành cuốn sách. Lý tưởng thì có khi không cần viết nhiều hơn chương 1
  • Nếu ví dụ code đầu tiên là import torch, thì có vẻ không hoàn toàn là triển khai từ đầu nhỉ :-)
    • Đúng là vậy, nhưng nếu không thì sẽ dài dòng và khó đọc. Dù vậy, trong sách tôi vẫn chỉ ra cách triển khai LayerNorm, Softmax, tầng Linear, GeLU... mà không dùng phiên bản torch đóng gói sẵn
    • Nhờ tự động vi phân mà ta có thể xây dựng các mô hình phức tạp như Transformer. Ngoài dữ liệu khổng lồ và tài nguyên tính toán rất lớn, có thể xem đây là một trong những lý do cốt lõi khiến cuộc cách mạng AI hiện nay trở thành khả thi
      Không ai làm trong lĩnh vực này lại tính đạo hàm của các mô hình như vậy bằng tay. Tư duy theo góc nhìn lập trình khả vi là tiền đề cơ bản, và trong trường hợp này có thể xem là đủ “từ đầu”
      Mỗi lần thấy những bình luận như vậy, tôi lại nghi ngờ rằng người viết không thật sự hiểu bên trong đang diễn ra điều gì, hoặc machine learning hiện đại vận hành ra sao
    • Tôi cho rằng triển khai autograd không liên quan nhiều và nằm ngoài phạm vi khi học cách Transformer hoạt động. Tôi không thể tưởng tượng việc viết gradient của Transformer bằng tay
  • Tôi tưởng đây là tài liệu miễn phí nên vào thẳng GitHub. Tôi tôn trọng công sức của tác giả, nhưng muốn biết có tài liệu miễn phí nào đáng giới thiệu theo kiểu triển khai từ đầu không
    • Neural Networks: Zero to Hero của Andrej Karpathy[1]
      [1] https://karpathy.ai/zero-to-hero.html
    • engine suy luận GPT-2 viết bằng NumPy tại https://jaykmody.com/blog/gpt-from-scratch/, rồi để thêm triển khai KV cache thì xem https://www.dipkumar.dev/becoming-the-unbeatable/posts/gpt-k...
    • Tôi khuyên dùng https://course.fast.ai/
      Dễ tiếp cận hơn nhiều với lập trình viên nói chung và không giả định nền tảng toán học. Đây là điểm khởi đầu tốt, sau đó các tài liệu tương tự khác sẽ bắt đầu dễ hiểu hơn
    • Thành thật mà nói, tôi khó hiểu vì sao một người làm trong lĩnh vực AI lại cảm thấy $50 là quá nhiều để có được hiểu biết sâu hơn về chủ đề này
      Việc tạo tài liệu giáo dục tốn một lượng công sức vô lý, và dù cuốn sách này có thành công đến đâu, nếu rasbt tính thu nhập theo thời gian bỏ ra thì mức theo giờ cũng sẽ chẳng hợp lý
      Có nhiều người hiểu chủ đề này, nhưng họ đã làm gì với kiến thức đó? Họ giữ cho riêng mình, vào OpenAI và kiếm nhiều tiền hơn rất nhiều bằng cách giữ kiến thức không công khai
      Nếu muốn sống trong một thế giới nơi kiến thức như vậy được mở ra, tôi nghĩ ít nhất cũng nên tránh công khai phàn nàn về một cuốn sách có giá tương đương một bữa tối ổn
    • Tôi đã thêm các ghi chú giải thích vào Jupyter notebook, nên hy vọng chỉ riêng repository cũng có thể đọc độc lập được
  • Tôi tò mò liệu có thể học học tăng cường từ nội dung của cuốn sách này không
    Mục tiêu là khiến một thứ gì đó học cách hạ cánh, giống như tàu đổ bộ Mặt Trăng. Đơn giản là bắt đầu ở độ cao 100 feet, tạo lực đẩy theo một hướng và cứ thử tiếp cho đến khi tạo ra ít miệng hố hơn
    Sau đó tôi muốn mở rộng bằng cách thêm các biến như di chuyển ngang, thêm động cơ đẩy ngang, rồi sau đó loại bỏ động cơ đẩy ngang và cho phép tàu đổ bộ xoay
    Tôi hoàn toàn không biết nên bắt đầu từ đâu, và vì cuốn sách này trông giống machine learning “chính thống” nên tôi thắc mắc liệu nó có giúp ích không
    • Tôi đã đọc khá thích "Grokking Deep Reinforcement Learning"[0]. Nó không có nội dung về Transformer
      Thư viện gymnasium[1] của Python có môi trường tàu đổ bộ Mặt Trăng, bạn nên tham khảo. Đó là môi trường tôi tập trung nhiều nhất khi học, và tôi đã giải nó theo vài cách
      Bạn cũng có thể xem notebook của tôi2 viết khi triển khai Soft Actor Critic bằng PyTorch cách đây không lâu. Nó không phải tài liệu tốt để giảng dạy, nhưng có thể bạn vẫn rút ra được gì đó
      [0]: https://www.manning.com/books/grokking-deep-reinforcement-le...
      [1]: https://gymnasium.farama.org/environments/box2d/
  • Học tăng cường là một lĩnh vực nghiên cứu hoàn toàn tách biệt với LLM. Nó thường được xem là một phần của machine learning, và trong cuốn kinh điển Machine Learning của Tom Mitchell cũng có một mục rất hay về Q-learning, nhưng nó ít liên quan đến các công việc machine learning hiện đại
    Ngay cả những thứ như AlphaGo rốt cuộc cũng có thể xem gần hơn là việc dùng mạng nơ-ron sâu làm đầu vào cho các kỹ thuật học tăng cường cổ điển
    Reinforcement Learning: An Introduction của Sutton và Barto được xem rộng rãi là sách nhập môn chuẩn mực về chủ đề này
  • Trong trường hợp đó, tôi sẽ khuyên dùng một cuốn sách chuyên về học tăng cường. Phần học tăng cường trong LLM rất đặc thù cho LLM, và phần kiến thức nền cũng dự định chỉ đề cập đúng những phần liên quan
    Có những sách machine learning/deep learning tổng quát khác viết khá dài chương nhập môn về học tăng cường (https://github.com/rasbt/machine-learning-book/tree/main/ch1...). Dù vậy, trong trường hợp này, như những người khác đã nói, một cuốn sách chuyên về học tăng cường sẽ phù hợp hơn
  • Bạn có thể thử Spinning Up của OpenAI: https://spinningup.openai.com/en/latest/
  • Bài thực hành Q-learning trong khóa này đúng là đề cập đến những thứ như vậy
    https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
  • Tôi tò mò không biết nó so với video của Karpathy[0] thì thế nào. Tôi đang muốn nhập môn LLM và đang tìm xem tài liệu nào tốt nhất để đạt được mức hiểu biết đó
    [0] https://www.youtube.com/watch?v=kCc8FmEb1nY
    • Tôi chưa xem hết video, nhưng dựa trên việc lướt qua thì cuốn sách có một vài điểm khác biệt
      Thay vì LLM ở mức ký tự, sách triển khai một LLM ở mức từ thực tế, cho thấy cách tải trọng số tiền huấn luyện sau khi tiền huấn luyện, rồi fine-tune theo chỉ dẫn LLM đó
      Ngoài ra, sách còn code quá trình căn chỉnh của LLM đã được fine-tune theo chỉ dẫn, và cũng trình bày fine-tune cho tác vụ phân loại. Toàn bộ sách có nhiều hình minh họa, chỉ riêng chương 3 đã có 26 hình :)
      Video cũng có vẻ rất hay. Vì dài 2 tiếng nên có lẽ là tài liệu bổ trợ nhập môn vững chắc. Đọc sách có lẽ sẽ tốn khoảng gấp 10 lần thời gian đó
    • Sẽ khó hiểu nếu bạn chưa biết sẵn phần lớn nội dung
      Tôi cũng đã xem nhiều lần để hiểu tốt phần lớn nội dung
      Tất nhiên bạn cũng phải rất rành PyTorch, và cũng cần biết nhân ma trận, lan truyền ngược v.v. Người nói cũng nói rất nhanh
  • Tôi không quan tâm đến bản thân mô hình ngôn ngữ, nhưng có một số kỹ thuật dùng trong mô hình ngôn ngữ mà tôi muốn dùng ở nơi khác
    Ví dụ, tôi biết attention được dùng trong nhiều loại mô hình, và Transformer cũng được dùng ở những nơi khác ngoài mô hình ngôn ngữ
    Tôi tò mò liệu đọc cuốn sách này có giúp hiểu attention và Transformer đủ tốt để có thể dùng chúng cả bên ngoài mô hình ngôn ngữ hay không
    • Cơ chế attention được triển khai trong cuốn sách này có tính đặc thù với LLM ở khía cạnh đầu vào văn bản, nhưng về cơ bản đó là cùng cơ chế attention được dùng trong Vision Transformer
      Khác biệt là trong LLM, văn bản được chuyển thành token, rồi các token đó được biến thành vector embedding đưa vào LLM. Trong Vision Transformer, thay vì xem ảnh là token, người ta dùng các patch ảnh làm token và biến chúng thành vector embedding
      Dù là văn bản hay thị giác, đó vẫn là cùng một cơ chế attention, và trong cả hai trường hợp đều nhận vector embedding làm đầu vào
      (*Chương 3 tôi đã nộp từ tuần trước và sẽ sớm lên MEAP. Trong lúc đó, bạn có thể xem code kèm ghi chú tại đây: https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01...)
  • Bản thân kiến trúc mô hình không quá phức tạp, đặc biệt nếu dùng torch. Toàn bộ quá trình cũng khá thẳng tiến, nên trông có vẻ là một dự án khả thi đáng để thử