Khám Phá Tính Toán Phần Cứng: Lợi Ích và Thách Thức
Trong hành trình phát triển phần mềm của mình, tôi đã ít khi chú ý đến phần cứng. Hầu hết các vấn đề tôi gặp phải đều liên quan đến phần mềm như driver bị lỗi, mã nguồn chưa được vá lỗi, thư viện lỗi thời và những khía cạnh kỳ quặc của Python. Thế nhưng, có một ngày, tôi đã gặp phải một vấn đề mà tôi không ngờ rằng nó liên quan đến phần cứng. Trong kỳ thực tập, tôi đang cố gắng rút trích suy diễn từ một máy chủ Automatic1111 trên AWS, máy chủ này được trang bị hai mô hình khuếch tán cụ thể, một là SDXL (rất nặng) và một là SD1.5 (nhẹ hơn). Tuy nhiên, rút trích suy diễn từ một mô hình đã khiến cho suy diễn từ mô hình thứ hai trở nên rất chậm. Phản ứng đầu tiên của tôi là nghĩ rằng đó là do bộ nhớ cache.
Sau khi kiểm tra vấn đề này, tôi đã nhận ra rằng đây là hành vi được mong đợi của module Automatic1111. Nó đã tải một mô hình vào VRAM và "giữ nó nóng" để có thể suy diễn nhanh chóng trước khi tải mô hình thứ hai, từ đó dẫn đến sự chậm trễ trong suy diễn. Ngày hôm đó, tôi đã học được rằng việc hiểu rõ mối quan hệ giữa phần mềm và phần cứng rất quan trọng.
Không nghĩ về phần cứng là một điều mà tôi thường thấy từ bạn bè và các kỹ sư. Vì vậy, tôi đã có ý tưởng viết bài blog này.
Các Loại Phần Cứng Có Sẵn
CPU vs GPU vs TPU
| Khía cạnh | CPU | GPU | TPU |
|---|---|---|---|
| Vai trò | Bộ xử lý đa năng, bộ não của máy tính | Ban đầu dành cho đồ họa, giờ đây xử lý song song cực lớn | ASIC tùy chỉnh của Google cho các phép toán tensor & học sâu |
| Số lõi | Ít lõi mạnh mẽ (2–64, nhiều hơn trong server) | Hàng ngàn lõi nhẹ (A100 ~7,000+) | Mảng systolic với các đơn vị nhân ma trận (MXUs) |
| Mô hình thực thi | Độ trễ thấp, tuần tự, xử lý nhánh mạnh | SIMT/SIMD, lập lịch warp, thông lượng cao | Dữ liệu chảy qua mảng systolic; lệnh chuyên biệt cao cấp |
| Bộ nhớ | Cấu trúc cache lớn, băng thông vừa | VRAM băng thông cao (HBM/GDDR), cache nhỏ hơn, tối ưu hóa dữ liệu lớn | HBM gắn chặt với tính toán; tối ưu cho định dạng độ chính xác DL |
| Điểm mạnh | Đa năng, hiệu suất một luồng, chuyển đổi tác vụ | Toán ma trận/vector, đào tạo AI/ML, kết xuất, thông lượng cao | Cực kỳ hiệu quả trong đào tạo/suy diễn AI, hiệu suất cao trên watt |
| Điểm yếu | Song song hạn chế, không hiệu quả cho các phép toán ma trận lớn | Kém trong mã tuần tự nặng nhánh, độ trễ cao hơn, cần CUDA/OpenCL | Không đa năng, gắn liền với hệ sinh thái Google, ít linh hoạt |
AI hoặc bất kỳ khối lượng công việc tính toán nào đều yêu cầu thông lượng cực cao vì các phép toán rất đơn giản (ma trận, trung bình gradient, tích vô hướng, v.v...) không giống như các phép toán mà CPU thực hiện, bao gồm logic nhánh phức tạp và độ trễ tối thiểu. Vì vậy, GPU và TPU trở thành những lựa chọn phổ biến.
Cụ thể, GPU có băng thông cực cao nhưng không như TPU, chúng giao tiếp tốt thông qua thư viện CUDA và Pytorch hoặc TensorFlow cũng bao gồm khả năng tương tác cao với chúng.
Bộ Tăng Tốc
Các bộ tăng tốc AI hiện đại được thiết kế xung quanh triết lý xử lý dữ liệu cụ thể. Điều quan trọng không phải là ghi nhớ các thông số kỹ thuật mà là hiểu tại sao chúng khác nhau.
- NVIDIA H100 tập trung vào đào tạo tiên tiến với Transformer Engine và hỗ trợ FP8, yêu cầu băng thông cực lớn và hiệu quả năng lượng cho các LLM khổng lồ.
- Google TPU v5p sử dụng mảng systolic (MXU) để đạt được hiệu quả cực cao trong các khối lượng công việc nặng ma trận quy mô lớn, gắn chặt với hạ tầng phân tán của Google.
- AMD MI300 cạnh tranh bằng cách kết hợp các thành phần CPU và GPU vào một gói, cung cấp một vùng nhớ thống nhất lớn rất thu hút cho các khối lượng công việc HPC và AI đa dạng nơi mà tính linh hoạt và dung lượng rất quan trọng.
Những khác biệt này phản ánh các sự đánh đổi về kiến trúc giữa tính linh hoạt đa năng (GPU) và hiệu suất chuyên biệt (TPU), trong khi AMD tạo ra một con đường lai.
So Sánh Bộ Tăng Tốc
| Bộ tăng tốc | Bộ nhớ | Băng thông | Trường hợp sử dụng chính |
|---|---|---|---|
| NVIDIA H100 | 80 GB HBM3 | ~3.0 TB/s | Đào tạo LLM tiên tiến, khối lượng công việc HPC với nhu cầu thông lượng cực lớn |
| AMD MI300X | 192 GB HBM3 | ~5.3 TB/s | Đào tạo AI quy mô lớn, HPC, và các mô hình rất lớn (có thể chứa dữ liệu trong bộ nhớ) |
| Google TPU v5p | 95 GB HBM2e mỗi chip | ~2.77 TB/s | Đào tạo/suy diễn AI quy mô lớn; khối lượng công việc nặng ma trận trong hệ sinh thái Google |
Điểm Nghẽn
Thường thì chúng ta tập trung vào các chỉ số như TFLOPs. Nhưng hiệu suất của một hệ thống và thời gian hoàn thành thường bị giới hạn bởi tốc độ di chuyển và truy cập dữ liệu, không chỉ bởi tốc độ xử lý.
-
Dung lượng bộ nhớ (VRAM) và băng thông thường quan trọng hơn sức mạnh tính toán thô. Một bộ xử lý không hiệu quả nếu nó đứng im chờ dữ liệu. Dung lượng VRAM là một hạn chế chính, vì nó xác định xem một mô hình lớn, chẳng hạn như LLM, có thể vừa vặn vào một GPU hay không. Ví dụ, một GPU tiêu dùng có TFLOP cao như RTX 4090 với 24 GB VRAM không thể đào tạo các mô hình yêu cầu 80 GB hoặc hơn mà các GPU trung tâm dữ liệu cung cấp. Kích thước VRAM cũng giới hạn kích thước lô đào tạo, ảnh hưởng đến hiệu quả.
-
Khi mở rộng lên nhiều GPU cho các mô hình lớn hơn, kết nối, con đường truyền thông giữa các GPU có thể trở thành điểm nghẽn chính. Các kết nối tiêu chuẩn như PCIe có băng thông hạn chế (khoảng 64 GB/s), có thể bị bão hòa khi các GPU đồng bộ hóa dữ liệu, dẫn đến những lợi ích giảm dần khi mở rộng vượt quá một vài GPU. Ngược lại, các công nghệ độc quyền như NVLink của NVIDIA cung cấp băng thông vượt trội (lên đến 900 GB/s), dẫn đến việc mở rộng hiệu quả cho việc đào tạo các mô hình nền tảng khổng lồ.
-
Toàn bộ hệ thống có thể bị hạn chế bởi đầu vào/đầu ra dữ liệu chậm từ lưu trữ. Nếu dữ liệu không thể được tải từ đĩa sang GPU đủ nhanh, ngay cả phần cứng mạnh nhất cũng sẽ bị lãng phí, tạo ra một điểm nghẽn cơ bản.
Mẹo Thực Tiễn
Để tối ưu hóa khối lượng công việc AI, chúng ta cần tập trung vào việc di chuyển dữ liệu chứ không chỉ tốc độ tính toán.
- Phân tích hệ thống của bạn: Bước đầu tiên là xác định nơi có điểm nghẽn. Có phải là dung lượng bộ nhớ (VRAM), băng thông bộ nhớ, tốc độ kết nối giữa các GPU, hay tốc độ tải dữ liệu từ lưu trữ chậm?
- Sử dụng độ chính xác hỗn hợp (AMP): Các GPU hiện đại có các lõi Tensor chuyên dụng giúp tăng tốc các phép toán FP16/BF16. Sử dụng Độ Chính Xác Hỗn Hợp (AMP) trong các framework như Pytorch sẽ tăng tốc độ đào tạo bằng cách sử dụng độ chính xác thấp cho các phép toán ma trận trong khi duy trì độ chính xác với FP32 cho các phép toán nhạy cảm như tính toán tổn thất. Điều này cũng giảm sử dụng VRAM.
- Tối ưu hóa kích thước lô và bộ tải dữ liệu: Dung lượng VRAM giới hạn kích thước lô của bạn. Một lô lớn có thể cải thiện việc sử dụng phần cứng, nhưng một lô nhỏ có thể bị hạn chế bởi các ràng buộc bộ nhớ. Đảm bảo rằng quy trình tải dữ liệu từ lưu trữ đến GPU không trở thành điểm nghẽn, vì ngay cả GPU nhanh nhất cũng bị lãng phí nếu nó đang chờ dữ liệu.
- Tận dụng các framework tối ưu hóa: Đối với đào tạo đa GPU, sử dụng các thư viện như
DistributedDataParallelcủa PyTorch với các backend NCCL, hoặc các framework tiên tiến như DeepSpeed, để quản lý hiệu quả việc đồng bộ hóa gradient, điều này thường là một điểm nghẽn chính. Những công cụ này rất quan trọng để mở rộng một cách hiệu quả.
Kết Luận
Bạn không cần phải là một kỹ sư GPU hay một nhà thiết kế chip để hiểu các sắc thái của phần cứng và sự tương tác giữa phần cứng và phần mềm. Yêu cầu duy nhất là phải chú ý đến phần cứng trong quá trình thiết kế hệ thống và hãy Khám Phá Tính Toán Phần Cứng.