23 điểm bởi GN⁺ 2025-09-16 | 7 bình luận | Chia sẻ qua WhatsApp
  • RustGPT là một mô hình ngôn ngữ dựa trên Transformer được triển khai chỉ bằng Rust thuần và ndarray, không dùng framework machine learning bên ngoài
  • Được thiết kế để học kiến thức dựa trên sự kiện và các mẫu hội thoại thông qua pre-traininginstruction tuning
  • Cấu trúc đi theo kiến trúc LLM điển hình: tokenizer → embedding → transformer block → output projection
  • Cung cấp cấu trúc mã nguồn mô-đun hóamã kiểm thử, giúp có thể hiểu chi tiết quá trình huấn luyện, suy luận và tối ưu hóa
  • Là tài liệu tham khảo quan trọng cho các nhà phát triển hoặc người học trong hệ sinh thái Rust muốn tự triển khai LLM từ đầu mà không phụ thuộc framework

Tổng quan dự án

  • RustGPT là một dự án mã nguồn mở triển khai LLM chỉ với ngôn ngữ Rust thuần và thư viện đại số tuyến tính (ndarray), không cần framework machine learning bên ngoài hay phụ thuộc phức tạp
  • Mục tiêu chính là tự triển khai các thành phần cốt lõi của LLM hiện đại như transformer, attention, embedding, tối ưu hóa... và hiểu rõ quá trình huấn luyện
  • Không giống nhiều LLM phổ biến khác, dự án trực tiếp thiết kế toàn bộ cấu trúc transformer, backpropagation, tokenizer, optimizer... bằng mã Rust, cho phép nhà phát triển và nhà nghiên cứu Rust hiểu và mở rộng nguyên lý deep learning từ gốc
  • Điểm khác biệt là xử lý phép toán ma trận bằng ndarray và không phụ thuộc vào các gói machine learning bên ngoài như PyTorch hay TensorFlow
  • Nhờ tính mô-đun và độ bao phủ kiểm thử tốt, dự án phù hợp cho nhiều thí nghiệm và cải tiến, đồng thời cũng thích hợp cho mục đích giáo dục kiểu "LLM tự xây từ đầu (From Scratch)"

Tính năng chính và cách triển khai

  • Kiến trúc transformer: văn bản đầu vào → token hóa → embedding → transformer block → dự đoán cuối cùng
    • Văn bản đầu vào được chuyển thành vector embedding sau quá trình token hóa
    • Embedding đi qua Transformer Block (multi-head attention + feedforward network)
    • Cuối cùng, Output Projection Layer tạo ra phân phối xác suất trên từ vựng để thực hiện dự đoán
Quảng cáo

Cấu trúc triển khai

  • main.rs: pipeline huấn luyện, chuẩn bị dữ liệu, chạy chế độ tương tác
  • llm.rs: logic forward pass, backward pass và huấn luyện cho toàn bộ LLM
  • transformer.rs, self_attention.rs, feed_forward.rs: các transformer block cốt lõi
  • embeddings.rs, output_projection.rs: embedding và tầng đầu ra cuối cùng
  • adam.rs: triển khai optimizer Adam
  • Mỗi mô-đun đều bao gồm mã kiểm thử tương ứng (tests/) để xác minh chức năng

Cách huấn luyện, kiểm thử và luồng dữ liệu

  • Quy trình huấn luyện
    • Tạo từ vựng → pre-training (100 epoch, dữ liệu câu mang tính sự kiện) → instruction tuning (100 epoch, dữ liệu hội thoại)
    • Ví dụ pre-training: "The sun rises in the east and sets in the west"
    • Ví dụ instruction tuning: "User: How do mountains form? Assistant: ..."
  • Hỗ trợ chế độ tương tác
    • Sau khi huấn luyện xong, có thể kiểm thử hội thoại theo dạng prompt-response
    • Ví dụ: "How do mountains form?" → "Mountains are formed through tectonic forces or volcanism..."
Quảng cáo

Cấu hình kỹ thuật chi tiết

  • Kích thước từ vựng: thiết lập động dựa trên dữ liệu huấn luyện
  • Chiều embedding: 128, hidden layer: 256
  • Độ dài chuỗi tối đa: 80 token
  • Kiến trúc: 3 transformer block + embedding + tầng đầu ra
  • Thuật toán huấn luyện: optimizer Adam, gradient clipping (giới hạn L2 norm 5.0)
  • Learning rate: pre-training 0.0005, instruction tuning 0.0001
  • Hàm mất mát: cross-entropy loss

Đặc điểm của mô hình và mã nguồn

  • Tokenizer tùy chỉnh (xử lý dấu câu)
  • Sinh văn bản dựa trên greedy decoding
  • Cấu trúc tầng mô-đun và giao diện rõ ràng
  • Độ bao phủ kiểm thử: có mã unit test cho từng tầng và từng chức năng
  • Phụ thuộc: chỉ dùng ndarray (phép toán ma trận), rand/ rand_distr (khởi tạo ngẫu nhiên), không dùng ML bên ngoài như PyTorch/TensorFlow
  • Giá trị giáo dục: rất phù hợp để học cấu trúc bên trong và nguyên lý huấn luyện của LLM hiện đại tiêu biểu

Tiềm năng phát triển

  • Bổ sung kiến trúc nâng cao: multi-head attention, RoPE, positional encoding...
  • Tối ưu hiệu năng: SIMD, huấn luyện song song, cải thiện hiệu quả bộ nhớ
  • Hỗ trợ lưu/tải mô hình
  • Thêm các phương pháp sampling nâng cao (beam search, Top-k/Top-p) và chỉ số đánh giá

Ý nghĩa

  • Là dự án phục vụ học tập và thử nghiệm, cho thấy có thể tự triển khai LLM trực tiếp chỉ bằng Rust mà không phụ thuộc vào các framework như PyTorch hay TensorFlow vốn dựa trên Python
  • Là tài liệu tham khảo hữu ích cho các nhà phát triển muốn hiểu nguyên lý vận hành bên trong của LLM và xây dựng hệ thống ML trong môi trường Rust

7 bình luận

 
t7vonn 2025-09-18

Gọn gàng đấy.

 
ahwjdekf 2025-09-16

Ơ, tại sao? Kiểu như là “tôi cũng làm được chút mà” à?

 
cosine20 2025-09-22

oai phong của karma -47 haha

 
skrrgang 2025-09-16

Cứ hễ nhìn thấy chữ r của rust là lại thấy bứt rứt với bực mình đúng không? hahaha

 
aer0700 2025-09-16

Chắc là sẽ có nhiều điều để học được trong quá trình tự làm đó.

 
devjeonghwan 2025-09-16

Không tự thử làm thì không thể tạo ra được.

 
GN⁺ 2025-09-16
Ý kiến trên Hacker News
  • Có vẻ có những đoạn mã lặp lại các chú thích do GPT tự tạo hoặc các hằng số đã được định nghĩa sẵn, nên tôi nghĩ cần xóa những phần như vậy. Ví dụ, các hằng số như const MAX_SEQ_LEN: usize = 80 đã có sẵn trong lib.rs, nên theo như chú thích hướng dẫn thì tốt hơn là cứ dùng lại các hằng số đó

    • Việc những phần như thế vẫn còn lại khiến tôi nghĩ đây không phải là sản phẩm mà tác giả thực sự hiểu rõ và tự làm ra
    • Không biết bạn đã gửi PR liên quan chưa
    • Về cách dùng hằng số, cũng có thể là tác giả đơn giản chỉ chưa biết cách làm. Tôi cũng nhớ là trong tuần đầu học Rust, mình từng suy nghĩ rất nhiều về cách đặt tên và cấu trúc mã
    • Tôi cũng tò mò liệu kiểu viết mã theo phong cách vibe coding bằng Rust có thể làm giảm chất lượng mã nói chung của ngôn ngữ này hay không
    • Tôi nghĩ nhận xét này thật sự rất xác đáng
  • Tôi từng tốn vài ngày trong địa ngục phụ thuộc của Python, nên cách làm của Rust chỉ cần cargo run một lần là xong đúng là như mơ. Nhưng tôi tò mò phần nào là đau đớn nhất khi làm mà không có framework. Nếu cá cược thì tôi đoán 100% là debug logic backpropagation

    • Tôi khuyên dùng công cụ uv. Tự tôi dùng thấy việc chạy dự án Python dễ hơn 90% đến uv
    • Tôi nghĩ điểm khó nhất là phần tận dụng tài nguyên như GPU
    • Nếu nói về vấn đề phụ thuộc Python thì còn có thể hiểu được vào khoảng năm 2010, nhưng đến 2025 thì tôi thấy đây là một sự cường điệu quá mức
    • Bạn nói cargo run như một giấc mơ, nhưng thật ra tôi lại thích trải nghiệm đặc trưng của cargo build: biên dịch lại cả internet và sưởi ấm CPU vào mùa đông hơn
    • Tôi cảm thấy nhiều người ca ngợi cargo thường chưa hiểu rõ các đánh đổi của việc quản lý phụ thuộc. Việc phải tự build lại mọi thư viện như C thì kém hiệu quả, nhưng nếu mang phụ thuộc vào quá dễ như npm hay cargo, thì lại phát sinh những nhược điểm nghiêm trọng như bùng nổ phụ thuộc, thời gian build, và vấn đề bảo mật. Một hệ thống build tốt không nhất thiết đồng nghĩa với việc thêm phụ thuộc phải thật dễ, và kiểu kho gói tập trung nơi ai cũng có thể chồng chéo phụ thuộc lên nhau cũng không phải là một mô hình lành mạnh
  • Tôi cũng đang làm một dự án Rust tương tự. Có phiên bản chạy trong trình duyệt bằng WebAssembly, và tôi cũng đã công khai demo trên trình duyệt cùng mã nguồn

  • Bộ package ndarray, rand, rand_distr trông khá gọn gàng

    • Vì tò mò nên tôi đã xem cây phụ thuộc bằng cargo tree, và hiện tại nó vẫn có vẻ khá sạch sẽ
    • Tôi không nghĩ cây này có ý nghĩa gì quá lớn. Cũng có thể mã tự triển khai đang được viết một cách kém hiệu quả, và tùy trường hợp thì dùng thư viện ngoài cho đúng chỗ lại còn tốt hơn
    • Tôi không rõ đây là lời mỉa mai hay là cần thêm ngữ cảnh
  • Tôi nghĩ tính an toàn bộ nhớ của Rust khá hữu ích trong việc giảm buffer overflow khi triển khai transformer. Dĩ nhiên CUDA kernel vẫn vượt trội về hiệu năng. Tôi cũng tò mò tokenizer có tự làm lại BPE hay dùng thư viện sẵn có

  • Tôi cũng từng làm picogpt bằng Rust và đã tham khảo rất nhiều bài blog GPT from scratch của jaykmody. Link dự án

  • Xin chúc mừng, và tôi muốn góp một nhận xét nhỏ là trong LLM thì tốt hơn không nên tái sử dụng transformer block mà nên để mỗi cái là một instance riêng. Trước đây tôi cũng từng thực hành tương tự để xây nền tảng bằng Zig và MLX, rồi sau đó dần thêm tính năng trước khi chuyển sang PyTorch/Transformers

    • Tuy vậy, tôi nghĩ kiểu thực hành này chỉ có ý nghĩa khi tự tay viết mã. Trải nghiệm tự mình làm ra mà không nhờ GPT mới là điều có giá trị
  • Phần bình luận của tác giả dự án đã được tổng hợp trên Reddit

  • Tôi thích việc toàn bộ dự án có cấu trúc thật sự rất dễ đọc

    • Tôi muốn nhắc rằng đây là mã do AI tạo ra
    • Nó mang phong cách thủ tục/hướng đối tượng khá nặng, nên khó có thể gọi là phong cách Rust tốt theo nghĩa chặt chẽ. Phong cách hàm dùng iterator và enum thường được xem là ngắn gọn và lý tưởng hơn. Dù vậy, như một thử nghiệm ý tưởng thì hoàn toàn ổn
    • Tôi không biết Rust lại có thể dễ đọc đến thế. Thậm chí tôi còn có cảm giác các kỹ sư Rust đang tránh kiểu mã đơn giản này để biến nó thành một cuộc thi tự hành xác. Mọi trải nghiệm tôi từng có với cộng đồng Rust và văn hóa tuyển dụng quanh nó giờ đều trở nên dễ hiểu
  • Tôi tò mò nguồn gốc của dataset. Tôi sẽ tự tìm thử, nhưng vẫn để lại câu hỏi. Tôi đã phát triển một kiến trúc chủ yếu chạy trên CPU và không có backpropagation, hoạt động tốt trên dataset phân loại. Nó hỗ trợ cập nhật tăng dần theo từng ví dụ đơn lẻ nên có vẻ cũng dùng được cho học liên tục. Tôi mới chỉ thử huấn luyện trên tiny.txt như một demo đồ chơi, chứ chưa từng thử với mô hình ngôn ngữ lớn (LLM). Kiến trúc của tôi có vẻ sẽ hoạt động khá tốt như một trợ lý on-device hoặc on-premise, nên tôi dự định tiếp tục thử nghiệm. Không biết có dataset huấn luyện LLM mã nguồn mở nào đáng để đề xuất không

    • Hermes-3 Dataset khá ổn
    • Trên Hugging Face có nhiều chuỗi người dùng-trợ lý từ openai và anthropic, nhưng cần lưu ý là có khá nhiều hallucination. Dùng cho instruction fine-tuning thì khá ổn. Nếu bạn muốn instruction following thì tôi khuyên dùng kimi k2 distillation
    • Dự án này đưa dữ liệu huấn luyện thẳng vào trong file main.rs. Nội dung chỉ gồm khoảng 50 câu ngắn về kiến thức phổ thông, có lẽ là để rút ngắn thời gian huấn luyện. Vì vậy nếu không theo dạng script thì chất lượng giảm rất mạnh. Ví dụ prompt và kết quả:
      • khi nhập "hello": "Eclipses occur when one celestial body moves into the shadow of another" v.v., khá đúng
      • khi nhập "what are facts": lặp lại chuỗi từ vô nghĩa
      • khi nhập "how are mountains formed?": cho ra các từ thiếu nhất quán và đầu ra vô nghĩa