Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
a6d94e8d
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看板
提交
a6d94e8d
编写于
7月 04, 2018
作者:
C
chenweihang
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' of
https://github.com/PaddlePaddle/Paddle
into unsqueeze_op
上级
49b2cf5f
78790ed8
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
125 addition
and
22 deletion
+125
-22
doc/v2/howto/capi/compile_paddle_lib_cn.md
doc/v2/howto/capi/compile_paddle_lib_cn.md
+7
-2
doc/v2/howto/capi/compile_paddle_lib_en.md
doc/v2/howto/capi/compile_paddle_lib_en.md
+7
-2
paddle/fluid/framework/details/data_balance_op_handle.cc
paddle/fluid/framework/details/data_balance_op_handle.cc
+1
-1
paddle/fluid/framework/details/threaded_ssa_graph_executor.cc
...le/fluid/framework/details/threaded_ssa_graph_executor.cc
+18
-3
paddle/fluid/framework/details/threaded_ssa_graph_executor.h
paddle/fluid/framework/details/threaded_ssa_graph_executor.h
+1
-1
paddle/fluid/operators/read_op.cc
paddle/fluid/operators/read_op.cc
+1
-1
paddle/fluid/platform/enforce.h
paddle/fluid/platform/enforce.h
+14
-0
paddle/fluid/platform/enforce_test.cc
paddle/fluid/platform/enforce_test.cc
+11
-0
paddle/fluid/pybind/exception.cc
paddle/fluid/pybind/exception.cc
+3
-0
paddle/scripts/paddle_build.sh
paddle/scripts/paddle_build.sh
+15
-0
python/paddle/fluid/framework.py
python/paddle/fluid/framework.py
+10
-1
python/paddle/fluid/tests/unittests/test_data_balance.py
python/paddle/fluid/tests/unittests/test_data_balance.py
+2
-4
python/paddle/fluid/tests/unittests/test_multi_file_reader.py
...on/paddle/fluid/tests/unittests/test_multi_file_reader.py
+1
-2
python/paddle/fluid/tests/unittests/test_multi_pass_reader.py
...on/paddle/fluid/tests/unittests/test_multi_pass_reader.py
+1
-2
python/paddle/fluid/tests/unittests/test_recordio_reader.py
python/paddle/fluid/tests/unittests/test_recordio_reader.py
+1
-2
python/setup.py.in
python/setup.py.in
+1
-1
tools/diff_api.py
tools/diff_api.py
+31
-0
未找到文件。
doc/v2/howto/capi/compile_paddle_lib_cn.md
浏览文件 @
a6d94e8d
...
...
@@ -18,7 +18,7 @@
</tr>
<tr>
<td>
cpu_avx_openblas
</td>
<td>
暂无
</td>
<td>
<a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_CpuAvxOpenblas/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a>
</td>
</tr>
<tr>
<td>
cpu_noavx_openblas
</td>
...
...
@@ -35,7 +35,12 @@
<tr>
<td>
cuda8.0_cudnn7_avx_mkl
</td>
<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_Cuda8cudnn7cp27cp27mu/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td>
</tr></tbody></table>
</tr>
<tr>
<td>
cuda9.0_cudnn7_avx_mkl
</td>
<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_Cuda90cudnn7avxMkl/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td>
</tr>
</tbody></table>
### 从源码编译
...
...
doc/v2/howto/capi/compile_paddle_lib_en.md
浏览文件 @
a6d94e8d
...
...
@@ -17,7 +17,7 @@
</tr>
<tr>
<td>
cpu_avx_openblas
</td>
<td>
-
</td>
<td>
<a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_CpuAvxOpenblas/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a>
</td>
</tr>
<tr>
<td>
cpu_noavx_openblas
</td>
...
...
@@ -34,7 +34,12 @@
<tr>
<td>
cuda8.0_cudnn7_avx_mkl
</td>
<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_Cuda8cudnn7cp27cp27mu/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td>
</tr></tbody></table>
</tr>
<tr>
<td>
cuda9.0_cudnn7_avx_mkl
</td>
<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_Cuda90cudnn7avxMkl/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td>
</tr>
</tbody></table>
### From source
...
...
paddle/fluid/framework/details/data_balance_op_handle.cc
浏览文件 @
a6d94e8d
...
...
@@ -62,7 +62,7 @@ std::vector<std::array<int, 3>> DataBalanceOpHandle::GetBalancePlan(
}
if
(
total_size
<
device_num
)
{
// No enough data.
PADDLE_THROW
(
"There is no next data."
);
PADDLE_THROW
_EOF
(
);
}
std
::
sort
(
size_device_vec
.
begin
(),
size_device_vec
.
end
(),
[](
const
std
::
array
<
int
,
2
>
&
a
,
const
std
::
array
<
int
,
2
>
&
b
)
{
...
...
paddle/fluid/framework/details/threaded_ssa_graph_executor.cc
浏览文件 @
a6d94e8d
...
...
@@ -98,9 +98,18 @@ FeedFetchList ThreadedSSAGraphExecutor::Run(
if
(
timeout
)
{
std
::
lock_guard
<
std
::
mutex
>
l
(
exception_mu_
);
if
(
exception_
)
{
auto
exp
=
*
exception_
;
exception_
.
reset
();
throw
exp
;
std
::
exception
*
exp
=
exception_
.
get
();
if
(
dynamic_cast
<
platform
::
EOFException
*>
(
exp
))
{
auto
e
=
*
static_cast
<
platform
::
EOFException
*>
(
exp
);
exception_
.
reset
();
throw
e
;
}
else
if
(
dynamic_cast
<
platform
::
EnforceNotMet
*>
(
exp
))
{
auto
e
=
*
static_cast
<
platform
::
EnforceNotMet
*>
(
exp
);
exception_
.
reset
();
throw
e
;
}
else
{
LOG
(
FATAL
)
<<
"Unknown exception."
;
}
}
else
{
continue
;
}
...
...
@@ -199,6 +208,12 @@ void ThreadedSSAGraphExecutor::RunOp(
running_ops_
--
;
ready_var_q
->
Extend
(
op
->
Outputs
());
VLOG
(
10
)
<<
op
<<
" "
<<
op
->
Name
()
<<
"Signal posted"
;
}
catch
(
platform
::
EOFException
ex
)
{
std
::
lock_guard
<
std
::
mutex
>
l
(
exception_mu_
);
// EOFException will not cover up existing EnforceNotMet.
if
(
exception_
.
get
()
==
nullptr
)
{
exception_
.
reset
(
new
platform
::
EOFException
(
ex
));
}
}
catch
(
platform
::
EnforceNotMet
ex
)
{
std
::
lock_guard
<
std
::
mutex
>
l
(
exception_mu_
);
exception_
.
reset
(
new
platform
::
EnforceNotMet
(
ex
));
...
...
paddle/fluid/framework/details/threaded_ssa_graph_executor.h
浏览文件 @
a6d94e8d
...
...
@@ -57,7 +57,7 @@ class ThreadedSSAGraphExecutor : public SSAGraphExecutor {
std
::
vector
<
platform
::
Place
>
places_
;
platform
::
DeviceContextPool
fetch_ctxs_
;
std
::
mutex
exception_mu_
;
std
::
unique_ptr
<
platform
::
EnforceNotMet
>
exception_
;
std
::
unique_ptr
<
std
::
exception
>
exception_
;
std
::
atomic
<
int
>
running_ops_
;
void
InsertPendingOp
(
std
::
unordered_map
<
OpHandleBase
*
,
size_t
>
*
pending_ops
,
...
...
paddle/fluid/operators/read_op.cc
浏览文件 @
a6d94e8d
...
...
@@ -68,7 +68,7 @@ class ReadOp : public framework::OperatorBase {
reader
->
ReadNext
(
&
ins
);
if
(
ins
.
empty
())
{
if
(
Attr
<
bool
>
(
"throw_eof_exp"
))
{
PADDLE_THROW
(
"There is no next data."
);
PADDLE_THROW
_EOF
(
);
}
else
{
ins
.
resize
(
out_arg_names
.
size
());
for
(
auto
&
tensor
:
ins
)
{
...
...
paddle/fluid/platform/enforce.h
浏览文件 @
a6d94e8d
...
...
@@ -102,6 +102,15 @@ struct EnforceNotMet : public std::exception {
const
char
*
what
()
const
noexcept
{
return
err_str_
.
c_str
();
}
};
struct
EOFException
:
public
std
::
exception
{
std
::
string
err_str_
;
EOFException
(
const
char
*
err_msg
,
const
char
*
f
,
int
l
)
{
err_str_
=
string
::
Sprintf
(
"%s at [%s:%d]"
,
err_msg
,
f
,
l
);
}
const
char
*
what
()
const
noexcept
{
return
err_str_
.
c_str
();
}
};
// Because most enforce conditions would evaluate to true, we can use
// __builtin_expect to instruct the C++ compiler to generate code that
// always forces branch prediction of true.
...
...
@@ -242,6 +251,11 @@ inline void throw_on_error(T e) {
#define PADDLE_ENFORCE(...) ::paddle::platform::throw_on_error(__VA_ARGS__);
#endif
#define PADDLE_THROW_EOF() \
do { \
throw ::paddle::platform::EOFException("There is no next data.", __FILE__, \
__LINE__); \
} while (false)
/*
* Some enforce helpers here, usage:
* int a = 1;
...
...
paddle/fluid/platform/enforce_test.cc
浏览文件 @
a6d94e8d
...
...
@@ -210,3 +210,14 @@ TEST(ENFORCE_USER_DEFINED_CLASS, NE) {
Dims
a
{{
1
,
2
,
3
,
4
}},
b
{{
5
,
6
,
7
,
8
}};
ASSERT_THROW
(
PADDLE_ENFORCE_EQ
(
a
,
b
),
paddle
::
platform
::
EnforceNotMet
);
}
TEST
(
EOF_EXCEPTION
,
THROW_EOF
)
{
bool
caught_eof
=
false
;
try
{
PADDLE_THROW_EOF
();
}
catch
(
paddle
::
platform
::
EOFException
error
)
{
caught_eof
=
true
;
EXPECT_TRUE
(
HasPrefix
(
StringPiece
(
error
.
what
()),
"There is no next data."
));
}
EXPECT_TRUE
(
caught_eof
);
}
paddle/fluid/pybind/exception.cc
浏览文件 @
a6d94e8d
...
...
@@ -18,10 +18,13 @@ namespace paddle {
namespace
pybind
{
void
BindException
(
pybind11
::
module
*
m
)
{
static
pybind11
::
exception
<
platform
::
EOFException
>
eof
(
*
m
,
"EOFException"
);
static
pybind11
::
exception
<
platform
::
EnforceNotMet
>
exc
(
*
m
,
"EnforceNotMet"
);
pybind11
::
register_exception_translator
([](
std
::
exception_ptr
p
)
{
try
{
if
(
p
)
std
::
rethrow_exception
(
p
);
}
catch
(
const
platform
::
EOFException
&
e
)
{
eof
(
e
.
what
());
}
catch
(
const
platform
::
EnforceNotMet
&
e
)
{
exc
(
e
.
what
());
}
...
...
paddle/scripts/paddle_build.sh
浏览文件 @
a6d94e8d
...
...
@@ -312,6 +312,20 @@ EOF
fi
}
function
assert_api_not_changed
()
{
mkdir
-p
${
PADDLE_ROOT
}
/build/.check_api_workspace
cd
${
PADDLE_ROOT
}
/build/.check_api_workspace
virtualenv .env
source
.env/bin/activate
pip
install
${
PADDLE_ROOT
}
/build/python/dist/
*
whl
curl
${
PADDLE_API_SPEC_URL
:-
https
://raw.githubusercontent.com/reyoung/FluidAPISpec/master/API.spec
}
\
>
origin.spec
python
${
PADDLE_ROOT
}
/tools/print_signatures.py paddle.fluid
>
new.spec
python
${
PADDLE_ROOT
}
/tools/diff_api.py origin.spec new.spec
deactivate
}
function
single_test
()
{
TEST_NAME
=
$1
if
[
-z
"
${
TEST_NAME
}
"
]
;
then
...
...
@@ -550,6 +564,7 @@ function main() {
cicheck
)
cmake_gen
${
PYTHON_ABI
:-
""
}
build
assert_api_not_changed
run_test
gen_capi_package
gen_fluid_inference_lib
...
...
python/paddle/fluid/framework.py
浏览文件 @
a6d94e8d
...
...
@@ -19,7 +19,16 @@ import re
import
numpy
as
np
import
proto.framework_pb2
as
framework_pb2
from
.
import
core
try
:
from
.
import
core
except
ImportError
,
e
:
raise
ImportError
(
"""NOTE: You may need to run
\"
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
\"
if you encounters
\"
libmkldnn.so not found
\"
errors. If you have python
installed in other directory, replace
\"
/usr/local/lib
\"
with your own
directory. The original error is:
\n
"""
+
e
.
message
)
except
Exception
,
e
:
raise
e
import
unique_name
__all__
=
[
...
...
python/paddle/fluid/tests/unittests/test_data_balance.py
浏览文件 @
a6d94e8d
...
...
@@ -118,8 +118,7 @@ class TestDataBalance(unittest.TestCase):
try
:
image_val
,
label_val
=
parallel_exe
.
run
(
fetch_list
,
return_numpy
=
True
)
except
fluid
.
core
.
EnforceNotMet
as
ex
:
self
.
assertIn
(
"There is no next data."
,
ex
.
message
)
except
fluid
.
core
.
EOFException
:
break
ins_num
=
image_val
.
shape
[
0
]
broadcasted_label
=
np
.
ones
(
...
...
@@ -162,8 +161,7 @@ class TestDataBalance(unittest.TestCase):
try
:
ins_tensor
,
label_tensor
=
parallel_exe
.
run
(
fetch_list
,
return_numpy
=
False
)
except
fluid
.
core
.
EnforceNotMet
as
ex
:
self
.
assertIn
(
"There is no next data."
,
ex
.
message
)
except
fluid
.
core
.
EOFException
:
break
ins_val
=
np
.
array
(
ins_tensor
)
...
...
python/paddle/fluid/tests/unittests/test_multi_file_reader.py
浏览文件 @
a6d94e8d
...
...
@@ -64,8 +64,7 @@ class TestMultipleReader(unittest.TestCase):
while
True
:
try
:
img_val
,
=
exe
.
run
(
fetch_list
=
[
img
])
except
fluid
.
core
.
EnforceNotMet
as
ex
:
self
.
assertIn
(
"There is no next data."
,
ex
.
message
)
except
fluid
.
core
.
EOFException
:
break
batch_count
+=
1
self
.
assertLessEqual
(
img_val
.
shape
[
0
],
self
.
batch_size
)
...
...
python/paddle/fluid/tests/unittests/test_multi_pass_reader.py
浏览文件 @
a6d94e8d
...
...
@@ -59,8 +59,7 @@ class TestMultipleReader(unittest.TestCase):
while
True
:
try
:
img_val
,
=
exe
.
run
(
fetch_list
=
[
img
])
except
fluid
.
core
.
EnforceNotMet
as
ex
:
self
.
assertIn
(
"There is no next data."
,
ex
.
message
)
except
fluid
.
core
.
EOFException
:
break
batch_count
+=
1
self
.
assertLessEqual
(
img_val
.
shape
[
0
],
self
.
batch_size
)
...
...
python/paddle/fluid/tests/unittests/test_recordio_reader.py
浏览文件 @
a6d94e8d
...
...
@@ -68,8 +68,7 @@ class TestRecordIO(unittest.TestCase):
while
True
:
try
:
tmp
,
=
exe
.
run
(
fetch_list
=
[
avg_loss
])
except
fluid
.
core
.
EnforceNotMet
as
ex
:
self
.
assertIn
(
"There is no next data."
,
ex
.
message
)
except
fluid
.
core
.
EOFException
:
break
avg_loss_np
.
append
(
tmp
)
...
...
python/setup.py.in
浏览文件 @
a6d94e8d
...
...
@@ -5,7 +5,7 @@ class BinaryDistribution(Distribution):
return True
MAJOR = 0
MINOR = 1
1
MINOR = 1
4
PATCH = 0
RC = 0
ISTAGED = False
...
...
tools/diff_api.py
0 → 100644
浏览文件 @
a6d94e8d
#!/usr/bin/env python
from
__future__
import
print_function
import
difflib
import
sys
with
open
(
sys
.
argv
[
1
],
'r'
)
as
f
:
origin
=
f
.
read
()
origin
=
origin
.
splitlines
()
with
open
(
sys
.
argv
[
2
],
'r'
)
as
f
:
new
=
f
.
read
()
new
=
new
.
splitlines
()
differ
=
difflib
.
Differ
()
result
=
differ
.
compare
(
origin
,
new
)
error
=
False
print
(
'API Difference is: '
)
for
each_diff
in
result
:
if
each_diff
[
0
]
in
[
'-'
,
'?'
]:
# delete or change API is not allowed
error
=
True
elif
each_diff
[
0
]
==
'+'
:
# only new layers is allowed.
if
not
each_diff
.
startswith
(
'+ paddle.fluid.layers.'
):
error
=
True
if
each_diff
[
0
]
!=
' '
:
print
(
each_diff
)
if
error
:
sys
.
exit
(
1
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录