RustGPT: LLM thuần Transformer được triển khai hoàn toàn từ đầu bằng Rust
(github.com/tekaratzas)- 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-training và instruction 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óa và mã 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
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ácllm.rs: logic forward pass, backward pass và huấn luyện cho toàn bộ LLMtransformer.rs,self_attention.rs,feed_forward.rs: các transformer block cốt lõiembeddings.rs,output_projection.rs: embedding và tầng đầu ra cuối cùngadam.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..."
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
Gọn gàng đấy.
Ơ, tại sao? Kiểu như là “tôi cũng làm được chút mà” à?
oai phong của karma -47 haha
Cứ hễ nhìn thấy chữ
rcủa rust là lại thấy bứt rứt với bực mình đúng không? hahahaChắc là sẽ có nhiều điều để học được trong quá trình tự làm đó.
Không tự thử làm thì không thể tạo ra được.
Ý 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 tronglib.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ố đó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 runmộ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 backpropagationuv. Tự tôi dùng thấy việc chạy dự án Python dễ hơn 90% đếnuvcargo runnhư một giấc mơ, nhưng thật ra tôi lại thích trải nghiệm đặc trưng củacargo build: biên dịch lại cả internet và sưởi ấm CPU vào mùa đông hơncargothườ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 haycargo, 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ạnhTô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_distrtrông khá gọn gàngcargo tree, và hiện tại nó vẫn có vẻ khá sạch sẽ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
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 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.txtnhư 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ôngmain.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ả: