Memory wall: vì sao LLM và AI accelerator bị nghẽn ở bộ nhớ

Memory wall, arithmetic intensity và roofline model: tính ridge point của B200, vì sao decode bị memory bound còn prefill compute bound, và batching giúp ra sao.

Đã duyệt độc lập · cập nhật 22/10/2026 · 12 min

1. Chip nhanh hơn hàng nghìn lần, workload không nhanh theo

Kaoutar El Maghraoui (trên màn hình ghi Principal Research Scientist, IBM) mở đầu bằng một con số: trong hai thập kỷ qua, khả năng tính toán (compute) của một con chip đơn lẻ đã tăng khoảng 6.000 lần (theo video đăng ngày 18/10/2026). Nghe vậy, bạn sẽ kỳ vọng các workload của mình cũng chạy nhanh hơn theo. Nhưng thực tế không phải vậy.

Kaoutar El Maghraoui nói trước bảng kính đen, góc dưới có tên và chức danh Principal Research Scientist, IBM
Kaoutar El Maghraoui, Principal Research Scientist ở IBM, trong loạt video "think series" của IBM Technology (chức danh theo màn hình trong video đăng ngày 18/10/2026). Phần còn lại của video, chị vừa giảng vừa vẽ trực tiếp lên một tấm bảng kính.

Chị kể: các kỹ sư, khi profile workload của mình, thường không thấy khác biệt hiệu năng bao nhiêu. Còn những con chip kia thì phần lớn thời gian ngồi không (idle), chờ dữ liệu được đưa lên từ bộ nhớ. Hiện tượng đó có tên: the memory wall, bức tường bộ nhớ.

2. Ba câu hỏi mà memory wall trả lời

Theo Kaoutar, nếu công việc của bạn là build, train hay serve model, thì ý tưởng này giải thích được ba điều:

  • Vì sao workload hay AI model của bạn không chạy nhanh gấp đôi khi số FLOPs của chip tăng gấp đôi.
  • Vì sao batching giúp ích ở một số workload, nhưng ở workload khác thì không.
  • Vì sao các AI accelerator được thiết kế theo cách mà chúng đang được thiết kế.
Memory wall giải thích Chip gấp đôi FLOPsnhưng workloadkhông nhanh gấp đôi Batching giúp đượcworkload nàynhưng không giúp workload kia Vì sao AI acceleratorđược thiết kếtheo cách đó
Hình 2.1Ba điều Kaoutar hứa sẽ giải thích bằng một ý tưởng duy nhất, dành cho người build, train hoặc serve model.

3. Hai đường tăng trưởng: compute và memory bandwidth

Chị vẽ lên bảng một biểu đồ tăng trưởng theo thang log (growth, log scale), trục ngang từ 2006 tới 2026, đúng hai mươi năm chị quan tâm. Trong khoảng thời gian đó, có hai đại lượng tăng lên với hai tốc độ khác nhau.

Đại lượng thứ nhất là compute, đo bằng FLOPs per second. Kaoutar lấy ví dụ: GPU của NVIDIA vào khoảng đầu năm 2006 chạy ở mức chừng vài trăm tỷ phép tính mỗi giây. Còn khi nhìn tới B200 năm 2025, con chip này làm được khoảng 2.000 nghìn tỷ phép tính mỗi giây. Tính ra, mức tăng là vào khoảng 6.500 lần (các con số phần cứng này theo video đăng ngày 18/10/2026).

Cùng lúc đó, trong cùng khoảng thời gian, đại lượng thứ hai cũng tăng: memory bandwidth, đo bằng byte mỗi giây. Nhưng như trên bảng, đường này tăng chậm hơn nhiều so với compute. Và khoảng cách giữa hai đường cứ ngày càng rộng ra. Chị nói khoảng cách đó vào chừng "7x"; trên bảng, chữ viết ở giữa hai đường là "70x". Theo Kaoutar (video đăng ngày 18/10/2026), chính khoảng cách này là cái được gọi là memory wall.

Biểu đồ The memory wall trên bảng kính: đường compute tăng tới B200 khoảng 6.500x, đường memory bandwidth thấp hơn, chữ wall 70x ở giữa
Biểu đồ "The memory wall": trục dọc là mức tăng theo thang log, trục ngang từ 2006 tới 2026. Đường compute (xanh) lên tới B200 với nhãn "~6,500x", đường memory bandwidth (bytes/s, hồng) nằm thấp hơn nhiều, và vùng giữa hai đường được ghi là "wall 70x" (các con số trên bảng theo video đăng ngày 18/10/2026).

4. Arithmetic intensity: FLOPs trên mỗi byte

Từ đó, Kaoutar rút ra: một con chip nhanh hơn không nhất thiết đồng nghĩa với workload nhanh hơn, nhất là khi chúng ta không đưa dữ liệu vào cho nó kịp với tốc độ nó cần. Đó là toàn bộ ý tưởng đằng sau memory wall. Thêm compute không tự động cải thiện hiệu năng.

Lý do, theo chị, nằm ở một tỷ số duy nhất gọi là arithmetic intensity. Arithmetic intensity được định nghĩa là số phép toán bạn thực hiện trên mỗi đơn vị byte, tức là FLOPs per byte.

  • Nếu bạn làm được rất, rất nhiều phép toán trên mỗi byte dữ liệu chuyển từ bộ nhớ lên, bạn đang ở vùng gọi là compute-bound (bị giới hạn bởi khả năng tính toán).
  • Nếu bạn không làm được nhiều phép toán trên mỗi byte di chuyển, tức là bạn làm ít phép toán hơn hẳn so với lượng dữ liệu kéo từ bộ nhớ, bạn đang ở vùng memory-bound (bị giới hạn bởi bộ nhớ).
arithmetic intensity = FLOPs / byte di chuyển ít phép toán trên mỗi byte→ memory-bound nhiều phép toán trên mỗi byte→ compute-bound
Hình 4.1Định nghĩa Kaoutar dùng cho cả phần còn lại: tỷ số giữa số phép toán và số byte kéo từ bộ nhớ quyết định workload rơi vào vùng nào.

5. Vẽ roofline model

Để thấy rõ hơn, Kaoutar vẽ một mô hình gọi là roofline model. Trục ngang (x-axis) là arithmetic intensity, đo như chị vừa nói bằng FLOPs per byte, tức số FLOPs chia cho số byte. Trục dọc (y-axis) chị gọi là attainable bandwidth, đo bằng FLOPs per second.

Lên trên đó, chị vẽ đúng hai đại lượng đã vẽ ở biểu đồ trước:

  • Memory bandwidth, đo bằng byte mỗi giây: một đường xiên đi lên từ gốc toạ độ.
  • Peak compute, lại đo bằng FLOPs per second: một đường nằm ngang ở phía trên.

Chị nhấn mạnh một điểm: thứ được đo trên trục ngang là một thuộc tính của workload (workload property), không phải của chip.

Kaoutar đang viết nhãn FLOPs/s Peak Compute lên đường ngang của roofline model
Kaoutar đang vẽ roofline model: trục ngang "arithmetic intensity, FLOPs / Byte", trục dọc "attainable bandwidth, FLOPs/s", đường xiên "memory bandwidth, bytes/s" và đường ngang phía trên mà chị đang ghi nhãn "FLOPs/s, Peak Compute".

6. Ridge point và giới hạn vật lý của chip

Hai đường đó cắt nhau tại một điểm gọi là ridge point. Kaoutar đưa ví dụ: với một GPU B200, giá trị ridge point là 281 (chị đọc là "281 flops per second", trên bảng ghi "281 F/s"; con số và cách tính theo video đăng ngày 18/10/2026). Đây là một thuộc tính của con chip.

Roofline model hoàn chỉnh với ridge point 281 được khoanh tròn ở chỗ đường memory bandwidth gặp đường peak compute
Roofline model hoàn chỉnh: chỗ đường memory bandwidth gặp đường peak compute được khoanh tròn, ghi "Ridge point 281", với một đường đứt nét thả xuống trục arithmetic intensity.

Chị giải thích hai phần của biểu đồ: đoạn nằm ngang là peak compute mà con chip làm được, còn đoạn xiên chính là memory bandwidth của bạn. Ý tưởng là: nếu bạn cải thiện arithmetic intensity, bạn cũng cải thiện attainable bandwidth, tức là số FLOPs con chip làm được mỗi giây. Nhưng càng tiến gần tới ridge point, bạn càng bắt đầu chạm vào giới hạn vật lý của những gì con chip làm được, về cơ bản là peak bandwidth của chip.

Vì vậy, khi tính arithmetic intensity, một đặc tính phụ thuộc vào workload, bạn cần so nó với ridge point, xem nó nằm ở đâu so với điểm đó.

7. Con số 281 của B200 đến từ đâu

Kaoutar quay lại xem con số 281 ở đâu ra. Theo spec mà chị dùng (video đăng ngày 18/10/2026), một GPU B200 có peak compute khoảng 2,25 petaFLOPs mỗi giây, còn bộ nhớ đạt 8 terabyte mỗi giây. Chị tính ridge point bằng cách lấy 2,25 petaFLOPs chia cho 8 terabyte mỗi giây, và ra khoảng 281.

Trên bảng, kết quả được ghi là "281 FLOPs/s", đúng như chị đọc.

Phép tính 2.25 PFLOPs/s chia 8 TB/s bằng 281 viết bên trái roofline model
Bên trái bảng là phép tính ridge point của một GPU B200: 2,25 PFLOPs/s và 8 TB/s, rồi 2,25 PF ÷ 8 TB/s ≈ 281. Bên phải, con số 281 được gạch chân ở ridge point.

Chị thêm một lưu ý nhỏ (video đăng ngày 18/10/2026): trên spec GPU của NVIDIA, con số ghi là 36 petaFLOPs mỗi giây, nhưng đó là cho 8 GPU, và cũng là con số cho BF16 ở dạng sparse. Nên cách làm là chia đôi con số đó, rồi chia tiếp cho 8, ra xấp xỉ 2,25: đó là con số bạn cần cho một chip GPU đơn lẻ. Và từ đó mới có con số 281.

Đối chiếu với trang HGX của NVIDIA (đọc ngày 22/10/2026): cấu hình HGX B200 gồm 8 GPU Blackwell SXM, dòng FP16/BF16 Tensor Core ghi 36 PFLOPS, kèm chú thích đó là spec sparse và spec dense bằng một nửa.

36 PFLOPs/s8 GPU, BF16 sparse ÷ 2chia đôi ÷ 8 ≈ 2,25PFLOPs/s, một GPU ÷ 8 TB/s≈ 281 từ spec của cả hệ 8 GPU về ridge point của một chip B200 (theo video đăng ngày 18/10/2026)
Hình 7.1Các bước Kaoutar dùng để đổi con số trên spec sheet thành ridge point của một GPU.

8. Đọc biểu đồ: memory bound hay compute bound

Vậy điều này có nghĩa gì với workload của bạn? Kaoutar đọc biểu đồ:

  • Nếu arithmetic intensity của workload nằm ở vùng bên trái ridge point, bạn memory bound: bạn không xử lý được nhiều phép toán như mong muốn trên mỗi byte bộ nhớ được di chuyển.
  • Nếu arithmetic intensity lớn hơn ridge point, ở đây là con số 281, bạn compute bound.

Và cách đọc này cũng cho bạn biết workload cụ thể của mình đang vướng nút thắt cổ chai (bottleneck) nào.

9. Decode và prefill: hai giai đoạn của một LLM

Chị lấy hai ví dụ: giai đoạn decode và giai đoạn prefill trong một large language model.

Kaoutar giải thích: ở giai đoạn decode, chúng ta phải đọc một lượng lớn weights từ bộ nhớ để sinh ra từng token một, khi dùng batch size bằng 1. Vì thế, arithmetic intensity của decode thường nằm ở vùng tận cùng bên trái so với ridge point, và điều đó đặt bạn vào vùng memory bound. Đó là workload decode.

Roofline model có thêm nhãn Memory Bound bên trái, Compute Bound bên phải và điểm Decode sát gốc toạ độ
Kaoutar ghi "Memory Bound" cho vùng bên trái đường đứt nét, "Compute Bound" cho vùng bên phải, rồi đánh dấu "Decode" ở sát gốc toạ độ, xa về bên trái ridge point 281.

Còn prefill thì khác. Theo Kaoutar (video đăng ngày 18/10/2026), ở prefill, ta thực hiện những phép GEMM (nhân ma trận) lớn. Chị nói ở đây ta làm hơn một nghìn FLOPs, arithmetic intensity lớn hơn 1.000, trong khi ở decode, arithmetic intensity chỉ vào khoảng 1 (chị đọc cả hai con số với đơn vị "flops per second"; trên bảng, cạnh decode ghi "1 FLOP", còn mũi tên về bên phải ghi ">>1000 FLOPs"). Con số của prefill lớn hơn rất nhiều so với ridge point, và điều đó đặt prefill vào vùng compute bound.

Kết luận của chị: nếu bạn đang memory bound, thì dù có ném thêm compute vào workload cũng không giúp được bao nhiêu. Bạn cần đưa dữ liệu tới chip nhanh hơn.

10. Batching kéo decode về phía ridge point

Một kỹ thuật được dùng để giúp giải quyết vấn đề này là batching. Batching giúp dịch chuyển arithmetic intensity của bạn: nó tăng arithmetic intensity và đẩy nó lại gần ridge point hơn.

Batching làm gì? Nó cho phép bạn serve nhiều request cùng một lúc. Khi đó, bạn dùng lại cùng những weights đã nạp trong bộ nhớ nhiều lần để thực hiện nhiều lượt sinh token. Nói cách khác, bạn làm nhiều phép toán hơn hẳn với cùng một lượng bộ nhớ đã di chuyển. Điều đó cải thiện arithmetic intensity, đưa bạn lại gần ridge point, và cải thiện hiệu năng.

Mũi tên Batch đẩy điểm Decode dọc đường memory bandwidth về phía ridge point, bên phải có mũi tên ghi hơn 1000 FLOPs cho prefill
Mũi tên "Batch" kéo điểm Decode (khoảng 1 FLOP) dọc đường memory bandwidth lên về phía ridge point; ở bên phải, mũi tên ">>1000 FLOPs" chỉ vị trí của prefill, đã nằm trong vùng compute bound.

Theo Kaoutar (video đăng ngày 18/10/2026), đó là lý do nhiều môi trường LLM serving đã trưởng thành như vLLM, SGLang và TensorRT-LLM đều dùng batching và continuous batching để cải thiện hiệu năng.

11. Phần cứng không đổi, workload đổi

Kaoutar chỉ ra điều cần để ý trong ví dụ batching: con chip, tức phần cứng, vẫn giữ nguyên. Thứ thay đổi là workload. Chị gọi đây là một điểm rất quan trọng.

Arithmetic intensity cho bạn một đặc trưng của workload, cho bạn biết workload của mình nằm ở đâu so với ridge point. Nó cũng giúp giải thích bottleneck của bạn đến từ đâu: bạn cần ném thêm compute, hay bạn cần cải thiện phía bộ nhớ.

Kaoutar nói trước camera, phía sau là phép tính ridge point và roofline model với nhãn Batch, Decode, Memory Bound
Cận cảnh phần kết: sau lưng Kaoutar vẫn là phép tính ridge point và roofline model với các nhãn Batch, Decode và Memory Bound.

12. Tóm lại: ước lượng trước khi benchmark

Tổng kết lại, đó là memory wall. Ý chính, theo Kaoutar: để workload chạy nhanh hơn, chúng ta cần đưa dữ liệu tới chip nhanh hơn. Và có vài điều cần nắm:

  1. Trước khi benchmark, hãy ước lượng workload của bạn bằng arithmetic intensity để hiểu nó.
  2. Lấy từ spec sheet của phần cứng hai con số: peak memory bandwidth là bao nhiêu, và peak compute bạn có thể đạt là bao nhiêu.
  3. Dùng kỹ thuật roofline modeling như trên bảng để có ý niệm sơ bộ workload của mình đang nằm ở đâu.

Làm vậy, bạn hiểu mình cần tối ưu ở đâu, và nên dành thêm thời gian tối ưu workload vào chỗ nào. Chị cảm ơn mọi người đã xem.

Workloadước lượng arithmeticintensity (FLOPs/byte) Spec sheetpeak memory bandwidthvà peak compute Rooflineso với ridge point:tối ưu bộ nhớ hay compute làm trước khi benchmark
Hình 12.1Quy trình Kaoutar gợi ý ở phần kết: ước lượng trước, rồi mới benchmark và tối ưu.

Nguồn và liên kết 9 nguồn

  1. Tên gốc: The AI Memory Wall: Why LLMs & AI Accelerators Hit a Bottleneck
  2. Sự kiện: YouTube
  3. Video gốc: https://www.youtube.com/watch?v=4b6KpFN7Rio youtube.com
  4. Kênh YouTube IBM Technology (Kaoutar El Maghraoui): youtube.com/channel/UCKWaEZ-_VweaEx1j62do_vQ youtube.com
  5. Trang IBM Research mà phần mô tả video dẫn tới để tìm hiểu thêm về memory wall, bài "Materials Design of Phase Change Memory for Analog In-Memory Computing Applications" (MRS Fall Meeting 2024): research.ibm.com/publications/... research.ibm.com
  6. Trang NVIDIA HGX, bảng spec có HGX B200 (8 GPU, FP16/BF16 Tensor Core 36 PFLOPS ở dạng sparse; đọc ngày 22/10/2026): nvidia.com/en-us/data-center/hgx nvidia.com
  7. vLLM: github.com/vllm-project/vllm github.com
  8. SGLang: github.com/sgl-project/sglang github.com
  9. TensorRT-LLM: github.com/NVIDIA/TensorRT-LLM github.com