session.md 2.3 KB
Newer Older
H
Helin Wang 已提交
1 2 3 4 5 6 7 8
# 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.

H
Helin Wang 已提交
9 10 11 12 13 14
The session is able to distinguish running a graph locally or
remotely, using CPU only or using one or more GPUs. Different sessions
have different runtime environments such as [scopes](./scope.md) and
device contexts.


H
Helin Wang 已提交
15 16
## Background

H
Helin Wang 已提交
17 18 19 20 21 22 23 24 25 26 27 28
A computation graph runs in an environment which contains states such
as the scope and device contexts. The current design has an implicit
global session on which `paddle.eval()` is executed.

Since the user is not able to explicitly switch between runtime
environments such as the scope and the device contexts, the user
cannot run a topology in 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.
H
Helin Wang 已提交
29

H
Helin Wang 已提交
30
We need a session concept to address above issues.
H
Helin Wang 已提交
31 32 33

## Session

H
Helin Wang 已提交
34
A session is an object that owns all runtime states such as scope,
H
Helin Wang 已提交
35 36 37
reader OP's file handles, connection to a remote PaddlePaddle cluster,
etc.

H
Helin Wang 已提交
38
The session has two methods: `eval` and `close`. `eval` executes the
H
Helin Wang 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
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")
H
Helin Wang 已提交
64
cost = paddle.op.cross_entropy(fc2, label)
H
Helin Wang 已提交
65 66 67 68 69 70 71 72
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()
```