OpenArchLabOpen Architecture — From Models to Systems

3A · 3D Axial RoPE (16, 56, 56)

3A · 3D Axial RoPE (16, 56, 56) & Lưới tọa độ tâm không (Zero-Centered Grid)

RoPE 3D chia 128 chiều mỗi đầu thành ba dải 16, 56, 56 cho frame, height, width; token chữ đi thẳng cả ba trục còn token ảnh dùng lưới tâm (0, 0) để vị trí không trôi theo độ dài prompt.

LESSON ID qwen21-3d-axial-rope GROUP Kiến trúc & Giải phẫu
Mục lục bài học

1Định nghĩa

Bài 3A là khối gắn địa chỉ cho attention: RoPE (Rotary Position Embedding) gắn vị trí bằng phép xoay hoặc hãy nói thay vì cộng một vector vị trí cộng thêm, attention xoay cặp chiều của Q và K theo góc tỷ lệ với vị trí; do tích của hai vector xoay chỉ phụ thuộc chênh lệch góc, attention đọc được khoảng cách tương đối giữa hai token. DiT 2.1 cần vị trí không gian nên dùng QwenImage21Rope với ba trục đi sẵn: cắt 128 chiều của mỗi đầu (attention_head_dim = 128) thành ba dải (16, 56, 56) — axes_dims_rope — tương ứng frame, height, width.

Về cơ chế, hai kiểu địa chỉ cùng tồn tại trong một chuỗi: token chữ tăng đều cả ba trục — meaning đi trong hành lang như leo thang, mỗi bước cộng đồng dề +1 cho từng trục; token ảnh, nhận diện bằng image_ids từ bài 2A, tuân theo lưới 3D: frame_index đứng yên trên toàn khối ảnh (một ảnh một 'tầng'), hai trục space đánh số quanh tâm (0, 0): height_index chạy từ −(H − H//2) đến H//2 − 1, width_index tương tự với W — ví dụ H = 4 cho bốn giá trị (−2, −1, 0, 1). Lý do chọn tâm: nếu đánh số ảnh từ đầu lưới như chữ, tọa độ token ảnh sẽ trôi theo độ dài phần chữ đứng trước; lưới tâm giữ tọa độ trong khối ảnh phụ thuộc nội dung ảnh chứ không phụ thuộc vị trí trong chuỗi. Kết quả được áp vào phép xoay của bài 4A và phối hợp với bài 3C cùng khối.

Ví dụ đời thường: 3A giống toà khách sạn có ba loại tọa độ: số tầng (frame), hàng phòng (height) và cột phòng (width). Khu chữ là hành lang chạy suốt toà: mỗi bước treo biển leo một tầng và dịch một ô cả ba chiều; khu ảnh là từng phòng riêng — dù phòng nằm ở tầng nào, mọi vật trong phòng vẫn đánh tọa độ quanh tâm phòng, chẳng hạn hàng từ −2 đến 1. Nhờ đó, độ dài bài thuyết trình trước phòng (độ dài prompt) không làm ghế trong phòng xê dịch. Giới hạn của phép so: RoPE chỉ gắn vị trí chứ không gắn nội dung; nội dung nằm trong token 4096 chiều.

2Luồng

Cách đọc hình (Cột 2, khối 3A trên đỉnh cột): nhận chuỗi đồng nhất cùng metadata image_ids từ khối 2A, chia 128 chiều mỗi đầu thành ba dải (16, 56, 56), gán token chữ đi thẳng ba trục còn token ảnh dùng lưới tâm (0, 0); bảng tọa độ chảy xuống cùng Cột 2 cho khối 3B (mức nhiễu) và khối 3C (mặt nạ), hoặc trực tiếp tới attention ở Cột 3; xem bước [3A] trong [Bài Lab tổng hợp Qwen-Image-2.1](/courses/qwen-image-2-1/qwen21-lab/qwen21-end-to-end-lab/).

Sơ đồ luồng dữ liệu 4 cột · 10 thành phần (1A → 6B)

Kiến trúc Qwen-Image-2.1 & Ánh xạ 1:1 với Bài Lab tổng hợp

Bắt đầu từ 1A ở góc dưới Cột 1 đi lên 1B → 2A, sang Cột 2 (3A → 3B → 3C), qua Cột 3 (4A ↔ 6A) và kết thúc ở Cột 4 (5A → 6B). Di chuột hoặc bấm vào từng khối để xem pop-over và đối chiếu với Lab.

Sơ đồ luồng dữ liệu 4 cột của kiến trúc Qwen-Image-2.1 gồm 10 thành phần từ 1A đến 6B
3A2 · 3D RoPE, Dual-t AdaLN & Block Mask
axes_dims_rope = (16, 56, 56) · Text: f=h=w++ · Image: freeze f, center (h, w) ∈ [-H/2..H/2, -W/2..W/2)

3A · 3D Axial RoPE (16, 56, 56)

Gắn địa chỉ cho từng token: mỗi token biết mình đứng ở đâu theo 3 trục (ảnh thứ mấy, hàng, cột) thông qua phép xoay RoPE áp lên Q và K.

Mục đích
Attention tự nó không biết thứ tự hay vị trí. Với ảnh, mô hình cần biết điểm nào nằm trên, dưới, trái, phải điểm nào. Căn tâm lưới ảnh về (0, 0) giúp tọa độ bên trong ảnh không bị xê dịch dù prompt phía trước dài hay ngắn.
Đầu vào
Nhãn image_ids từ 2A và kích thước lưới (H, W) của từng ảnh. 128 chiều của mỗi head được chia thành 3 dải (16, 56, 56) cho 3 trục.
Đầu ra
Bảng góc xoay cos/sin cho từng vị trí: token chữ tăng đều cả 3 trục; token ảnh giữ cố định trục frame và đánh số hàng/cột từ −H/2 đến H/2. Bảng này được áp lên Q, K trong cả 32 lớp ở 4A.

Mũi tên từ 2A sang 3A ở đầu Cột 2: QwenImage21Rope chia 128 chiều mỗi head thành 16 chiều cho trục thứ tự khung (Frame), 56 chiều cho chiều cao (Height) và 56 chiều cho chiều rộng (Width). Các token chữ tăng đều trên cả 3 trục; nhưng khi gặp một khối ảnh, trục Frame được ghim cố định còn lưới (Height, Width) được đánh số đối xứng quanh tâm (0, 0) từ -H/2 đến +H/2 giúp bố cục không gian của ảnh hoàn toàn độc lập với độ dài câu lệnh đứng trước.

Sơ đồ luồng (3 bước)
  1. 3A · Chia 128 chiều ba dải

    Dải 16 cho frame, 56 cho height, 56 cho width; tổng đúng bằng attention_head_dim = 128.

  2. 3A · Chữ đi thẳng, ảnh về tâm

    Token chữ tăng đều cả ba trục; trong từng khối ảnh, frame đứng yên và height, width đánh số quanh (0, 0).

  3. 3A · Áp vào attention

    Bảng tọa độ ba trục được áp vào phép xoay Q và K của từng đầu trong bài 4A.

Mã Mermaid
flowchart TD
  step1["3A · Chia 128 chiều ba dải"]
  step2["3A · Chữ đi thẳng, ảnh về tâm"]
  step3["3A · Áp vào attention"]
  step1 --> step2
  step2 --> step3

3Giải pháp

Bài toán cần giải: attention cần biết hàng và cột để ghép các mảnh ảnh đúng mối quan hệ không gian, mà vẫn không phá vỡ nhân quả theo thứ tự chuỗi. Sau bài này, bạn cần tự kể được: ba trục chứa gì, vì sao chữ tăng cả ba trục, và vì sao ảnh dùng lưới tâm.

Trạng thái đầu vào: chuỗi đồng nhất cùng metadata image_ids từ bài 2A để xác định ranh giới từng khối ảnh. RoPE không học trọng số: bảng tọa độ dựng từ chỉ số vị trí.

Các thao tác và lý do: (1) chia 128 chiều thành ba dải 16 + 56 + 56, mỗi dải xoay theo một trục riêng; (2) đặt token chữ đi thẳng cả ba trục để phần chữ vẫn giữ được thứ tự phẳng như một dòng; (3) đặt token ảnh dùng lưới tâm không (0, 0) cho height và width, frame đứng trên toàn khối — nhờ đó cụm token của một ảnh luôn giữ cấu trúc hình học như nhau.

Đầu ra và cách đọc: bảng tọa độ ba trục cho từng token (frame, height, width) được áp vào attention ở bài 4A. Khi đọc bước 3A của lab, hãy so tọa độ của hai token ảnh nằm cùng hàng để thấy chênh lệch width nhưng height như nhau, bất kể độ dài prompt.

Giới hạn: tổng ba dải phải đúng 128; đổi cấu hình (số đầu hoặc chiều đầu khác) sẽ lệch phép xoay; khóa frame_index trong khối ảnh nghĩa là RoPE không phân biệt ảnh này với ảnh khác bằng chính trục frame — nhiệm vụ đó thuộc về thứ tự chuỗi và mặt nạ ở bài 3C.

4Profiling

  • Quan sát tọa độ ba trục

    Bước 3A của lab in bảng tọa độ cho vài token chữ và vài token ảnh: token chữ tăng đều cả ba trục; trong khối ảnh, height và width phải quanh (0, 0) và frame đứng yên trên khối. So với bảng quy tắc ở phần Định nghĩa.

  • Lưới tâm độc lập với độ dài prompt

    Chạy cùng một ảnh đích với hai prompt khác độ dài (ví dụ 10 và 30 token chữ) trong bước 3A của lab: tọa độ của các token trong khối ảnh phải giống nhau. Không kết luận chất lượng ảnh từ thí nghiệm này — nó chỉ chứng minh tính bình ổn vị trí, không hơn.

  • Kiểm tra tổng dải chiều

    16 + 56 + 56 = 128 phải bằng attention_head_dim; nếu cấu hình khác (ví dụ thay attention_head_dim), phép xoay không vắt hết chiều và vế attention sẽ sai shape trước khi chạy chi tiết hơn; so lại cấu hình với model card trước khi đi sâu hơn.

Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.

5Ví dụ

Đánh số lưới tâm với H = 4

Input: một khối ảnh cao H = 4 ô. Hãy dự đoán danh sách height_index theo công thức lưới tâm. Kết quả: từ −(4 − 2) đến 2 − 1, tức −2, −1, 0, 1 — đúng 4 giá trị cho 4 hàng. Cách quan sát: bước 3A của [Bài Lab tổng hợp Qwen-Image-2.1](/courses/qwen-image-2-1/qwen21-lab/qwen21-end-to-end-lab/) in bảng tọa độ của khối ảnh; đối chiếu width_index với W tương tự. Tự kiểm tra: với H = 5, danh sách là −3, −2, −1, 0, 1 vì H//2 = 2 và −(5 − 2) = −3.

Chữ đi đều ba trục

Input: dãy 6 token chữ đứng đầu chuỗi. Hãy dự đoán tọa độ của token thứ 2 so với token thứ 1 trên từng trục, từ RoPE. Kết quả kỳ vọng: chênh lệch +1 trên cả frame, height và width — nói cách khác, token chữ leo đều cả ba chiều như cùng một thang máy. Cách quan sát: bước 3A của lab in tọa độ từng token; để đo vị trí tương đối, lấy chênh lệch hai dòng. Giới hạn: RoPE chỉ đảm bảo khoảng cách; giá trị tuyệt đối xuất phát của dải chữ không ảnh hưởng attention trong phạm vi chuỗi hiện tại.

6Thuật ngữ

RoPE (Rotary Position Embedding)
Gắn vị trí bằng phép xoay: cặp chiều của Q và K xoay theo góc tỷ lệ vị trí, giúp attention đo khoảng cách tương đối.
axes_dims_rope (16, 56, 56)
Cắt 128 chiều của mỗi đầu thành ba dải: 16 cho trục frame, 56 cho height, 56 cho width.
frame_index
Chỉ số trục 'cảnh hoặc ảnh'; trong một khối ảnh nó bị chặn đứng, không tăng theo từng token.
Lưới tâm (0, 0)
Cách đánh số hai trục không gian của ảnh quanh tâm: height từ −(H − H//2) đến H//2 − 1, width tương tự.
QwenImage21Rope
Lớp dựng bảng tọa độ ba trục cho từng token dựa trên metadata của chuỗi.
Glossary (4)
Trục frame
Trục phân biệt các khối ảnh hoặc cảnh; giữ vai trò gần như trục thời gian 3D.
Hàng và cột ảnh
Hai trục height và width cho biết ô latent nằm hàng nào, cột nào trong lưới ảnh.
Vị trí tương đối
Tính chất của RoPE: attention chỉ cảm nhận chênh lệch giữa hai vị trí, không quan tâm giá trị bắt đầu.
Row-major
Thứ tự đọc lưới theo hàng: trái qua phải hết một hàng mới sang hàng dưới.

7Bài liên quan

8Nguồn