Sản phẩm
Ra mắt slotstream: Chạy mô hình 104GB trên Mac 48GB nhờ kỹ thuật stream từ SSD
(giờ Việt Nam)
Tóm tắt AI
Công cụ slotstream cho phép chạy các mô hình AI khổng lồ như Qwen3.8-Flash-Next (104GB) trên máy Mac có RAM hạn chế bằng cách truyền tải dữ liệu trực tiếp từ SSD.
Bản dịch AI
Chạy Qwen3.8-Flash-Next trên một chiếc Mac không đủ dung lượng. Mô hình này là một mixture-of-experts với 125 tỷ tham số, chiếm 104 GB trên ổ đĩa ở định dạng 4-bit; slotstream truyền dữ liệu từ SSD và chạy nó trong bất kỳ dung lượng bộ nhớ nào bạn cấp cho nó. Đây là một tệp nhị phân Swift duy nhất, không dùng Python. Nó hỗ trợ các API chat của Ollama và OpenAI, vì vậy các công cụ hiện tại của bạn vẫn hoạt động bình thường.
Nó có chạy được trên Mac của tôi không?
Bạn cần máy Apple Silicon, macOS 14 trở lên và khoảng 110 GB dung lượng đĩa trống. Dung lượng đĩa là rào cản đầu tiên: bất kể bộ nhớ của bạn là bao nhiêu, một chiếc Mac 512 GB là mức tối thiểu thực tế.
Tính năng tự động điều chỉnh kích thước (auto-sizing) không bao giờ chiếm dụng toàn bộ máy. Dưới đây là những gì mỗi cấu hình nhận được:
Các hàng này được lấy trực tiếp từ lệnh slotstream doctor --sim-ram N, vì vậy bạn có thể tái tạo chúng. Chỉ hàng 48 GB là được đo trên phần cứng thực tế; các hàng khác là ước tính từ đường cong hiệu năng của nó, và các máy Mac nhỏ hơn cũng có SSD chậm hơn. Hãy chạy slotstream doctor trước khi tải xuống bất cứ thứ gì: nó sẽ in ra kế hoạch cho máy của bạn và cho biết liệu ổ đĩa có đủ chỗ chứa các trọng số (weights) hay không.
Cài đặt
Cài đặt bản phát hành mới nhất vào ~/.slotstream/bin và thêm nó vào PATH của bạn. Chạy lại cùng dòng lệnh đó để nâng cấp. Để gỡ cài đặt, hãy dùng lệnh rm -rf ~/.slotstream và xóa trình bao bọc /usr/local/bin/slotstream hoặc dòng PATH mà trình cài đặt đã thông báo là đã thêm vào.
Các bản phát hành được xây dựng bởi CI từ commit đã gắn thẻ với nguồn gốc được ký xác thực, vì vậy bạn có thể xác minh tài nguyên thay vì chỉ tin tưởng vào tệp tải xuống:
Hoặc tự xây dựng từ nhánh main. Chỉ cần Command Line Tools là đủ, không cần Xcode:
Tệp tải xuống 104 GB
Tệp nhị phân thì nhỏ, nhưng các trọng số thì không: 103,8 GB gồm 24 tệp, chỉ tải một lần. Các lệnh serve và run sẽ đề nghị tải xuống trong lần sử dụng đầu tiên, hoặc bạn có thể dùng slotstream pull để tải trực tiếp. Trước khi truyền bất kỳ dữ liệu nào, nó sẽ in ra kích thước, đích đến và dung lượng đĩa trống của bạn, chờ xác nhận "yes", và sẽ từ chối ngay lập tức nếu ổ đĩa không đủ chỗ.
Một lần cài đặt thực tế mất 35 phút. Hugging Face giới hạn tốc độ truyền ở mức khoảng 36–57 MB/s bất kể bạn mở bao nhiêu kết nối, vì vậy nếu vượt quá ~400 Mbps thì thời gian chờ đợi phụ thuộc vào Hugging Face chứ không phải đường truyền của bạn. Ở mức 100 Mbps, hãy dự tính khoảng 2 giờ 20 phút; ở mức 25 Mbps, khoảng 9 giờ.
Việc ngắt quãng rất an toàn: lệnh pull sẽ tiếp tục chính xác từ nơi nó dừng lại, và tất cả 24 tệp đều được kiểm tra dựa trên mã băm sha256 được biên dịch vào tệp nhị phân, vì vậy một tệp tải xuống bị cắt bớt hoặc hỏng sẽ không thể tiếp cận được engine. Lệnh pull --verify sẽ băm lại bản sao hiện có bất cứ lúc nào (mất 8 giây).
Sử dụng
Trải nghiệm đầu tiên, không cần server:
Đối với mọi thứ khác, lệnh serve sẽ lắng nghe trên cổng 11434 và triển khai tập hợp con chat/generate được sử dụng bởi các client của Ollama và các SDK của OpenAI:
Open WebUI, Ollama CLI và các OpenAI SDK đều đã được kiểm thử với tập hợp con này. Streaming, CORS và các tùy chọn lấy mẫu (sampling) thông thường đều hoạt động. Những gì không được hỗ trợ (công cụ, hình ảnh, đầu ra JSON-schema, logprobs) sẽ trả về mã lỗi 400 rõ ràng thay vì bị bỏ qua một cách âm thầm. Mọi endpoint, trường, giá trị mặc định và lỗi đều có trong docs/API.md.
Tốc độ
Giải mã (Decode) là phần dễ: ~12 tok/s khi máy đã nóng trên một chiếc Mac 48 GB, và bảng cấu hình ở trên cho biết tốc độ của các máy nhỏ hơn. Trục trặc nằm ở phần prompt. Toàn bộ prompt được xử lý trước khi token đầu tiên xuất hiện, vì vậy 8.000 token sẽ mất khoảng một phút trên Mac 48 GB và hơn ba phút trên máy 16 GB. Tổng prompt cộng với completion được giới hạn ở 32.768 token (--max-context).
Trong một cuộc hội thoại, bạn chỉ phải trả phí đó một lần. Các lượt phản hồi tiếp theo chỉ nạp trước những gì mới, vì vậy thời gian để có token đầu tiên vẫn ổn định khi cuộc trò chuyện dài ra: qua tám lượt trên máy 16 GB, mất 6,0 giây ở lượt cuối thay vì 25,8 giây. Trạng thái được tái sử dụng không hoàn toàn giống hệt về bit so với việc tính toán lại, vì vậy một câu trả lời đôi khi có thể khác biệt ở những nơi hai token có xác suất gần bằng nhau; --no-prefix-cache sẽ tắt tính năng này nếu bạn cần sự tái lập chính xác tuyệt đối.
Bộ nhớ
Nếu không có cờ (flags), slotstream sẽ tự điều chỉnh kích thước theo máy của bạn và cho bạn biết nó đã chọn gì. Đây là một chiếc Mac 48 GB; nó đọc là 52 vì mọi thứ ở đây đều tính theo GB thập phân:
Chế độ tự động chọn mức thấp nhất trong ba giới hạn (33 GB, 70% RAM và thấp hơn 2 GB so với giới hạn working-set của Metal) và giảm kích thước hơn nữa khi các ứng dụng khác đang thực sự chiếm dụng bộ nhớ. Mức trần 33 GB là điểm uốn của đường cong đo lường, không phải do sự lịch sự: trong một lần quét từng GB một, không có gì giữa 34 và 84 GB giải mã hoặc nạp trước nhanh hơn, vì vậy một chiếc Mac 128 GB cũng nhận được kế hoạch giống như máy 48 GB. Trong khi chạy, slotstream kiểm tra lại mỗi 15 giây và thay đổi kích thước bộ nhớ đệm giữa các yêu cầu, thu nhỏ khi bị áp lực và tăng trở lại khi áp lực qua đi. Đầu ra giống hệt nhau về byte qua các lần thay đổi kích thước.
Để tự đặt giới hạn, --memory-gb G thiết lập tổng dung lượng cho tiến trình (tối thiểu 8.1, và nó sẽ vượt quá 33 nếu bạn muốn thử nghiệm). --max-ram-percent P thay đổi tỷ lệ 70%, và --experts-per-layer / --pool-gb định kích thước bộ nhớ đệm trực tiếp. slotstream doctor in ra kế hoạch mà bất kỳ tùy chọn nào trong số này sẽ tạo ra mà không cần tải bất cứ thứ gì.
Cách thức hoạt động
Hầu như tất cả các byte của mô hình nằm ở hai nơi: 68 GB các chuyên gia được định tuyến (512 mỗi lớp, 10 chuyên gia hoạt động mỗi token) và bảng n-gram 32 GB. Phần thân dày (dense trunk) chỉ chiếm 3,8 GB và luôn nằm trong bộ nhớ. Các chuyên gia được đọc bằng pread vào một nhóm các khe bộ nhớ đệm cố định được chia sẻ bởi tất cả 48 lớp, vì vậy các lớp "nóng" sẽ mượn khe từ các lớp "lạnh".
Kích thước bộ nhớ đệm thay đổi tốc độ, không bao giờ thay đổi đầu ra. Giải mã tham lam (Greedy decoding) giống hệt nhau về byte giữa bộ nhớ đệm 4 GB và 24 GB, và sự tương đương đó là một bài kiểm tra thường xuyên.
Tại sao không chỉ mmap tệp? MLX (framework ML của Apple) không thể hiện thực hóa một phần của tensor được ánh xạ bộ nhớ: một thao tác thu thập chuyên gia top-10 sẽ đánh giá tất cả 512 chuyên gia của lớp đó, vì vậy đường dẫn mmap sẽ tải ~100 GB và bị treo. Đường dẫn mlx_lm.load thông thường đã khiến chiếc máy 48 GB này phải dùng đến 48 GB swap mà không tạo ra được một token nào.
Trạng thái và giới hạn
Đang hoạt động và được đo trên một máy, M5 Pro với 48 GB. Các cấu hình nhỏ hơn là ước tính từ đường cong của nó, không phải chạy trên phần cứng thực tế.
Đang thực hiện
Đã có trên nhánh main nhưng chưa có trong bản phát hành. Lệnh curl | sh cài đặt bản phát hành mới nhất, vì vậy không có gì trong số này nằm trên máy của bạn trừ khi bạn tự xây dựng từ mã nguồn. CHANGELOG.md lưu giữ danh sách các thay đổi đang thực hiện.
Tài liệu
Kiểm thử
Tools/verify.sh là bộ kiểm tra chấp nhận: nguồn gốc trọng số, các kết quả chuẩn so với tham chiếu Python cùng phiên bản, sự bình đẳng byte qua các kích thước bộ nhớ đệm và thay đổi kích thước trực tiếp, cùng một bộ kiểm tra độ bền của server với các đầu vào từng làm sập server. Tools/e2e_release.sh kiểm tra thứ khác mà người dùng thực sự chạm vào: cài đặt bằng curl | sh và tệp nhị phân mà nó để lại. Các phần không cần trọng số chạy trong CI trên mỗi bản dựng phát hành.
Giấy phép
MIT. Sources/SlotstreamCore/Vendored/GatedDelta.swift được chuyển từ mlx-swift-lm (MIT), và Tools/reference/ sử dụng tệp qwen4_exp.py của cộng đồng làm oracle kiểm thử. Các trọng số đến từ pipenetwork/Qwen3.8-Flash-Next-MLX-4bit và vẫn tuân theo giấy phép cộng đồng Qwen.
Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.