README.md 7.81 KB
Newer Older
Paul's avatar
Paul committed
1
# AMD MIGraphX
Paul's avatar
Paul committed
2

Shucai Xiao's avatar
Shucai Xiao committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
AMD MIGraphX is AMD's graph inference engine that accelerates machine learning model inference. AMD MIGraphX can be used by
installing binaries directly or building from source code.

In the following, instructions of how to build and install MIGraphX are described with Ubuntu as the OS
(Instructions of installation on other Linux OSes will come later). Note that all the following instructions assume 
ROCm has been installed successfully. ROCm installation instructions are explained in the [ROCm installation
guide](https://rocmdocs.amd.com/en/latest/Installation_Guide/Installation-Guide.html).

## Installing from binaries
With ROCm installed correctly, MIGraphX binaries can be installed on Ubuntu with the following command:
```
sudo apt update && sudo apt install -y migraphx
```
then the header files and libs are installed under `/opt/rocm-<version>`, where `<version>` is the ROCm version.

## Building from source

There are three ways to build the MIGraphX sources. 
* [Use the ROCm build tool](#use-the-rocm-build-tool-rbuild)
    
    This approach uses [rbuild](https://github.com/RadeonOpenCompute/rbuild) to install the prerequisites and
build the libs with just one command. 

* [Use cmake](#use-cmake-to-build-migraphx)
    
    This approach uses a script to install the prerequisites, then use cmake to build the source.
      
* [Use docker](#use-docker)
    
    This approach builds a docker image with all prerequisites installed, then build the MIGraphX sources inside a docker container. 

In the following, we will first list the prerequisites required to build MIGraphX source code, then describe 
each of the three approaches.

### List of prerequisites
The following is a list of prerequisites required to build MIGraphX source. 
Paul's avatar
Paul committed
39
40
41

* [ROCm cmake modules](https://github.com/RadeonOpenCompute/rocm-cmake) **required**
* [MIOpen](https://github.com/ROCmSoftwarePlatform/MIOpen) for running on the GPU
Shucai Xiao's avatar
Shucai Xiao committed
42
* [rocBLAS](https://github.com/ROCmSoftwarePlatform/rocBLAS) for running on the GPU
Paul's avatar
Paul committed
43
* [HIP](https://github.com/ROCm-Developer-Tools/HIP) for running on the GPU
44
* [Protobuf](https://github.com/google/protobuf) for reading [onnx](https://github.com/onnx/onnx) files
Paul's avatar
Paul committed
45
* [Half](http://half.sourceforge.net/) - IEEE 754-based half-precision floating point library
Paul's avatar
Paul committed
46
* [pybind11](https://pybind11.readthedocs.io/en/stable/) - for python bindings
Shucai Xiao's avatar
Shucai Xiao committed
47
48
* [JSON](https://github.com/nlohmann/json) - for model serialization to json string format
* [MessagePack](https://msgpack.org/index.html) - for model serialization to binary format
Umang Yadav's avatar
Umang Yadav committed
49
* [SQLite3](https://www.sqlite.org/index.html) - to create database of kernels' tuning information or execute queries on existing database
Paul's avatar
Paul committed
50

Shucai Xiao's avatar
Shucai Xiao committed
51
#### Use the ROCm build tool [rbuild](https://github.com/RadeonOpenCompute/rbuild).
Paul's avatar
Paul committed
52

Shucai Xiao's avatar
Shucai Xiao committed
53
54
55
56
In this approach, we use the [rbuild](https://github.com/RadeonOpenCompute/rbuild) build tool to
build MIGraphX. The specific steps are as follows:

1) Install rocm-cmake, pip3, rocblas, and miopen-hip with the command
Paul's avatar
Paul committed
57
58

```
Paul Fultz II's avatar
Paul Fultz II committed
59
sudo apt install -y rocm-cmake python3-pip rocblas miopen-hip
Paul's avatar
Paul committed
60
61
```

Shucai Xiao's avatar
Shucai Xiao committed
62
63
2) Install [rbuild](https://github.com/RadeonOpenCompute/rbuild) (sudo may be required here.)

64
```
Shucai Xiao's avatar
Shucai Xiao committed
65
pip3 install https://github.com/RadeonOpenCompute/rbuild/archive/master.tar.gz
66
```
Paul's avatar
Paul committed
67

Shucai Xiao's avatar
Shucai Xiao committed
68
3) Build MIGraphX source code
Paul's avatar
Paul committed
69

Shucai Xiao's avatar
Shucai Xiao committed
70
```
Paul Fultz II's avatar
Paul Fultz II committed
71
rbuild build -d depend -B build
Shucai Xiao's avatar
Shucai Xiao committed
72
```
Paul's avatar
Paul committed
73

Shucai Xiao's avatar
Shucai Xiao committed
74
then all the prerequisites are in the folder `depend`, and MIGraphX is built in the `build` directory.
Paul's avatar
Paul committed
75

Shucai Xiao's avatar
Shucai Xiao committed
76
77
78
79
80
81
82
Also note that you may meet the error of `rbuild: command not found`. It is because rbuild is installed 
at `$HOME/.local/bin`, which is not in `PATH`. You can either export PATH as `export PATH=$HOME/.local/bin:$PATH` 
to add the folder to `PATH` or add the option `--prefix /usr/local` in the pip3 command when installing rbuild.

#### Use cmake to build MIGraphX

If using this approach, we need to install the prerequisites, configure the cmake, and then build the source.
Paul's avatar
Paul committed
83

Shucai Xiao's avatar
Shucai Xiao committed
84
##### Installing the prerequisites
Paul's avatar
Paul committed
85

Shucai Xiao's avatar
Shucai Xiao committed
86
For convenience, the prerequisites can be built automatically with rbuild as:
Paul's avatar
Paul committed
87
88

```
Paul Fultz II's avatar
Paul Fultz II committed
89
rbuild prepare -d depend
Paul's avatar
Paul committed
90
91
```

Shucai Xiao's avatar
Shucai Xiao committed
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
then all the prerequisites are in the folder `depend`, and they can be used in the `cmake` configuration
as `-DCMAKE_PREFIX_PATH=depend`.

If you have sudo access, as an alternative to the rbuild command, you can install the prerequisites just 
like in the dockerfile by calling `./tools/install_prereqs.sh`.

(Note that this script is for Ubuntu. By default, all prerequisites are installed at the default location `/usr/local` 
and are accessible by all users. For the default location, `sudo` is required to run the script.
You can also specify a location at which the prerequisites are installed with `./tools/install_prereqs.sh $your_loc`.)

##### Building MIGraphX source and install libs

With the above prerequisites installed, we can build source as:

1) Go to the project folder and create a `build` directory:
Paul's avatar
Paul committed
107
108
109


```
Shucai Xiao's avatar
Shucai Xiao committed
110
111
mkdir build
cd build
Paul's avatar
Paul committed
112
113
```

Shucai Xiao's avatar
Shucai Xiao committed
114
2) Configure the cmake. If the prerequisites are installed at the default location `/usr/local`, the command is:
Paul's avatar
Paul committed
115

Shucai Xiao's avatar
Shucai Xiao committed
116
117
118
119
```
CXX=/opt/rocm/llvm/bin/clang++ cmake ..
```
Otherwise, you need to set `-DCMAKE_PREFIX_PATH=$your_loc` to configure the cmake. 
Paul's avatar
Paul committed
120

Shucai Xiao's avatar
Shucai Xiao committed
121
3) Build MIGraphX source code
Paul's avatar
Paul committed
122

Shucai Xiao's avatar
Shucai Xiao committed
123
124
125
```
make -j$(nproc)
```
Paul's avatar
Paul committed
126

Shucai Xiao's avatar
Shucai Xiao committed
127
Correctness can be verified as:
Paul's avatar
Paul committed
128

Shucai Xiao's avatar
Shucai Xiao committed
129
130
131
```
make -j$(nproc) check
```
Paul's avatar
Paul committed
132

Shucai Xiao's avatar
Shucai Xiao committed
133
MIGraphX libs can be installed as:
Paul's avatar
Paul committed
134

Shucai Xiao's avatar
Shucai Xiao committed
135
136
137
```
make install
```
Paul's avatar
Paul committed
138

Shucai Xiao's avatar
Shucai Xiao committed
139
#### Use docker
Paul's avatar
Paul committed
140

Shucai Xiao's avatar
Shucai Xiao committed
141
The easiest way to setup the development environment is to use docker. With the dockerfile, you can build a docker image as:
142

Shucai Xiao's avatar
Shucai Xiao committed
143
    docker build -t migraphx .
144

Shucai Xiao's avatar
Shucai Xiao committed
145
146
147
Then to enter the developement environment use `docker run`:

    docker run --device='/dev/kfd' --device='/dev/dri' -v=`pwd`:/code/AMDMIGraphX -w /code/AMDMIGraphX --group-add video -it migraphx
Paul's avatar
Paul committed
148

Shucai Xiao's avatar
Shucai Xiao committed
149
150
151
152
In the docker container, all the required prerequisites are already installed, so users can just go to the folder 
`/code/AMDMIGraphX` and follow the steps in the above [Build MIGraphX source and install
libs](#building-migraphx-source-and-install-libs)
section to build MIGraphX source.
Paul's avatar
Paul committed
153

154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
### Using MIGraphX Python Module
To use MIGraphX's Python module, please either set `PYTHONPATH` or use `.deb` package as explained below:

- Setting `PYTHONPATH` :
```
export PYTHONPATH=/opt/rocm/lib:$PYTHONPATH
```
- Creating and installing the package:

To create deb package:
```
make package
```
This will provide the path of .deb package.

To install:
```
dpkg -i <path_to_deb_file>
```

Shucai Xiao's avatar
Shucai Xiao committed
174
175
176
177
178
179
180
181
### Calling MIGraphX APIs
To use MIGraphX's C/C++ API in your cmake project, we need to set `CMAKE_PREFIX_PATH` to the MIGraphX
installation location and then do 
```
find_package(migraphx)
target_link_libraries(myApp migraphx::c)
```
Where `myApp` is the cmake target in your project.
Paul's avatar
Paul committed
182

Paul Fultz II's avatar
Paul Fultz II committed
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
## Building for development

Using rbuild, the dependencies for development can be installed with:

```
rbuild develop
```

This will install the dependencies for development into the `deps` directory and
configure `cmake` to use those dependencies in the `build` directory. These
directories can be changed by passing the `--deps-dir` and `--build-dir` flags
to `rbuild` command:

```
rbuild develop --build-dir build_rocm_55 --deps-dir /home/user/deps_dir
```
Paul's avatar
Paul committed
199

Paul Fultz II's avatar
Paul Fultz II committed
200
## Building the documentation
Paul's avatar
Paul committed
201
202
203
204
205

HTML and PDF documentation can be built using:

`cmake --build . --config Release --target doc` **OR** `make doc`

Paul's avatar
Paul committed
206
207
208
209
210
211
212
213
214
215
This will build a local searchable web site inside the doc/html folder.

Documentation is built using [Doxygen](http://www.stack.nl/~dimitri/doxygen/download.html), [Sphinx](http://www.sphinx-doc.org/en/stable/index.html), and [Breathe](https://breathe.readthedocs.io/en/latest/)

Requirements for both Sphinx and Breathe can be installed with:

`pip install -r doc/requirements.txt`

Depending on your setup `sudo` may be required for the pip install.

Paul's avatar
Paul committed
216
217
218
219
220
## Formatting the code

All the code is formatted using clang-format. To format a file, use:

```
bpickrel's avatar
bpickrel committed
221
clang-format-10 -style=file -i <path-to-source-file>
Paul's avatar
Paul committed
222
223
224
225
226
227
228
```

Also, githooks can be installed to format the code per-commit:

```
./.githooks/install
```