Tổng quan
Để phân biệt các mục tiêu phần cứng và phần mềm khác nhau, MLIR có các “phương ngữ”, bao gồm:
- TensorFlow IR, đại diện cho tất cả những điều có thể có trong biểu đồ TensorFlow.
- XLA HLO IR, được thiết kế để tận dụng khả năng biên dịch của XLA (với đầu ra là TPU).
- Một phương ngữ affine thử nghiệm, tập trung vào biểu diễn và tối ưu hóa đa diện .
- LLVM IR, có ánh xạ 1:1 giữa nó và biểu diễn riêng của LLVM, cho phép MLIR phát mã GPU và CPU thông qua LLVM.
- TensorFlow Lite, sẽ chuyển sang mã chạy trên nền tảng di động.
Mỗi phương ngữ bao gồm một tập hợp các phép toán được xác định có các bất biến được đặt trên chúng, như: “Đây là toán tử nhị phân và đầu vào và đầu ra có cùng loại”.
Thêm vào MLIR
MLIR không có danh sách cố định/tích hợp sẵn các hoạt động được biết đến trên toàn cầu (không có “nội tại”). Các phương ngữ có thể xác định các loại hoàn toàn tùy chỉnh, đó là cách MLIR có thể mô hình hóa những thứ như hệ thống loại LLVM IR (có tổng hợp hạng nhất), trừu tượng hóa miền quan trọng đối với các bộ tăng tốc được tối ưu hóa ML như các loại lượng tử hóa và thậm chí cả hệ thống loại Swift hoặc Clang (mà được xây dựng xung quanh các nút khai báo Swift/Clang) trong tương lai.
Nếu bạn muốn kết nối một trình biên dịch cấp thấp mới, bạn sẽ tạo một phương ngữ mới và mức giảm giữa phương ngữ Đồ thị TensorFlow và phương ngữ của bạn. Điều này tạo thuận lợi cho các nhà sản xuất phần cứng và trình biên dịch. Bạn thậm chí có thể nhắm mục tiêu các phương ngữ ở các cấp độ khác nhau trong cùng một mô hình; những người tối ưu hóa cấp cao hơn sẽ tôn trọng những phần không quen thuộc của IR và chờ cấp độ thấp hơn xử lý nó.