From f14c399b0f68a055b05b4e1f435a4b6b0ff24f2e Mon Sep 17 00:00:00 2001 From: Hyunsu Philip Cho Date: Fri, 5 May 2023 12:14:34 -0700 Subject: [PATCH 1/2] Deprecate C codegen --- docs/_static/deployment.png | Bin 183172 -> 64260 bytes docs/_static/deployment.svg | 4449 ++---------------- docs/conf.py | 1 + docs/index.rst | 161 +- docs/install.rst | 105 +- docs/knobs/compiler_param.rst | 11 - docs/knobs/index.rst | 1 - docs/treelite-runtime-api.rst | 8 - docs/tutorials/deploy.rst | 347 -- docs/tutorials/deploy_java.rst | 122 - docs/tutorials/first.rst | 143 - docs/tutorials/index.rst | 4 - docs/tutorials/optimize.rst | 376 -- python/treelite/annotator.py | 2 + python/treelite/contrib/__init__.py | 4 + python/treelite/frontend.py | 4 + python/treelite/warn.py | 9 + runtime/python/treelite_runtime/predictor.py | 3 + runtime/python/treelite_runtime/warn.py | 9 + 19 files changed, 584 insertions(+), 5175 deletions(-) delete mode 100644 docs/knobs/compiler_param.rst delete mode 100644 docs/treelite-runtime-api.rst delete mode 100644 docs/tutorials/deploy.rst delete mode 100644 docs/tutorials/deploy_java.rst delete mode 100644 docs/tutorials/first.rst delete mode 100644 docs/tutorials/optimize.rst create mode 100644 python/treelite/warn.py create mode 100644 runtime/python/treelite_runtime/warn.py diff --git a/docs/_static/deployment.png b/docs/_static/deployment.png index 918b871b7b83cde21934e442ac6d225e04c895d2..003339589f5573406ba89967f221fea40820db0d 100644 GIT binary patch literal 64260 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 J%m0PH_&+O)m1_V1 literal 183172 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¨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 + viewBox="0 0 706.58683 407.30051" + height="407.30051pt" + width="706.58685pt" + sodipodi:docname="deployment.svg" + inkscape:version="1.2.2 (732a01da63, 2022-12-09)" + inkscape:export-filename="deployment.png" + inkscape:export-xdpi="112.07" + inkscape:export-ydpi="112.07" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + @@ -19,12 +46,30 @@ image/svg+xml - + + + - - - - - - - - - - - - + d="m 167,129 h 64 v 65 h -64 z m 0,0" /> + d="m 167.83203,129.23047 c 0,4.34765 14.10156,7.875 31.5,7.875 17.39453,0 31.5,-3.52735 31.5,-7.875 v 57.375 c 0,4.34765 -14.10547,7.875 -31.5,7.875 -17.39844,0 -31.5,-3.52735 -31.5,-7.875 z m 0,0" /> + d="m 167,121 h 64 v 16 h -64 z m 0,0" /> @@ -2284,13 +2305,13 @@ id="clip9"> + d="m 167,222 h 64 v 66 h -64 z m 0,0" /> + d="m 167.83203,222.28906 c 0,4.34766 14.10156,7.875 31.5,7.875 17.39453,0 31.5,-3.52734 31.5,-7.875 v 57.375 c 0,4.34766 -14.10547,7.875 -31.5,7.875 -17.39844,0 -31.5,-3.52734 -31.5,-7.875 z m 0,0" /> + d="m 167,214 h 64 v 16 h -64 z m 0,0" /> @@ -3086,13 +3107,13 @@ id="clip13"> + d="m 167,310 h 64 v 65 h -64 z m 0,0" /> + d="m 167.83203,309.66016 c 0,4.34765 14.10156,7.875 31.5,7.875 17.39453,0 31.5,-3.52735 31.5,-7.875 v 57.375 c 0,4.34765 -14.10547,7.875 -31.5,7.875 -17.39844,0 -31.5,-3.52735 -31.5,-7.875 z m 0,0" /> + d="m 167,302 h 64 v 16 h -64 z m 0,0" /> @@ -3896,13 +3917,13 @@ id="clip17"> + d="m 167,403 h 64 v 65 h -64 z m 0,0" /> + d="m 167.83203,402.71875 c 0,4.34766 14.10156,7.875 31.5,7.875 17.39453,0 31.5,-3.52734 31.5,-7.875 v 57.375 c 0,4.34766 -14.10547,7.875 -31.5,7.875 -17.39844,0 -31.5,-3.52734 -31.5,-7.875 z m 0,0" /> + d="m 167,395 h 64 v 16 h -64 z m 0,0" /> @@ -4607,215 +4628,8 @@ offset="1" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="g2181"> - + id="g2347"> + id="g2393"> - + id="g2459"> + id="g2539"> - + id="g2575"> + id="g2655"> - + id="g2665"> + id="g2685"> + id="g2723"> + id="g2737"> + id="g2751"> + id="g2835"> + id="g2901"> + id="g3013"> + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -8512,12 +4855,12 @@ style="clip-rule:nonzero"> @@ -8527,28 +4870,28 @@ style="clip-rule:nonzero"> @@ -8558,12 +4901,12 @@ style="clip-rule:nonzero"> @@ -8573,16 +4916,16 @@ style="clip-rule:nonzero"> @@ -8592,12 +4935,12 @@ style="clip-rule:nonzero"> @@ -8607,16 +4950,16 @@ style="clip-rule:nonzero"> @@ -8626,12 +4969,12 @@ style="clip-rule:nonzero"> @@ -8641,12 +4984,128 @@ style="clip-rule:nonzero"> + Commonrepresentation + + Your C++application + + Treelite + Models fromvarious libraries + XGBoost + LightGBM + Scikit-learn + ModelBuilder diff --git a/docs/conf.py b/docs/conf.py index 713891cd..ff8bbb96 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -235,6 +235,7 @@ def is_readthedocs_build(): "scipy": ("https://docs.scipy.org/doc/scipy/", None), "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), "sklearn": ("https://scikit-learn.org/stable", None), + "tl2cgen": ("https://tl2cgen.readthedocs.io/en/latest/", None), } diff --git a/docs/index.rst b/docs/index.rst index 50b479c4..6f0d9027 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,9 +1,11 @@ -##################################################### +===================================================== Treelite : model compiler for decision tree ensembles -##################################################### +===================================================== -**Treelite** is a model compiler for decision tree ensembles, aimed at -efficient deployment. +**Treelite** is a universal model exchange and serialization format for +decision tree forests. Treelite aims to be a small library that enables +other C++ applications to exchange and store decision trees on the disk +as well as the network. .. raw:: html @@ -14,115 +16,84 @@ efficient deployment. data-size="large" data-show-count="true" aria-label="Watch dmlc/treelite on GitHub">Watch -************* +.. warning:: Tree compiler was migrated to TL2cgen + + If you are looking for a compiler to translate tree models into C code, + use :doc:`TL2cgen `. + To migrate existing code using Treelite 3.x, consult the page + :doc:`tl2cgen:treelite-migration`. + + Why Treelite? -************* - - -Use machine learning package of your choice -=========================================== -Treelite accommodates a wide range of decision tree ensemble models. In -particular, it handles both -`random forests `_ and -`gradient boosted trees `_. - -Treelite can read models produced by -`XGBoost `_, -`LightGBM `_, and -`scikit-learn `_. In cases where -you are using another package to train your model, you may use the -:doc:`flexible builder class `. - -Deploy with minimal dependencies -================================ -It is a great hassle to install machine learning packages (e.g. XGBoost, -LightGBM, scikit-learn, etc.) on every machine your tree model will run. This is -the case no longer: Treelite will export your model as a stand-alone -prediction library so that predictions will be made without any machine -learning package installed. +============= Universal, lightweight specification for all tree models -======================================================== -Are you designing an optimized prediction runtime software for tree models? +-------------------------------------------------------- +Are you designing a C++ application that needs to read and write tree models, +e.g. a prediction server? Do not be overwhelmed by the variety of tree models in the wild. Treelite -lets you convert many kinds of tree models into a **single, lightweight -exchange format**. You can serialize (save) any tree model into a byte -sequence or a file. Plus, Treelite is designed to be used as a component in -prediction runtimes. Currently, Treelite is used by -`Amazon SageMaker Neo `_ and -and `RAPIDS cuML `_. - -*********** -Quick start -*********** -Install Treelite from PyPI: - -.. code-block:: console +lets you convert many kinds of tree models into a **common specification**. +By using Treelite as a library, your application now only needs to deal +with one model specification instead of many. Treelite currently +supports: + +* `XGBoost `_ +* `LightGBM `_ +* `scikit-learn `_ +* :doc:`flexible builder class ` for users of other + tree libraries + +In addition, tree libraries can directly output trained trees using the +Treelite specification. For example, the random forest algoritm in +`RAPIDS cuML `_ stores the random forest +object using Treelite. - python3 -m pip install --user treelite treelite_runtime +.. raw:: html -Import your tree ensemble model into Treelite: +

+ +
+ (Click to enlarge) +
+

-.. code-block:: python +A small library that's easy to embed in another C++ application +--------------------------------------------------------------- +Treelite has an up-to-date CMake build script. If your C++ +application uses CMake, it is easy to embed Treelite. +Treelite is currently used by the following applications: - import treelite - model = treelite.Model.load('my_model.model', model_format='xgboost') +* :doc:`tl2cgen:index` +* Forest Inference Library (FIL) in `RAPIDS cuML `_ +* `Triton Inference Server FIL Backend `_, + an optimized prediction runtime for CPUs and GPUs. -Deploy a source archive: +Quick start +=========== +Install Treelite: -.. code-block:: python +.. code-block:: console - # Produce a zipped source directory, containing all model information - # Run `make` on the target machine - model.export_srcpkg(platform='unix', toolchain='gcc', - pkgpath='./mymodel.zip', libname='mymodel.so', - verbose=True) + # From PyPI + pip install treelite + # From Conda + conda install -c conda-forge treelite -Deploy a shared library: +Import your tree ensemble model into Treelite: .. code-block:: python - # Like export_srcpkg, but generates a shared library immediately - # Use this only when the host and target machines are compatible - model.export_lib(toolchain='gcc', libpath='./mymodel.so', verbose=True) + import treelite + model = treelite.Model.load("my_model.model", model_format="xgboost") -Make predictions on the target machine: +Compute predictions using :doc:`treelite-gtil-api`: .. code-block:: python - import treelite_runtime - predictor = treelite_runtime.Predictor('./mymodel.so', verbose=True) - dmat = treelite_runtime.DMatrix(X) - out_pred = predictor.predict(dmat) - -Read :doc:`tutorials/first` for a more detailed example. See -:doc:`tutorials/deploy` for additional instructions on deployment. - -.. note:: A note on API compatibility - - Since Treelite is in early development, its API may change substantially - in the future. - -****************** -How Treelite works -****************** - -.. raw:: html - -

- -
- (Click to enlarge) -
-

- -The workflow involves two distinct machines: **the host machine** that generates -prediction subroutine from a given tree model, and **the target machine** that -runs the subroutine. The two machines exchange a single C file that contains -all relevant information about the tree model. Only the host machine needs to -have Treelite installed; the target machine requires only a working C compiler. + X = ... # numpy array + treelite.gtil.predict(model, data=X) ******** Contents @@ -135,10 +106,8 @@ Contents install tutorials/index treelite-api - treelite-runtime-api treelite-gtil-api treelite-c-api - Treelite runtime Rust API knobs/index notes-on-serialization treelite-doxygen diff --git a/docs/install.rst b/docs/install.rst index 1dac6297..96b4eb7e 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -1,21 +1,20 @@ +============ Installation ============ You may choose one of two methods to install Treelite on your system: -* :ref:`install-pip` -* :ref:`install-conda` -* :ref:`install-source` - -.. _install-pip: +.. contents:: + :local: + :depth: 1 Download binary releases from PyPI (Recommended) ------------------------------------------------- +================================================ This is probably the most convenient method. Simply type .. code-block:: console - python3 -m pip install --user treelite treelite_runtime + pip install treelite to install the Treelite package. The command will locate the binary release that is compatible with your current platform. Check the installation by running @@ -23,14 +22,22 @@ your current platform. Check the installation by running .. code-block:: python import treelite - import treelite_runtime -in an interactive Python session. This method is available for only Windows, Mac OS X, and Linux. +in an interactive Python session. This method is available for only Windows, MacOS, and Linux. For other operating systems, see the next section. -.. note:: Installing OpenMP runtime on Mac OSX +.. note:: Windows users need to install Visual C++ Redistributable + + Treelite requires DLLs from `Visual C++ Redistributable + `_ + in order to function, so make sure to install it. Exception: If + you have Visual Studio installed, you already have access to + necessary libraries and thus don't need to install Visual C++ + Redistributable. + +.. note:: Installing OpenMP runtime on MacOS - Treelite requires the presence of OpenMP runtime. To install OpenMP runtime on a Mac OSX system, + Treelite requires the presence of OpenMP runtime. To install OpenMP runtime on a MacOS system, run the following command: .. code-block:: bash @@ -38,10 +45,8 @@ For other operating systems, see the next section. brew install libomp -.. _install-conda: - Download binary releases from Conda ------------------------------------------------- +=================================== Treelite is also available on Conda. .. code-block:: console @@ -54,7 +59,7 @@ available platforms. .. _install-source: Compile Treelite from the source --------------------------------- +================================ Installation consists of two steps: 1. Build the shared libraries from C++ code (See the note below for the list.) @@ -70,7 +75,7 @@ Installation consists of two steps: Operating System Main library Runtime library ================== ===================== ============================= Windows ``treelite.dll`` ``treelite_runtime.dll`` - Mac OS X ``libtreelite.dylib`` ``libtreelite_runtime.dylib`` + MacOS ``libtreelite.dylib`` ``libtreelite_runtime.dylib`` Linux / other UNIX ``libtreelite.so`` ``libtreelite_runtime.so`` ================== ===================== ============================= @@ -83,8 +88,8 @@ To get started, clone Treelite repo from GitHub. The next step is to build the shared libraries. -1-1. Compiling shared libraries on Linux and Mac OS X -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-1. Compiling shared libraries on Linux and MacOS +-------------------------------------------------- Here, we use CMake to generate a Makefile: .. code-block:: bash @@ -102,7 +107,7 @@ libraries. The compiled libraries will be under the ``build/`` directory. -.. note:: Compiling Treelite with multithreading on Mac OS X +.. note:: Compiling Treelite with multithreading on MacOS Treelite requires the presence of OpenMP runtime. To install OpenMP runtime on a Mac OSX system, run the following command: @@ -112,73 +117,29 @@ The compiled libraries will be under the ``build/`` directory. brew install libomp 1-2. Compiling shared libraries on Windows -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +------------------------------------------ We can use CMake to generate a Visual Studio project. The following snippet assumes that Visual -Studio 2017 is installed. Adjust the version depending on the copy that's installed on your system. +Studio 2022 is installed. Adjust the version depending on the copy that's installed on your system. .. code-block:: dosbatch mkdir build cd build - cmake .. -G"Visual Studio 15 2017 Win64" + cmake .. -G"Visual Studio 17 2022" -A x64 -.. note:: Visual Studio 2017 or newer is required +.. note:: Visual Studio 2019 or newer is required - Ensure that you have Visual Studio version 2017 or newer. + Treelite uses the C++17 standard. Ensure that you have Visual Studio version 2019 or newer. Once CMake finished running, open the generated solution file (``treelite.sln``) in Visual Studio. From the top menu, select **Build > Build Solution**. 2. Installing Python package -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The Python package is located at the ``python`` subdirectory. There are several -ways to install the package: - -**1. Install system-wide, which requires root permission** +---------------------------- +The Python package is located at the ``python`` subdirectory. Run Pip to install the Python +package. The Python package will re-use the native library built in Step 1. .. code-block:: bash - # Install treelite cd python - sudo python3 setup.py install - # Install treelite_runtime - cd ../runtime/python - sudo python3 setup.py install - -You will need Python `setuptools `_ -module for this to work. It is often part of the core Python installation. -Should it be necessary, the package can be installed using ``pip``: - -.. code-block:: bash - - pip install -U pip setuptools - -**2. Install for only current user** - -This is useful if you do not have the administrative rights. - -.. code-block:: bash - - # Install treelite - cd python - python3 setup.py install --user - # Install treelite_runtime - cd ../runtime/python - python3 setup.py install --user - -.. note:: Recompiling Treelite - - Every time the C++ portion of Treelite gets re-compiled, the Python - package must be re-installed for the new library to take effect. - -**3. Set the environment variable PYTHONPATH to locate Treelite package** - -Only set the environment variable ``PYTHONPATH`` to tell Python where to find -the Treelite package. This is useful for developers, as any changes made -to C++ code will be immediately visible to Python side without re-running ``setup.py``. - -.. code-block:: bash - - export PYTHONPATH=/path/to/treelite/python:/path/to/treelite/runtime/python - python3 # enter interactive session - + pip install . # will re-use libtreelite.so diff --git a/docs/knobs/compiler_param.rst b/docs/knobs/compiler_param.rst deleted file mode 100644 index 8cfc1ac3..00000000 --- a/docs/knobs/compiler_param.rst +++ /dev/null @@ -1,11 +0,0 @@ -Compiler Parameters -=================== - -Compiler parameters influence the way the prediction subroutine is generated -from a tree ensemble model. - ------------------------------ - -.. doxygengroup:: compiler_param - :project: treelite - :content-only: diff --git a/docs/knobs/index.rst b/docs/knobs/index.rst index 6a33ec88..e50b3c8d 100644 --- a/docs/knobs/index.rst +++ b/docs/knobs/index.rst @@ -5,5 +5,4 @@ Knobs and Parameters .. toctree:: :maxdepth: 1 - compiler_param model_param diff --git a/docs/treelite-runtime-api.rst b/docs/treelite-runtime-api.rst deleted file mode 100644 index 6eebf01a..00000000 --- a/docs/treelite-runtime-api.rst +++ /dev/null @@ -1,8 +0,0 @@ -==================== -Treelite runtime API -==================== - -Runtime API of Treelite Python package. - -.. automodule:: treelite_runtime - :members: diff --git a/docs/tutorials/deploy.rst b/docs/tutorials/deploy.rst deleted file mode 100644 index a30e594d..00000000 --- a/docs/tutorials/deploy.rst +++ /dev/null @@ -1,347 +0,0 @@ -Deploying models -================ - -After all the hard work you did to train your tree ensemble model, you now have -to **deploy** the model. Deployment refers to distributing your model to -other machines and devices so as to make predictions on them. To facilitate -the coming discussions, let us define a few terms. - -* **Host machine** : the machine running Treelite. -* **Target machine** : the machine on which predictions will be made. The host - machine may or may not be identical to the target machine. In cases where - it's infeasible to install Treelite on the target machine, the host and - target machines will be necessarily distinct. -* **Shared library** : a blob of executable subroutines that can be imported by - other native applications. Shared libraries will often have file extensions - .dll, .so, or .dylib. Going back to the particular context of tree deployment, - Treelite will produce a shared library containing the prediction subroutine - (compiled to native machine code). -* **Runtime package** : a :doc:`tiny fraction<../treelite-runtime-api>` of the - full Treelite package, consisting of a few helper functions that lets you - easily load shared libraries and make predictions. The runtime is good to - have, but on systems lacking Python we can do without it. - -In this document, we will document two options for deployment. We will present the programming -interface each deployment option presents, as well as its dependencies and requirements. - -.. contents:: Contents - :local: - :depth: 2 - -Option 1: Deploy prediction code with the runtime package ---------------------------------------------------------- -If feasible, this option is probably the most convenient. On the target machine, install the -Treelite runtime by running pip: - -.. code-block:: bash - - python3 -m pip install treelite_runtime --user - -Once the Treelite runtime is installed, it suffices to follow instructions in :doc:`first`. - -Option 2: Deploy prediciton code only -------------------------------------- - -With this option, neither Python nor a C++ compiler is required. You should be -able to adopt this option using any basic installation of UNIX-like operating systems. - -Dependencies and Requirements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The target machine shall meet the following conditions: - -* A C compiler is available. -* The C compiler supports the following features of the - `C99 standard `_: inline functions; - declaration of loop variables inside ``for`` loop; the ``expf`` function in - ````; the ```` header. -* GNU Make or Microsoft NMake is installed. -* An archive utility exists that can open a .zip archive. - -Deployment instructions -^^^^^^^^^^^^^^^^^^^^^^^ -\1. On the host machine, install Treelite and import your tree ensemble model. -You should end up with the model object of type :py:class:`~treelite.Model`. - -.. code-block:: python - - ### Run this block on the **host** machine - - import treelite - model = treelite.Model.load('your_model.model', 'xgboost') - # You may also use `from_xgboost` method or the builder class - -\2. Export your model as a **source package** by calling the method -:py:meth:`~treelite.Model.export_srcpkg` of the :py:class:`~treelite.Model` -object. The source package will contain C code representation of the prediction -subroutine. - -.. code-block:: python - - ### Continued from the previous code block - - # Operating system of the target machine - platform = 'unix' - # C compiler to use to compile prediction code on the target machine - toolchain = 'gcc' - # Save the source package as a zip archive named mymodel.zip - # Later, we'll use this package to produce the library mymodel.so. - model.export_srcpkg(platform=platform, toolchain=toolchain, - pkgpath='./mymodel.zip', libname='mymodel.so', - verbose=True) - -.. note:: On the value of ``toolchain`` - - Treelite supports only three toolchain configurations ('msvc', 'gcc', 'clang') - for which it generates Makefiles. If you are using a compiler other than - these three, you will have to write your own Makefile. For now, just set - ``toolchain='gcc'`` and move on. - -After calling :py:meth:`~treelite.Model.export_srcpkg`, you should be able to -find the zip archive named ``mymodel.zip`` inside the current working directory. - -.. code-block:: console - - john.doe@host-machine:/home/john.doe/$ ls . - mymodel.zip your_model.model - -The content of ``mymodel.zip`` consists of the header and source files, as well -as the Makefile: - -.. code-block:: console - - john.doe@host-machine:/home/john.doe/$ unzip -l mymodel.zip - Archive: mymodel.zip - Length Date Time Name - --------- ---------- ----- ---- - 0 11-01-2017 23:11 mymodel/ - 167 11-01-2017 23:11 mymodel/Makefile - 4831036 11-01-2017 23:11 mymodel/mymodel.c - 311 11-01-2017 23:11 mymodel/mymodel.h - 109 11-01-2017 23:11 mymodel/recipe.json - --------- ------- - 4831623 5 files - -\3. Now you are ready to deploy the model to the target machine. Copy to the -target machine the archive ``mymodel.zip`` (source package). - -.. code-block:: console - - john.doe@host-machine:/home/john.doe/$ sftp john.doe@target-machine - Connected to target-machine. - sftp> put mymodel.zip - Uploading mymodel.zip to /home/john.doe/mymodel.zip - mymodel.zip 100% 410KB 618.2KB/s 00:00 - sftp> quit - -\4. It is time to move to the target machine. On the target machine, extract -the archive ``mymodel.zip``: - -.. code-block:: console - - john.doe@host-machine:/home/john.doe/$ ssh john.doe@target-machine - Last login: Tue Oct 31 00:43:36 2017 from host-machine - - john.doe@target-machine:/home/john.doe/$ unzip mymodel.zip - Archive: mymodel.zip - creating: mymodel/ - inflating: mymodel/Makefile - inflating: mymodel/mymodel.c - inflating: mymodel/mymodel.h - inflating: mymodel/recipe.json - -\5. Build the source package (using GNU Make or NMake). - -.. code-block:: console - - john.doe@target-machine:/home/john.doe/$ cd mymodel - john.doe@target-machine:/home/john.doe/mymodel/$ make - gcc -c -O3 -o mymodel.o mymodel.c -fPIC -std=c99 -flto -fopenmp - gcc -shared -O3 -o mymodel.so mymodel.o -std=c99 -flto -fopenmp - john.doe@target-machine:/home/john.doe/mymodel/$ ls - Makefile mymodel.c mymodel.so - mymodel.h mymodel.o recipe.json - -.. note:: Parallel compilation with GNU Make - - If you used ``parallel_comp`` option to split the model into multiple source - files, you can take advantage of parallel compilation. Simply replace ``make`` - with ``make -jN``, where ``N`` is replaced with the number of workers to - launch. Setting ``N`` too high may result into memory shortage. - -.. note:: Using other compilers - - If you are using a compiler other than gcc, clang, or Microsoft Visual C++, - you will need to compose your own Makefile. Open the ``Makefile`` and - make necessary changes. - -Prediction instructions -^^^^^^^^^^^^^^^^^^^^^^^ -The prediction library provides the function ``predict`` with the -following signature: - -.. code-block:: c - - float predict(union Entry* data, int pred_margin); - -Here, the argument ``data`` must be an array of length ``M``, where ``M`` is -the number of features used in the tree ensemble. The ``data`` array stores -all the feature values of a single row. To indicate presence or absence of -a feature value, we use the union type ``Entry``, which defined as - -.. code-block:: c - - union Entry { - int missing; - float fvalue; - }; - -For missing values, we set the ``missing`` field to -1. For non-missing ones, we -set the ``fvalue`` field to the feature value. The total number of features -is given by the function - -.. code-block:: c - - size_t get_num_feature(void); - -Let's look at an example. We'd start by initializing the array ``inst``, a dense -aray to hold feature values of a single data row: - -.. code-block:: c - - /* number of features */ - const size_t num_feature = get_num_feature(); - /* inst: dense vector storing feature values */ - union Entry* inst = malloc(sizeof(union Entry) * num_feature); - /* clear inst with all missing values */ - for (i = 0; i < num_feature; ++i) { - inst[i].missing = -1; - } - -Before calling the function ``predict``, the array ``inst`` needs to be -initialized with missing and present feature values. The following peudocode -illustrates the idea: - -.. code-block:: none - - For each data row rid: - inst[i].missing == -1 for every i, assuming all features lack values - - For each feature i for which the data row in fact has a feature value: - Set inst[i].fvalue = [feature value], to indicate presence - - Call predict(inst, 0) and get prediction for the data row rid - - For each feature i for which the row has a feature value: - Set inst[i].missing = -1, to prepare for next row (rid + 1) - -The task is not too difficult as long as the input data is given as a particular -form of sparse matrix: the `Compressed Sparse Row\ -`_ format. -The sparse matrix consists of three arrays: - -* ``val`` stores nonzero entries in - `row-major order `_. -* ``col_ind`` stores column indices of the entries in ``val``. The expression - ``col_ind[i]`` indicates the column index of the ``i`` th entry ``val[i]``. -* ``row_ptr`` stores the locations in ``val`` that start and end data rows. The - ``i`` th data row is given by the array slice ``val[row_ptr[i]:row_ptr[i+1]]``. - -.. code-block:: c - - /* nrow : number of data rows */ - for (rid = 0; rid < nrow; ++rid) { - ibegin = row_ptr[rid]; - iend = row_ptr[rid + 1]; - /* Fill nonzeros */ - for (i = ibegin; i < iend; ++i) { - inst[col_ind[i]].fvalue = val[i]; - } - out_pred[rid] = predict(inst, 0); - /* Drop nonzeros */ - for (i = ibegin; i < iend; ++i) { - inst[col_ind[i]].missing = -1; - } - } - -It only remains to create three arrays ``val``, ``col_ind``, and ``row_ptr``. -You may want to use a third-pary library here to read from -a SVMLight format. For now, we'll punt the issue of loading the input data -and write it out as constants in the program: - -.. code-block:: c - - #include - #include - #include "mymodel.h" - - int main(void) { - /* 5x13 "sparse" matrix, in CSR format - [[ 0. , 0. , 0.68, 0.99, 0. , 0.11, 0. , 0.82, 0. , - 0. , 0. , 0. , 0. ], - [ 0. , 0. , 0.99, 0. , 0. , 0. , 0. , 0. , 0. , - 0.61, 0. , 0. , 0. ], - [ 0.02, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , - 0. , 0. , 0. , 0. ], - [ 0. , 0. , 0.36, 0. , 0.82, 0. , 0. , 0.57, 0. , - 0. , 0. , 0. , 0.75], - [ 0.47, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , - 0. , 0. , 0.45, 0. ]] - */ - const float val[] = {0.68, 0.99, 0.11, 0.82, 0.99, 0.61, 0.02, 0.36, 0.82, - 0.57, 0.75, 0.47, 0.45}; - const size_t col_ind[] = {2, 3, 5, 7, 2, 9, 0, 2, 4, 7, 12, 0, 11}; - const size_t row_ptr[] = {0, 4, 6, 7, 11, 13}; - const size_t nrow = 5; - const size_t ncol = 13; - - /* number of features */ - const size_t num_feature = get_num_feature(); - /* inst: dense vector storing feature values */ - union Entry* inst = malloc(sizeof(union Entry) * num_feature); - float* out_pred = malloc(sizeof(float) * nrow); - size_t rid, ibegin, iend, i; - - /* clear inst with all missing */ - for (i = 0; i < num_feature; ++i) { - inst[i].missing = -1; - } - - for (rid = 0; rid < nrow; ++rid) { - ibegin = row_ptr[rid]; - iend = row_ptr[rid + 1]; - /* Fill nonzeros */ - for (i = ibegin; i < iend; ++i) { - inst[col_ind[i]].fvalue = val[i]; - } - out_pred[rid] = predict(inst, 0); - /* Drop nonzeros */ - for (i = ibegin; i < iend; ++i) { - inst[col_ind[i]].missing = -1; - } - printf("pred[%zu] = %f\n", rid, out_pred[rid]); - } - free(inst); - free(out_pred); - return 0; - } - -Save the program as a .c file and put it in the same directory ``mymodel/``. To -link the program against the prediction library ``mymodel.so``, simply run - -.. code-block:: bash - - gcc -o myprog myprog.c mymodel.so -I. -std=c99 -lm - -As long as the program ``myprog`` is in the same directory of the prediction -library ``mymodel.so``, we'll be good to go. - -A sample output: - -.. code-block:: none - - pred[0] = 44.880001 - pred[1] = 44.880001 - pred[2] = 44.880001 - pred[3] = 42.670002 - pred[4] = 44.880001 diff --git a/docs/tutorials/deploy_java.rst b/docs/tutorials/deploy_java.rst deleted file mode 100644 index 5db672e4..00000000 --- a/docs/tutorials/deploy_java.rst +++ /dev/null @@ -1,122 +0,0 @@ -Deploying models with Treelite4J -================================ - -Treelite4J is the Java runtime for Treelite. This tutorial will show how to use Treelite4J to deploy decision tree models to Java applications. - -Load compiled model -------------------- -Locate the compiled model (dll/so/dylib) in the local filesystem. We load the compiled model by creating a Predictor object: - -.. code-block:: java - - import ml.dmlc.treelite4j.Predictor; - - Predictor predictor = new Predictor("path/to/compiled_model.so", -1, true, true); - -The second argument is set to -1, to utilize all CPU cores available. See `here `_ for the meaning of third and fourth arguments. - -Query the model ---------------- -Once the compiled model is loaded, we can query it: - -.. code-block:: java - - // Get the input dimension, i.e. the number of feature values in the input vector - int num_feature = predictor.GetNumFeature(); - - // Get the number of classes. - // This number is 1 for tasks other than multi-class classification. - // For multi-class classification task, the number is equal to the number of classes. - int num_class = predictor.GetNumClass(); - -Predict with a single input (instance) --------------------------------------- -For predicting with a single input, we create an array of Entry objects, set their values, -and invoke the prediction function. - -.. code-block:: java - - import ml.dmlc.treelite4j.Entry; - - // Create an array of feature values for the input - int num_feature = predictor.GetNumFeature(); - Entry[] inst = new Entry[num_feature]; - - // Initialize all feature values as missing - for (int i = 0; i < num_feature; ++i) { - inst[i] = new Entry(); - inst[i].setMissing(); - } - - // Set feature values that are not missing - // In this example, we set feature 1, 3, and 7 - inst[1].setFValue(-0.5); - inst[3].setFValue(3.2); - inst[7].setFValue(-1.7); - - // Now run prediction - // (Put false in the second argument to get probability outputs) - float[] result = predictor.predict(inst, false); - // The result is either class probabilities (for multi-class classification) - // or a single number (for all other tasks, such as regression) - -Predict with a batch of inputs ------------------------------- -For predicting with a batch of inputs, we create a list of DataPoint objects. Each DataPoint object consists of feature values and corresponding feature indices. - -Let us look at an example. Consider the following 4-by-6 data matrix - -.. math:: - - \left[ - \begin{array}{cccccc} - 10 & 20 & \cdot & \cdot & \cdot & \cdot\\ - \cdot & 30 & \cdot & 40 & \cdot & \cdot\\ - \cdot & \cdot & 50 & 60 & 70 & \cdot\\ - \cdot & \cdot & \cdot & \cdot & \cdot & 80 - \end{array} - \right] - -where the dot (.) indicates the missing value. The matrix consists of 4 data points (instances), each with 6 feature values. -Since not all feature values are present, we need to store feature indices as well as feature values: - -.. code-block:: java - - import ml.dmlc.treelite4j.DataPoint; - - // Create a list consisting of 4 data points - List dmat = new ArrayList() { - { - // feature indices feature values - add(new DataPoint(new int[]{0, 1}, new float[]{10f, 20f})); - add(new DataPoint(new int[]{1, 3}, new float[]{30f, 40f})); - add(new DataPoint(new int[]{2, 3, 4}, new float[]{50f, 60f, 70f})); - add(new DataPoint(new int[]{5}, new float[]{80f})); - } - }; - -Once the list is created, we then convert it into a SparseBatch object. We use SparseBatch rather than DenseBatch because significant portion of the data matrix -consists of missing values. - -.. code-block:: java - - import ml.dmlc.treelite4j.BatchBuilder; - - // Convert data point list into SparseBatch object - SparseBatch batch = BatchBuilder.CreateSparseBatch(dmat); - -Now invoke the batch prediction function using the SparseBatch object: - -.. code-block:: java - - // verbose=true, pred_margin=false - float[][] result = predictor.predict(batch, true, false); - -The returned array is a two-dimensional array where the array ``result[i]`` represents the prediction for the ``i``-th data point. For most applications, each ``result[i]`` has length 1. Multi-class classification task is specical, in that for that task ``result[i]`` contains class probabilities, so the array is as long as the number of target classes. - -For your convenience, we also provide a convenience method to load a data text file in the LIBSVM format: - -.. code-block:: java - - List dmat = BatchBuilder.LoadDatasetFromLibSVM("path/to/my.data.libsvm"); - SparseBatch batch = BatchBuilder.CreateSparseBatch(dmat); diff --git a/docs/tutorials/first.rst b/docs/tutorials/first.rst deleted file mode 100644 index 2e7a0131..00000000 --- a/docs/tutorials/first.rst +++ /dev/null @@ -1,143 +0,0 @@ -First tutorial -============== - -This tutorial will demonstrate the basic workflow. - -.. code-block:: python - - import treelite - -Regression Example ------------------- - -In this tutorial, we will use a small regression example to describe the -full workflow. - -Load the Boston house prices dataset ------------------------------------- - -Let us use the Boston house prices dataset from scikit-learn -(:py:func:`sklearn.datasets.load_boston`). It consists of 506 houses -with 13 distinct features: - -.. code-block:: python - - from sklearn.datasets import load_boston - X, y = load_boston(return_X_y=True) - print(f'dimensions of X = {X.shape}') - print(f'dimensions of y = {y.shape}') - -Train a tree ensemble model using XGBoost ------------------------------------------ - -The first step is to train a tree ensemble model using XGBoost -(`dmlc/xgboost `_). - -Disclaimer: Treelite does NOT depend on the XGBoost package in any way. -XGBoost was used here only to provide a working example. - -.. code-block:: python - - import xgboost - dtrain = xgboost.DMatrix(X, label=y) - params = {'max_depth':3, 'eta':1, 'objective':'reg:squarederror', 'eval_metric':'rmse'} - bst = xgboost.train(params, dtrain, 20, [(dtrain, 'train')]) - -Pass XGBoost model into Treelite --------------------------------- - -Next, we feed the trained model into Treelite. If you used XGBoost to -train the model, it takes only one line of code: - -.. code-block:: python - - model = treelite.Model.from_xgboost(bst) - -.. note:: Using other packages to train decision trees - - With additional work, you can use models trained with other machine learning - packages. See :doc:`this page ` for instructions. - -Generate shared library ------------------------ - -Given a tree ensemble model, Treelite will produce a **prediction subroutine** -(internally represented as a C program). To use -the subroutine for prediction task, we package it as a `dynamic shared -library `_, -which exports the prediction subroutine for other programs to use. - -Before proceeding, you should decide which of the following compilers is -available on your system and set the variable ``toolchain`` -appropriately: - -- ``gcc`` -- ``clang`` -- ``msvc`` (Microsoft Visual C++) - -.. code-block:: python - - toolchain = 'gcc' # change this value as necessary - -The choice of toolchain will be used to compile the prediction -subroutine into native code. - -Now we are ready to generate the library. - -.. code-block:: python - - model.export_lib(toolchain=toolchain, libpath='./mymodel.so', verbose=True) - # ^^ - # set correct file extension here; see the following paragraph - -.. note:: File extension for shared library - - Make sure to use the correct file extension for the library, - depending on the operating system: - - - Windows: ``.dll`` - - Mac OS X: ``.dylib`` - - Linux / Other UNIX: ``.so`` - -.. note:: Want to deploy the model to another machine? - - This tutorial assumes that predictions will be made on the same machine that - is running Treelite. If you'd like to deploy your model to another machine - (that may not have Treelite installed), see the page :doc:`deploy`. - -.. note:: Reducing compilation time for large models - - For large models, :py:meth:`~treelite.Model.export_lib` may take a long time - to finish. To reduce compilation time, enable the ``parallel_comp`` option by - writing - - .. code-block:: python - - model.export_lib(toolchain=toolchain, libpath='./mymodel.so', - params={'parallel_comp': 32}, verbose=True) - - which splits the prediction subroutine into 32 source files that gets compiled - in parallel. Adjust this number according to the number of cores on your - machine. - -Use the shared library to make predictions ------------------------------------------- - -Once the shared library has been generated, we feed it into a separate -module (:py:mod:`treelite_runtime`) known as the runtime. The -optimized prediction subroutine is exposed through the -:py:class:`~treelite_runtime.Predictor` class: - -.. code-block:: python - - import treelite_runtime # runtime module - predictor = treelite_runtime.Predictor('./mymodel.so', verbose=True) - -We decide on which of the houses in ``X`` we should make predictions -for. Say, from 10th house to 20th: - -.. code-block:: python - - dmat = treelite_runtime.DMatrix(X[10:20]) - out_pred = predictor.predict(dmat) - print(out_pred) diff --git a/docs/tutorials/index.rst b/docs/tutorials/index.rst index 9d15b38c..c844c3c5 100644 --- a/docs/tutorials/index.rst +++ b/docs/tutorials/index.rst @@ -8,10 +8,6 @@ This page lists tutorials about Treelite. :maxdepth: 1 :caption: Contents: - first import - optimize - deploy - deploy_java builder json_import diff --git a/docs/tutorials/optimize.rst b/docs/tutorials/optimize.rst deleted file mode 100644 index 00d6ac3f..00000000 --- a/docs/tutorials/optimize.rst +++ /dev/null @@ -1,376 +0,0 @@ -Optimizing prediction subroutine -================================ - -Treelite offers system-level optimizations to boost prediction performance. -Notice that the model information is wholly preserved; the optimizations only -affect the manner at which prediction is performed. - -.. contents:: Contents - :local: - :depth: 2 - -Annotate conditional branches ------------------------------ - -This optimization analyzes and annotates every threshold conditions in the test -nodes to improve performance. - -How to use -~~~~~~~~~~ -The first step is to generate the **branch annotation record** for your ensemble -model. Make sure to have your training data ready. - -.. code-block:: python - - # model = your ensemble model (object of type treelite.Model) - # dmat = training data (object of type treelite.DMatrix) - - # Create annotator object - annotator = treelite.Annotator() - # Annotate branches by iterating over the training data - annotator.annotate_branch(model=model, dmat=dmat, verbose=True) - # Save the branch annotation record as a JSON file - annotator.save(path='mymodel-annotation.json') - -To utilize the branch annotation record, supply the compiler parameter -``annotate_in`` when exporting the model: - -.. code-block:: python - :emphasize-lines: 3, 8, 12 - - # Export a source directory - model.compile(dirpath='./mymodel', verbose=True, - params={'annotate_in': 'mymodel-annotation.json'}) - - # Export a source directory, packaged in a zip archive - model.export_srcpkg(platform='unix', toolchain='gcc', pkgpath='./mymodel.zip', - libname='mymodel.so', verbose=True, - params={'annotate_in': 'mymodel-annotation.json'}) - - # Export a shared library - model.export_lib(toolchain='gcc', libpath='./mymodel.so', verbose=True, - params={'annotate_in': 'mymodel-annotation.json'}) - -Technical details -~~~~~~~~~~~~~~~~~ - -Rationale -^^^^^^^^^ -Modern CPUs heavily rely on a technique known as -`branch prediction `_, in which -they "guess" the result of the conditional expression in each ``if``-``else`` -branch ahead of time. Given a program - -.. code-block:: c - - if ( [conditional expression] ) { - foo(); - } else { - bar(); - } - -the CPU will pre-fetch the instructions for the function ``foo()`` if the given -condition is likely to be true. On the other hand, if the condition is likely -to be false, the CPU will pre-fetch the instructions for the function ``bar()``. -It suffices to say that correctly predicting conditional branches has -great impact on performance. Each time the CPU predicts a branch correctly, it -can keep the instructions it had pre-fetched earlier. Each time the CPU fails to -predict, it must throw away the pre-fetched instructions and fetch anew another -set of instructions. If you'd like to learn more about the importance of branch -prediction, read -`this excellent introductory article -from Stanford\ -`_. - -The prediction subroutine for a decision tree ensemble is problematic, as it -is replete with conditional branches that will have to be guessed well: - -.. code-block:: c - - /* A slice of prediction subroutine */ - float predict_margin(const float* data) { - float sum = 0.0f; - if (!(data[0].missing != -1) || data[0].fvalue <= 9.5) { - if (!(data[0].missing != -1) || data[0].fvalue <= 3.5) { - if (!(data[10].missing != -1) || data[10].fvalue <= 0.74185) { - if (!(data[0].missing != -1) || data[0].fvalue <= 1.5) { - if (!(data[2].missing != -1) || data[2].fvalue <= 2.08671) { - if ( (data[4].missing != -1) && data[4].fvalue <= 2.02632) { - if (!(data[3].missing != -1) || data[3].fvalue <= 0.763339) { - sum += (float)0.00758165; - } else { - sum += (float)0.0060202; - } - } else { - if ( (data[1].missing != -1) && data[1].fvalue <= 0.0397456) { - sum += (float)0.00415399; - } else { - sum += (float)0.00821985; - } - } - /* and so forth... */ - -In fact, each threshold condition in the test nodes will need to be predicted. -While CPUs lack adequate information to make good guesses on these conditions, -we can help by providing that information. - -Mechanism for supplying the C compiler with branch information -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -We predict the likelihood of each condition by counting the number of data -points from the training data that satisfy that condition. See the diagram below -for an illustration. - -.. plot:: - :nofigs: - - from graphviz import Source - source = r""" - digraph branch_annotation { - graph [fontname = "helvetica"]; - node [fontname = "helvetica"]; - edge [fontname = "helvetica"]; - 0 [label="Feature 4224 < 2.0 ?", shape=box]; - 1 [label="Leaf: -0.0198"]; - 2 [label="Feature 13 < 0.848 ?", shape=box]; - 5 [label="Feature 12 < 0.878 ?", shape=box]; - 6 [label="Feature 5 < -0.384 ?", shape=box]; - 11 [label=" ⋮", margin=-0.5, shape=none, fontsize=20]; - 12 [label="Feature 8 < -0.231?", shape=box]; - 13 [label="Leaf: -0.0194"]; - 14 [label="Leaf: -0.0196"]; - 25 [label="Leaf: -0.0194"]; - 26 [label="Feature 1693 < 2 ?", shape=box]; - 53 [label="Leaf: 0"]; - 54 [label="Leaf: -0.0196"]; - 0 -> 1 [labeldistance=2.0, labelangle=45, - headlabel=3,092,211 >]; - 0 -> 2 [labeldistance=2.0, labelangle=-45, - headlabel=< No/Missing: 3,902,211>]; - 2 -> 5 [labeldistance=2.0, labelangle=45, - headlabel=3,342,535 >]; - 2 -> 6 [labeldistance=2.0, labelangle=-45, - headlabel=< No/Missing: 583,254>]; - 5 -> 11 [labeldistance=2.0, labelangle=45, - headlabel=2,878,952 >]; - 5 -> 12 [labeldistance=2.0, labelangle=-45, - headlabel=< No/Missing:
445,583>]; - 6 -> 13 [labeldistance=2.0, labelangle=45, - headlabel=266,188 >]; - 6 -> 14 [labeldistance=2.0, labelangle=-45, - headlabel=< No/Missing:
317,066>]; - 12 -> 25 [labeldistance=2.0, labelangle=45, - headlabel=257,828 >]; - 12 -> 26 [labeldistance=2.0, labelangle=-45, - headlabel=< No/Missing: 187,755>]; - 26 -> 53 [labeldistance=2.0, labelangle=45, - headlabel=4 >]; - 26 -> 54 [labeldistance=2.0, labelangle=-45, - headlabel=< No/Missing: 187,751>]; - } - """ - Source(source, format='png').render('../_static/branch_annotation', view=False) - Source(source, format='svg').render('../_static/branch_annotation', view=False) - -.. raw:: html - -

- -

- -If a condition is true at least 50% of the time (over the training data), the -condition is labeled as "expected to be true": - -.. code-block:: c - - /* expected to be true */ - if ( __builtin_expect( [condition], 1 ) ) { - ... - } else { - ... - } - -On the other hand, if a condition is false at least 50% of the time, the -condition is labeled as "expected to be false": - -.. code-block:: c - - /* expected to be false */ - if ( __builtin_expect( [condition], 0 ) ) { - ... - } else { - ... - } - -.. note:: On the expression ``__builtin_expect`` - - The ``__builtin_expect`` expression is a compiler intrinsic to supply the C - compiler with branch prediction information. Both - `gcc `_ - and `clang `_ - support it. Unfortunately, Microsoft Visual C++ does not. To take advantage - of branch annotation, make sure to use gcc or clang on the target machine. - -Use integer thresholds for conditions --------------------------------------- - -This optimization replaces all thresholds in the test nodes with integers so -that each threshold condition performs integer comparison instead of the usual -floating-point comparison. The thresholds are said to be **quantized** into -integer indices. - -BEFORE: - -.. code-block:: c - - if (data[3].fvalue < 1.5) { /* floating-point comparison */ - ... - } - -AFTER: - -.. code-block:: c - - if (data[3].qvalue < 3) { /* integer comparison */ - ... - } - -How to use -~~~~~~~~~~ -Simply add the compiler parameter ``quantize=1`` when exporting the model: - -.. code-block:: python - :emphasize-lines: 3, 8, 12 - - # Export a source directory - model.compile(dirpath='./mymodel', verbose=True, - params={'quantize': 1}) - - # Export a source directory, packaged in a zip archive - model.export_srcpkg(platform='unix', toolchain='gcc', pkgpath='./mymodel.zip', - libname='mymodel.so', verbose=True, - params={'quantize': 1}) - - # Export a shared library - model.export_lib(toolchain='gcc', libpath='./mymodel.so', verbose=True, - params={'quantize': 1}) - -Technical details -~~~~~~~~~~~~~~~~~ - -Rationale -^^^^^^^^^ -On some platforms such as x86-64, replacing floating-point thresholds with -integers helps improve performance by 1) **reducing executable code size** and 2) -**improving data locality**. This is so because on these platforms, integer -constants can be embedded as part of the comparison instruction, whereas -floating-point constants cannot. - -Let's look at x86-64 platform. The integer comparison - -.. code-block:: c - - a <= 4 - -produces one assembly instruction: - -.. code-block:: nasm - - cmpl $4, 8(%rsp) ; 8(%rsp) contains the variable a - -Since the integer constant ``4`` got embedded into the comparison instruction -`cmpl `_, we only -had to fetch the variable ``a`` from memory. - -On the other hand, the floating-point comparison - -.. code-block:: c - - b < 1.2f - -produces two assembly instructions: - -.. code-block:: nasm - - movss 250(%rip), %xmm0 ; 250(%rip) contains the constant 1.2f - ucomiss 12(%rsp), %xmm0 ; 12(%rsp) contains the variable b - -Notice that the floating-point constant ``1.2f`` did not get embedded into -the comparison instruction -`ucomiss `_. The -constant had to be fetched (with -`movss `_) into the -register ``xmm0`` before the comparsion could take place. To summarize, - -* a floating-point comparison takes twice as many instructions as an integer - comparsion, increasing the executable code size; -* a floating-point comparison involves an extra fetch instruction (``movss``), - potentially causing a - `cache miss `_. - -**Caveats**. As we'll see in the next section, using integer thresholds will -add overhead costs at prediction time. You should ensure that the benefits of -integer comparisons outweights the overhead costs. - -Mechanism for mapping features -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -When ``quantize`` option is enabled, Treelite will collect all thresholds -occuring in the tree ensemble model. For each feature, one list will be -generated that lists the thresholds in ascending order: - -.. code-block:: none - - /* example of how per-feature threshold list may look like */ - - Feature 0: [1.5, 6.5, 12.5] - Feature 3: [0.15, 0.35, 1.5] - Feature 6: [7, 9, 10, 135] - -Using these lists, we may convert any data point into integer indices via -simple look-ups. For feature 0 in the example above, values will be mapped -to integer indices as follows: - -.. code-block:: none - - Let x be the value of feature 0. - - Assign -1 if x < 1.5 - Assign 0 if x == 1.5 - Assign 1 if 1.5 < x < 6.5 - Assign 2 if x == 6.5 - Assign 3 if 6.5 < x < 12.5 - Assign 4 if x == 12.5 - Assign 5 if x > 12.5 - -Let's look at a specific example of how a floating-point vector gets translated -into a vector of integer indices: - -.. code-block:: none - - feature id 0 1 2 3 4 5 6 - [7, missing, missing, 0.2, missing, missing, 20 ] - => [3, missing, missing, 1, missing, missing, 5 ] - -Since the prediction subroutine still needs to accept floating-point features, -the features will be internally converted before actual prediction. If the -prediction subroutine looked like below without ``quantize`` option, - -.. code-block:: c - - float predict_margin(const Entry* data) { - /* ... Run through the trees to compute the leaf output score ... */ - - return score; - } - -it will now have an extra step of mapping the incoming data vector into integers: - -.. code-block:: c - :emphasize-lines: 2 - - float predict_margin(const Entry* data) { - /* ... Quantize feature values in data into integer indices ... */ - - /* ... Run through the trees to compute the leaf output score ... */ - return score; - } diff --git a/python/treelite/annotator.py b/python/treelite/annotator.py index 53674e3c..9c3e61fc 100644 --- a/python/treelite/annotator.py +++ b/python/treelite/annotator.py @@ -6,6 +6,7 @@ from .util import c_str, TreeliteError from .core import _LIB, _check_call from .frontend import Model +from .warn import deprecate class Annotator(): @@ -15,6 +16,7 @@ class Annotator(): """ def __init__(self): + deprecate("class Annotator") self.handle = None def annotate_branch(self, model, dmat, nthread=None, verbose=False): diff --git a/python/treelite/contrib/__init__.py b/python/treelite/contrib/__init__.py index efbf3eea..0388680f 100644 --- a/python/treelite/contrib/__init__.py +++ b/python/treelite/contrib/__init__.py @@ -10,6 +10,7 @@ import time import ctypes from ..util import TreeliteError, lineno, log_info +from ..warn import deprecate from .util import _libext, _toolchain_exist_check @@ -60,6 +61,7 @@ def generate_makefile(dirpath, platform, toolchain, options=None): # pylint: di optional Additional options to pass to toolchain """ + deprecate("Function treelite.generate_makefile()") if not os.path.isdir(dirpath): raise TreeliteError('Directory {} does not exist'.format(dirpath)) try: @@ -132,6 +134,7 @@ def generate_cmakelists(dirpath, options=None): optional Additional options to pass to toolchain """ + deprecate("Function treelite.generate_cmakelists()") if not os.path.isdir(dirpath): raise TreeliteError(f'Directory {dirpath} does not exist') try: @@ -232,6 +235,7 @@ def create_shared(toolchain, dirpath, *, nthread=None, verbose=False, options=No predictor = Predictor(libpath='./my/model/model.dll', verbose=True) """ + deprecate("Function treelite.create_shared()") # pylint: disable=R0912 if nthread is not None and nthread <= 0: diff --git a/python/treelite/frontend.py b/python/treelite/frontend.py index e9d67c7a..ecd6e63e 100644 --- a/python/treelite/frontend.py +++ b/python/treelite/frontend.py @@ -17,6 +17,7 @@ from .util import c_str, py_str, TreeliteError, type_info_to_ctypes_type, type_info_to_numpy_type from .core import _LIB, c_array, _check_call from .contrib import create_shared, generate_makefile, generate_cmakelists, _toolchain_exist_check +from .warn import deprecate def _isascii(string): @@ -250,6 +251,7 @@ def export_lib(self, toolchain, libpath, params=None, compiler='ast_native', # move the library out of the temporary directory shutil.move('/temporary/directory/mymodel.dll', './mymodel.dll') """ + deprecate("Method treelite.Model.export_lib()") _toolchain_exist_check(toolchain) _params = dict(params) if isinstance(params, list) else params @@ -321,6 +323,7 @@ def export_srcpkg(self, platform, toolchain, pkgpath, libname, params=None, root_dir='/temporary/directory', base_dir='mymodel/') """ + deprecate("Method treelite.Model.export_srcpkg()") # check for file extension fileext = os.path.splitext(pkgpath)[1] if fileext != '.zip': @@ -382,6 +385,7 @@ def compile(self, dirpath, params=None, compiler='ast_native', verbose=False): the value of ``parallel_comp``. Otherwise, there will be exactly two files: ``./model/header.h``, ``./my/model/main.c`` """ + deprecate("Method treelite.Model.compile()") compiler_handle = ctypes.c_void_p() _params = dict(params) if isinstance(params, list) else params if verbose and _params: diff --git a/python/treelite/warn.py b/python/treelite/warn.py new file mode 100644 index 00000000..dcc32186 --- /dev/null +++ b/python/treelite/warn.py @@ -0,0 +1,9 @@ +import warnings + +def deprecate(subject): + warnings.warn( + f"{subject} is deprecated and scheduled for removal in Treelite 4.0. " + "Please use TL2cgen instead. " + "Consult the migration guide at " + "https://tl2cgen.readthedocs.io/en/latest/treelite-migration.html." + ) diff --git a/runtime/python/treelite_runtime/predictor.py b/runtime/python/treelite_runtime/predictor.py index ec5bebb8..d75a797a 100644 --- a/runtime/python/treelite_runtime/predictor.py +++ b/runtime/python/treelite_runtime/predictor.py @@ -12,6 +12,7 @@ lib_extension_current_platform, type_info_to_ctypes_type, type_info_to_numpy_type, \ numpy_type_to_type_info from .libpath import TreeliteRuntimeLibraryNotFound, find_lib_path +from .warn import deprecate def _load_runtime_lib(): @@ -78,6 +79,7 @@ class Predictor: # pylint: disable=R0903 def __init__(self, libpath, nthread=None, verbose=False): + deprecate("class treelite_runtime.Predictor") if os.path.isdir(libpath): # libpath is a directory # directory is given; locate shared library inside it lib_found = False @@ -280,6 +282,7 @@ class DMatrix: def __init__(self, data, data_format=None, dtype=None, missing=None, feature_names=None, feature_types=None, verbose=False, nthread=None): + deprecate("class treelite_runtime.DMatrix") if data is None: raise TreeliteRuntimeError("'data' argument cannot be None") diff --git a/runtime/python/treelite_runtime/warn.py b/runtime/python/treelite_runtime/warn.py new file mode 100644 index 00000000..dcc32186 --- /dev/null +++ b/runtime/python/treelite_runtime/warn.py @@ -0,0 +1,9 @@ +import warnings + +def deprecate(subject): + warnings.warn( + f"{subject} is deprecated and scheduled for removal in Treelite 4.0. " + "Please use TL2cgen instead. " + "Consult the migration guide at " + "https://tl2cgen.readthedocs.io/en/latest/treelite-migration.html." + ) From b8b053e6af3442c37746fb823c84caa62d9f6366 Mon Sep 17 00:00:00 2001 From: Hyunsu Philip Cho Date: Fri, 5 May 2023 12:55:08 -0700 Subject: [PATCH 2/2] Fix formatting --- python/treelite/contrib/__init__.py | 2 +- python/treelite/warn.py | 2 ++ runtime/python/treelite_runtime/warn.py | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/python/treelite/contrib/__init__.py b/python/treelite/contrib/__init__.py index 0388680f..fb0fb6c2 100644 --- a/python/treelite/contrib/__init__.py +++ b/python/treelite/contrib/__init__.py @@ -234,9 +234,9 @@ def create_shared(toolchain, dirpath, *, nthread=None, verbose=False, options=No predictor = Predictor(libpath='./my/model/model.dll', verbose=True) """ + # pylint: disable=R0912 deprecate("Function treelite.create_shared()") - # pylint: disable=R0912 if nthread is not None and nthread <= 0: raise TreeliteError('nthread must be positive integer') diff --git a/python/treelite/warn.py b/python/treelite/warn.py index dcc32186..5b620d94 100644 --- a/python/treelite/warn.py +++ b/python/treelite/warn.py @@ -1,6 +1,8 @@ +"""Warning for deprecated C codegen functionalities""" import warnings def deprecate(subject): + """Generate a warning with a subject""" warnings.warn( f"{subject} is deprecated and scheduled for removal in Treelite 4.0. " "Please use TL2cgen instead. " diff --git a/runtime/python/treelite_runtime/warn.py b/runtime/python/treelite_runtime/warn.py index dcc32186..5b620d94 100644 --- a/runtime/python/treelite_runtime/warn.py +++ b/runtime/python/treelite_runtime/warn.py @@ -1,6 +1,8 @@ +"""Warning for deprecated C codegen functionalities""" import warnings def deprecate(subject): + """Generate a warning with a subject""" warnings.warn( f"{subject} is deprecated and scheduled for removal in Treelite 4.0. " "Please use TL2cgen instead. "