Skip to content

Commit 0b1c7d8

Browse files
authored
Add brpc serialization support. (#11430)
1 parent 37c2e24 commit 0b1c7d8

28 files changed

+1422
-153
lines changed

benchmark/fluid/fluid_benchmark.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,11 @@ def dist_transpile(trainer_id, args, train_prog, startup_prog):
8181
# the role, should be either PSERVER or TRAINER
8282
training_role = os.getenv("PADDLE_TRAINING_ROLE")
8383

84-
config = distribute_transpiler.DistributeTranspilerConfig()
84+
config = fluid.DistributeTranspilerConfig()
8585
config.slice_var_up = not args.no_split_var
86+
config.min_block_size = 1048576
8687
t = distribute_transpiler.DistributeTranspiler(config=config)
88+
8789
t.transpile(
8890
trainer_id,
8991
# NOTE: *MUST* use train_prog, for we are using with guard to

cmake/external/brpc.cmake

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,16 @@
1414

1515
INCLUDE(ExternalProject)
1616

17-
find_library(SSL_LIBRARY NAMES ssl)
17+
find_package(OpenSSL REQUIRED)
18+
19+
message(STATUS "ssl:" ${OPENSSL_SSL_LIBRARY})
20+
message(STATUS "crypto:" ${OPENSSL_CRYPTO_LIBRARY})
21+
1822
ADD_LIBRARY(ssl SHARED IMPORTED GLOBAL)
19-
SET_PROPERTY(TARGET ssl PROPERTY IMPORTED_LOCATION ${SSL_LIBRARY})
23+
SET_PROPERTY(TARGET ssl PROPERTY IMPORTED_LOCATION ${OPENSSL_SSL_LIBRARY})
2024

21-
find_library(CRYPTO_LIBRARY NAMES crypto)
2225
ADD_LIBRARY(crypto SHARED IMPORTED GLOBAL)
23-
SET_PROPERTY(TARGET crypto PROPERTY IMPORTED_LOCATION ${CRYPTO_LIBRARY})
24-
26+
SET_PROPERTY(TARGET crypto PROPERTY IMPORTED_LOCATION ${OPENSSL_CRYPTO_LIBRARY})
2527

2628
SET(BRPC_SOURCES_DIR ${THIRD_PARTY_PATH}/brpc)
2729
SET(BRPC_INSTALL_DIR ${THIRD_PARTY_PATH}/install/brpc)
@@ -31,14 +33,15 @@ SET(BRPC_LIBRARIES "${BRPC_INSTALL_DIR}/lib/libbrpc.a" CACHE FILEPATH "brpc libr
3133
INCLUDE_DIRECTORIES(${BRPC_INCLUDE_DIR})
3234

3335
# Reference https://stackoverflow.com/questions/45414507/pass-a-list-of-prefix-paths-to-externalproject-add-in-cmake-args
34-
set(prefix_path "${THIRD_PARTY_PATH}/install/gflags|${THIRD_PARTY_PATH}/install/leveldb|${THIRD_PARTY_PATH}/install/snappy|${THIRD_PARTY_PATH}/install/gtest|${THIRD_PARTY_PATH}/install/protobuf|${THIRD_PARTY_PATH}/install/zlib")
36+
set(prefix_path "${THIRD_PARTY_PATH}/install/gflags|${THIRD_PARTY_PATH}/install/leveldb|${THIRD_PARTY_PATH}/install/snappy|${THIRD_PARTY_PATH}/install/gtest|${THIRD_PARTY_PATH}/install/protobuf|${THIRD_PARTY_PATH}/install/zlib|${THIRD_PARTY_PATH}/install/glog")
3537

3638
# If minimal .a is need, you can set WITH_DEBUG_SYMBOLS=OFF
3739
ExternalProject_Add(
3840
extern_brpc
3941
${EXTERNAL_PROJECT_LOG_ARGS}
42+
# TODO(gongwb): change to de newst repo when they changed.
4043
GIT_REPOSITORY "https://github.com/gongweibao/brpc"
41-
GIT_TAG "7dc04defad1fd4173aae170c3fcbde131b65155a"
44+
GIT_TAG "e9b67ec1b7458f2af5fae76451afe1e27e01b4b4"
4245
PREFIX ${BRPC_SOURCES_DIR}
4346
UPDATE_COMMAND ""
4447
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
@@ -50,7 +53,7 @@ ExternalProject_Add(
5053
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
5154
-DCMAKE_BUILD_TYPE=${THIRD_PARTY_BUILD_TYPE}
5255
-DCMAKE_PREFIX_PATH=${prefix_path}
53-
-DBRPC_WITH_GLOG=ON
56+
-DWITH_GLOG=ON
5457
-DIOBUF_WITH_HUGE_BLOCK=ON
5558
-DBRPC_WITH_RDMA=${WITH_BRPC_RDMA}
5659
${EXTERNAL_OPTIONAL_ARGS}
@@ -65,5 +68,6 @@ ADD_LIBRARY(brpc STATIC IMPORTED GLOBAL)
6568
SET_PROPERTY(TARGET brpc PROPERTY IMPORTED_LOCATION ${BRPC_LIBRARIES})
6669
ADD_DEPENDENCIES(brpc extern_brpc)
6770

71+
add_definitions(-DBRPC_WITH_GLOG)
6872

6973
LIST(APPEND external_project_dependencies brpc)

cmake/external/gtest.cmake

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
IF(WITH_TESTING)
16-
ENABLE_TESTING()
15+
#FIXME:(gongwb) Move brpc's gtest dependency.
16+
IF(WITH_TESTING OR (WITH_DISTRIBUTE AND NOT WITH_GRPC))
17+
IF(WITH_TESTING)
18+
ENABLE_TESTING()
19+
ENDIF(WITH_TESTING)
20+
1721
INCLUDE(ExternalProject)
1822

1923
SET(GTEST_SOURCES_DIR ${THIRD_PARTY_PATH}/gtest)
@@ -76,4 +80,4 @@ IF(WITH_TESTING)
7680
ADD_DEPENDENCIES(gtest_main extern_gtest)
7781

7882
LIST(APPEND external_project_dependencies gtest gtest_main)
79-
ENDIF(WITH_TESTING)
83+
ENDIF(WITH_TESTING OR (WITH_DISTRIBUTE AND NOT WITH_GRPC))

cmake/external/leveldb.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ ExternalProject_Add(
2424
extern_leveldb
2525
${EXTERNAL_PROJECT_LOG_ARGS}
2626
PREFIX ${LEVELDB_SOURCES_DIR}
27-
URL "https://github.com/google/leveldb/archive/v1.18.tar.gz"
28-
URL_MD5 "73770de34a2a5ab34498d2e05b2b7fa0"
27+
GIT_REPOSITORY "https://github.com/google/leveldb"
28+
GIT_TAG v1.18
2929
CONFIGURE_COMMAND ""
3030
BUILD_COMMAND CXXFLAGS=-fPIC make -j ${NUM_OF_PROCESSOR} libleveldb.a
3131
INSTALL_COMMAND mkdir -p ${LEVELDB_INSTALL_DIR}/lib/

paddle/fluid/framework/CMakeLists.txt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,12 @@ cc_library(variable_helper SRCS variable_helper.cc DEPS lod_tensor)
169169
cc_library(naive_executor SRCS naive_executor.cc DEPS op_registry device_context scope framework_proto glog lod_rank_table feed_fetch_method graph_to_program_pass variable_helper)
170170

171171
if(WITH_DISTRIBUTE)
172-
cc_library(executor SRCS executor.cc DEPS op_registry device_context scope framework_proto glog lod_rank_table feed_fetch_method sendrecvop_grpc cares grpc++_unsecure grpc_unsecure gpr graph_to_program_pass variable_helper)
173-
set(DISTRIBUTE_COMPILE_FLAGS "-Wno-non-virtual-dtor -Wno-error=non-virtual-dtor -Wno-error=delete-non-virtual-dtor")
174-
set_source_files_properties(executor.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS})
172+
cc_library(executor SRCS executor.cc DEPS op_registry device_context scope framework_proto glog
173+
lod_rank_table feed_fetch_method sendrecvop_rpc ${GLOB_DISTRIBUTE_DEPS} graph_to_program_pass variable_helper)
174+
175+
set(DISTRIBUTE_COMPILE_FLAGS "-Wno-non-virtual-dtor -Wno-error=non-virtual-dtor -Wno-error=delete-non-virtual-dtor")
176+
set_source_files_properties(executor.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS})
177+
175178
else()
176179
if(WITH_NGRAPH)
177180
if(NOT WIN32)

paddle/fluid/framework/details/CMakeLists.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,19 @@ cc_library(multi_devices_graph_check_pass SRCS multi_devices_graph_check_pass.cc
1212

1313
cc_library(variable_visitor SRCS variable_visitor.cc DEPS lod_tensor selected_rows)
1414

15+
if(WITH_DISTRIBUTE)
16+
if(NOT WITH_GRPC)
17+
set(DISTRIBUTE_COMPILE_FLAGS "-Wno-non-virtual-dtor -Wno-error=non-virtual-dtor -Wno-error=delete-non-virtual-dtor")
18+
set_source_files_properties(reduce_op_handle.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS})
19+
endif()
20+
endif()
21+
1522
if(WITH_GPU)
1623
nv_library(all_reduce_op_handle SRCS all_reduce_op_handle.cc DEPS op_handle_base scope lod_tensor ddim memory
1724
dynload_cuda variable_visitor)
1825
if(WITH_DISTRIBUTE)
1926
nv_library(reduce_op_handle SRCS reduce_op_handle.cc DEPS op_handle_base variable_visitor scope
20-
ddim dynload_cuda selected_rows_functor sendrecvop_grpc)
27+
ddim dynload_cuda selected_rows_functor sendrecvop_rpc)
2128
else()
2229
nv_library(reduce_op_handle SRCS reduce_op_handle.cc DEPS op_handle_base variable_visitor scope
2330
ddim dynload_cuda selected_rows_functor)
@@ -30,7 +37,7 @@ else()
3037
variable_visitor)
3138
if(WITH_DISTRIBUTE)
3239
cc_library(reduce_op_handle SRCS reduce_op_handle.cc DEPS op_handle_base variable_visitor scope
33-
ddim selected_rows_functor sendrecvop_grpc)
40+
ddim selected_rows_functor sendrecvop_rpc)
3441
else()
3542
cc_library(reduce_op_handle SRCS reduce_op_handle.cc DEPS op_handle_base variable_visitor scope
3643
ddim selected_rows_functor)

paddle/fluid/framework/executor.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,9 @@ void Executor::Close() {
157157
#ifdef PADDLE_WITH_DISTRIBUTE
158158
// TODO(typhoonzero): complete message will need to use real trainer_id,
159159
// except 0.
160-
::paddle::operators::distributed::RPCClient::GetInstance<
161-
::paddle::operators::distributed::GRPCClient>(0)
162-
->SendComplete();
160+
auto client =
161+
paddle::operators::distributed::RPCClient::GetInstance<RPCCLIENT_T>(0);
162+
client->SendComplete();
163163
#endif
164164
}
165165

paddle/fluid/operators/distributed/CMakeLists.txt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,44 +12,51 @@ configure_file(send_recv.proto.in ${CMAKE_CURRENT_SOURCE_DIR}/send_recv.proto @O
1212
set(DISTRIBUTE_COMPILE_FLAGS "-Wno-non-virtual-dtor -Wno-error=non-virtual-dtor -Wno-error=delete-non-virtual-dtor")
1313

1414
if(WITH_GRPC)
15-
grpc_library(sendrecvop_grpc SRCS grpc_bytebuffer_stream.cc sendrecvop_utils.cc grpc_client.cc
15+
grpc_library(sendrecvop_rpc SRCS grpc_bytebuffer_stream.cc sendrecvop_utils.cc grpc_client.cc
1616
request_handler_impl.cc rpc_client.cc rpc_server.cc grpc_server.cc variable_response.cc grpc_variable_response.cc grpc_serde.cc collective_client.cc collective_server.cc
1717
PROTO send_recv.proto
1818
DEPS lod_tensor selected_rows_functor memory)
1919

2020
set_source_files_properties(grpc_serde_test.cc rpc_server_test.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS})
2121

2222
cc_test(grpc_serde_test SRCS grpc_serde_test.cc
23-
DEPS grpc++_unsecure grpc_unsecure gpr cares zlib protobuf sendrecvop_grpc scope profiler math_function SERIAL)
23+
DEPS grpc++_unsecure grpc_unsecure gpr cares zlib protobuf sendrecvop_rpc scope profiler math_function SERIAL)
2424

2525
cc_test(rpc_server_test SRCS rpc_server_test.cc
26-
DEPS sendrecvop_grpc grpc++_unsecure grpc_unsecure gpr cares zlib protobuf executor proto_desc lookup_sparse_table_op SERIAL)
26+
DEPS sendrecvop_rpc grpc++_unsecure grpc_unsecure gpr cares zlib protobuf executor proto_desc lookup_sparse_table_op SERIAL)
2727

2828
cc_test(varhandle_test SRCS varhandle_test.cc DEPS profiler)
2929

3030
if(WITH_GPU)
3131
cc_test(collective_server_test SRCS collective_server_test.cc
32-
DEPS sendrecvop_grpc grpc++_unsecure grpc_unsecure gpr cares zlib protobuf executor
32+
DEPS sendrecvop_rpc grpc++_unsecure grpc_unsecure gpr cares zlib protobuf executor
3333
selected_rows_functor scope math_function SERIAL)
3434
endif()
3535

36-
cc_library(parameter_prefetch SRCS parameter_prefetch.cc DEPS sendrecvop_grpc memory)
36+
cc_library(parameter_prefetch SRCS parameter_prefetch.cc DEPS sendrecvop_rpc memory)
3737
else()
38-
set_source_files_properties(brpc_server.cc brpc_client.cc rpc_server_test.cc brpc_serde_test.cc
39-
brpc_variable_response.cc brpc_sendrecvop_utils.cc brpc_rdma_pool.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS})
38+
set_source_files_properties(brpc_server.cc parameter_prefetch.cc brpc_client.cc rpc_server_test.cc brpc_serde_test.cc
39+
brpc_variable_response.cc brpc_sendrecvop_utils.cc brpc_rdma_pool.cc collective_server.cc collective_server_test.cc
40+
collective_client.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS})
4041

41-
brpc_library(sendrecvop_brpc SRCS brpc_client.cc brpc_server.cc rpc_server.cc rpc_client.cc request_handler_impl.cc brpc_sendrecvop_utils.cc
42-
brpc_variable_response.cc variable_response.cc sendrecvop_utils.cc brpc_rdma_pool.cc
42+
brpc_library(sendrecvop_rpc SRCS brpc_client.cc brpc_server.cc rpc_server.cc rpc_client.cc request_handler_impl.cc brpc_sendrecvop_utils.cc
43+
brpc_variable_response.cc variable_response.cc sendrecvop_utils.cc brpc_rdma_pool.cc collective_client.cc collective_server.cc
4344
PROTO send_recv.proto
4445
DEPS lod_tensor selected_rows memory)
4546

46-
cc_library(parameter_prefetch SRCS parameter_prefetch.cc DEPS sendrecvop_brpc memory)
47+
cc_library(parameter_prefetch SRCS parameter_prefetch.cc DEPS sendrecvop_rpc memory)
4748

48-
set(brpc_test_depends sendrecvop_brpc brpc ssl crypto protobuf leveldb gflags glog executor proto_desc lookup_table_op snappystream snappy)
49+
set(brpc_test_depends sendrecvop_rpc brpc ssl crypto protobuf leveldb gflags glog executor
50+
proto_desc lookup_sparse_table_op snappystream snappy zlib)
4951

50-
cc_test(brpc_server_test SRCS rpc_server_test.cc
52+
cc_test(rpc_server_test SRCS rpc_server_test.cc
5153
DEPS ${brpc_test_depends} SERIAL)
5254

5355
cc_test(brpc_serde_test SRCS brpc_serde_test.cc
5456
DEPS ${brpc_test_depends} SERIAL)
57+
58+
if(WITH_GPU)
59+
cc_test(collective_server_test SRCS collective_server_test.cc
60+
DEPS ${brpc_test_depends} selected_rows_functor scope math_function SERIAL)
61+
endif()
5562
endif()

0 commit comments

Comments
 (0)