1 điểm bởi GN⁺ 1 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Train Your Own LLM From Scratch là một workshop thực hành nơi bạn tự viết mọi mảnh ghép của pipeline huấn luyện GPT để hiểu từng thành phần làm gì và vì sao nó cần thiết
  • Mục tiêu là tạo ra văn bản mang phong cách Shakespeare bằng một mô hình GPT được huấn luyện từ đầu trên laptop, và để có thể hoàn thành trong một buổi workshop, mô hình được thu gọn còn khoảng 10M tham số
  • Trong khi nanoGPT hướng tới việc tái hiện GPT-2 124M tham số, dự án này chỉ giữ lại phần cốt lõi và được thiết kế để có thể huấn luyện trên laptop trong dưới 1 giờ
  • Các thành phần bạn sẽ tự viết gồm Tokenizer, kiến trúc mô hình dựa trên Transformer, vòng lặp huấn luyện và sinh văn bản; cuối cùng bạn sẽ tự hoàn thiện model.py, train.py, generate.py
  • Kiến thức nền chỉ cần ở mức quen đọc code Python; không cần kinh nghiệm machine learning, và yêu cầu Python 3.12+
  • Môi trường chạy hỗ trợ laptop hoặc desktop trên Mac, Linux, Windows; việc huấn luyện sẽ tự động dùng MPS trên Apple Silicon GPU, CUDA trên NVIDIA GPU, hoặc CPU
  • Cài đặt cục bộ khuyến nghị theo luồng chạy uv sync bằng uv; nếu không có môi trường cục bộ, bạn có thể tải file lên Google Colab và chạy bằng !python train.py
  • Workshop lần lượt đi qua tokenizer cấp ký tự, embedding, self-attention, LayerNorm, khối MLP, hàm mất mát, AdamW, gradient clipping, lịch học theo learning rate, cùng sampling với temperature và top-k
  • Kiến trúc cơ bản chuyển văn bản đầu vào thành ID token cấp ký tự, đi qua token embedding và positional embedding, rồi qua nhiều khối Transformer trước khi xuất ra logits cho xác suất token tiếp theo
  • Cấu hình mô hình được cung cấp gồm Tiny khoảng 0.5M tham số và khoảng 5 phút trên M3 Pro, Small khoảng 4M và khoảng 20 phút, mặc định Medium khoảng 10M và khoảng 45 phút huấn luyện
  • Mọi cấu hình đều dùng token hóa cấp ký tự với vocab_size=65block_size=256, phù hợp với các bộ dữ liệu nhỏ khoảng 1MB như Shakespeare
  • Token hóa BPE có vốn từ lớn như 50,257 vocab của GPT-2, nên với bộ dữ liệu nhỏ thì hầu hết bigram token quá hiếm để học mẫu hiệu quả; nội dung cũng đề cập việc chuyển sang BPE khi dùng bộ dữ liệu lớn hơn
  • Tài liệu tham khảo chính gồm nanoGPT, build-nanogpt video lecture, Karpathy's microgpt, nanochat, Attention Is All You Need (2017), GPT-2 paper (2019), TinyStories paper

1 bình luận

 
Ý kiến trên Hacker News
  • Nếu thấy tài liệu này thú vị thì cũng rất nên học CS336 của Stanford. Khóa này đi sâu hơn nhiều vào cùng một chương trình, đồng thời giới thiệu cả trực giác lý thuyết như định luật scaling lẫn góc nhìn hệ thống như tối ưu hóa kernel/profiling
    Tất nhiên là phải tự làm bài tập: https://cs336.stanford.edu/

    • Không rõ có thể xem bài giảng ở đâu. Tôi không thấy tùy chọn học bài giảng
  • Quảng bá một chút thì có một loạt notebook Jupyter giải thích cách machine learning hoạt động từ đầu
    https://github.com/nickyreinert/DeepLearning-with-PyTorch-fr...
    Và dĩ nhiên cũng có phần về cách xây LLM từ đầu
    https://github.com/nickyreinert/basic-llm-with-pytorch/blob/...

  • Tôi vừa mới bắt đầu với kho lưu trữ/sách/khóa học Build a Large Language Model (From Scratch) của Sebastian Raschka. Có lẽ việc phải chọn xem dùng tài liệu học nào cũng là một kiểu băn khoăn dễ chịu
    [0] https://github.com/rasbt/LLMs-from-scratch
    [1] https://www.manning.com/books/build-a-large-language-model-f...
    [2] https://magazine.sebastianraschka.com/p/coding-llms-from-the...

    • Tôi thật sự rất thích cuốn sách đó. Rất phù hợp cho ai muốn hiểu cấu trúc bên trong thực tế và xem ví dụ hoạt động của mọi phép tính
  • Tôi đã làm việc này từ ngày mình sinh ra. Lúc đầu khá khó nhưng đang dần khá hơn

    • Thật ra tôi chủ yếu huấn luyện mô hình vật lý, và LLM chỉ được gắn kèm vào đó thôi
  • Tôi từng làm việc này với ULMFiT hồi fast.ai còn tương đối mới. Có lẽ lúc đó BERT đang là trạng thái tốt nhất mới nhất, và kiến trúc khi ấy là huấn luyện mô hình nền trước rồi chuyên biệt hóa bằng head
    Với mô hình nền, tôi dùng toàn bộ Wikipedia và thêm vài GB tweet được gom từ firehose. Tôi có thể dùng một lab với 20 máy tính dành cho phát triển game, hình như cỡ GTX 2080. Mỗi lượt huấn luyện trên Wikipedia đã tokenize mất khoảng nửa ngày, nên tôi chạy tuning siêu tham số với các cấu hình khác nhau trên từng máy và hôm sau lấy kết quả tốt nhất làm điểm xuất phát. Sáng nào đi làm rồi kiểm tra kết quả cũng rất vui
    Phần kỹ thuật thì kinh khủng và đầy chắp vá, nhưng tôi học được rất nhiều. Kết quả cũng tàm tạm và tôi dùng nó để phân loại tweet, nhưng nó cho tôi cảm nhận rõ muốn làm nghiêm túc thì cần nhiều sức mạnh GPU và khó khăn kỹ thuật đến mức nào. Tôi không hoàn toàn nhận ra tiềm năng của sinh sinh nội dung, nhưng cũng đã cười rất lâu khi xem những tweet mà tôi tạo thử vì tò mò

  • Cái này trông gần như là bản chép lại dưới dạng văn bản của video này của Andrej Karpathy(https://youtu.be/kCc8FmEb1nY), hay là tôi nhìn nhầm?

    • Trang có giải thích mối liên hệ với nanoGPT
      Đại ý là: “nanoGPT hướng tới việc tái tạo GPT-2 (124 triệu tham số) và bao quát rất nhiều nội dung. Dự án này giữ lại phần cốt lõi và thu nhỏ xuống còn mô hình khoảng 10 triệu tham số, có thể huấn luyện trên notebook trong vòng 1 giờ…”
    • Đúng vậy, bạn nhìn nhầm rồi
  • Bổ sung thêm bối cảnh thì anh ấy là một trong những nhà phát triển MLX và là một nhà nghiên cứu machine learning có năng lực

    • Muốn biết nguồn ở đâu. Điều đó có vẻ không đúng
  • Ở đây ghi là “workshop thực hành để tự viết mọi mảnh ghép trong pipeline huấn luyện GPT và hiểu mỗi thành phần làm gì, vì sao cần thiết”, nhưng trong phần phụ thuộc lại có torch, nên có vẻ tensor và backprop không được tự cài mà được xem như thứ có sẵn. Dù vậy thì có còn gọi là làm “từ đầu” được không nhỉ
    Tôi từng làm thứ tương tự bằng Rust và cũng có dùng AI hỗ trợ, nhưng bị giới hạn là không dùng phụ thuộc nào, chỉ standard library. Vì thế tôi phải tự cài nhiều thứ hơn hẳn như thiết kế tensor, khái niệm kernel, bộ tối ưu gradient descent đơn giản, parser JSON tự viết, trừu tượng hóa song song dữ liệu CPU kiểu giống rayon, v.v. Khi nối tất cả lại và chạy được thì khá vui. Rất chậm nhưng đúng là có chạy

  • Tôi không chắc dùng PyTorch còn có thể gọi là “từ đầu” nữa không. Không phải tôi đang nói theo kiểu cực đoan rằng phải tránh cả standard library, nhưng đến lúc mang vào một thư viện được làm đúng cho mục đích đó thì nó không còn cho cảm giác “từ đầu” nữa

    • Cũng có lý, nhưng với đa số người làm machine learning thì PyTorch về cơ bản là standard library
  • Có lẽ nên gọi là “huấn luyện LM từ đầu” thì đúng hơn. Tôi nghi ngờ liệu họ có máy đủ mạnh để tạo ra mô hình xứng đáng được gọi là “Large” hay không

    • Nếu có thẻ tín dụng với hạn mức bình thường thì bạn có thể thuê đủ tài nguyên từ các nhà cung cấp neocloud như HuggingFace hay Mistral Forge
      Không phải tôi nói là đáng tiền, nhưng để học thì không nhất thiết phải tự mua GPU
    • Ngay cả với một 3090 đơn lẻ cũng có thể huấn luyện mô hình 1,6 tỷ tham số từ đầu đến cuối. Đó là một mô hình khá lớn
    • Tôi cũng có nửa terabyte RAM đây! Dù là DDR4 nhưng vẫn là RAM
      Còn có cả 48 lõi xử lý nữa! Không hỗ trợ AVX512 nhưng vẫn tính toán được
      Chắc là đủ để huấn luyện LLM. Hoặc ít nhất gia đình tôi cũng có thể làm được… có khi con tôi sẽ phải tiếp quản dự án để làm tiếp
      Nói nghiêm túc thì tôi nghĩ hoặc là bạn đã bỏ lỡ ý chính, hoặc đang bắt bẻ không cần thiết, hoặc là bạn sai. Đây là về việc học khái niệm, còn phần còn lại nhìn chung là thứ yếu
      Nếu xét theo hướng là đang bắt bẻ hoặc sai, thì tiêu chuẩn cơ sở nào được ghi nhận cho một mô hình ngôn ngữ “large”? GPT-2 từng được gọi là mô hình ngôn ngữ “large” cả khi đó lẫn bây giờ, và nó có 1,5 tỷ tham số. Hiện nay có thể mua GPU tiêu dùng đủ sức huấn luyện cỡ đó với giá khoảng 400 USD