session.md 2.0 KB
Newer Older
H
Helin Wang 已提交
1 2 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
# Design Doc: Session

## Abstract

This design doc proposes to have an object called *Session* which
encapsulates the environment in which the computation graph is
executed.

## Background

A computation graph is executed in an environment which contains the
[scope](./scope.md) and other states. PaddlePaddle used to only have
an implicit global session on which `paddle.eval()` is executed.

This has the limitation that the user can not create two independent
environments. For example, in reinforcement learning, the user may
want to have a stale model for inference and a fresh model for
training, and only replace the stale model with the fresh model
periodically. Also, we have no concept that can encapsulate a remote
environment that could execute a computation graph.

## Session

Session is an object that owns all runtime states such as scope,
reader OP's file handles, connection to a remote PaddlePaddle cluster,
etc.

Session has two methods: `eval` and `close`. `eval` executes the
target OP in a given graph, and `close` closes the session and
releases all related resources:

```Python
a = paddle.constant(1.0)
b = paddle.constant(2.0)
c = a + b
sess = paddle.session()
sess.eval(c)
sess.close()
```

### Remote Session

Paddle Cloud will support user creating a remote session pointing to
the Paddle Cloud cluster. The user can send the computation graph to
be executed on the Paddle Cloud. In this way, the user can control a
cluster from her local computer:

```Python
reader = paddle.reader.recordio("/pfs/home/peter/mnist-train-*") # data stored on Paddle Cloud
image = reader.column(0)
label = reader.column(1)
fc1 = paddle.op.fc(image, size=256, act="sigmoid")
fc2 = paddle.op.fc(fc1, size=10, act="softmax")
cost = paddle.op.cross_entropy(fc2)
opt = paddle.optimizer.sgd(cost)

remote_config = ... # remote configuration such as endpoint, number of nodes and authentication.
sess = paddle.remoteSession(remote_config)
for i in range(1000):
    sess.eval(opt)
sess.close()
```