Nền tảng Máy tính

Một bảng thông số kỹ thuật thường nêu thông lượng đỉnh; nhưng khối lượng công việc (workload) gần như không bao giờ đạt được mức đó. Để thu hẹp khoảng cách, cần biết giới hạn vật lý nào kìm hãm việc thực thi trước tiên: độ trễ, băng thông bộ nhớ, cường độ tính toán hay năng lượng. Phụ lục này tập hợp các mô hình phần cứng ổn định và các giá trị theo bậc độ lớn, làm điểm tựa cho lập luận trên một nút đơn xuyên suốt cuốn sách. Nó cung cấp các chuẩn toán học để kiểm tra hoặc mở rộng các ước tính trong các chương. Các mô hình này giả định người đọc có nền tảng kiến trúc máy tính ở bậc đại học, đặc biệt là về hệ thống phân cấp bộ nhớ.

Cách sử dụng Phụ lục này

Phụ lục này được dùng như tài liệu tham khảo. Khi chẩn đoán vấn đề hiệu suất, hãy dùng phụ lục này để chuyển một triệu chứng mơ hồ (“nó chậm”) thành một ràng buộc cụ thể (“bị giới hạn bởi bộ nhớ khi kích thước batch là một”), rồi chọn đúng đòn bẩy có thể tạo ra thay đổi.

Các quy ước ở đây tuân theo ký hiệu dùng chung trong toàn bộ sách (ví dụ, \(B\) đại diện cho kích thước batch và \(\text{BW}\) cho băng thông).

  • Kiểm tra tính khả thi: Bắt đầu với section 1.1 để tham khảo các con số theo bậc độ lớn.
  • Chẩn đoán giới hạn chi phối: Sử dụng Mô hình Roofline trong section 1.2.1 để xác định xem khối lượng công việc (workload) bị giới hạn bởi tính toán (compute-bound) hay bởi bộ nhớ (memory-bound).
  • Suy luận về các giới hạn mở rộng: Sử dụng Định luật Amdahl và Gustafson trong section 1.2.3 để hiểu lý do việc thêm bộ tăng tốc có thể không làm giảm thời gian huấn luyện.
  • Chọn độ chính xác phù hợp: Sử dụng section 1.4.1 để suy luận về sự đánh đổi giữa FP32, BF16/FP16 và INT8 trong một hệ thống.
  • Tham khảo nội dung chi tiết của chương: Để có cái nhìn đầy đủ, hãy xem Tăng tốc phần cứng, Huấn luyện mô hìnhPhục vụ mô hình.

Dù phần cứng hiện đại rất đa dạng về kiến trúc bộ tăng tốc, cấu trúc liên kết kết nối và tùy chọn đóng gói, các định luật vật lý và các mô hình điểm nghẽn trình bày tại đây vẫn chi phối tất cả.

Các con số cần biết

Tương tự như danh sách “Latency Numbers Every Programmer Should Know”1 của Jeff Dean đã định hình cả một thế hệ kỹ sư hệ thống, những con số tham chiếu này giúp hình thành trực giác theo bậc độ lớn, rất cần cho thiết kế hệ thống ML. Dù các giá trị tuyệt đối và tỷ lệ có thể thay đổi theo công nghệ và khối lượng công việc (workload), nhưng thứ bậc thì bền vững hơn. Hãy ghi nhớ các mối quan hệ; dùng các con số cụ thể để kiểm tra tính hợp lý.

1 Jeff Dean: Là Nghiên cứu viên cao cấp của Google và là một trong những kiến trúc sư của cơ sở hạ tầng hệ thống phân tán của Google, bao gồm MapReduce, BigTable và TensorFlow. Các con số độ trễ của ông, ban đầu được trình bày cùng với Peter Norvig vào khoảng năm 2010, đã trở thành tài liệu tham khảo kinh điển cho các kỹ sư hệ thống. Các con số này đã được cập nhật qua nhiều năm khi phần cứng phát triển, nhưng thứ bậc độ trễ vẫn ổn định đáng kể; trực quan hóa tương tác của Colin Scott cho thấy thứ bậc độ trễ qua các thế hệ phần cứng (Scott 2012).

Scott, Colin. 2012. “Numbers Every Programmer Should Know by Year.”
Systems Perspective 1.1: Ba con số quan trọng nhất
  • Tỷ lệ năng lượng: Theo tài liệu tham khảo 45 nm đã dẫn, một thao tác đọc DRAM 32-bit tiêu tốn năng lượng gấp khoảng ~581× lần so với một phép nhân FP16. Điều này cho thấy vì sao cần tăng mật độ tính toán.
  • Dung lượng bộ nhớ cho trạng thái huấn luyện: Bao gồm trọng số mô hình (2 bytes FP16) + gradients (2 bytes FP16) + trọng số chính (4 bytes FP32) + trạng thái optimizer cho Adaptive Moment Estimation (Adam) với 8 bytes. Tổng cộng, mỗi tham số cần 16 bytes. Vì vậy, một mô hình 7B cần 112 GB chỉ để bắt đầu huấn luyện.
  • Giới hạn truyền dẫn sợi quang: Ánh sáng truyền trong sợi quang với tốc độ khoảng 200 km/ms. Chuyến đi khứ hồi xuyên quốc gia khoảng 40 ms được nêu trong bảng có bao gồm phần chi phí phụ có thể giảm bớt, nhưng bản thân truyền dẫn thì không thể tối ưu hóa để loại bỏ.

Các mối quan hệ tham chiếu

Các mối quan hệ này kết hợp các giới hạn vật lý hoặc số học với các phép đo đặc thù công nghệ; chỉ các giới hạn là bất biến.

Chi phí do tốc độ ánh sáng

Table 1 trình bày các mốc thời gian khứ hồi xấp xỉ. Phần thời gian do truyền dẫn là không thể giảm bớt.

Table 1: Tham chiếu tốc độ ánh sáng: Ánh sáng trong sợi quang đi được khoảng ~200 km/ms. Các con số khứ hồi xấp xỉ này có bao gồm phần chi phí phụ có thể giảm; chỉ độ trễ do lan truyền là không thể giảm.
Khoảng cách Độ trễ khứ hồi Ý nghĩa
Cùng trung tâm dữ liệu ~1 ms Huấn luyện phân tán khả thi
Xuyên quốc gia (US) ~40 ms Giảm ngân sách yêu cầu còn lại
Xuyên Đại Tây Dương ~60 ms Giảm thêm ngân sách yêu cầu
Xuyên Thái Bình Dương ~100 ms Tính cục bộ của dữ liệu là rất quan trọng

Hệ thống phân cấp năng lượng

Table 2 định lượng chi phí năng lượng của việc di chuyển dữ liệu so với tính toán—lý do cơ bản vì sao cường độ số học chi phối tối ưu hóa hiệu suất ML.2

2 Nguồn hệ thống phân cấp năng lượng: Các giá trị DRAM và số học lấy từ Horowitz (2014) (45 nm). Tỷ lệ L1 SRAM/thanh ghi là một mốc tham chiếu minh họa cho hệ thống phân cấp, không phải số đo của Horowitz. Tỷ lệ tiêu đề so sánh một lần truy cập DRAM 32-bit với một phép nhân dấu phẩy động 16-bit. Cả giá trị tuyệt đối lẫn tỷ lệ đều thay đổi theo quy trình, mạch, công nghệ bộ nhớ và độ rộng toán hạng; độ dài dây dẫn giúp giải thích vì sao việc di chuyển dữ liệu vẫn tốn kém.

Horowitz, Mark. 2014. “1.1 Computing’s Energy Problem (and What We Can Do about It).” 2014 IEEE International Solid-State Circuits Conference Digest of Technical Papers (ISSCC), 10–14. https://doi.org/10.1109/isscc.2014.6757323.
Table 2: Tỷ lệ tham chiếu năng lượng: Ba tỷ lệ đầu tiên sử dụng các đo đạc 45 nm của Horowitz; tỷ lệ L1/thanh ghi là một mốc tham chiếu minh họa cho hệ thống phân cấp trên chip.
Mối quan hệ Tỷ lệ tham chiếu Nguồn và Giải thích
Truy cập DRAM so với phép nhân FP16 ~581× Horowitz 45 nm; điện dung dây dẫn tỷ lệ với khoảng cách
Năng lượng FP32 so với INT8 ~18× Horowitz 45 nm; độ rộng bit xác định năng lượng chuyển mạch
Năng lượng FP32 so với FP16 ~3.4× Horowitz 45 nm; số học hẹp hơn làm giảm năng lượng chuyển mạch và đường dẫn dữ liệu
L1 SRAM so với register ~5× Điểm neo hệ thống phân cấp trên chip minh họa; khoảng cách đến đơn vị số học

Hệ thống phân cấp bộ nhớ

Table 3 cho thấy vì sao hệ thống phân cấp bộ nhớ không đồng đều: các chặng gần trên cùng gói có thể chỉ chênh nhau vài lần, trong khi các tầng ngoài chip, lưu trữ và mạng lại tạo ra các bước nhảy chênh lệch tới hàng bậc độ lớn.

Table 3: Hệ thống phân cấp độ trễ: Các mối quan hệ độ trễ tiêu biểu trong hệ thống phân cấp bộ nhớ. Các khoảng cách lớn nhất xuất hiện khi vượt qua ranh giới vật lý: bộ nhớ ngoài chip, liên kết ngoại vi, lưu trữ và cấu trúc mạng.
Mối quan hệ Tỷ lệ Tại sao nó tồn tại
Bộ nhớ băng thông cao của bộ tăng tốc so với register ~1000× chậm hơn Trên chip so với ngoài chip
SSD so với register ~300,000× chậm hơn Điện tử so với cơ khí/flash
Mạng so với bộ nhớ cục bộ ~16× chậm hơn Tốc độ ánh sáng + chuyển mạch
Băng thông bộ nhớ của bộ tăng tốc so với liên kết CPU\(\leftrightarrow\)Bộ tăng tốc ~52× nhanh hơn Ưu tiên đầu tư kiến trúc

Các quy luật mở rộng

Table 4 tổng hợp các mối quan hệ số học quy định yêu cầu bộ nhớ và tính toán cho huấn luyện và suy luận.3

3 Bộ nhớ huấn luyện (Adam): Quy tắc 16 byte/mỗi tham số áp dụng cho huấn luyện độ chính xác hỗn hợp với Adam. ZeRO có thể giảm bộ nhớ trên mỗi bộ tăng tốc bằng cách chia nhỏ trạng thái optimizer giữa các bộ tăng tốc, nhưng tổng bộ nhớ trên toàn bộ các bộ tăng tốc vẫn khoảng ~16\(\times\) tham số.

Table 4: Quy tắc mở rộng: Đây là các quy tắc mang tính số học, không phụ thuộc vào phần cứng cụ thể. Bộ nhớ huấn luyện bao gồm trọng số FP16 (2 byte), gradient FP16 (2 byte), trọng số gốc FP32 (4 byte) và trạng thái optimizer Adam (8 byte cho động lượng + phương sai).
Quy tắc Công thức Ví dụ
Bộ nhớ suy luận (FP16) 2 bytes\(\times\) tham số 7B tham số → 14 GB
Bộ nhớ suy luận (INT8) 1 byte\(\times\) tham số 7B tham số → 7 GB
Bộ nhớ huấn luyện (Adam) 16 bytes\(\times\) tham số 7B tham số → 112 GB
FLOPs suy luận (transformer) ~2\(\times\) tham số trên mỗi token mô hình 7B → ~14 GFLOPs/token
FLOPs huấn luyện ~6\(\times\) tham số\(\times\) token 7B trên 1T token → \(4 \times 10^{22}\) FLOPs

Ngân sách độ trễ minh họa

Ngân sách độ trễ phụ thuộc vào các yêu cầu an toàn riêng của từng ứng dụng, kỳ vọng người dùng và mục tiêu mức dịch vụ. Table 5 liệt kê các mục tiêu minh họa thay vì giới hạn phổ quát.

Table 5: Mục tiêu độ trễ minh họa: Các yêu cầu trong môi trường sản phẩm phụ thuộc vào ứng dụng và các mục tiêu mức dịch vụ (SLO) của ứng dụng đó.
Ứng dụng Ngân sách Ràng buộc
Phanh tự động <10 ms Ở tốc độ 100 km/h, 10 ms = 28 cm quãng đường di chuyển
Trợ lý giọng nói <100 ms Nhận thức của con người về “ngay lập tức”
Tìm kiếm web <200 ms Ngưỡng kiên nhẫn của người dùng
Truyền phát video <1 s Khả năng chịu đựng bộ đệm
Huấn luyện theo batch hàng giờ–hàng ngày Thông lượng chiếm ưu thế hơn độ trễ

Tham chiếu phần cứng hiện tại (khoảng năm 2024)

Những con số này phản ánh thế hệ phần cứng hiện tại. Hãy dùng chúng để tính toán sơ bộ và kiểm tra lại với phần cứng hiện tại.

Độ trễ và băng thông bộ nhớ

Table 6 trình bày các giá trị độ trễ và băng thông tiêu biểu ở các cấp khác nhau trong hệ thống phân cấp bộ nhớ.

Table 6: Hệ thống phân cấp bộ nhớ (khoảng năm 2024): Các giá trị độ trễ và băng thông tiêu biểu trải dài từ thanh ghi, cache, bộ nhớ, các kết nối, mạng cho đến bộ lưu trữ. Nhìn chung, chúng cho thấy vì sao tính cục bộ (locality) và việc di chuyển dữ liệu lại ảnh hưởng lớn đến hiệu suất.
Cấp độ Độ trễ Băng thông
Thanh ghi ~0.3 ns
L1 Cache ~1 ns
L2 Cache ~4 ns
GPU HBM3 ~300 ns 3.4 TB/s
PCIe Gen5 (CPU\(\leftrightarrow\)GPU) ~1000 ns 64 GB/s
CPU DRAM ~100 ns 50 GB/s
InfiniBand (mạng) ~5000 ns 50 GB/s
NVMe SSD ~100000 ns 7 GB/s

Thông lượng tính toán

Table 7 so sánh thông lượng đỉnh và công suất tiêu biểu của GPU trung tâm dữ liệu và NPU di động.

Table 7: Thông số tính toán tham khảo (khoảng năm 2024): Thông lượng đỉnh và công suất tiêu biểu của GPU trung tâm dữ liệu và NPU di động. Vì các dòng trong bảng dùng các chế độ độ chính xác và quy ước hoạt động khác nhau, bạn chỉ nên so sánh chúng trong cùng một ngữ cảnh về khối lượng công việc (workload) và độ chính xác.
Nền tảng FP16/BF16 INT8/FP8-class Công suất
GPU trung tâm dữ liệu (H100) 989 TFLOP/s 1979 TFLOP/s (đỉnh FP8) 700 W
GPU trung tâm dữ liệu (A100) 312 TFLOP/s 624 TOPS 400 W
NPU di động 35 TOPS 3–5 W

Các điểm đỉnh Roofline

Table 8 định nghĩa các ngưỡng cường độ số học, giúp xác định liệu một khối lượng công việc (workload) đang bị giới hạn bởi bộ nhớ hay bởi khả năng tính toán.

Table 8: Ngưỡng cường độ số học (khoảng năm 2024): Suy luận truyền trọng số Batch-1 thường bị giới hạn bởi bộ nhớ; các batch lớn hơn có thể vượt qua điểm đỉnh.
Bộ tăng tốc Ridge Point Ý nghĩa
A100 (FP16) 153 FLOP/byte Dưới → giới hạn bộ nhớ (memory-bound)
H100 (FP16) 295 FLOP/byte Ngưỡng cao hơn cho giới hạn tính toán (compute-bound)

Systems Perspective 1.2: Lưu ý về thuật ngữ: GPU và bộ tăng tốc
Xuyên suốt cuốn sách này, “bộ tăng tốc” là thuật ngữ chung chỉ phần cứng tăng tốc. Các nguyên tắc—phân tích roofline, phân cấp bộ nhớ, độ chính xác số học và mô hình hóa hiệu năng—áp dụng cho GPU, TPU, NPU, mạch tích hợp chuyên dụng (ASIC) và các bộ tăng tốc AI chuyên dụng khác. Các tính năng đặc thù của nhà cung cấp như CUDA và NVLink sẽ được nêu rõ.

Việc biết các con số chỉ là bước đầu. Sức mạnh thực sự đến từ các mô hình gọn, cho thấy con số nào quan trọng với nút thắt hiện tại. Mô hình Roofline mở đầu quá trình chẩn đoán bằng cách chuyển các thông số phần cứng thô thành các trần hiệu suất có thể hành động.

Vật lý của tính toán

Các thông số phần cứng thô—TFLOP/s, TB/s, công suất (watt)—là cần thiết nhưng chưa đủ để suy luận về hiệu suất. Nếu không có các mô hình phân tích gọn, kỹ sư khó phân biệt khối lượng công việc (workload) bị giới hạn bởi tính toán hay bởi bộ nhớ, hoặc dự đoán liệu tăng gấp đôi số GPU có giúp giảm một nửa thời gian huấn luyện hay không. Các mô hình trong phần này biến những khác biệt đó thành các kiểm tra định lượng.

Mô hình Roofline

Mô hình Roofline (Williams et al. 2009) đặt ra giới hạn tốc độ một khối lượng công việc (workload) có thể chạy trên một phần cứng cụ thể. Kết quả phụ thuộc vào việc khối lượng công việc (workload) cạn tính toán hay băng thông bộ nhớ trước.

Williams, Samuel, Andrew Waterman, and David Patterson. 2009. “Roofline: An Insightful Visual Performance Model for Multicore Architectures.” Communications of the ACM 52 (4): 65–76. https://doi.org/10.1145/1498765.1498785.

Mọi phép toán đều có cường độ số học: tỷ lệ giữa số phép tính thực hiện và số byte lấy từ bộ nhớ. Phép nhân ma trận có cường độ số học cao vì mỗi phần tử nạp lên được tái sử dụng nhiều lần. Ngược lại, các phép theo phần tử như ReLU (rectified linear unit) có cường độ thấp vì mỗi phép chỉ nạp một giá trị, thực hiện một phép tính rồi ghi kết quả lại. Như figure 1 minh họa, mỗi khối lượng công việc (workload) bị giới hạn bởi băng thông bộ nhớ hoặc thông lượng tính toán, và cường độ số học quyết định trần nào chạm tới trước.

Figure 1: Mô hình Roofline: Đường trần băng thông bộ nhớ (nghiêng) và đường trần thông lượng tính toán (nằm ngang) gặp nhau tại điểm ridge. Khi vẽ một khối lượng công việc (workload) theo cường độ số học, ta xác định được trần roofline nào chi phối.

Điểm ridge (ridge point) xác định điểm cân bằng của phần cứng. Nếu cường độ số học của một khối lượng công việc (workload) thấp hơn điểm này, khối lượng công việc đó bị giới hạn bởi bộ nhớ (nằm trong vùng dốc). Ngược lại, nếu cường độ số học cao hơn, khối lượng công việc đó bị giới hạn bởi tính toán (nằm trong vùng phẳng). \[\begin{gather*} \text{Arithmetic Intensity} = \frac{\text{FLOPs}}{\text{bytes accessed}} \qquad\qquad \text{Ridge Point} = \frac{\text{Peak FLOP/s}}{\text{Memory Bandwidth}} \end{gather*}\]

Systems Perspective 1.3: Kích thước batch kiểm soát cường độ số học
Đối với phép nhân ma trận, cường độ số học tỷ lệ theo kích thước batch. Ví dụ, với phép tính \(\mathbf{Y} = \mathbf{X}\mathbf{W}\), trong đó \(\mathbf{X}\) có kích thước \((B\times d_{\text{in}})\)\(\mathbf{W}\) có kích thước \((d_{\text{in}}\times d_{\text{out}})\):

  • FLOPs: \(2 \times B \times d_{\text{in}} \times d_{\text{out}}\) (phép nhân-cộng)
  • Bytes: Việc di chuyển \(X\), \(W\)\(Y\) tốn khoảng \(s_{\text{elem}}(B d_{\text{in}} + d_{\text{in}}d_{\text{out}} + B d_{\text{out}})\) byte.

Khi \(B\) tăng gấp đôi, FLOPs cũng tăng gấp đôi, trong khi lưu lượng trọng số gần như không đổi (khi trọng số chiếm ưu thế), nhờ đó cường độ số học tăng lên. Đây là lý do tại sao batching thường giúp phục vụ (serving) suy luận, mặc dù việc có đạt tới trần tính toán hay không còn phụ thuộc vào lưu lượng activation, hành vi cache, hình dạng, độ chính xác và điểm ridge (ridge point).

Một ví dụ cụ thể: Phân tích A100

Hãy xem xét một GPU NVIDIA A100 với hiệu năng Tensor Core FP16 là 312 TFLOP/s và băng thông HBM2e là 2.04 TB/s. Điểm ridge (ridge point) là 312 TFLOP/s/2.04 TB/s = 153 FLOP/byte (các tiền tố Tera triệt tiêu nhau, cho ra đơn vị FLOP/byte).

Có hai phép toán phổ biến nằm ở hai phía đối diện của điểm đỉnh đó. Phép nhân ma trận tổng quát (GEMM) trên hai ma trận vuông kích thước 4096 x 4096 có cường độ số học xấp xỉ 1365 FLOP/byte, nên 1365 FLOP/byte > 153 FLOP/byte và phép toán này bị giới hạn bởi tính toán (compute bound). Một phép toán ReLU theo từng phần tử trên một tensor FP16 thực hiện 1 phép so sánh, đồng thời đọc 2 byte và ghi 2 byte (tổng 4 byte), cho cường độ số học chỉ \(1/4 =\) 0.25 FLOP/byte. Vì 0.25 FLOP/byte \(\ll\) 153 FLOP/byte, phép toán này bị giới hạn nghiêm trọng bởi bộ nhớ (memory bound), chỉ đạt khoảng 0.16 percent so với TFLOP/s đỉnh. Sự tương phản này giải thích vì sao các framework hiện đại thường hợp nhất các phép toán. Kết hợp ReLU trực tiếp với kernel MatMul ngay trước đó giúp tránh ghi kết quả trung gian ra bộ nhớ, qua đó giữ được băng thông bộ nhớ.

Phân tích thứ nguyên

Mô hình Roofline giúp xác định vị trí tắc nghẽn. Tuy nhiên, trước khi áp dụng bất kỳ phương trình hiệu năng nào, ta cần kiểm tra xem nó có ý nghĩa vật lý hay không. Phân tích thứ nguyên cung cấp phép kiểm tra “tỉnh táo” này: bất kỳ phương trình hợp lệ nào cũng phải thuần nhất về thứ nguyên—nghĩa là mọi số hạng phải có cùng đơn vị. Nếu không, phương trình đó có lỗi.

Đối với các giai đoạn xử lý tuần tự, chúng ta hãy xem xét định luật sắt của các hệ thống ML (nguyên lý 3) đã được giới thiệu trong Định luật sắt của hệ thống ML: \[ T = \frac{D_{\text{vol}}}{\text{BW}} + \frac{O}{R_{\text{peak}} \cdot \eta_{\text{hw}}} + L_{\text{lat}} \]

Để kiểm tra tính đúng đắn, ta xác nhận rằng mọi số hạng đều có đơn vị là thời gian (giây): \[ T [s] = \underbrace{ \frac{D_{\text{vol}} [\text{bytes}]}{\text{BW} [\text{bytes/s}]} }_{\text{seconds}} + \underbrace{ \frac{O [\text{FLOPs}]}{R_{\text{peak}} [\text{FLOP/s}] \cdot \eta_{\text{hw}} [1]} }_{\text{seconds}} + \underbrace{ L_{\text{lat}} [s] }_{\text{seconds}} \]

  • Số hạng dữ liệu: \(\frac{\text{bytes}}{\text{bytes/s}} = \text{bytes} \times \frac{\text{s}}{\text{bytes}} = \mathbf{s}\)
  • Số hạng tính toán: \(\frac{\text{FLOPs}}{\text{FLOP/s}} = \text{FLOPs} \times \frac{\text{s}}{\text{FLOP}} = \mathbf{s}\)
  • Số hạng độ trễ: Đã có đơn vị là giây.

Phương trình này nhất quán về mặt vật lý. Hãy áp dụng kỹ thuật này cho bất kỳ phương trình hệ thống nào: nếu các thứ nguyên không khớp, công thức đó là sai. “FLOPs” và “băng thông” không thể hoán đổi trực tiếp vì chúng có đơn vị khác nhau. Mọi sự đánh đổi giữa chúng đều phải quy đổi qua thời gian, và đó chính xác là điều mà định luật sắt định lượng.

Khi một phương trình đã nhất quán về thứ nguyên, câu hỏi tiếp theo là các số hạng thời gian của nó sẽ mở rộng như thế nào trên các thiết bị khác nhau. Section 1.2.3 trả lời câu hỏi đó bằng hai cận bổ sung.

Định luật Amdahl và Định luật Gustafson

Song song hóa là công cụ chính để mở rộng ML, nhưng giới hạn của nó phụ thuộc vào cách khối lượng công việc (workload) được mở rộng. Hai định luật này khuôn khổ hóa mâu thuẫn căn bản trong điện toán song song. Định luật Amdahl là góc nhìn bi quan, cho biết một tác vụ cố định có thể chạy nhanh hơn bao nhiêu (tối ưu hóa độ trễ). Định luật Gustafson là góc nhìn lạc quan, cho biết có thể làm nhiều việc hơn bao nhiêu trong cùng một khoảng thời gian (tối ưu hóa thông lượng).

Mở rộng mạnh (Định luật Amdahl)

Mở rộng mạnh đo lường một bài toán có kích thước cố định có thể chạy nhanh hơn bao nhiêu khi tăng số lượng bộ xử lý.

Định luật Amdahl (Amdahl 1967) phát biểu rằng mức tăng tốc bị giới hạn bởi phần tuần tự của tác vụ.4 Nếu một phần \(s\) của tác vụ là tuần tự (không thể thực hiện song song) và phần còn lại \(p = 1-s\) có thể thực hiện song song, thì mức tăng tốc tối đa với \(n\) bộ xử lý là: \[ \text{Speedup}(n) = \frac{1}{s + \frac{1-s}{n}} \]

Amdahl, Gene M. 1967. “Validity of the Single Processor Approach to Achieving Large Scale Computing Capabilities.” Proceedings of the April 18-20, 1967, Spring Joint Computer Conference on - AFIPS ’67 (Spring), AFIPS ’67 (spring), 483–85. https://doi.org/10.1145/1465482.1465560.

4 Gene Amdahl (1922–2015): Một kiến trúc sư máy tính huyền thoại tại IBM, nơi ông là kiến trúc sư trưởng của System/360. Sau đó, ông thành lập Amdahl Corporation để cạnh tranh với IBM trên thị trường máy tính lớn (mainframe).

Khi \(n \to \infty\), số hạng \(\frac{1-s}{n} \to 0\), và độ tăng tốc hội tụ về \(1/s\).

Để thấy Định luật Amdahl trong thực tế, giả sử 5 percent của một bước huấn luyện là chi phí tuần tự (ví dụ: khóa trình thông dịch toàn cục Python (GIL), độ trễ khởi chạy kernel) và 95 percent là phần tính toán ma trận có thể song song hóa:

  • Với \(n=1\), độ tăng tốc là 1.
  • Với \(n=\) 8, độ tăng tốc là 1/(0.05 + 0.95/8) ≈ 5.9×.
  • Với \(n \to \infty\), độ tăng tốc bị giới hạn ở 1/0.05 = 20×.

Bất kể có bao nhiêu bộ tăng tốc được thêm vào, khối lượng công việc (workload) cố định này không thể chạy nhanh hơn 20×.

Mở rộng yếu (Định luật Gustafson)

Mở rộng yếu đo xem bài toán có thể tăng lên bao nhiêu trong khi vẫn giữ nguyên runtime khi thêm bộ xử lý.5

5 John Gustafson: Một nhà khoa học máy tính nổi tiếng với công trình về điện toán song song và việc giới thiệu định dạng Unum (số phổ quát). Định luật của ông là phản ứng trực tiếp trước những “giới hạn” được nhận thấy của Định luật Amdahl khi áp dụng cho quy mô lớn.

Đây là thực tế của các mô hình ngôn ngữ lớn. Thay vì dùng 1.000 bộ tăng tốc để huấn luyện một mô hình trên một tập dữ liệu nhỏ trong vài mili giây, chúng được dùng để huấn luyện trên một tập dữ liệu lớn hơn 1.000\(\times\) trong thời gian hợp lý.

Với \(n\) bộ xử lý, ký hiệu \(s\) là phần thời gian thực thi chạy tuần tự, được đo trên các bộ xử lý đó cho khối lượng công việc (workload) đã mở rộng. Định luật Gustafson (Gustafson 1988) mô hình hóa “độ tăng tốc theo tỷ lệ” này: \[ \text{Scaled Speedup}(n) = n - s(n - 1) \]

Gustafson, John L. 1988. “Reevaluating Amdahl’s Law.” Communications of the ACM 31 (5): 532–33. https://doi.org/10.1145/42411.42415.

Vì phần song song tăng tuyến tính theo \(n\) trong khi \(s\) vẫn cố định, mở rộng yếu có thể giữ hiệu quả cao khi bài toán lớn dần.

Sử dụng cùng một chi phí tuần tự 5 percent (\(s\) = 0.05), Định luật Gustafson kể một câu chuyện rất khác:

  • Với \(n=1\), độ tăng tốc là 1.
  • Với \(n=\) 8, độ tăng tốc mở rộng là 8 − 0.05 \(\times\) (7) = 8 − 0.35 = 7.65×.
  • Với \(n=\) 1000, độ tăng tốc mở rộng là 1000 − 0.05 \(\times\) (999) ≈ 950×.

Trong khả năng mở rộng yếu (weak scaling), hiệu quả vẫn cao vì khối lượng công việc hữu ích (huấn luyện mô hình) được mở rộng đủ lớn để lấn át các chi phí cố định.

Cùng một lăng kính mở rộng gom kích thước mô hình, kích thước dữ liệu, số lượng phần cứng và mức độ sử dụng thành một ước tính thời gian huấn luyện duy nhất.

Napkin Math 1.1: Phương trình thời gian huấn luyện
Bài toán: Huấn luyện một mô hình transformer dày đặc với kích thước mô hình, số lượng token, số lượng bộ tăng tốc, tốc độ đỉnh và mức độ sử dụng đã định sẽ mất bao lâu?

Công thức: \[ T \approx \frac{6 \cdot P \cdot D}{N_{\text{GPU}} \cdot R_{\text{peak}} \cdot \eta_{\text{hw}}} \]

Các biến:

  • Hệ số FLOP huấn luyện: Hệ số 6 này xuất phát từ \(2P\text{ FLOP/token}\) cho quá trình truyền xuôi (forward pass) và \(4P\text{ FLOP/token}\) cho quá trình truyền ngược (backward pass) (\(2P\) cho gradient của activation và \(2P\) cho gradient của trọng số), tổng cộng là \(6PD\text{ FLOP}\) trên \(D\) token huấn luyện.
  • \(P\): Số lượng tham số mô hình.
  • \(D\): Số lượng token huấn luyện.
  • \(N_{\text{GPU}}\): Số lượng GPU.
  • \(R_{\text{peak}}\): FLOP/s đỉnh của một bộ tăng tốc.
  • \(\eta_{\text{hw}}\): Mức độ sử dụng phần cứng, thường dao động từ 30%–50% trong ước tính thời gian huấn luyện này.

Ví dụ: Huấn luyện một mô hình có 1B tham số trên 20B token sử dụng 1 A100 (312 TFLOP/s) với mức độ sử dụng là 40 percent. \(\text{Total FLOPs} = 6 \times 1 \times 10^{9} \times 2 \times 10^{10} = 1.2 \times 10^{20} \text{ FLOPs}\). \(\text{Throughput} = 1 \times (3.12 \times 10^{14}) \times 0.40 \approx 1.248 \times 10^{14} \text{ FLOP/s}\). \(T = \frac{1.2 \times 10^{20}}{1.248 \times 10^{14}} \approx 961,538.5 \text{ seconds} \approx 16,025.6 \text{ minutes}\).

Thông tin chuyên sâu về hệ thống: Theo các giả định này, quá trình huấn luyện mất 961,538.5 seconds (≈ 16025.6 minutes, hoặc khoảng 11.1 days); ước tính này cho thấy rõ quy mô mô hình, quy mô dữ liệu, thông lượng hiệu quả của bộ tăng tốc và mức độ sử dụng là những đòn bẩy ảnh hưởng trực tiếp đến thời gian huấn luyện.

Định luật Little

Để lập kế hoạch dung lượng cho các hệ thống suy luận ổn định, Định luật Little (Little 1961) thiết lập mối quan hệ giữa số lượng yêu cầu đồng thời trung bình trong dài hạn (\(Q_{\text{req}}\)), tốc độ đến trung bình (\(\lambda_{\text{arr}}\)) và thời gian trung bình một yêu cầu nằm trong hệ thống (\(T_{\text{lat}}\)):6 \[ Q_{\text{req}} = \lambda_{\text{arr}} \times T_{\text{lat}} \]

Little, John D. C. 1961. “A Proof for the Queuing Formula: \(L = \lambda W\).” Operations Research 9 (3): 383–87. https://doi.org/10.1287/opre.9.3.383.

6 John Little: Ông là Giáo sư tại MIT và là người tiên phong trong lĩnh vực nghiên cứu vận hành. Định luật của ông, được chứng minh năm 1961, là nền tảng của lý thuyết hàng đợi và được ứng dụng rộng rãi trong nhiều lĩnh vực, từ sản xuất đến phân tích mạng máy tính.

Để thấy điều này trong thực tế, hãy xem xét việc duy trì 1,000 QPS với độ trễ trung bình 50 ms. Định luật cho biết hệ thống phải hỗ trợ 1000 \(\times\) 0.05 s = 50 yêu cầu đồng thời.

Điều này giúp xác định kích thước các nhóm worker, nhưng với bộ nhớ, chúng ta cần thêm một giả định khác. Nếu mỗi yêu cầu đang ở trong hệ thống đồng thời giữ 1 GB trạng thái trên thiết bị, thì quy mô trung bình ngụ ý cần 50 GB bộ nhớ; các yêu cầu đang chờ có thể ở trong bộ nhớ máy chủ (host memory) hoặc chia sẻ trạng thái theo batch. Nếu 24 slot trên thiết bị mỗi slot bị chiếm trong 50 ms, thì ước lượng thông lượng của chúng là \(N_{\text{max}}/T_{\text{lat}} = 24/0.05 = 480 \text{ QPS}\). Riêng Định luật Little không đặt ra giới hạn vật lý tối đa nào.

Các mô hình dựa trên vật lý—Roofline, Amdahl, Gustafson và Little—giúp chẩn đoán nơi các nút thắt cổ chai nằm. Tuy vậy, để biến những chẩn đoán đó thành các tối ưu hóa có thể thực thi, ta cần hiểu rõ các cấu trúc phần cứng cụ thể áp đặt chúng: cache, bus bộ nhớ và các kết nối.

Những điều cốt yếu của kiến trúc máy tính

Một GPU công bố 1.000 TFLOP/s, nhưng một kernel chỉ đạt 30 TFLOP/s. Khoảng cách này có thể đến từ việc di chuyển dữ liệu, mức độ song song chưa đủ, đồng bộ hóa, chi phí khởi chạy (launch overhead), hoặc hiệu suất phần mềm kém. Vật lý đặt ra các giới hạn hiệu suất lý thuyết, còn kiến trúc máy tính định nghĩa bộ máy quyết định một khối lượng công việc (workload) thực tế có thể tiến gần đến giới hạn đó tới mức nào. Phần tiếp theo bàn về các đánh đổi giữa độ trễ, băng thông và năng lượng định hình thiết kế hệ thống.

Các độ trễ mà mọi lập trình viên nên biết

Bước đầu để có trực giác về hệ thống là hiểu chi phí của khoảng cách. Table 9 cho biết bộ xử lý phải chờ dữ liệu từ các cấp khác nhau của hệ thống phân cấp bộ nhớ trong bao lâu. Nếu truy cập một thanh ghi giống như nhặt cây bút chì ngay bên cạnh, thì lấy dữ liệu từ bộ nhớ băng thông cao (HBM) là đi bộ qua văn phòng, còn lấy từ đĩa là như bay lên mặt trăng.

Table 9: Hệ thống phân cấp độ trễ: Thời gian truy cập điển hình cho phần cứng AI hiện đại; số chu kỳ ước tính dựa trên xung nhịp tham chiếu 3 GHz. Khoảng cách lớn về độ trễ giữa cache SRAM và HBM khiến tính cục bộ của cache trở thành yếu tố then chốt quyết định hiệu năng.
Thành phần Độ trễ (ns) Chu kỳ (Xấp xỉ) “Khoảng cách” tương đối
Thanh ghi ~0.3 ns 1 chu kỳ 10 seconds
L1 Cache ~1 ns 3–4 chu kỳ 33.3 seconds
L2 Cache ~4 ns 12 chu kỳ 2.2 minutes
HBM3 (Bộ nhớ GPU) ~300 ns 1.000 chu kỳ 2.8 hours
NVLink (GPU-GPU) ~500 ns 1.500 chu kỳ 4.6 hours
PCIe (CPU-GPU) ~1000 ns 3.000 chu kỳ 9.3 hours
InfiniBand (Mạng) ~5000 ns 15.000 chu kỳ 1.9 days
SSD (NVMe) ~100000 ns 300,000 cycles 38.6 days

Bảng tóm tắt phần cứng AI (tham chiếu hiện đại)

Độ trễ đo thời gian chờ byte đầu tiên; băng thông đo số lượng byte theo sau. Table 10 cung cấp các hằng số cho các phép tính “Roofline” nhanh gọn. Đây là các “đơn vị tính toán tiêu chuẩn” cho kỷ nguyên machine learning hiện nay.

Table 10: Thông số tham chiếu: Các hằng số chính để phân tích định lượng. Luôn kiểm tra các datasheet cụ thể; dung lượng HBM được tính theo đơn vị của nhà cung cấp, và băng thông liên kết là tổng băng thông hai chiều, nên cấu trúc liên kết và hướng truyền dữ liệu đều quan trọng.
Thông số kỹ thuật NVIDIA H100 (SXM) Google TPU v5p Tác động hệ thống
BF16 Đỉnh 989 TFLOP/s 459 TFLOP/s Giới hạn tốc độ (\(R_{\text{peak}}\))
Băng thông bộ nhớ 3.35 TB/s 2.76 TB/s Độ rộng của đường ống (\(\text{BW}\))
Dung lượng HBM 80 GB 95 GiB Kích thước mô hình tối đa (\(P\))/Kích thước batch (\(B\))
SRAM trên chip 50 MB L2 128 MiB VMEM/chip Quan trọng cho Operator Fusion
Kết nối liên chip 900 GB/s (NVLink) 1200 GB/s (Kết nối liên chip, ICI) Xác định khả năng mở rộng song song mô hình

Hệ thống phân cấp bộ nhớ

Các hệ thống máy tính sử dụng hệ thống phân cấp bộ nhớ vì không có công nghệ đơn lẻ nào vừa có dung lượng cao vừa có độ trễ thấp. Figure 2 minh họa sự đánh đổi này: giữ dữ liệu ở các cấp cao hơn trong kim tự tháp (thanh ghi/cache) giúp giảm độ trễ truy cập khi việc di chuyển dữ liệu nằm trên đường găng hiệu năng.

Figure 2: Hệ thống phân cấp bộ nhớ: Hiệu năng phụ thuộc vào mức độ gần của dữ liệu. Truy cập HBM chậm hơn thanh ghi khoảng 1.000\(\times\); truy cập SSD chậm hơn khoảng 300.000\(\times\).

Hệ thống phân cấp bộ nhớ là ràng buộc vật lý cơ bản của các hệ thống machine learning. Table 11 tổng hợp các thuộc tính vật lý—độ trễ, băng thông và năng lượng—trên toàn bộ ngăn xếp.

Table 11: Các thuộc tính vật lý của hệ thống phân cấp bộ nhớ (khoảng năm 2024): Các mốc độ trễ và băng thông tiêu biểu trong hệ thống phân cấp bộ nhớ. Hệ thống phân cấp này có độ trễ trải dài khoảng năm bậc độ lớn. NVLink là tổng băng thông hai chiều; chỉ hiển thị số liệu năng lượng DRAM 45 nm được trích dẫn vì các cấp khác phụ thuộc vào cách triển khai cụ thể. Do đó, giữ dữ liệu ở các cấp cao hơn trong hệ thống phân cấp có thể mang lại mức cải thiện hiệu suất rất lớn.
Lớp Công nghệ Độ trễ Băng thông Tham chiếu năng lượng (mỗi 32b)
Thanh ghi Flip-Flop ~0.3 ns
L1 Cache SRAM ~1 ns
L2 Cache SRAM ~4 ns
Bộ nhớ (Cục bộ) HBM3 ~300 ns 3350 GB/s 640 pJ
Kết nối liên chip NVLink 4.0 ~500 ns 900 GB/s
Liên kết máy chủ PCIe Gen5 ~1000 ns 64 GB/s
RAM hệ thống DDR5 ~100 ns 50 GB/s
Mạng (Fabric) InfiniBand NDR ~5000 ns 50 GB/s
Lưu trữ (Cục bộ) NVMe SSD ~100000 ns 7 GB/s

Chi phí năng lượng trong hệ thống phân cấp cho thấy vì sao việc di chuyển dữ liệu chi phối thiết kế hệ thống hiện đại.

Systems Perspective 1.4: Chi phí cao của việc di chuyển dữ liệu
Trong tài liệu tham khảo 45 nm được trích dẫn, việc nạp một giá trị 32-bit từ DRAM tiêu tốn năng lượng gấp khoảng 581× lần so với một phép nhân FP16 (~640 pJ so với ~1.1 pJ). Tỷ lệ này phụ thuộc vào từng nền tảng cụ thể và không tự nó quyết định năng lượng tiêu thụ của khối lượng công việc (workload); năng lượng còn phụ thuộc vào số lần truy cập và mức tái sử dụng. Dù vậy, điều này giải thích vì sao cường độ số học lại quan trọng.

Băng thông so với độ trễ

Băng thông (thông lượng) và độ trễ (độ trễ) là hai ràng buộc khác nhau. Với lượng dữ liệu \(D_{\text{vol}}\) được gửi qua băng thông hiệu dụng \(\text{BW}\) và độ trễ đường truyền cố định \(L_{\text{lat}}\), và giả sử chi phí độ trễ và chi phí tuần tự hóa không chồng chéo, tổng thời gian truyền là: \[ T = L_{\text{lat}} + \frac{D_{\text{vol}}}{\text{BW}} \]

Điểm giao nhau là kích thước truyền tải mà tại đó hai số hạng bằng nhau: \[ D_{\text{vol,cross}} = L_{\text{lat}} \times \text{BW} \]

Đối với lượng dữ liệu truyền dưới \(D_{\text{vol,cross}}\) (ví dụ: yêu cầu nhỏ hoặc thông điệp điều khiển), độ trễ sẽ chi phối. Đối với lượng dữ liệu truyền trên mức đó (ví dụ: tải trọng số), băng thông sẽ chi phối.

Hãy xem xét việc gửi dữ liệu qua một đường truyền 10 Gb/s với độ trễ cơ bản cho yêu cầu/phản hồi là 10 ms. Kích thước giao nhau là 12.5 MB, do đó, yếu tố chi phối sẽ phụ thuộc vào việc lượng dữ liệu truyền nằm ở phía nào của ngưỡng đó.

  • Gói dữ liệu bị giới hạn bởi độ trễ (1 KB):
    • Truyền tải: 1 KB \(\times\) 8/10 Gb/s ≈ 0.8 μs.
    • Tổng thời gian ≈ 10 ms + 0.8 μs ≈ 10 ms.
    • Kết quả: Độ trễ cố định từ đường đi và giao thức chiếm ưu thế; độ trễ lan truyền chỉ là một thành phần.
  • checkpoint bị giới hạn bởi băng thông (1 GB):
    • Truyền: \(1\text{ GB} \times 8/10\text{ Gbps} \approx 800\text{ ms}\).
    • Tổng thời gian \(\approx 10\text{ ms} + 800\text{ ms} = 810\text{ ms}\).
    • Kết quả: Độ trễ cơ bản không đáng kể; băng thông là nút thắt cổ chai.

Kiến trúc quyết định dữ liệu có thể di chuyển nhanh đến đâu, còn độ chính xác số kiểm soát trực tiếp lượng dữ liệu phải di chuyển. Giảm độ chính xác từ FP32 xuống FP16 còn một nửa sẽ giảm số byte trên mỗi tham số đi một nửa và có thể gần như tăng gấp đôi thông lượng hữu ích, nếu phần cứng, các kernel và độ chính xác của mô hình hỗ trợ. Để hiểu rõ các đánh đổi này, chúng ta cần xem kỹ cách các số được biểu diễn trong phần cứng.

Biểu diễn số

Thống kê mô tả các phân phối dữ liệu; còn các biểu diễn số quyết định cách hệ thống lưu trữ các giá trị đó. Trong các hệ thống ML, việc lựa chọn độ chính xác (FP32 vs. BF16 vs. INT8) là sự đánh đổi trực tiếp giữa độ trung thực thống kê và thông lượng phần cứng.

So sánh các định dạng dấu phẩy động

Các định dạng IEEE 754 như FP32 và FP16, cùng với các định dạng dành riêng cho AI như BF16 và FP8, đưa ra các đánh đổi khác nhau giữa dải động (phạm vi giá trị có thể biểu diễn) và độ chính xác (độ mịn của các giá trị trong dải đó). Table 12 tóm tắt các định dạng chính và trường hợp sử dụng của chúng, còn figure 3 minh họa cách phân bổ bit.

Table 12: So sánh các định dạng số: Mỗi định dạng đều có sự đánh đổi giữa độ chính xác, dải động, dung lượng bộ nhớ và thông lượng tính toán. BF16 có cùng dải số mũ bình thường với FP32 nhưng chỉ sử dụng một nửa dung lượng lưu trữ.
Định dạng Bits Số mũ Phần định trị Dải động Trường hợp sử dụng điển hình
FP32 32 8 23 \(\sim 10^{-38}\) to \(10^{38}\) Huấn luyện (độ chính xác đầy đủ), suy luận tham chiếu
FP16 16 5 10 Bình thường: \(6.10 \times 10^{-5}\)\(6.55 \times 10^{4}\) Huấn luyện thường với loss scaling, suy luận
BF16 16 8 7 Phạm vi số mũ bình thường của FP32 Huấn luyện, thường không có loss scaling
FP8 8 4 hoặc 5 3 hoặc 2 Thay đổi Huấn luyện/suy luận trên phần cứng được hỗ trợ
INT8 8 N/A N/A -128 to 127 Suy luận sau lượng tử hoá
Figure 3: Bố cục bit của các định dạng số: So sánh trực quan cách phân bổ bit. BF16 giữ nguyên số mũ 8-bit của FP32, do đó có cùng dải số mũ bình thường. FP16 đánh đổi dải động để có độ chính xác cao hơn và thường dùng loss scaling để giảm thiểu hiện tượng tràn dưới.

Ngoài độ rộng bit, cách phân bổ số bit cho phần mũ và phần định trị sẽ quyết định dải giá trị mà mỗi định dạng có thể biểu diễn.

Trong số các định dạng này, BF167 rất đáng chú ý (Wang and Kanwar 2019; Kalamkar et al. 2019). Nó nằm trong cùng lớp 16-bit như FP16 nhưng lại hành xử khác khi huấn luyện, nên chỉ dựa vào độ rộng danh nghĩa không dự đoán được gánh nặng vận hành. Từ góc độ hệ thống, phần sau sẽ nối việc phân bổ bit với lưu lượng truy cập bộ nhớ, độ ổn định số và hiệu quả triển khai.

7 BF16 (brain floating point 16): Ban đầu được giới thiệu lần đầu cùng với Google TPUv2 và sau đó được Intel, Arm và NVIDIA sử dụng, BF16 đã trở thành một định dạng huấn luyện phổ biến trong các hệ sinh thái bộ tăng tốc. Việc áp dụng BF16 khiến việc hỗ trợ định dạng này trong phần cứng, kernel và các thư viện huấn luyện phân tán trở thành một vấn đề về khả năng di động, chứ không còn là một tính năng riêng của từng nhà cung cấp nữa.

Wang, Shibo, and Pankaj Kanwar. 2019. BFloat16: The Secret to High Performance on Cloud TPUs.
Systems Perspective 1.5: Giới hạn dải động

Việc lựa chọn định dạng số là một ứng dụng trực tiếp của định luật sắt trong các hệ thống ML (nguyên tắc 3). Giảm độ chính xác từ FP32 xuống BF16 hoặc FP16 sẽ giảm một nửa lượng dữ liệu, từ đó có thể tăng gấp đôi thông lượng đối với các khối lượng công việc (workload) bị giới hạn bởi bộ nhớ. Tuy nhiên, loại định dạng 16-bit sẽ quyết định độ phức tạp kỹ thuật:

  • Dải động (phần mũ): BF16 giữ nguyên phần mũ tám bit của FP32, do đó có cùng dải số mũ thông thường (Kalamkar et al. 2019).
  • Độ chính xác (phần định trị): FP16 có phần định trị 10 bit lớn hơn BF16 (7 bit), cho độ chính xác cao hơn với các giá trị trong dải của nó. Tuy nhiên, phần mũ năm bit của nó làm tăng nguy cơ tràn dưới (underflow). Vì vậy, huấn luyện FP16 thường dùng loss scaling, một bước vận hành nhân gradient với một hằng số lớn để giữ cho nhiều giá trị vẫn biểu diễn được (Micikevicius et al. 2017).
  • Hiệu quả năng lượng: Các phép toán INT8 hiệu quả hơn đáng kể so với các phép toán dấu phẩy động tương đương, vì chúng di chuyển ít dữ liệu hơn và sử dụng các đường tính toán số học số nguyên đơn giản hơn. Chuyển sang INT8 để suy luận là yếu tố then chốt để triển khai các mạng nơ-ron khi có các ràng buộc chặt chẽ về bộ nhớ, độ trễ hoặc công suất (Jacob et al. 2018; Krishnamoorthi 2018).
Krishnamoorthi, Raghuraman. 2018. “Quantizing Deep Convolutional Networks for Efficient Inference: A Whitepaper.” arXiv Preprint arXiv:1806.08342 abs/1806.08342.
Jacob, Benoit, Skirmantas Kligys, Bo Chen, Menglong Zhu, Matthew Tang, Andrew Howard, Hartwig Adam, and Dmitry Kalenichenko. 2018. “Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference.” 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition, 2704–13. https://doi.org/10.1109/cvpr.2018.00286.
Micikevicius, Paulius, Sharan Narang, Jonah Alben, Gregory Diamos, Erich Elsen, David Garcia, Boris Ginsburg, et al. 2017. “Mixed Precision Training.” arXiv Preprint arXiv:1710.03740.
Kalamkar, Dhiraj, Dheevatsa Mudigere, Naveen Mellempudi, Dipankar Das, Kunal Banerjee, Sasikanth Avancha, Dharma Teja Vooturi, et al. 2019. A Study of BFLOAT16 for Deep Learning Training.

Lượng tử hoá số nguyên

Lượng tử hoá ánh xạ các giá trị dấu phẩy động (liên tục) sang các số nguyên rời rạc, thường là INT8. Thách thức chính là chọn cách ánh xạ khoảng giá trị dấu phẩy động sang số nguyên. Có hai cách tiếp cận chính.

Với lượng tử hoá đối xứng, đặt \(s_{\text{quant}} = \max |x|\) trên khoảng đã hiệu chỉnh và giả sử \(x\) được giới hạn trong \([-s_{\text{quant}}, s_{\text{quant}}]\). Khi đó, mã INT8 có dấu là: \[ x_{\text{int}} = \text{round}\left(\frac{x}{s_{\text{quant}}} \times 127\right) \] Ánh xạ này phù hợp với các phân bố trọng số tập trung quanh 0.

Lượng tử hoá bất đối xứng xử lý các phân bố không tập trung quanh 0 (thường gặp sau hàm ReLU, vốn chỉ tạo ra các giá trị không âm) bằng cách dịch chuyển khoảng giá trị trước khi chia tỷ lệ. Đặt \(x_{\min}\)\(x_{\max}\) là các cận của khoảng đã hiệu chỉnh, xác định khoảng chuẩn hoá \(s_{\text{quant}} = x_{\max} - x_{\min}\), và giới hạn \(x\) trong \([x_{\min}, x_{\max}]\). Một ánh xạ 8-bit không dấu phổ biến là: \[ x_{\text{uint8}} = \text{round}\left(\frac{x - x_{\min}}{s_{\text{quant}}} \times 255\right) \]

Việc lựa chọn giữa lượng tử hoá đối xứng và bất đối xứng phụ thuộc vào phân bố của tensor và có tác động đo được tới độ chính xác.

Tóm tắt

Chẩn đoán hiệu năng hệ thống (từ góc độ phần cứng) bắt đầu từ các đơn vị, giới hạn trần và tập làm việc. Các con số tham chiếu giúp xác định bậc độ lớn; Mô hình Roofline và quy luật cơ bản (iron law) cho biết liệu phép toán, lượng dữ liệu (bytes) hay độ trễ là nút thắt; Định luật Amdahl, Định luật Gustafson và Định luật Little kiểm chứng các tuyên bố về tăng tốc, khả năng mở rộng và xử lý đồng thời; còn phân tích thứ nguyên giúp phát hiện các kết quả bất khả thi. Hệ thống phân cấp bộ nhớ và kết nối cho thấy những giới hạn đó xuất hiện dưới dạng các ràng buộc về độ trễ và băng thông, trong khi các biểu diễn số cho thấy dải động, độ chính xác và lượng tử hoá làm thay đổi việc lưu trữ, năng lượng, thông lượng và độ chính xác như thế nào.

Hãy coi các thông số đỉnh như những giới hạn trần, không phải dự đoán hiệu năng. So sánh phép đo với giới hạn trần tương ứng, rồi lần theo phần chênh lệch còn lại đến mức độ sử dụng, luân chuyển dữ liệu, chi phí runtime, kiến trúc hoặc phần mềm. Một ước tính sơ bộ hữu ích khi nó nêu rõ giả định và đơn vị, và khiến phép đo tiếp theo trở nên hiển nhiên.

Back to top