Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
hpvm-release
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
llvm
hpvm-release
Commits
77f702d7
Commit
77f702d7
authored
3 years ago
by
Yifan Zhao
Browse files
Options
Downloads
Patches
Plain Diff
Replaced AlexNet2 with VGG16
parent
bee122b3
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
hpvm/docs/getting-started.rst
+20
-20
20 additions, 20 deletions
hpvm/docs/getting-started.rst
with
20 additions
and
20 deletions
hpvm/docs/getting-started.rst
+
20
−
20
View file @
77f702d7
...
...
@@ -3,14 +3,14 @@ Getting Started
This tutorial covers the basic usage of all components in HPVM
(components listed :doc:`here </components/index>`).
We will generate a DNN model,
AlexNet2
(for CIFAR10 dataset), into HPVM code, compile it with HPVM,
We will generate a DNN model,
VGG16
(for CIFAR10 dataset), into HPVM code, compile it with HPVM,
perform autotuning on the compiled binary to find approximation choices (configurations),
and profile the selected configurations to get real performance on device.
The result will be a figure showing the accuracy-performance tradeoff of
AlexNet2
over the
The result will be a figure showing the accuracy-performance tradeoff of
VGG16
over the
(pre-defined) approximations and the configurations in a few formats.
Please check ``test/dnn_benchmarks/model_params/`` exists and contains
``
alexnet2
_cifar10/`` and ``pytorch/
alexnet2
_cifar10.pth.tar``,
``
vgg16
_cifar10/`` and ``pytorch/
vgg16
_cifar10.pth.tar``,
which may not be the case if you opted out of model parameter download in the installer.
In that case, you may run the installer again to download the parameter.
It will not rebuild everything from scratch.
...
...
@@ -28,8 +28,8 @@ for easier access to ``test/dnn_benchmarks/model_params/``.
You can also symlink it to other locations -- don't move it: it's used in test cases --
and adjust the paths below accordingly.
First, prepare 2 datasets for autotuning and testing for
AlexNet2
.
These datasets are provided as ``model_params/
alexnet2
_cifar10/{tune|test}_{input|labels}.bin``,
First, prepare 2 datasets for autotuning and testing for
VGG16
.
These datasets are provided as ``model_params/
vgg16
_cifar10/{tune|test}_{input|labels}.bin``,
where ``tune`` and ``test`` prefixes signify tuning and testing set.
.. code-block:: python
...
...
@@ -37,13 +37,13 @@ where ``tune`` and ``test`` prefixes signify tuning and testing set.
from torch2hpvm import BinDataset
from pathlib import Path
data_dir = Path("model_params/
alexnet2
_cifar10")
data_dir = Path("model_params/
vgg16
_cifar10")
dataset_shape = 5000, 3, 32, 32 # NCHW format.
tuneset = BinDataset(data_dir / "tune_input.bin", data_dir / "tune_labels.bin", dataset_shape)
testset = BinDataset(data_dir / "test_input.bin", data_dir / "test_labels.bin", dataset_shape)
`BinDataset` is a utility `torch2hpvm` provides for creating dataset over binary files.
Any instance `torch.utils.data.Dataset` can be used here.
Any instance
of
`torch.utils.data.Dataset` can be used here.
*Note* that each `module` is bound to 2 datasets: a "tune" and a "test" set.
The generated binary accepts an argument to be either the string "tune" or "test",
...
...
@@ -57,8 +57,8 @@ Create a DNN `module` and load the checkpoint:
from torch.nn import Module
import dnn # Defined at `hpvm/test/dnn_benchmarks/pytorch`
model: Module = dnn.
AlexNet2
()
checkpoint = "model_params/
alexnet2
_cifar10.pth.tar"
model: Module = dnn.
VGG16
()
checkpoint = "model_params/
vgg16
_cifar10.pth.tar"
model.load_state_dict(torch.load(checkpoint))
Any `torch.nn.Module` can be similarly used,
...
...
@@ -72,11 +72,11 @@ Now we are ready to export the model. The main functioning class of `torch2hpvm`
from torch2hpvm import ModelExporter
output_dir = Path("./
alexnet2
_cifar10")
output_dir = Path("./
vgg16
_cifar10")
build_dir = output_dir / "build"
target_binary = build_dir / "
alexnet2
_cifar10"
target_binary = build_dir / "
vgg16
_cifar10"
batch_size = 500
conf_file = "hpvm-c/benchmarks/
alexnet2
_cifar10/data/tuner_confs.txt"
conf_file = "hpvm-c/benchmarks/
vgg16
_cifar10/data/tuner_confs.txt"
exporter = ModelExporter(model, tuneset, testset, output_dir, config_file=conf_file)
exporter.generate(batch_size=batch_size).compile(target_binary, build_dir)
...
...
@@ -89,13 +89,13 @@ and path to the compiled binary respectively.
This file decides what approximation the binary will use during inference.
This path is hardcoded into the binary and is only read when the binary starts,
so it's fine to have `conf_file` point to a non-existing path.
An example can be found at ``hpvm-c/benchmarks/
alexnet2
_cifar10/data/tuner_confs.txt``.
An example can be found at ``hpvm-c/benchmarks/
vgg16
_cifar10/data/tuner_confs.txt``.
* `exporter.generate` generates the HPVM-C code while `exporter.compile` is
a helper that invokes the HPVM compiler for you.
Now there should be a binary at ``./
alexnet2
_cifar10/build/
alexnet2
_cifar10``.
Try running ``./
alexnet2
_cifar10/build/
alexnet2
_cifar10 test`` for inference over the test set.
Now there should be a binary at ``./
vgg16
_cifar10/build/
vgg16
_cifar10``.
Try running ``./
vgg16
_cifar10/build/
vgg16
_cifar10 test`` for inference over the test set.
Compiling a Tuner Binary
------------------------
...
...
@@ -111,13 +111,13 @@ It also doesn't define a `conf_file`.
from torch2hpvm import ModelExporter
tuner_output_dir = Path("./
alexnet2
_cifar10_tuner")
tuner_output_dir = Path("./
vgg16
_cifar10_tuner")
tuner_build_dir = tuner_output_dir / "build"
tuner_binary = tuner_build_dir / "
alexnet2
_cifar10"
tuner_binary = tuner_build_dir / "
vgg16
_cifar10"
exporter = ModelExporter(model, tuneset, testset, tuner_output_dir, target="hpvm_tensor_inspect")
exporter.generate(batch_size=500).compile(tuner_binary, tuner_build_dir)
This binary is generated at ``
alexnet2
_cifar10_tuner/build/
alexnet2
_cifar10``.
This binary is generated at ``
vgg16
_cifar10_tuner/build/
vgg16
_cifar10``.
It waits for autotuner signal and doesn't run on its own, so don't run it by yourself.
Instead, import and use the tuner `predtuner`:
...
...
@@ -210,7 +210,7 @@ we obtained in the tuning step.
from hpvm_profiler import profile_config_file, plot_hpvm_configs
# Set `target_binary` to the path of the plain binary.
target_binary = "./
alexnet2
_cifar10/build/
alexnet2
_cifar10"
target_binary = "./
vgg16
_cifar10/build/
vgg16
_cifar10"
# Set `config_file` to the config file produced in tuning, such as "hpvm_confs.txt".
config_file = "hpvm_confs.txt"
out_config_file = "hpvm_confs_profiled.txt"
...
...
@@ -222,7 +222,7 @@ while ``configs_profiled.png`` shows the final performance-accuracy tradeoff cur
An example of ``configs_profiled.png`` looks like this (proportion of your image may be different):
.. image:: _static/
alexnet2
_cifar10.png
.. image:: _static/
vgg16
_cifar10.png
-----------------------
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment