- Z80-μLM là một mô hình trí tuệ nhân tạo hội thoại siêu nhỏ chạy trên bộ xử lý Z80 (4MHz, 64KB RAM) ra đời năm 1976
- Áp dụng huấn luyện nhận biết lượng tử hóa (QAT) để thực hiện sinh văn bản theo từng ký tự chỉ với trọng số 2 bit và phép toán số nguyên 16 bit
- Trong một tệp thực thi .COM khoảng 40KB, đã chứa đầy đủ engine suy luận, trọng số và giao diện chat
- Dùng mã hóa băm trigram để chuyển đầu vào thành 128 bucket, tạo phản hồi bền vững trước lỗi gõ và thay đổi thứ tự từ
- Dù không thể hiểu ngữ cảnh phức tạp, đây vẫn là một mô hình AI thử nghiệm hoạt động được ngay cả trong môi trường 8 bit hạn chế
Tổng quan dự án
- Z80-μLM là một mô hình ngôn ngữ siêu nhỏ có thể chạy trong môi trường retrocomputing
- Hoạt động trên CPU Z80 với 64KB RAM và tạo phản hồi hội thoại theo từng ký tự
- Tổng kích thước, gồm mô hình, mã suy luận và UI, chỉ khoảng 40KB
- Câu hỏi cốt lõi của dự án là “có thể làm nó nhỏ đến mức nào mà vẫn giữ được cá tính”, đồng thời cũng có thể tự lưu trữ để phân phối
- Chưa đạt đến mức của bài kiểm tra Turing, nhưng được thiết kế như một dạng hội thoại đơn giản mang lại sự thú vị cho người dùng
Bao gồm hai ví dụ
-
tinychat
- Một chatbot đơn giản được huấn luyện bằng dữ liệu hỏi đáp thường ngày
- Trả lời ngắn gọn nhưng có cá tính cho lời chào, tự giới thiệu và hội thoại phổ thông
- Ví dụ: “hello” → “HI”, “are you a robot” → “YES”, “do you dream” → “MAYBE”
-
guess
- Một mô hình theo dạng trò chơi 20 Questions
- Biết trước chủ đề bí mật và trả lời bằng YES/NO/MAYBE
- Khi người dùng đoán đúng đáp án, sẽ in ra “WIN”
- Dữ liệu huấn luyện có thể được tạo bằng Ollama hoặc Claude API, đồng thời có kèm công cụ cân bằng phân bố lớp
Tính năng chính
- Mã hóa băm trigram: băm văn bản đầu vào vào 128 bucket, cho phép chịu lỗi gõ và không phụ thuộc thứ tự từ
- Lượng tử hóa trọng số 2 bit: mỗi trọng số thuộc {-2, -1, 0, +1}, lưu được 4 trọng số trong 1 byte
- Suy luận số nguyên 16 bit: sử dụng phép toán số học 16 bit của Z80
- Tệp .COM ~40KB: phù hợp với Transient Program Area (TPA) của CP/M
- Sinh tự hồi quy: tạo đầu ra theo từng ký tự
- Không dùng phép toán dấu phẩy động, thay vào đó dùng fixed-point scaling
- Hỗ trợ chế độ tương tác: chạy bằng lệnh
CHAT
Cách thức tương tác
- Mô hình không “hiểu” đầu vào, mà phản ứng dựa trên hình dạng (shape) của đầu vào
- Câu đầu vào được chuyển thành 128 bucket trigram để giữ lại độ tương đồng ngữ nghĩa
- Ví dụ: “hello there” và “there hello” sẽ được xử lý với cùng một cấu trúc bucket
- Khó phân biệt câu dài hoặc câu phụ thuộc vào thứ tự
-
Ý nghĩa của các phản hồi ngắn
- Ngay cả phản hồi 1~2 từ cũng có thể biểu đạt sắc thái bất ngờ
OK: chấp nhận trung tính
WHY?: phản biện lại câu hỏi
R U?: nghi vấn về sự tồn tại
MAYBE: không chắc chắn
AM I?: câu hỏi phản chiếu lại
- Những phản hồi ngắn như vậy khuyến khích người dùng tự suy luận ngữ cảnh
Điểm mạnh và giới hạn
- Điểm mạnh
- Phản hồi kiểu phân loại nhất quán với đầu vào ngắn
- Chịu tốt trước lỗi gõ, tái cấu trúc, thay đổi thứ tự từ
- Biểu đạt cá tính thông qua lựa chọn từ vựng
- Có thể chạy ngay cả trên phần cứng 8 bit hạn chế
- Giới hạn
- Không thể tạo câu mới
- Không thể theo dõi ngữ cảnh nhiều lượt
- Không thể hiểu ngữ pháp
- Chưa đạt đến mức trí tuệ tổng quát
Kiến trúc
- Tầng đầu vào: 128 bucket truy vấn + 128 bucket ngữ cảnh
- Tầng ẩn: ví dụ cấu hình 256 → 192 → 128
- Tầng đầu ra: 1 neuron cho mỗi ký tự trong bộ ký tự
- Hàm kích hoạt: ReLU
-
Ràng buộc lượng tử hóa
- Z80 là CPU 8 bit, nhưng dùng các cặp thanh ghi 16 bit (HL, DE, BC) để thực hiện tích lũy và kích hoạt
- Trọng số được lưu 4 giá trị trong 1 byte (đơn vị 2 bit)
- Bộ tích lũy 16 bit giúp tránh tràn khi cộng dồn 256 đầu vào
- Do dùng trọng số 2 bit nên khả năng biểu đạt bị hạn chế, và nếu không có QAT thì kết quả huấn luyện có thể không ổn định
-
Vòng lặp nội bộ của Z80
- Trọng tâm của suy luận là vòng lặp nhân-cộng dồn (MAC)
- Giải nén trọng số rồi cộng hoặc trừ vào bộ tích lũy (ACC) tùy theo giá trị -2~-1~0~+1
- Sau khi tính xong mỗi tầng, thực hiện dịch phải 2 bit để tránh tràn
- Toàn bộ quá trình suy luận lặp lại khoảng 100.000 phép toán cho mỗi ký tự
Giấy phép
- Có thể chọn MIT hoặc Apache-2.0
2 bình luận
Ý kiến Hacker News
Ảnh chụp màn hình
Tôi không ngờ lại có người đăng đúng thứ khớp đến vậy. Thật là một sự trùng hợp vừa kỳ lạ vừa đáng kinh ngạc
Tôi đã làm một trình giả lập CP/M và IDE chạy trên trình duyệt: lockboot.github.io/desktop
Ban đầu tôi định đăng cái đó, nhưng rồi lại rơi vào hang thỏ khi đi tìm một ‘bản demo ngầu’
Tôi từng viết một MLP bằng Fortran IV cho máy đục thẻ của thập niên 60 (dự án Xortran)
Dù không có cơ chế attention và ngữ cảnh chỉ bị giới hạn ở trigram của câu cuối cùng, khả năng tương tác vẫn khá ổn
Nếu thứ như thế này đã có thể làm được trên phần cứng thập niên 60, thì khoa học viễn tưởng và khoa học của thời đó hẳn đã hoàn toàn khác
Nói theo kiểu thuyết âm mưu một chút, có vẻ một trong những lý do các công ty AI mua gom RAM số lượng lớn là để mọi người không nhận ra hiện tại đang giống thời kỳ cách mạng máy tính gia đình đến mức nào
Tôi dùng một máy có 1TB RAM, và với agent tự chỉnh thì hiệu năng còn tốt hơn cả model thương mại. Nó mang tính cá nhân, an toàn và không bị kiếm tiền hóa
Và câu hỏi tiếp theo là liệu có thể tạo ra một model nhỏ có thể học bằng cách tra cứu dữ liệu bên ngoài không
Nếu có thể làm ra một model siêu nhỏ học theo thời gian thực, thì về cơ bản ta sẽ có một trợ lý cá nhân hoàn toàn cục bộ
Một model cực nhỏ, gần như không có kiến thức kiểu bách khoa, nhưng có năng lực suy luận cơ bản và biết dùng công cụ
Tweet tham khảo
Nếu vậy thì có lẽ thế giới bây giờ đã hoàn toàn khác
Đây là một case study thử nghiệm về câu hỏi ‘nếu RNN phù hợp với LLM thì sẽ ra sao’
Nó nhanh điên cuồng trên CPU
Tuy vậy, có lẽ sẽ khó tận dụng tốt cửa sổ ngữ cảnh lớn
thì tôi tò mò không biết nếu truy cập được vào trọng số của model, người ta có thể suy ngược ra bí mật đó không, hay chỉ có thể tiếp cận qua việc đặt câu hỏi
Nó bàn về cách cài backdoor không thể phát hiện vào bên trong model trong khi bề ngoài vẫn hoạt động bình thường
Nói chung thì điều này thuộc về vấn đề khả năng diễn giải (interpretability)
Nó có cấu trúc 32K×36-bit word và không hỗ trợ thao tác byte
Nếu chuyển nguyên xi file thực thi Z80 40KB sang thì sẽ khá chật vật
Nhưng nếu phần lớn là trọng số 2-bit thì có thể vẫn làm được
Với phần cứng sau đó, đặc biệt là Z80 năm 1976, mọi thứ hẳn đã dư dả hơn nhiều
Tôi định mở rộng ở phiên bản tiếp theo nên nhất định sẽ thử việc này
Hồi đó chỉ khớp đúng từ khóa chính xác nên rất gượng gạo
Có lẽ game cuối cùng theo kiểu đó là Wizardry 8 năm 2001
Thật sự rất kỳ diệu khi có thể chạy công nghệ mới nhất trên phần cứng của quá khứ.
Khi AGI xuất hiện trong tương lai, nếu gom toàn bộ sức mạnh tính toán hiện có trên Trái Đất lại thì liệu có thể chạy được không?