OpenArchLabOpen Architecture — From Models to Systems

L3 · Build / specialization path

Trình biên dịch tối ưu mô hình cho thiết bị đích

Trình biên dịch phân tích đồ thị phép tính của mô hình để gộp toán tử và sinh mã máy tối ưu cho phần cứng đích.

LESSON ID compiler GROUP Kiến trúc Inference
Mục lục bài học

1Định nghĩa

Model compiler là công cụ biến đổi đồ thị toán tử mức cao của mô hình (như PyTorch hay ONNX) thành mã thực thi tối ưu cho một dòng phần cứng cụ thể trước khi phục vụ. Quá trình này thường diễn ra ở bước đóng gói engine hoặc lúc khởi động (warmup) cho các kích thước batch/sequence đã định.

Trình biên dịch hạ dần biểu diễn mô hình xuống các tầng trung gian (lowering), sắp xếp lại bố cục bộ nhớ và gộp nhiều phép toán liên tiếp thành một kernel duy nhất (operator fusion) để giảm số lần đọc/ghi trung gian qua HBM. Kết quả là gói thực thi (engine artifact) mà runtime nạp lên để chạy lặp lại hàng triệu lần.

Ví dụ đời thường: Trình biên dịch (compiler) giống như kỹ sư thiết kế lại quy trình thao tác trước khi mở xưởng sản xuất hàng loạt. Thay vì để công nhân bê phôi qua 5 bàn làm 5 công đoạn lẻ tẻ (tốn công bê đi bê lại qua kho HBM), kỹ sư ghép luôn 5 thao tác đó vào chung một khuôn dập liên hoàn phù hợp đúng cỡ máy của xưởng.

2Luồng

Sơ đồ luồng (4 bước)
  1. Mô tả model hoặc kernel

    Nhận đồ thị phép toán hoặc ngôn ngữ chuyên dụng.

  2. Biến đổi biểu diễn trung gian

    Tối ưu thứ tự, layout và ghép phép toán.

  3. Sinh mã và lưu artifact

    Tạo mã cho backend phù hợp.

  4. Runtime sử dụng mã

    Thực thi với shapes và kiểu số tương thích.

Mã Mermaid
flowchart TD
  step1["Mô tả model hoặc kernel"]
  step2["Biến đổi biểu diễn trung gian"]
  step3["Sinh mã và lưu artifact"]
  step4["Runtime sử dụng mã"]
  step1 --> step2
  step2 --> step3
  step3 --> step4

3Giải pháp

TorchInductor là backend mặc định của torch.compile; tài liệu PyTorch mô tả việc dùng Triton cho nhiều backend thiết bị. Tùy stack, engine cũng có đường build riêng.

Lưu artifact hợp lệ và hạn chế biên dịch lại do quá nhiều shape giúp giảm chi phí. Đo cả cold start: kernel nhanh hơn chưa đủ nếu compile time quá lớn.

4Profiling

  • Thời gian compile và recompile

    Đếm lần gặp shape mới, graph breaks và thời gian tạo mã.

  • Hiệu quả sau compile

    So cùng phép tính với đường reference, đo steady-state và kiểm tra sai số.

Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.

5Ví dụ

Model có shapes ít thay đổi

Compiler có thể chuyên biệt hóa và ghép các phép toán thường lặp.

Dịch vụ prompt lengths đa dạng

Mỗi shape mới có thể tạo thêm công việc; grouping shapes cần cân bằng padding và số artifact.

6Thuật ngữ

Intermediate Representation
Biểu diễn trung gian: dạng mô tả phép tính mà compiler dùng để phân tích và biến đổi.
Lowering
Chuyển một mô tả cấp cao thành các phép toán gần với phần cứng hơn.
Fusion
Ghép các phép toán để giảm dữ liệu trung gian hoặc số lần phát lệnh.
Glossary (5)
Data type
Kiểu dữ liệu của tensor, quyết định cách biểu diễn số.
Kernel
Hàm tính toán chạy trên thiết bị; thường xử lý nhiều phần tử song song.
Runtime
Phần mềm quản lý việc thực thi, buffers và phụ thuộc giữa phép toán.
Warmup
Chạy chuẩn bị để hoàn tất khởi tạo, compilation/capture hoặc ổn định execution trước đo.
Tensor shape
Kích thước các chiều của tensor; ảnh hưởng layout, kernel và memory.

7Bài liên quan

8Nguồn