Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
0ffd33d3
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
0ffd33d3
编写于
4月 19, 2018
作者:
Q
qiaolongfei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
VariableResponse support deserialize var into local scope
上级
0b8630b9
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
31 addition
and
18 deletion
+31
-18
paddle/fluid/framework/scope.cc
paddle/fluid/framework/scope.cc
+1
-1
paddle/fluid/framework/scope.h
paddle/fluid/framework/scope.h
+1
-1
paddle/fluid/operators/detail/grpc_server.cc
paddle/fluid/operators/detail/grpc_server.cc
+2
-2
paddle/fluid/operators/detail/sendrecvop_utils.cc
paddle/fluid/operators/detail/sendrecvop_utils.cc
+1
-1
paddle/fluid/operators/detail/serde_test.cc
paddle/fluid/operators/detail/serde_test.cc
+2
-2
paddle/fluid/operators/detail/variable_response.cc
paddle/fluid/operators/detail/variable_response.cc
+3
-6
paddle/fluid/operators/detail/variable_response.h
paddle/fluid/operators/detail/variable_response.h
+20
-4
paddle/fluid/operators/split_byref_op.h
paddle/fluid/operators/split_byref_op.h
+1
-1
未找到文件。
paddle/fluid/framework/scope.cc
浏览文件 @
0ffd33d3
...
...
@@ -91,7 +91,7 @@ std::vector<std::string> Scope::LocalVarNames() const {
return
known_vars
;
}
void
Scope
::
DeleteScope
(
Scope
*
scope
)
{
void
Scope
::
DeleteScope
(
Scope
*
scope
)
const
{
std
::
unique_lock
<
std
::
mutex
>
lock
(
mutex_
);
auto
it
=
std
::
find
(
this
->
kids_
.
begin
(),
this
->
kids_
.
end
(),
scope
);
PADDLE_ENFORCE
(
it
!=
this
->
kids_
.
end
(),
"Cannot find %p as kid scope"
,
scope
);
...
...
paddle/fluid/framework/scope.h
浏览文件 @
0ffd33d3
...
...
@@ -63,7 +63,7 @@ class Scope {
/// Find the scope or an ancestor scope that contains the given variable.
const
Scope
*
FindScope
(
const
Variable
*
var
)
const
;
void
DeleteScope
(
Scope
*
scope
);
void
DeleteScope
(
Scope
*
scope
)
const
;
/// Drop all kids scopes belonged to this scope.
void
DropKids
();
...
...
paddle/fluid/operators/detail/grpc_server.cc
浏览文件 @
0ffd33d3
...
...
@@ -60,7 +60,7 @@ class RequestSend final : public RequestBase {
framework
::
Scope
*
scope
,
ReceivedQueue
*
queue
,
const
platform
::
DeviceContext
*
dev_ctx
)
:
RequestBase
(
service
,
cq
,
dev_ctx
),
queue_
(
queue
),
responder_
(
&
ctx_
)
{
request_
.
reset
(
new
VariableResponse
(
scope
,
dev_ctx_
));
request_
.
reset
(
new
VariableResponse
(
false
,
scope
,
dev_ctx_
));
int
method_id
=
static_cast
<
int
>
(
detail
::
GrpcMethod
::
kSendVariable
);
service_
->
RequestAsyncUnary
(
method_id
,
&
ctx_
,
request_
.
get
(),
&
responder_
,
cq_
,
cq_
,
this
);
...
...
@@ -146,7 +146,7 @@ class RequestPrefetch final : public RequestBase {
executor_
(
executor
),
program_
(
program
),
prefetch_ctx_
(
prefetch_ctx
)
{
request_
.
reset
(
new
VariableResponse
(
scope
,
dev_ctx_
));
request_
.
reset
(
new
VariableResponse
(
false
,
scope
,
dev_ctx_
));
int
method_id
=
static_cast
<
int
>
(
detail
::
GrpcMethod
::
kPrefetchVariable
);
service_
->
RequestAsyncUnary
(
method_id
,
&
ctx_
,
request_
.
get
(),
&
responder_
,
cq_
,
cq_
,
this
);
...
...
paddle/fluid/operators/detail/sendrecvop_utils.cc
浏览文件 @
0ffd33d3
...
...
@@ -186,7 +186,7 @@ void DeserializeFromByteBuffer(const ::grpc::ByteBuffer& msg,
const
platform
::
DeviceContext
&
ctx
,
const
framework
::
Scope
*
scope
,
framework
::
Variable
**
var
)
{
operators
::
detail
::
VariableResponse
resp
(
scope
,
&
ctx
);
operators
::
detail
::
VariableResponse
resp
(
false
,
scope
,
&
ctx
);
PADDLE_ENFORCE
(
resp
.
Parse
(
msg
)
==
0
,
"parse bytebuffer to tensor error!"
);
*
var
=
resp
.
GetVar
();
}
...
...
paddle/fluid/operators/detail/serde_test.cc
浏览文件 @
0ffd33d3
...
...
@@ -84,7 +84,7 @@ void RunSerdeTestSelectedRows(platform::Place place) {
// operators::detail::DeserializeFromByteBuffer(msg, ctx, &var2);
framework
::
Scope
scope
;
scope
.
Var
(
"myvar"
);
operators
::
detail
::
VariableResponse
resp
(
&
scope
,
&
ctx
);
operators
::
detail
::
VariableResponse
resp
(
false
,
&
scope
,
&
ctx
);
EXPECT_EQ
(
resp
.
Parse
(
msg
),
0
);
framework
::
Variable
*
var2
=
resp
.
GetVar
();
...
...
@@ -171,7 +171,7 @@ void RunTestLodTensor(platform::Place place, int from_type = 0) {
// deserialize zero-copy
framework
::
Scope
scope
;
scope
.
Var
(
"myvar"
);
operators
::
detail
::
VariableResponse
resp
(
&
scope
,
&
ctx
);
operators
::
detail
::
VariableResponse
resp
(
false
,
&
scope
,
&
ctx
);
if
(
from_type
==
0
)
{
EXPECT_EQ
(
resp
.
Parse
(
msg
),
0
);
}
else
{
...
...
paddle/fluid/operators/detail/variable_response.cc
浏览文件 @
0ffd33d3
...
...
@@ -114,8 +114,7 @@ bool VariableResponse::CopyLodTensorData(
::
google
::
protobuf
::
io
::
CodedInputStream
*
input
,
const
platform
::
DeviceContext
&
ctx
,
const
framework
::
DDim
&
dims
,
int
length
)
{
auto
var
=
scope_
->
FindVar
(
meta_
.
varname
());
auto
*
tensor
=
var
->
GetMutable
<
framework
::
LoDTensor
>
();
auto
*
tensor
=
InitVar
()
->
GetMutable
<
framework
::
LoDTensor
>
();
tensor
->
Resize
(
dims
);
framework
::
LoD
lod
;
...
...
@@ -151,8 +150,7 @@ bool VariableResponse::CopySelectRowsTensorData(
::
google
::
protobuf
::
io
::
CodedInputStream
*
input
,
const
platform
::
DeviceContext
&
ctx
,
const
framework
::
DDim
&
dims
,
int
length
)
{
auto
var
=
scope_
->
FindVar
(
meta_
.
varname
());
auto
*
slr
=
var
->
GetMutable
<
framework
::
SelectedRows
>
();
auto
*
slr
=
InitVar
()
->
GetMutable
<
framework
::
SelectedRows
>
();
slr
->
set_height
(
meta_
.
slr_height
());
auto
*
tensor
=
slr
->
mutable_value
();
tensor
->
Resize
(
dims
);
...
...
@@ -174,8 +172,7 @@ bool VariableResponse::CopySelectRowsTensorData(
bool
VariableResponse
::
CopySelectRowsData
(
::
google
::
protobuf
::
io
::
CodedInputStream
*
input
,
const
platform
::
DeviceContext
&
ctx
,
int
length
)
{
auto
var
=
scope_
->
FindVar
(
meta_
.
varname
());
auto
*
slr
=
var
->
GetMutable
<
framework
::
SelectedRows
>
();
auto
*
slr
=
InitVar
()
->
GetMutable
<
framework
::
SelectedRows
>
();
slr
->
mutable_rows
()
->
resize
(
length
/
framework
::
SizeOfType
(
typeid
(
int64_t
)));
// int64
int64_t
*
rows_data
=
slr
->
mutable_rows
()
->
data
();
...
...
paddle/fluid/operators/detail/variable_response.h
浏览文件 @
0ffd33d3
...
...
@@ -36,11 +36,13 @@ namespace detail {
class
VariableResponse
{
public:
VariableResponse
(
const
framework
::
Scope
*
scope
,
VariableResponse
(
bool
use_local_scope
,
const
framework
::
Scope
*
scope
,
const
platform
::
DeviceContext
*
dev_ctx
)
:
scope_
(
scope
),
dev_ctx_
(
dev_ctx
)
{}
:
use_local_scope_
(
use_local_scope
),
scope_
(
scope
),
dev_ctx_
(
dev_ctx
)
{
local_scope_
=
&
scope
->
NewScope
();
}
virtual
~
VariableResponse
()
{}
virtual
~
VariableResponse
()
{
scope_
->
DeleteScope
(
local_scope_
);
}
// return:
// 0:ok.
...
...
@@ -54,11 +56,23 @@ class VariableResponse {
// other: number of error field.
int
Parse
(
const
::
grpc
::
ByteBuffer
&
byte_buffer
);
const
framework
::
Scope
&
GetLocalScope
()
const
{
return
*
local_scope_
;
}
inline
std
::
string
Varname
()
{
return
meta_
.
varname
();
}
inline
std
::
string
OutVarname
()
{
return
meta_
.
out_varname
();
}
// should call parse first.
framework
::
Variable
*
GetVar
()
{
return
scope_
->
FindVar
(
meta_
.
varname
());
}
framework
::
Variable
*
GetVar
()
{
return
local_scope_
->
FindVar
(
meta_
.
varname
());
}
framework
::
Variable
*
InitVar
()
{
if
(
use_local_scope_
)
{
return
local_scope_
->
Var
(
meta_
.
varname
());
}
else
{
return
scope_
->
FindVar
(
meta_
.
varname
());
}
}
private:
bool
CopySelectRowsTensorData
(
::
google
::
protobuf
::
io
::
CodedInputStream
*
input
,
...
...
@@ -73,7 +87,9 @@ class VariableResponse {
const
framework
::
DDim
&
dims
,
int
length
);
private:
bool
use_local_scope_
=
false
;
const
framework
::
Scope
*
scope_
;
framework
::
Scope
*
local_scope_
=
nullptr
;
const
platform
::
DeviceContext
*
dev_ctx_
;
// only Skeleton
sendrecv
::
VariableMessage
meta_
;
...
...
paddle/fluid/operators/split_byref_op.h
浏览文件 @
0ffd33d3
...
...
@@ -33,7 +33,7 @@ class SplitByrefOpKernel : public framework::OpKernel<T> {
// NOTE: no need to call mutable_data here to allocate memory.
auto
*
out
=
outs
[
i
];
VLOG
(
3
)
<<
"spliting by ref: "
<<
row_offset
<<
" "
<<
out
->
dims
()[
0
];
*
out
=
std
::
move
(
in
->
Slice
(
row_offset
,
row_offset
+
out
->
dims
()[
0
])
);
*
out
=
in
->
Slice
(
row_offset
,
row_offset
+
out
->
dims
()[
0
]
);
row_offset
+=
out
->
dims
()[
0
];
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录