Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions docs/zh/technical/AI/Buddy-MLIR_introduce.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Buddy-MLIR 技术解析与应用研究指南

Buddy-MLIR 是一个旨在简化基于 MLIR(Multi-Level Intermediate Representation)构建人工智能(AI)编译器和工具开发的开源项目。它通过提供更易于上手的工具、模块化组件和清晰的端到端流程,作为开发者的“伙伴”,帮助他们克服原生 MLIR 生态中复杂的学习障碍。


## 一、 Buddy-MLIR 的核心优点(为什么选择它?)

Buddy-MLIR 的价值在于它在继承 MLIR 强大功能的同时,极大地提升了开发者的效率和体验。

1. **极大地降低了 MLIR 的学习曲线**
- 清晰的端到端示例:提供从模型导入到代码生成的完整、可运行的示例。这些示例是初学者快速理解 MLIR 编译器工作流的最佳实践。
- 高层抽象的工具链:封装了原生 MLIR 的复杂性,提供更简洁的 API 和工具链,使开发者无需成为 MLIR 专家也能快速构建功能。

2. **增强了模块化和可复用性**
- 解耦的组件:架构设计高度模块化。其运行时(Runtime)、驱动程序和特定的优化 Pass 都是独立的组件,方便开发者抽取并集成到其他 AI 编译器或工具链中。
- 易于定制的后端:开发者可以基于 Buddy-MLIR 的基础架构,轻松地添加或修改针对特定硬件(如自定义加速器、FPGA 等)的后端支持。

3. **提供完整的 AI 编译流程和运行时支持**
- 全流程覆盖:区别于只关注某个转换阶段的项目,Buddy-MLIR 展示了一个从主流 AI 框架模型(如 ONNX/TensorFlow)输入,经过多级优化,直到生成可执行目标代码的完整、可部署的流程。
- 集成的运行时:包含一个轻量级、可定制的 C++ 运行时库,负责关键的部署任务,例如内存管理、权重加载和函数调用。

4. **聚焦于 AI 领域的性能优化**
AI 友好型 Pass:提供针对 AI 模型性能的关键优化 Pass,包括:
- 算子融合 (Operator Fusion):减少内存访问和内核启动开销。
- 内存布局优化:提高数据局部性(Data Locality)。
- 高性能循环转换:利用循环分块、循环展开等技术提升效率。


## 二、 模型优化和编译研究的使用指南

要开始使用 Buddy-MLIR 进行模型优化和编译研究,建议按以下三个阶段循序渐进地深入。


### 阶段一:环境搭建与前端(模型导入)

| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究点 |
|------|------|-------------------------|------------|
| 1. 环境搭建 | 编译并运行 Buddy-MLIR 项目。 | 遵循项目文档,编译 C++ 核心库和 Python 绑定。 | 熟悉 MLIR 编译器依赖和构建流程(CMake)。 |
| 2. 模型导入 | 将外部模型转换为 MLIR IR。 | 使用 Buddy-MLIR 提供的工具链或示例,将 ONNX/TensorFlow 模型转换为高层 MLIR 方言(如 TOSA 或 MHLO)。 | 研究算子映射的正确性,确保前端转换过程中的语义保真度。 |
| 3. 基础运行 | 验证 IR 转换的正确性。 | 运行未经优化的模型,验证其在目标硬件上的功能正确性。 | 理解 Buddy-MLIR 的**运行时(Runtime)** 机制及其在数据管理中的作用。 |


### 阶段二:中层优化与转换(性能核心)

这是利用 Buddy-MLIR 进行性能优化的核心研究阶段。

| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究方向 |
|------|------|-------------------------|--------------|
| 1. 算子融合 (Fusion) | 减少开销,提升性能。 | 观察和修改 Buddy-MLIR 中针对 Linalg 或特定 AI 算子设计的融合 Pass。 | 设计更高效的融合策略,以适应不同的模型结构(如 RNN、Transformer)和目标硬件特性。 |
| 2. 内存布局优化 | 提高数据局部性。 | 实验改变张量内存布局(如 NCHW $\rightarrow$ NHWC)的 Pass。 | 研究最优内存布局的自动选择机制,以及如何在多级缓存(L1/L2)的硬件上实现最佳的缓存命中率。 |
| 3. 高层转换 | 将 AI 语义降低到 Linalg 方言。 | 学习 TOSA/MHLO 等高层方言如何通过 Pass 转换到 linalg 方言。 | 专注于图优化技术,如常量折叠和图结构重写,以简化后续的编译工作。 |
| 4. 新优化 Pass 开发 | 实现自己的创新优化想法。 | 以 Buddy-MLIR 的现有 Pass 为模板,学习利用 MLIR 的 PassManager 和 PatternRewriter 来开发新的 Pass。 | 探索基于 MLIR 的硬件无关优化和形状推导。 |


### 阶段三:降低与代码生成(硬件适配)

此阶段重点是将优化后的 IR 转换为目标硬件可执行的代码。

| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究方向 |
|------|------|-------------------------|--------------|
| 1. 逐步降低 | 将 Linalg 降级到 Affine/SCF/Vector。 | 观察 Pass 流水线如何将 Linalg 算子逐步转换为循环 (affine/scf) 和 SIMD 指令 (vector)。 | 研究循环转换(如分块、剥离、展开)的策略及其对性能的影响,并探索自动代码生成工具(如 mlir-opt)的使用。 |
| 2. 向量化与并行化 | 利用硬件的 SIMD/多核能力。 | 检查 IR 如何降低到 Vector 方言,以及如何利用 GPU 或 LLVM 方言进行并行化。 | 专注于自动向量化的挑战,设计更智能的 Pass 来识别和转换适合并行执行的模式。 |
| 3. 新硬件后端集成 | 适配自定义或新的硬件架构。 | 在 Buddy-MLIR 的 JIT/AOT 流程中,扩展代码生成后端,以支持目标硬件所需的指令集或运行时 API 调用。 | 研究如何为新的**特定领域架构(DSA)** 定制 MLIR 方言和降低策略,实现高效的编译。 |s
54 changes: 54 additions & 0 deletions docs/zh/technical/Basic-knowlegde/xcode_activate_CLI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# 激活xcode中CLI

## 未激活状态
输入 `xcode-select -p`

应输出:

```
$ /Library/Developer/CommandLineTools


$ xcode-select: error: unable to get active developer directory
```

## 进行激活
执行下面这条命令(需要 sudo):
```
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
```

⚠️ 注意:如果你的 Xcode 不在 `/Applications`(比如叫 “Xcode-beta.app”),

可以用:

```
ls /Applications
```

找到确切的名字后再替换路径。

## 进行验证
```
$ xcode-select -p
```
应输出:
```
/Applications/Xcode.app/Contents/Developer
```

## xctrace验证(Apple Xcode 的性能分析命令行工具)

```
$ xcrun xctrace version


$ xctrace version
```

应输出:
```
$ xctrace version 16.0 (16F6)
```