Infrastructure for Machine Learning Guided Optimization (MLGO) in LLVM.
| Files | Last commit | Last update |
|---|---|---|
| 2 years ago | ||
| 2 years ago | ||
| 2 years ago | ||
| 2 years ago | ||
| 2 years ago | ||
| 2 years ago | ||
| 4 years ago | ||
| 4 years ago | ||
| 3 years ago | ||
| 4 years ago | ||
| 3 years ago | ||
| 3 years ago | ||
| 3 years ago | ||
| 4 years ago | ||
| 4 years ago | ||
| 3 years ago | ||
| 3 years ago |
MLGO 基础设施 — 机器学习引导的编译器优化框架
MLGO 是一个用于在 LLVM 中系统集成机器学习技术的框架。它用机器学习模型替代了 LLVM 中人工设计的优化启发式规则。MLGO 框架目前支持两种优化:
编译器组件均已包含在主 LLVM 代码库中。本代码库包含 MLGO 的训练基础设施及相关工具。
我们目前使用两种不同的机器学习算法:策略梯度(Policy Gradient)和进化策略(Evolution Strategies)来训练策略。目前,本代码库仅支持策略梯度训练。进化策略训练的发布已在我们的路线图中。
查看此演示,了解如何使用策略梯度从零开始训练您自己的面向代码大小的内联策略;或查看此演示,了解如何训练您自己的面向性能的寄存器分配策略。
有关 MLGO 的更多详情,请参阅我们的论文《MLGO:机器学习引导的编译器优化框架》。
有关如何为项目做贡献的更多详情,请参阅贡献指南。
预训练模型
我们会不定期发布可直接与 LLVM 配合使用的预训练模型。模型以 GitHub 发布的形式提供,命名格式为[任务]-[主版本号].[次版本号]。版本遵循语义化:主版本号对应 LLVM/编译器侧的不兼容变更,次版本号对应独立于编译器的模型更新。
构建 LLVM 时,有一个 -DLLVM_INLINER_MODEL_PATH 标志,您可以将其设置为内联模型的路径。如果路径设置为 download,则 CMake 将从 GitHub 下载最新的(兼容的)模型以供使用。该标志的其他可能值包括:
# Model is in /tmp/model, i.e. there is a file /tmp/model/saved_model.pb along
# with the rest of the tensorflow saved_model files produced from training.
-DLLVM_INLINER_MODEL_PATH=/tmp/model
# Download the most recent compatible model
-DLLVM_INLINER_MODEL_PATH=download
前提条件
目前,系统的环境要求如下:
- 较新版本的 Ubuntu 发行版,例如 20.04
- python 3.8.x/3.9.x/3.10.x
- 对于当前唯一支持的本地训练模式,我们建议使用高性能工作站(例如 96 个硬件线程)。
训练需要基于 ML“开发模式”构建的 clang。请参考:
模型训练的特定前提条件包括:
Pipenv:
pip3 install pipenv
实际依赖项:
pipenv sync --system
请注意,上述命令仅在仓库的根目录下有效,因为执行时需要当前工作目录中存在 Pipfile.lock 文件。
如果您计划进行开发工作,请确保同时获取开发和 CI 类别的软件包:
pipenv sync --system --categories "dev-packages ci"
可选地,若要运行测试(run_tests.sh),你还需要:
sudo apt-get install virtualenv
请注意,在为 LLVM 构建“release”模式时也需要相同的 tensorflow 软件包。
文档
一个使用 Fuchsia 作为代码库的端到端演示,我们从中提取语料库并训练模型。
Introduction
Infrastructure for Machine Learning Guided Optimization (MLGO) in LLVM.
Customize your domain