174 lines
5.9 KiB
Markdown
174 lines
5.9 KiB
Markdown
<!--- Licensed to the Apache Software Foundation (ASF) under one -->
|
|
<!--- or more contributor license agreements. See the NOTICE file -->
|
|
<!--- distributed with this work for additional information -->
|
|
<!--- regarding copyright ownership. The ASF licenses this file -->
|
|
<!--- to you under the Apache License, Version 2.0 (the -->
|
|
<!--- "License"); you may not use this file except in compliance -->
|
|
<!--- with the License. You may obtain a copy of the License at -->
|
|
|
|
<!--- http://www.apache.org/licenses/LICENSE-2.0 -->
|
|
|
|
<!--- Unless required by applicable law or agreed to in writing, -->
|
|
<!--- software distributed under the License is distributed on an -->
|
|
<!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -->
|
|
<!--- KIND, either express or implied. See the License for the -->
|
|
<!--- specific language governing permissions and limitations -->
|
|
<!--- under the License. -->
|
|
|
|
# TVM Documentation
|
|
|
|
This folder contains the source of TVM's documentation, hosted at https://tvm.apache.org/docs
|
|
|
|
## Build Locally
|
|
|
|
### With Docker (recommended)
|
|
|
|
1. Build TVM and the docs inside the [tlcpack/ci-gpu image](https://hub.docker.com/r/tlcpack/ci-gpu) using the [`ci.py`](../tests/scripts/ci.py) script.
|
|
|
|
```bash
|
|
# If this runs into errors, try cleaning your 'build' directory
|
|
python tests/scripts/ci.py docs
|
|
|
|
# See other doc building options
|
|
python tests/scripts/ci.py docs --help
|
|
```
|
|
|
|
2. Serve the docs and visit http://localhost:8000 in your browser
|
|
|
|
```bash
|
|
# Run an HTTP server you can visit to view the docs in your browser
|
|
python tests/scripts/ci.py serve-docs
|
|
```
|
|
|
|
### Native
|
|
|
|
1. [Build TVM](https://tvm.apache.org/docs/install/from_source.html) first in the repo root folder, then make it importable:
|
|
|
|
```bash
|
|
export TVM_HOME=/path-to-tvm
|
|
export TVM_LIBRARY_PATH=$TVM_HOME/build
|
|
pip install --target=$TVM_HOME/python $TVM_HOME/3rdparty/tvm-ffi
|
|
export PYTHONPATH=$TVM_HOME/python:$PYTHONPATH
|
|
```
|
|
|
|
`docs/conf.py` unconditionally imports `tvm` at startup, so the build will
|
|
fail immediately if TVM is not importable.
|
|
|
|
2. Install dependencies
|
|
|
|
```bash
|
|
# Pillow on Ubuntu may require libjpeg-dev from apt
|
|
./docker/bash.sh ci_gpu -c \
|
|
'python3 -m pip install --quiet sphinx-book-theme==1.1.4 && python3 -m pip freeze' > frozen-requirements.txt
|
|
|
|
pip install -r frozen-requirements.txt
|
|
```
|
|
|
|
3. Generate the docs
|
|
|
|
```bash
|
|
# TVM_TUTORIAL_EXEC_PATTERN=none skips the tutorial execution to the build
|
|
# work on most environments (e.g. MacOS).
|
|
export TVM_TUTORIAL_EXEC_PATTERN=none
|
|
|
|
cd docs
|
|
make html
|
|
```
|
|
|
|
4. Run an HTTP server and visit http://localhost:8000 in your browser
|
|
|
|
```bash
|
|
cd _build/html && python3 -m http.server
|
|
```
|
|
|
|
## Only Execute Specified Tutorials
|
|
|
|
The document build process will execute all the tutorials in the sphinx gallery.
|
|
This will cause failure in some cases when certain machines do not have necessary
|
|
environment. You can set `TVM_TUTORIAL_EXEC_PATTERN` to only execute
|
|
the path that matches the regular expression pattern.
|
|
|
|
For example, to only build tutorials under `/get_started/tutorials`, run
|
|
|
|
```bash
|
|
python tests/scripts/ci.py docs --tutorial-pattern=/get_started/tutorials
|
|
```
|
|
|
|
To only build one specific file, do
|
|
|
|
```bash
|
|
# The slash \ is used to get . in regular expression
|
|
python tests/scripts/ci.py docs --tutorial-pattern=file_name\.py
|
|
```
|
|
|
|
## Helper Scripts
|
|
|
|
The following script mirrors the CI docs pipeline: it runs a sphinx pre-check
|
|
(when not running locally) and then performs a full `make htmldepoly` build,
|
|
including tutorial execution. You will need a GPU CI environment.
|
|
|
|
```bash
|
|
tests/scripts/task_python_docs.sh
|
|
```
|
|
|
|
To build docs locally without executing tutorials (fastest local iteration):
|
|
|
|
```bash
|
|
cd docs && TVM_TUTORIAL_EXEC_PATTERN=none make html
|
|
```
|
|
|
|
Note: the sphinx pre-check (warning validation) only runs in CI (`IS_LOCAL=0`).
|
|
`python tests/scripts/ci.py docs` always sets `IS_LOCAL=1` and skips the
|
|
pre-check regardless of other flags.
|
|
|
|
To run the full build including tutorial executions:
|
|
|
|
```bash
|
|
python tests/scripts/ci.py docs --full
|
|
```
|
|
|
|
## Define the Order of Tutorials
|
|
|
|
You can define the order of tutorials with `subsection_order` and
|
|
`within_subsection_order` in [`conf.py`](conf.py).
|
|
By default, the tutorials within one subsection are sorted by filename.
|
|
|
|
## Google Colab Integration
|
|
|
|
All the TVM tutorials can be opened and used interactively in Google Colab by
|
|
clicking the button at the top of the page. To do this, `sphinx-gallery` builds
|
|
`.ipynb` files from each tutorial, which are automatically deployed to the
|
|
[apache/tvm-site](https://github.com/apache/tvm-site/tree/asf-site) repo's
|
|
`asf-site` branch by [@tvm-bot](https://github.com/tvm-bot).
|
|
|
|
To make sure your tutorial runs correctly on Colab, any non-Python parts of
|
|
the tutorial (e.g. dependency installations) should be prefixed by an
|
|
[IPython magic command](https://ipython.readthedocs.io/en/stable/interactive/magics.html).
|
|
These will not be included in the built `HTML` file. For example, to install
|
|
Pytorch in your tutorial, add a ReStructured Text block like the following:
|
|
|
|
```python
|
|
######################################################################
|
|
# To run this tutorial, we must install PyTorch:
|
|
#
|
|
# .. code-block:: bash
|
|
#
|
|
# %%shell
|
|
# pip install torch
|
|
#
|
|
```
|
|
|
|
### Interactive Bash Scripts
|
|
|
|
In stock IPython, the `%%bash` magic command should be used to run shell
|
|
commands. However, this command does not give real-time output - the
|
|
tutorial's user will not see any output until the entire cell finishes
|
|
running. When running commands that take several minutes (e.g. installing
|
|
dependencies), this is annoying.
|
|
|
|
Luckily, Google Colab has the `%%shell` magic command that does the same
|
|
thing as `%%bash`, but gives output in real time. This command is specific
|
|
to Colab, and its [source code](https://github.com/googlecolab/colabtools)
|
|
is public. Thus, `%%shell` should be used instead of `%%bash` when writing
|
|
TVM tutorials.
|