mirror of https://github.com/llvm/torch-mlir
Make docker instructions a bit more scoped
I was helping an engineer the other day who was attempting to use the Docker flow for interactive development and ran into countless issues. Add a note that it is not recommended for interactive development, and also move the Docker section down to avoid positioning it as the "default" that people should be using.pull/1428/head
parent
fa5a8e21a3
commit
8a91e4c962
|
@ -22,132 +22,6 @@ python -m pip install --upgrade pip
|
||||||
python -m pip install -r requirements.txt
|
python -m pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
## Docker Builds
|
|
||||||
|
|
||||||
We have preliminary support for building with Docker images. This is a new
|
|
||||||
flow and we would like your feedback on how it works for you and please
|
|
||||||
feel free to file any feedback or issues.
|
|
||||||
|
|
||||||
Install [Docker Engine](https://docs.docker.com/engine/install/ubuntu/). You don't need Docker Desktop.
|
|
||||||
|
|
||||||
You have three types of builds selectable with the Environment Variable `TM_PACKAGES`:`torch-mlir` the
|
|
||||||
Release build, `out-of-tree` where torch-mlir is build with a pre-built MLIR and `in-tree` where torch-mlir
|
|
||||||
is built as part of the LLVM project along with MLIR.
|
|
||||||
|
|
||||||
We mount a ccache and pip cache inside the docker container to speed up iterative builds. Iterative
|
|
||||||
builds should be as fast as running without docker.
|
|
||||||
|
|
||||||
### In-Tree builds
|
|
||||||
|
|
||||||
Build MLIR and Torch-MLIR together as part of the LLVM repo.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
TM_PACKAGES="in-tree" ./build_tools/python_deploy/build_linux_packages.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Out-of-Tree builds
|
|
||||||
|
|
||||||
Build LLVM/MLIR first and then build Torch-MLIR referencing that build
|
|
||||||
```shell
|
|
||||||
TM_PACKAGES="out-of-tree" ./build_tools/python_deploy/build_linux_packages.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Release builds
|
|
||||||
|
|
||||||
Build in a manylinux Docker image so we can upload artifacts to PyPI.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
TM_PACKAGES="torch-mlir" ./build_tools/python_deploy/build_linux_packages.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Mimicing CI+Release builds
|
|
||||||
|
|
||||||
If you wanted to build all the CIs locally
|
|
||||||
|
|
||||||
```shell
|
|
||||||
TM_PACKAGES="out-of-tree in-tree" ./build_tools/python_deploy/build_linux_packages.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
If you wanted to build all the CIs and the Release builds (just with Python 3.10 since most other Python builds are redundant)
|
|
||||||
|
|
||||||
```shell
|
|
||||||
TM_PACKAGES="torch-mlir out-of-tree in-tree" TM_PYTHON_VERSIONS="cp310-cp310" ./build_tools/python_deploy/build_linux_packages.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Note: The Release docker still runs as root so it may generate some files owned by root:root. We hope to move it to run as a user in the future.
|
|
||||||
|
|
||||||
### Cleaning up
|
|
||||||
|
|
||||||
Docker builds tend to leave a wide variety of files around. Luckily most are owned by the user but there are still some that need to be removed
|
|
||||||
as superuser.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
rm -rf build build_oot llvm-build docker_venv externals/pytorch/build .ccache
|
|
||||||
```
|
|
||||||
|
|
||||||
## Building your own Docker image
|
|
||||||
|
|
||||||
If you would like to build your own docker image (usually not necessary). You can run:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
cd ./build_tools/docker
|
|
||||||
docker build -t your-name/torch-mlir-ci --no-cache .
|
|
||||||
```
|
|
||||||
|
|
||||||
### Other configurable environmental variables
|
|
||||||
|
|
||||||
The following additional environmental variables can be used to customie your docker build:
|
|
||||||
|
|
||||||
* Custom Release Docker image:
|
|
||||||
Defaults to `stellaraccident/manylinux2014_x86_64-bazel-5.1.0:latest`
|
|
||||||
```shell
|
|
||||||
TM_RELEASE_DOCKER_IMAGE="stellaraccident/manylinux2014_x86_64-bazel-5.1.0:latest"
|
|
||||||
```
|
|
||||||
* Custom CI Docker image:
|
|
||||||
Defaults to `powderluv/torch-mlir-ci:latest`. This assumes an Ubuntu LTS like image. You can build your own with `./build_tools/docker/Dockerfile`
|
|
||||||
```shell
|
|
||||||
TM_CI_DOCKER_IMAGE="powderluv/torch-mlir-ci:latest"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Custom Python Versions for Release builds:
|
|
||||||
Version of Python to use in Release builds. Ignored in CIs. Defaults to `cp38-cp38 cp39-cp39 cp310-cp310`
|
|
||||||
```shell
|
|
||||||
TM_PYTHON_VERSIONS="cp38-cp38 cp39-cp39 cp310-cp310"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Location to store Release build wheels
|
|
||||||
```shell
|
|
||||||
TM_OUTPUT_DIR="./build_tools/python_deploy/wheelhouse"
|
|
||||||
```
|
|
||||||
|
|
||||||
* What "packages" to build:
|
|
||||||
Defaults to torch-mlir. Options are `torch-mlir out-of-tree in-tree`
|
|
||||||
```shell
|
|
||||||
TM_PACKAGES="torch-mlir out-of-tree in-tree"
|
|
||||||
```
|
|
||||||
* Use pre-built Pytorch:
|
|
||||||
Defaults to using pre-built Pytorch. Setting it to `OFF` builds from source
|
|
||||||
```shell
|
|
||||||
TM_USE_PYTORCH_BINARY="OFF"
|
|
||||||
```
|
|
||||||
* Skip running tests
|
|
||||||
Skip running tests if you want quick build only iteration. Default set to `OFF`
|
|
||||||
```shell
|
|
||||||
TM_SKIP_TESTS="OFF"
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Build Python Packages
|
|
||||||
|
|
||||||
We have preliminary support for building Python packages. This can be done
|
|
||||||
with the following commands:
|
|
||||||
|
|
||||||
```
|
|
||||||
python -m pip install --upgrade pip
|
|
||||||
python -m pip install -r requirements.txt
|
|
||||||
CMAKE_GENERATOR=Ninja python setup.py bdist_wheel
|
|
||||||
```
|
|
||||||
|
|
||||||
## CMake Build
|
## CMake Build
|
||||||
|
|
||||||
Two setups are possible to build: in-tree and out-of-tree. The in-tree setup is the most straightforward, as it will build LLVM dependencies as well.
|
Two setups are possible to build: in-tree and out-of-tree. The in-tree setup is the most straightforward, as it will build LLVM dependencies as well.
|
||||||
|
@ -300,6 +174,133 @@ Torch-MLIR can also be built using Bazel (apart from the official CMake build) f
|
||||||
```
|
```
|
||||||
3. Find the built binary at `utils/bazel/bazel-bin/external/torch-mlir/torch-mlir-opt`.
|
3. Find the built binary at `utils/bazel/bazel-bin/external/torch-mlir/torch-mlir-opt`.
|
||||||
|
|
||||||
|
## Docker Builds
|
||||||
|
|
||||||
|
We have preliminary support for building with Docker images. Currently this
|
||||||
|
is not very convenient for day-to-day interactive development and
|
||||||
|
debugging flows but is very useful for reproducing failures
|
||||||
|
from the CI. This is a new flow and we would like your feedback on how
|
||||||
|
it works for you and please feel free to file any feedback or issues.
|
||||||
|
|
||||||
|
Install [Docker Engine](https://docs.docker.com/engine/install/ubuntu/). You don't need Docker Desktop.
|
||||||
|
|
||||||
|
You have three types of builds selectable with the Environment Variable `TM_PACKAGES`:`torch-mlir` the
|
||||||
|
Release build, `out-of-tree` where torch-mlir is build with a pre-built MLIR and `in-tree` where torch-mlir
|
||||||
|
is built as part of the LLVM project along with MLIR.
|
||||||
|
|
||||||
|
We mount a ccache and pip cache inside the docker container to speed up iterative builds. Iterative
|
||||||
|
builds should be as fast as running without docker.
|
||||||
|
|
||||||
|
### In-Tree builds
|
||||||
|
|
||||||
|
Build MLIR and Torch-MLIR together as part of the LLVM repo.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
TM_PACKAGES="in-tree" ./build_tools/python_deploy/build_linux_packages.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Out-of-Tree builds
|
||||||
|
|
||||||
|
Build LLVM/MLIR first and then build Torch-MLIR referencing that build
|
||||||
|
```shell
|
||||||
|
TM_PACKAGES="out-of-tree" ./build_tools/python_deploy/build_linux_packages.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Release builds
|
||||||
|
|
||||||
|
Build in a manylinux Docker image so we can upload artifacts to PyPI.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
TM_PACKAGES="torch-mlir" ./build_tools/python_deploy/build_linux_packages.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mimicing CI+Release builds
|
||||||
|
|
||||||
|
If you wanted to build all the CIs locally
|
||||||
|
|
||||||
|
```shell
|
||||||
|
TM_PACKAGES="out-of-tree in-tree" ./build_tools/python_deploy/build_linux_packages.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
If you wanted to build all the CIs and the Release builds (just with Python 3.10 since most other Python builds are redundant)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
TM_PACKAGES="torch-mlir out-of-tree in-tree" TM_PYTHON_VERSIONS="cp310-cp310" ./build_tools/python_deploy/build_linux_packages.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The Release docker still runs as root so it may generate some files owned by root:root. We hope to move it to run as a user in the future.
|
||||||
|
|
||||||
|
### Cleaning up
|
||||||
|
|
||||||
|
Docker builds tend to leave a wide variety of files around. Luckily most are owned by the user but there are still some that need to be removed
|
||||||
|
as superuser.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
rm -rf build build_oot llvm-build docker_venv externals/pytorch/build .ccache
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building your own Docker image
|
||||||
|
|
||||||
|
If you would like to build your own docker image (usually not necessary). You can run:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd ./build_tools/docker
|
||||||
|
docker build -t your-name/torch-mlir-ci --no-cache .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Other configurable environmental variables
|
||||||
|
|
||||||
|
The following additional environmental variables can be used to customie your docker build:
|
||||||
|
|
||||||
|
* Custom Release Docker image:
|
||||||
|
Defaults to `stellaraccident/manylinux2014_x86_64-bazel-5.1.0:latest`
|
||||||
|
```shell
|
||||||
|
TM_RELEASE_DOCKER_IMAGE="stellaraccident/manylinux2014_x86_64-bazel-5.1.0:latest"
|
||||||
|
```
|
||||||
|
* Custom CI Docker image:
|
||||||
|
Defaults to `powderluv/torch-mlir-ci:latest`. This assumes an Ubuntu LTS like image. You can build your own with `./build_tools/docker/Dockerfile`
|
||||||
|
```shell
|
||||||
|
TM_CI_DOCKER_IMAGE="powderluv/torch-mlir-ci:latest"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Custom Python Versions for Release builds:
|
||||||
|
Version of Python to use in Release builds. Ignored in CIs. Defaults to `cp38-cp38 cp39-cp39 cp310-cp310`
|
||||||
|
```shell
|
||||||
|
TM_PYTHON_VERSIONS="cp38-cp38 cp39-cp39 cp310-cp310"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Location to store Release build wheels
|
||||||
|
```shell
|
||||||
|
TM_OUTPUT_DIR="./build_tools/python_deploy/wheelhouse"
|
||||||
|
```
|
||||||
|
|
||||||
|
* What "packages" to build:
|
||||||
|
Defaults to torch-mlir. Options are `torch-mlir out-of-tree in-tree`
|
||||||
|
```shell
|
||||||
|
TM_PACKAGES="torch-mlir out-of-tree in-tree"
|
||||||
|
```
|
||||||
|
* Use pre-built Pytorch:
|
||||||
|
Defaults to using pre-built Pytorch. Setting it to `OFF` builds from source
|
||||||
|
```shell
|
||||||
|
TM_USE_PYTORCH_BINARY="OFF"
|
||||||
|
```
|
||||||
|
* Skip running tests
|
||||||
|
Skip running tests if you want quick build only iteration. Default set to `OFF`
|
||||||
|
```shell
|
||||||
|
TM_SKIP_TESTS="OFF"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Build Python Packages
|
||||||
|
|
||||||
|
We have preliminary support for building Python packages. This can be done
|
||||||
|
with the following commands:
|
||||||
|
|
||||||
|
```
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
python -m pip install -r requirements.txt
|
||||||
|
CMAKE_GENERATOR=Ninja python setup.py bdist_wheel
|
||||||
|
```
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue