Phép chiếu tuyến tính gộp cho Attention đa đầu (Fused Multi-Head Linear Projection)
Trong các mô hình Transformer hiện đại (Llama, GPT, Mistral), thay vì tạo 3 tầng tuyến tính riêng biệt cho Query, Key, Value, kiến trúc chuẩn gộp thành một ma trận chiếu duy nhất W…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: batched-matrix-multiplication-bmm, einsum-tensor-operations-llm.
Nội dung đề bài
Mô tả bài toán
Trong các mô hình Transformer hiện đại (Llama, GPT, Mistral), thay vì tạo 3 tầng tuyến tính riêng biệt cho Query, Key, Value, kiến trúc chuẩn gộp thành một ma trận chiếu duy nhất Wqkv ∈ RD × 3D để tối ưu hóa nhân tính toán GPU (Kernel Fusion).
Cho đầu vào tensor X ∈ RB × S × D:
- Chiếu đồng thời: QKV = X Wqkv + bqkv ∈ RB × S × 3D.
- Tách thành 3 tensor riêng biệt Q, K, V mỗi tensor có shape (B, S, D).
- Tái định hình và hoán vị từng tensor thành dạng đa đầu (Multi-Head):
(B, S, D) → (B, H, S, Dh) trong đó H là số head, Dh là số chiều mỗi head sao cho H × Dh = D.
Hãy viết hàm fused_qkv_projection(X, W_qkv, b_qkv, num_heads) -> tuple[np.ndarray, np.ndarray, np.ndarray]:
- Nhận X (B, S, D), Wqkv (D, 3D), bqkv (3D), num_heads.
- Trả về tuple 3 tensor (Q, K, V) đều có shape (B, H, S, Dh) kiểu
np.float64. - Ném
ValueErrornếu D không chia hết cho num_heads.
Input
- Hàm
fused_qkv_projection(X,W_qkv,b_qkv,num_heads): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
fused_qkv_projection: Trả về kết quả kiểuTuple[np.ndarray, np.ndarray, np.ndarray]theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 6000ms.
- Giới hạn bộ nhớ: 512MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
B, S, D = (2, 8, 64)
num_heads = 4
head_dim = 16
X = np.random.randn(B, S, D)
W_qkv = np.random.randn(D, 3 * D)
b_qkv = np.zeros(3 * D)
Q, K, V = fused_qkv_projection(X, W_qkv, b_qkv, num_heads)Output
(Array shape: (2, 4, 8, 16), dtype=float64, Array shape: (2, 4, 8, 16), dtype=float64, Array shape: (2, 4, 8, 16), dtype=float64)Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
B, S, D = (1, 4, 8)
num_heads = 2
X = np.random.randn(B, S, D)
W_qkv = np.random.randn(D, 3 * D)
b_qkv = np.random.randn(3 * D)
Q, K, V = fused_qkv_projection(X, W_qkv, b_qkv, num_heads)
W_q = W_qkv[:, 0:D]
b_q = b_qkv[0:D]Output
[ 0.9462, -0.6881, -0.1986, -0.9899, -0.2105, 0.6841, 0.1346, 1.3115]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
