Giới thiệu

Khi các mô hình ngôn ngữ lớn (LLM) ngày càng khổng lồ với hàng trăm tỷ tham số, việc chạy inference trên một GPU đơn lẻ gần như bất khả thi. Bài viết này sẽ đi sâu vào hai chiến lược phân tán phổ biến nhất: Tensor ParallelPipeline Parallel, giúp bạn chọn đúng giải pháp cho hạ tầng của mình.

Tôi đã thử nghiệm cả hai phương pháp trên cụm GPU A100 8x80GB trong 6 tháng qua, và kết quả thực tế có phần khác biệt so với lý thuyết thường được trình bày trên paper.

Tensor Parallel (TP) là gì?

Tensor Parallel chia tensor (ma trận trọng số) thành nhiều phần theo chiều ngang hoặc dọc, phân phối lên các GPU khác nhau. Mỗi GPU tính toán một phần của phép nhân ma trận, sau đó đồng bộ qua NCCL AllReduce.

Ưu điểm

Nhược điểm

Pipeline Parallel (PP) là gì?

Pipeline Parallel chia mô hình theo chiều dọc (layer), mỗi GPU chịu trách nhiệm một phần của stack. Các micro-batch được xử lý tuần tự qua pipeline, tạo ra hiệu ứng lắp đầy pipeline.

Ưu điểm

Nhược điểm

So Sánh Chi Tiết: Tensor Parallel vs Pipeline Parallel

Tiêu chíTensor ParallelPipeline Parallel
Độ trễ (latency)~15-25ms/token (8xA100)~35-60ms/token (16xA100)
Thông lượng (throughput)Tuyệt vời khi BS ≥ 32Tuyệt vời khi BS ≥ 64
Memory efficiencyTối ưu (model sharding)Tốt (layer partitioning)
Communication overheadCao (AllReduce mỗi layer)Thấp (chỉ inter-stage)
Yêu cầu hạ tầngNVLink bắt buộcEthernet 100Gbps+
GPU count scalingTối ưu: 2-8 GPUTối ưu: 8-64 GPU
Startup/warmupNhanhChậm (pipeline bubble)

Bảng So Sánh Chi Phí Và Hiệu Suất

Phương phápGPU cần thiếtChi phí/giờ (A100)Tokens/giâyCost/1M tokens
TP-8 (8xA100)8 GPU~$32/giờ~180 tokens/s~$0.18
PP-16 (16xA100)16 GPU~$64/giờ~320 tokens/s~$0.20
TP4-PP4 (Hybrid)16 GPU~$64/giờ~450 tokens/s~$0.14
HolySheep Cloud (DeepSeek V3.2)0 (managed)~$0.00042/1M tokens~500+ tokens/s$0.00042

Triển Khai Thực Tế: Code Examples

Tensor Parallel với vLLM

# Tensor Parallel Inference với vLLM

Yêu cầu: CUDA, vLLM, NCCL

from vllm import LLM, SamplingParams

Khởi tạo vLLM với Tensor Parallel = 8 GPU

llm = LLM( model="meta-llama/Llama-3-70b-instruct", tensor_parallel_size=8, # 8 GPU cho model 70B gpu_memory_utilization=0.90, max_model_len=8192, trust_remote_code=True ) sampling_params = SamplingParams( temperature=0.7, top_p=0.95, max_tokens=2048 )

Inference

prompts = [ "Giải thích cơ chế attention trong Transformer:", "So sánh Tensor Parallel và Pipeline Parallel:", ] outputs = llm.generate(prompts, sampling_params) for output in outputs: print(f"Generated: {output.outputs[0].text}")

Tài nguyên liên quan

Bài viết liên quan