22 điểm bởi GN⁺ 2025-12-30 | 2 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2025-12-30
Ý kiến Hacker News
  • Đúng là thời điểm hoàn hảo. Tôi đã đưa terminal VT100 vào trong một game Unreal Engine (để chạy coding agent), cùng với trình giả lập Z80 và một cầu nối serial có thể lập trình máy CP/M
    Ả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
    • Có vẻ như hai chúng ta thần giao cách cảm vậy
      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’
    • Cuốn Connections: Alternative History of Technology của James Burke nói rất hay về những mối liên kết tình cờ như thế này
    • Nghe thú vị đấy, nhưng tiếc là tôi không xem được imgur
  • Tôi cực kỳ thích cái này. Vừa bấm star GitHub ngay
    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
    • Mấy dự án như thế này thực sự rất hấp dẫn. Nó cho cảm giác như đang nhìn vào một con đường đã bị bỏ lỡ
      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
  • Tôi cũng hay nghĩ về chuyện này. ‘LLM tối thiểu khả dụng’ sẽ trông như thế nào? Ý tôi là một model ở mức có thể trò chuyện đơn giản
    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ộ
    • Cái này gần như trùng với khái niệm ‘cognitive core’ mà Karpathy từng nói
      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 công nghệ này đã tồn tại từ thập niên 90, thì có khi LLM sơ khai đã xuất hiện rồi
      Nếu vậy thì có lẽ thế giới bây giờ đã hoàn toàn khác
    • Nhìn vào RWKV thì khá thú vị: rwkv.com
      Đâ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
    • Có một LLM do ai đó làm bên trong Minecraft, xử lý hội thoại đơn giản với 5 triệu trọng số 8-bit
      Tuy vậy, có lẽ sẽ khó tận dụng tốt cửa sổ ngữ cảnh lớn
  • Đùa là các công ty AI sẽ mua sạch chip Z80 rồi đẩy giá lên
    • Muộn rồi. Năm ngoái là hết hàng sạch rồi
  • Nếu huấn luyện cho một model một bí mật (passphrase), rồi buộc người dùng phải đoán nó thông qua câu hỏi
    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
    • Câu hỏi này làm tôi nhớ đến bài báo này: Planting Undetectable Backdoors in Machine Learning Models
      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
    • Model càng nhỏ thì những bí mật như vậy càng dễ bị trích xuất bằng phân tích trọng số
      Nói chung thì điều này thuộc về vấn đề khả năng diễn giải (interpretability)
  • Nếu có đúng code và hạ tầng huấn luyện, ELIZA hẳn đã có thể mạnh hơn nhiều
    • Bản gốc ELIZA chạy trên mainframe IBM 7094 của thập niên 1960
      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 cũng tự thiết kế và chế tạo một máy tính Z80. Hiện tại nó có 32KB ROM và 32KB RAM
    Tôi định mở rộng ở phiên bản tiếp theo nên nhất định sẽ thử việc này
    • Dạo này giá RAM đắt quá
  • Nếu toàn bộ đầu vào được xử lý thành embedding chỉ trong một lần, thì cái này có vẻ là kiến trúc MLP, không phải Transformer cũng không phải RNN
  • Giá mà những game RPG nhập tự do ngày xưa có kiểu fuzzy matcher như thế 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
  • Làm rất tuyệt. Nhân tiện, lịch dự kiến đến AGI là khi nào vậy?
    • Chắc tầm đầu tháng 4
    • Có lẽ nó đang ở ngay sau góc cua thôi
 
crawler 2025-12-30

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?