LMSYS: Blog (Chatbot Arena )
92

Mô hình

Qwen ra mắt mã nguồn mở Qwen3.8-Flash-Next, hỗ trợ Day-0 từ SGLang

(giờ Việt Nam)

Tóm tắt AI

Đội ngũ Qwen vừa phát hành mô hình đa phương thức MoE Qwen3.8-Flash-Next, phiên bản xem trước của kiến trúc Qwen4 với 125B tham số và cơ chế định tuyến chuyên gia tối ưu hóa hiệu suất.

Bản dịch AI

Qwen3.8-Flash-Next: Day-0 Support in SGLang

Giới thiệu

Hôm nay, đội ngũ Qwen đã phát hành mã nguồn mở Qwen3.8-Flash-Next, một mô hình MoE đa phương thức và là bản xem trước sớm của kiến trúc Qwen4. Nó đóng vai trò tương tự đối với Qwen4 như cách Qwen3-Next đã làm với Qwen3.5. Thiết kế lai Gated DeltaNet + Gated Attention đã được sử dụng từ Qwen3.5 đến Qwen3.8. Với sự hợp tác từ các đội ngũ Qwen, NVIDIA và AMD, SGLang cung cấp hỗ trợ day-0 cho mô hình này.

Qwen3.8-Flash-Next nâng cấp kiến trúc ở một số lĩnh vực:

Các điểm nổi bật:

Các lệnh khởi chạy và hướng dẫn cấu hình theo từng khối lượng công việc (workload) có sẵn trong SGLang Cookbook.

Kiến trúc mô hình

Qwen Sparse Attention: Truy xuất thô, chú ý chính xác

Qwen3.8-Flash-Next sử dụng QSA nén với tỷ lệ nén là 4, hay c4. Mỗi lớp QSA có hai đường dẫn: một bộ lập chỉ mục (indexer) nhẹ quyết định nơi cần xem xét, trong khi sparse GQA đọc các mục đã chọn từ bộ nhớ đệm K/V gốc.

Bộ lập chỉ mục chiếu bốn đầu truy vấn (query head) 128 chiều và một đầu khóa (key head) dùng chung. Cứ bốn khóa chỉ mục thô sẽ được tính trung bình theo định dạng FP32, chuẩn hóa và xoay theo vị trí MRoPE của token đầu tiên để tạo thành một khóa nén. Một truy vấn sẽ chấm điểm các khối nén khả kiến với

st,b=1128∑h=14ReLU(⟨qt,hI,kˉbI⟩).s_{t,b} = \frac{1}{\sqrt{128}} \sum_{h=1}^{4} \mathrm{ReLU} \left(\left\langle q^I_{t,h}, \bar{k}^I_b \right\rangle\right).

QSA giữ lại 512 khối tốt nhất, mở rộng chúng trở lại 2048 vị trí token logic và thêm vào từ 0 đến 3 token trong khối chưa hoàn chỉnh hiện tại. Do đó, cơ chế chú ý thưa (sparse attention) cuối cùng sẽ nhìn thấy tối đa 2051 vị trí. Quan trọng là, các khóa nén chỉ đóng vai trò là chỉ mục: quá trình softmax và tổng hợp giá trị cuối cùng vẫn sử dụng K/V gốc chưa nén.

Điều này có nghĩa là QSA đánh đổi một lượng nhỏ dung lượng bộ nhớ đệm để giảm đáng kể lưu lượng tính toán và bộ nhớ cho ngữ cảnh dài. Bộ lập chỉ mục quét khoảng L/4 khóa nhỏ, sau đó sparse attention đọc khoảng 2K mục K/V đầy đủ thay vì toàn bộ LL. Việc tiết kiệm KV ở cấp độ mô hình đến từ bố cục lai: chỉ 12 trong số 48 lớp lưu trữ K/V chú ý đang tăng trưởng, trong khi 36 lớp GDN còn lại sử dụng trạng thái kích thước cố định, chứ không phải từ việc loại bỏ K/V bên trong lớp QSA.

SGLang chỉ gắn bộ lập chỉ mục vào các lớp full-attention và tái sử dụng cách triển khai MRoPE của chúng. K/V gốc vẫn nằm trong vùng nhớ paged pool thông thường. QSA thêm một khóa chỉ mục nén BF16 cho mỗi bốn token; các khóa thô cho khối chưa hoàn thành nằm trong một vòng đệm (ring) bốn khe mỗi yêu cầu. Điều này tránh việc phải giữ lại các khóa chỉ mục thô cho toàn bộ ngữ cảnh và giảm 80% chi phí bộ nhớ đệm chỉ mục của QSA. Việc đánh địa chỉ full_slot / 4 căn chỉnh theo trang cho phép bộ nhớ đệm nén tuân theo quyền sở hữu của Radix Cache mà không cần vòng đời riêng biệt.

Đối với giai đoạn prefill, một nhân GPU tùy chỉnh sẽ tính toán điểm số chỉ mục, một thuật toán top-k nhanh sẽ chọn các khối, và Triton thực hiện mở rộng các chỉ mục rồi chạy sparse GQA. Giai đoạn giải mã (decode) sử dụng phiên bản paged của bộ chấm điểm tương tự, nén K/V gốc đã chọn và gửi đến TRTLLM-Gen trên Blackwell hoặc FlashAttention đã đóng gói trong các trường hợp khác. Bộ lập chỉ mục có thể chồng lấp quá trình chiếu Q/K/V chính trên luồng CUDA thứ hai và các đường dẫn siêu dữ liệu tương thích với CUDA-graph.

Một lớp QSA chạy bộ lập chỉ mục để chọn các token cần chú ý, sau đó thực hiện sparse attention trên chính xác các token đó. Giai đoạn thứ hai có ngân sách token cố định; giai đoạn đầu chấm điểm truy vấn của nó dựa trên tất cả ⌈L/4⌉ khối nén, vì vậy sau vài nghìn token, chính bộ lập chỉ mục chứ không phải cơ chế chú ý mà nó cung cấp mới là yếu tố quyết định chi phí của lớp đó. Giải mã suy đoán (speculative decoding) nhân số lượng này lên: với --speculative-num-steps N, một vòng lặp MTP tiêu tốn N lần gọi bộ lập chỉ mục (N - 1 lần giải mã nháp chuyển tiếp cộng với một lần mở rộng nháp) để đẩy tiến trình nháp thêm tối đa N vị trí.

Do đó, các bước giải mã nháp ngừng chạy bộ lập chỉ mục hoàn toàn. Mỗi vòng lặp MTP mở đầu bằng một lần mở rộng nháp trên các token mà mô hình mục tiêu vừa chấp nhận, và lượt đó vẫn chạy bộ lập chỉ mục; hàng được chấp nhận cuối cùng của mỗi yêu cầu được ghi lại tại đó và tái sử dụng bởi toàn bộ vòng lặp nháp, với N + 1 cột bổ sung được điền tại thời điểm tra cứu với các vị trí đã được nháp kể từ khi ghi lại, vì vậy bản nháp vẫn nhìn thấy các token đang xử lý của chính nó. Việc lựa chọn là một danh sách các chỉ số token logic và một yêu cầu chỉ có thể tăng lên, vì vậy nó không bao giờ vượt quá phạm vi; và vì truy vấn đã di chuyển tối đa N vị trí ra khỏi L, thứ hạng được tái sử dụng về cơ bản là thứ hạng mà bộ lập chỉ mục sẽ tính toán lại; độ dài chấp nhận không thay đổi. Công việc của bộ lập chỉ mục cho bản nháp trên mỗi vòng lặp MTP giảm từ N lần gọi xuống còn một lần. Các nhân siêu dữ liệu nhỏ chỉ tồn tại để cung cấp cho nó, bao gồm chế độ xem giải mã nén và các bố cục pending-ring và group-ring, cũng bị loại bỏ khỏi bước giải mã nháp.

Tối ưu hóa nhân HyperConnection

HyperConnection (HC) duy trì bốn luồng dư (residual stream) song song, trong khi Attention và MoE hoạt động trên một trạng thái ẩn duy nhất. Do đó, mỗi khối sử dụng Mix để đọc từ bốn luồng và Combine để ghi kết quả đầu ra trở lại. Ở đây, M là số lượng token được xử lý bởi một lệnh gọi: nó nhỏ trong quá trình giải mã và xác minh suy đoán, nhưng có thể lên tới hàng nghìn trong quá trình prefill. Chúng tôi điều phối đến các nhân khác nhau tùy theo M.

Mix

Mix sử dụng phép chiếu hạng thấp (low-rank projection) để tạo ra các cổng (gate) theo từng phần tử và giảm bốn luồng dư thành một trạng thái ẩn. Đối với M ≤ 16, chúng tôi sử dụng nhân GEMM CuTe split-K độ trễ thấp từ FlashInfer PR #4266. Split-K phân chia chiều K để nhiều CTA có thể xử lý cùng một vùng đầu ra song song, bù đắp cho sự song song hạn chế của chiều M. SiLU, Sigmoid, gating và phép giảm cuối cùng được hợp nhất vào hai phần kết thúc (epilogue) của GEMM, tránh việc ghi trung gian vào bộ nhớ toàn cục. Trọng số chiếu lên (up-projection) được sắp xếp lại ngoại tuyến để bốn giá trị cổng cho mỗi đầu ra có thể được giảm cục bộ bên trong một tile. Đối với M lớn hơn, cách triển khai sử dụng cuBLAS, vốn hiệu quả hơn ở các hình dạng này.

Trên NVIDIA B300 tại M = 4, đường dẫn hợp nhất giảm độ trễ Mix từ 12,36 xuống 6,03 µs, tăng tốc 2,05 lần ở cấp độ nhân. Trong một điểm chuẩn giải mã suy đoán end-to-end so với đường dẫn Triton trước đó, thông lượng cải thiện 7,6%.

Combine

Combine tính toán bốn hệ số tiêm (injection coefficient) và áp dụng cập nhật dư cho bốn luồng. Đối với M lớn, một nhân hợp nhất xử lý từng hàng token trong một lượt duy nhất. Tại M nhỏ, cách ánh xạ này để lộ quá ít CTA, vì vậy đường dẫn M ≤ 32 chia mỗi hàng dọc theo chiều ẩn. Cách triển khai hai nhân kết quả cung cấp đủ sự song song trong khi vẫn bảo toàn thứ tự tích lũy FP32 tham chiếu và các đầu ra giống hệt nhau về bit.

Tại M = 4, đường dẫn chia nhỏ giảm độ trễ Combine từ 4,17 xuống 2,13 µs, tăng tốc 1,96 lần ở cấp độ nhân. Trong một điểm chuẩn end-to-end riêng biệt so với nhân một-CTA-mỗi-hàng ban đầu, thông lượng cải thiện 5,49%. Đối với M lớn, nhân hợp nhất nhanh hơn tới 2,54 lần so với cơ sở dựa trên cuBLAS và đạt băng thông hiệu dụng 6144 GB/s.

Việc điều phối nhận biết hình dạng (shape-aware dispatch) cho phép HC sử dụng đường dẫn thực thi phù hợp cho cả giải mã độ trễ thấp và prefill quy mô lớn.

Nhúng theo lớp (Per-Layer Embeddings - PLE)

Kiến trúc

Mô hình này đặt PLE, một bộ nhớ nhúng N-gram đã học được đánh địa chỉ bằng băm, tại khối giải mã thứ hai (cấu hình layer ID 2, tương ứng với chỉ số 1 bắt đầu từ 0). 51,2 tỷ tham số nhúng của nó, khoảng 95,4 GiB ở định dạng BF16, là các trọng số mô hình cố định thay vì bộ nhớ đệm KV hoặc bộ nhớ chú ý có thể thay đổi.

Đối với token x_t, tám đầu băm 2-gram sử dụng (x_{t-1}, x_t) và tám đầu băm 3-gram sử dụng (x_{t-2}, x_{t-1}, x_t), tạo ra 16 ID hàng nhúng. Mỗi hàng đóng góp 160 giá trị, được nối thành E_t với hình dạng [2560].

PLE tại khối giải mã thứ hai. Truy xuất N-gram thưa được cổng vào bốn nhánh HC trước khi thực hiện HC Mix. SGLang di chuyển bảng phân mảnh song song theo từ vựng (vocabulary-parallel) vào bộ nhớ host được ghim (pinned host memory) và chỉ thu thập 16 hàng đã chọn cho mỗi token.

Et∈R2560⟶Kt∈R4×2560,Vt∈R2560E_t \in \mathbb{R}^{2560} \longrightarrow K_t \in \mathbb{R}^{4 \times 2560}, \qquad V_t \in \mathbb{R}^{2560} Rt∈R4×2560⟶Qt∈R4×2560R_t \in \mathbb{R}^{4 \times 2560} \longrightarrow Q_t \in \mathbb{R}^{4 \times 2560} gt=Gate(Norm(Qt),Norm(Kt))∈R4×1,Ut=gt⊙Vtg_t = \mathrm{Gate}(\mathrm{Norm}(Q_t), \mathrm{Norm}(K_t)) \in \mathbb{R}^{4 \times 1}, \qquad U_t = g_t \odot V_t Δt=Ut+SiLU(DWConv(RMSNorm(Ut)))\Delta_t = U_t + \mathrm{SiLU}(\mathrm{DWConv}(\mathrm{RMSNorm}(U_t))) R~t=Rt+Δt,R~t→HC Mixht∈R2560\widetilde{R}_t = R_t + \Delta_t, \qquad \widetilde{R}_t \xrightarrow{\mathrm{HC\ Mix}} h_t \in \mathbb{R}^{2560}

Dòng thứ tư tạo ra PLE delta bằng cách thêm giá trị đã cổng vào đầu ra chuyển đổi ngắn (short-conv) của nó; dòng thứ năm tiêm delta đó vào trạng thái HC. PLE giữ hai trạng thái cục bộ theo yêu cầu: hai ID token gần đây được sử dụng để băm và một lịch sử short-conv có hình dạng [10240, 9]. Mô hình mục tiêu giữ lại PLE trong quá trình prefill, giải mã và xác minh mục tiêu; chỉ mô hình nháp MTP một lớp là vô hiệu hóa nó.

Offload bộ nhớ host được ghim thưa

Vì mỗi token chỉ chạm vào 16 hàng, SGLang giữ bảng phân mảnh song song theo từ vựng của mỗi rank trong bộ nhớ host được ghim và thu thập các hàng đã chọn vào một bộ đệm GPU BF16 nhỏ với nhân Triton UVA. Một luồng CUDA chuyên dụng chồng lấp quá trình thu thập với khối giải mã đầu tiên. Các đường dẫn giảm TP và thu thập/phân tán DP hiện có được bảo toàn: offload thay đổi vị trí lưu trữ, không thay đổi quyền sở hữu bảng hoặc toán học PLE. Đường dẫn CUDA này được bật theo mặc định khi kiểu dữ liệu mô hình hiệu dụng là BF16 và vẫn tách biệt với bộ nhớ đệm KV hoặc offload lớp chung.

Trên H200 với TP4 và MTP-213 (2 bước nháp, top-k 1 và 3 token nháp cho mỗi lần xác minh mục tiêu), offload đã giảm trọng số mô hình mục tiêu từ 83,91 xuống 60,45 GiB mỗi GPU (-23,46 GiB) và tăng dung lượng KV được phân bổ từ 1,84 triệu lên 3,28 triệu token (+78,54%) ở cùng một tỷ lệ bộ nhớ. Với 1, 2 và 4 yêu cầu đồng thời, thông lượng khớp về cơ bản không thay đổi (-0,07% trung bình nhân). Bốn lời nhắc cố định với mỗi lời nhắc tạo ra 128 token khớp chính xác về ID đầu ra; dấu vết logprob của token được chọn đã ghi lại cho trường hợp đầu tiên cũng khớp chính xác.

Lời cảm ơn

Công trình này là sự hợp tác giữa đội ngũ SGLang tại RadixArk, Qwen, NVIDIA và AMD.

Cộng đồng SGLang: Qiaolin Yu, Yuhao Yang, Cheng Wan, Xinyuan Tong, Zijie Xia, Ke Bao, Mingyi Lu, Haoguang Cai, Banghua Zhu, Ying Sheng

Qwen: Yi Zhang, Yizhong Cao, Guangda Liu

Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ LMSYS: Blog (Chatbot Arena ). 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.