|
|
|
@ -6,26 +6,36 @@ This design doc proposes to have an object called *Session* which
|
|
|
|
|
encapsulates the environment in which the computation graph is
|
|
|
|
|
executed.
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 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.
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
We need a session concept to address above issues.
|
|
|
|
|
|
|
|
|
|
## Session
|
|
|
|
|
|
|
|
|
|
Session is an object that owns all runtime states such as scope,
|
|
|
|
|
A 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
|
|
|
|
|
The 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:
|
|
|
|
|
|
|
|
|
@ -51,7 +61,7 @@ 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)
|
|
|
|
|
cost = paddle.op.cross_entropy(fc2, label)
|
|
|
|
|
opt = paddle.optimizer.sgd(cost)
|
|
|
|
|
|
|
|
|
|
remote_config = ... # remote configuration such as endpoint, number of nodes and authentication.
|
|
|
|
|