Giới thiệu về vllm-ascend trên nền tảng Ascend
vllm-ascend là một plugin phần cứng cho mô hình ngôn ngữ lớn chạy trên chip AI của Ascend. Dự án này không chỉ hỗ trợ các tính năng phần cứng gốc mà còn cải tiến hệ thống phân phối, tối ưu hóa lượng tử và quản lý bộ nhớ, mang lại giải pháp mới cho việc triển khai mô hình lớn.Các thách thức kỹ thuật trong triển khai mô hình lớn trên Ascend
Mặt trận phần cứng:
- Tối ưu hóa chế độ truy cập bộ nhớ: Cần thiết kế lại chiến lược phân bổ bộ nhớ để phù hợp với cấu trúc bộ nhớ CAMEM của Ascend.
- Sự tương thích của đơn vị tính toán: Cải thiện sự phối hợp giữa đơn vị ma trận (Cube) và đơn vị vectơ (Vector).
- Giao thức truyền thông: Điều chỉnh giao thức HCCL cho quá trình huấn luyện phân tán.
Vấn đề lưu trữ và tính toán:
- Vấn đề tường bộ nhớ: Dung lượng bộ nhớ KV tăng theo bình phương chiều dài chuỗi, gây thiếu hụt bộ nhớ.
- Bộ xử lý song song không đủ: Cần tận dụng tốt hơn tài nguyên từ nhiều card GPU.
- Chi phí truyền thông lớn: Việc đồng bộ gradient thường xuyên làm giảm hiệu suất.
Giải pháp: Hệ thống tối ưu hóa đa tầng
Lớp trừu tượng phần cứng
Dự án cung cấp giao diện API thống nhất cho Ascend tại `vllm_ascend/device/device_op.py`, giúp mã ứng dụng cao cấp hoạt động độc lập với phần cứng bên dưới.
def allocate_camem_memory(size):
# Quản lý bộ nhớ CAMEM
return camem_alloc(size)
class DeviceManager:
def __init__(self):
self.device = detect_device()
initialize_env(self.device)
Lớp tối ưu hóa toán tử
Những toán tử được tối ưu hóa đặc biệt cho Ascend bao gồm:
# Ví dụ về toán tử kết hợp trong thư mục `csrc/`
def fused_add_rms_norm(input_tensor, weight, bias=None):
return ascend_fused_ops.add_rms_norm(input_tensor, weight, bias)
Lớp điều phối phân phối
Công nghệ PCP và DCP giúp xử lý chuỗi dài hiệu quả:
def context_parallel_strategy(seq_length):
if seq_length > threshold:
return "DCP"
else:
return "PCP"
Xác nhận hiệu suất: Kết quả thực tế và thử nghiệm chuẩn
| Phương pháp lượng tử | Hao hụt độ chính xác | Nâng cao tốc độ suy luận | Giảm dung lượng bộ nhớ |
|---|---|---|---|
| W8A8 tĩnh | <1% | 2.5x | 50% |
| W4A8 động | <2% | 3.8x | 75% |