18. Environment variables

There are several environment variables which you can use to control the behaviour of PopXL. Most of these use the underlying PopART library.

18.1. Logging

PopART can output information about its activity as described in Turning on execution tracing. You can control the level of logging information using environment variables.


POPART_LOG_LEVEL controls the amount of information written to the log output for all modules. Finer control can be achieved with POPART_LOG_CONFIG.


POPART_LOG_DEST defines the output for the logging information. The value can be stdout, stderr or a file name.

The default is stderr.


If set, POPART_LOG_CONFIG defines the name of a configuration file which specifies the logging level for each module. This is a JSON format file with pairs of module:level strings. For example, you can specify a file called conf.py by setting the environment variable:

export POPART_LOG_CONFIG=conf.py

To set the logging level of the devicex and session modules, conf.py would contain:


These values override the value specified in POPART_LOG_LEVEL.

18.2. Generating DOT files

You can ask PopXL to export DOT files of your graphs at different points during IR construction. This is done using dot_checkpoint(). The following example shows this:

with g:
    c = ops.add(a, b)
    d = ops.mul(a, c)

By default, PopXL will produce DOT files for all your checkpoints. You can, however, dynamically control which ones are produced using the POPART_DOT_CHECKS environment variable. Multiple checkpoint names can be passed, separated `:. For example, we can select only ADD and BWD like so:


The special value ALL will select all checkpoints. This is the default value.

The values in POPART_DOT_CHECKS will be combined with any values that are defined in the session options.

18.3. Caching of compiled executables

It can take a long time to compile a large graph into an executable for the IPU. You can enable caching of compiled executables to avoid re-compiling the same graph every time it is run.

To enable the cache, set the environment variable POPXL_CACHE_DIR to the path where the compiled executables for the PopXL graph will be stored. For example:

$ export POPXL_CACHE_DIR="/tmp/cachedir"

An executable binary file with the extension .popef will be saved for each Poplar graph required to execute the PopXL program.

The cache does not manage the files within the directory. It is your responsibility to delete out-of-date files. No index is kept of the files, so they can be deleted without risk.

18.4. Preloading of compiled executables

Loading PopEF executable files may exhibit poor performance if the the files are stored remotely, for example on Amazon Simple Storage Service (Amazon S3) and mounted through S3FS. This is caused by making random accesses to uncached remote files.

You can optimise the loading process in such cases by enabling a preload mechanism. This can significantly improve the speed of the initial loading of the file and also enables subsequent operations to be carried out on a cached file. This makes it viable to store PopEF files on systems such as Amazon S3.

To enable the preload mechanism, set the value of the environment variable POPART_PRELOAD_POPEF to full-preload.

$ export POPART_PRELOAD_POPEF=full-preload