Scalability
Khả năng mở rộng là năng lực của hệ thống xử lý thêm dữ liệu, người dùng hoặc năng lực tính toán bằng cách bổ sung tài nguyên. Bài viết đề cập đến mở rộng dọc và ngang, định luật Amdahl và AI đa GPU.
Khả năng mở rộng là khả năng của một hệ thống xử lý khối lượng công việc ngày càng tăng, chẳng hạn nhiều dữ liệu, người dùng, yêu cầu hơn hoặc model lớn hơn, bằng cách bổ sung tài nguyên trong khi vẫn duy trì hiệu năng và chi phí trên mỗi đơn vị công việc ở mức phù hợp. Hệ thống mở rộng tốt khi tăng gấp đôi phần cứng giúp khối lượng công việc xử lý được gần như tăng gấp đôi; hệ thống mở rộng kém khi các máy được bổ sung chỉ chờ lẫn nhau. Trong trí tuệ nhân tạo, khả năng mở rộng áp dụng tại ba điểm: pipeline dữ liệu cần tiếp nhận dữ liệu lớn và tiền xử lý dữ liệu đó; tác vụ huấn luyện phân bổ công việc trên nhiều accelerator; và dịch vụ inference cần trả lời nhiều yêu cầu hơn mà không làm tăng độ trễ inference.
Mở rộng theo chiều dọc và chiều ngang#
Mở rộng theo chiều dọc, hay scale up, là chuyển workload sang máy lớn hơn: nhiều lõi CPU, RAM hơn hoặc GPU có bộ nhớ lớn hơn. Không cần thay đổi code, nhưng hình thức này bị giới hạn bởi máy lớn nhất hiện có và tạo ra một điểm lỗi duy nhất. Mở rộng theo chiều ngang, hay scale out, là bổ sung máy và phân chia công việc giữa các máy; cách này không có giới hạn cố định nhưng đòi hỏi phần mềm phải chia việc, cân bằng tải và phối hợp kết quả. Dịch vụ web và inference dễ scale out khi hoạt động không lưu trạng thái: phiên và dữ liệu được giữ trong các kho dùng chung để mọi bản sao đều có thể trả lời mọi yêu cầu; cơ sở dữ liệu scale out bằng cách phân mảnh, chia dữ liệu theo khóa trên các máy.
Các nền tảng cloud tự động hóa việc mở rộng theo chiều ngang. Trên Kubernetes, Horizontal Pod Autoscaler tính số lượng replica bằng số replica hiện tại nhân với tỷ lệ giữa metric quan sát được và mục tiêu, rồi làm tròn lên: 4 replica có CPU trung bình 90% khi mục tiêu là 60% sẽ tăng thành 6. Tự động hóa này chính là tính co giãn trong điện toán đám mây, còn điện toán serverless mở rộng thêm khả năng giảm xuống 0 replica khi không còn lưu lượng.
Giới hạn của khả năng mở rộng#
Mọi tác vụ song song đều có một phần công việc không thể chia nhỏ, chẳng hạn đọc batch tiếp theo, đồng bộ hóa kết quả hoặc ghi checkpoint. Năm 1967, Gene Amdahl chứng minh rằng phần tuần tự này giới hạn mức tăng tốc bất kể có bổ sung bao nhiêu bộ xử lý; kết quả này hiện được gọi là định luật Amdahl:
# Amdahl's law: speedup on n workers when a fraction p of the work runs in parallel
p = 0.95 # parallel fraction; the other 5% runs on one worker
for n in (1, 8, 64, 512):
speedup = 1 / ((1 - p) + p / n)
efficiency = speedup / n # share of the added hardware doing useful work
print(f"{n:>4} workers: {speedup:5.1f}x speedup, {efficiency:4.0%} efficiency")
print(f"Limit with unlimited workers: {1 / (1 - p):.0f}x")Khi 95% công việc có thể chạy song song, 8 worker mang lại tốc độ nhanh hơn 5,9 lần với hiệu suất 74%; 64 worker nhanh hơn 15,4 lần với hiệu suất 24%; 512 worker nhanh hơn 19,3 lần với hiệu suất 4%; và không số lượng worker nào có thể vượt quá 20 lần. Năm 1988, John Gustafson chỉ ra rằng người dùng thực tế tăng kích thước bài toán cùng với máy tính, nhờ đó phần song song tăng lên còn tỷ lệ phần tuần tự giảm xuống. Đo mức tăng tốc trên một bài toán cố định được gọi là mở rộng mạnh; tăng kích thước bài toán theo phần cứng được gọi là mở rộng yếu, chế độ mà các lượt huấn luyện quy mô lớn sử dụng. Giao tiếp đặt ra một giới hạn khác: mỗi GPU được thêm vào quá trình huấn luyện song song dữ liệu phải trao đổi gradient với các GPU khác ở mỗi bước, vì vậy băng thông mạng thường quyết định mức độ mở rộng của một tác vụ.
Mở rộng quy mô huấn luyện và inference#
Huấn luyện phân tán chọn chiến lược song song dựa trên việc model có vừa trên một thiết bị hay không. Trong song song dữ liệu, mỗi GPU giữ một bản sao đầy đủ của model, xử lý phần riêng của mỗi batch và lấy trung bình gradient với các GPU khác thông qua all-reduce, như DistributedDataParallel của PyTorch. Các model quá lớn để vừa trên một GPU được chia bằng song song dữ liệu phân mảnh hoàn toàn, song song tensor hoặc song song pipeline; tích lũy gradient giúp đạt batch size hiệu dụng lớn trên ít thiết bị hơn.
Ultralytics YOLO dùng song song hóa dữ liệu cho huấn luyện đa GPU: truyền device=[0, 1] sẽ khởi chạy các tiến trình worker DistributedDataParallel thông qua torch.distributed.run và chia batch đều nhau, vì vậy batch=64 trên hai GPU cấp cho mỗi GPU 32 ảnh mỗi bước.
Inference mở rộng theo cách khác, vì mỗi yêu cầu nhỏ và độc lập. Gom yêu cầu thành batch giúp tăng mức sử dụng GPU và thông lượng với mức đánh đổi nhỏ về độ trễ; continuous batching thực hiện tương tự cho quá trình tạo sinh LLM từng token; còn hệ thống phục vụ model bổ sung replica phía sau load balancer khi lưu lượng tăng. Lượng tử hóa model và cắt tỉa giúp mỗi replica có chi phí thấp hơn, để cùng phần cứng phục vụ được nhiều yêu cầu hơn; AI biên mở rộng bằng cách phân tán inference trên hàng nghìn thiết bị thay vì một trung tâm dữ liệu.
Khả năng mở rộng và các thuật ngữ liên quan#
- Hiệu năng: Mức độ nhanh hoặc chính xác của hệ thống ở một tải nhất định, được đo bằng độ trễ, thông lượng hoặc độ chính xác. Khả năng mở rộng mô tả các chỉ số này được duy trì ra sao khi tải và tài nguyên tăng lên.
- Tính co giãn: Tự động bổ sung và loại bỏ tài nguyên khi nhu cầu thay đổi trong ngày, thường bằng cách thêm hoặc xóa replica của một dịch vụ được mở rộng theo chiều ngang.
- Quy luật scaling: Các mối quan hệ thực nghiệm giữa loss của model với số tham số, dữ liệu huấn luyện và compute. Quy luật này dự đoán chất lượng model; khả năng mở rộng của hệ thống quyết định liệu compute cần thiết có được sử dụng hiệu quả hay không.










