Skip to content
/ apo Public

A toy project to explore reinforcement learning for pattern-rewriting on compute DAGs.

Notifications You must be signed in to change notification settings

simoll/apo

Repository files navigation

APO - Automatic Program Optimizer

APO is a toy project to explore reinforcement learning for program optimization - pattern-rewriting on compute DAGs in the search for the shortest program. The project is inspired by AlphaZero (https://arxiv.org/abs/1712.01815).

The toy language

This toy program computes the expression 7 * ((b + a) - b):

0: add %b %a
1: sub %0 %b
2: 7
3: mul %2 %1
4: ret %3

A toy program consists of a sequence of operations on unsigned, 32bit integers. Every statement has the form

<line_no>: <op>( <id)*

<id> - Identifiers

Identifiers can refer to line numbers or arguments, for example: %2 - is the result of the statement in line 2 (general case %n with n being an integer >= 0). %c - is the value of the third parameter (%a to %z).

<op> - Binary Operators

3: add %0 %1

adds the values of variables %0 and %1 and store the result in %3. available operators are add / sub / mul / and / or / xor.

<op> - Constant-yielding

2: 42

Stores 42 in variable %2.

<op> - pipe (fake use)

3: # %2

Assign to %3 the contents of %2.

<op> - return value

6: ret %5

%5 is the return value of the program.

configuration files

devices.conf

Purpose:

Tensorflow tower configuration file

Syntax:

<tensorflow_device> <name> <task1>[,<task2>]*  <rating>

Interpretation:

create a tower on <tensorflow_device> with the op-prefix <name>/. The tower is instantiated for the tasks specified in <taskSet>. The interpretation of <rating> depends on the task. It is possible to create multiple towers per device.

infer task:
Inference tower used during reinforcement learning. <rating> translates to the number of concurrent search threads using this inference device. An infer tower uses a StagingArea (dev/put_stage is required to pull data into the model before dev/infer_X_dist can be used).
loss task:
Inference tower used for loss computation (logging). This device is unbuffered (directly feeded from tf.placeholders). <rating> does not have any meaning here.
train task:
There must be only a single train device at the moment. <rating> may in the future be used to automatically distribute gradient computation to all train devices.

server.conf

SampleServer configuration (mostly the training sample queue).

train.conf

Soft model parameters. Does not affect the MetaGraph so no rebuilding necessary.

model.conf

Hard model parameters. If any entry changes, the Tensorflow MetaGraph needs to be rebuild (which takes forever).

About

A toy project to explore reinforcement learning for pattern-rewriting on compute DAGs.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages