xpu.cmake 7.43 KB
Newer Older
“yuguo”'s avatar
2.5  
“yuguo” committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

yuguo960516yuguo's avatar
yuguo960516yuguo committed
15
16
17
18
19
20
21
22
if(NOT WITH_XPU)
  return()
endif()

include(ExternalProject)
set(XPU_PROJECT "extern_xpu")
set(XPU_API_LIB_NAME "libxpuapi.so")
set(XPU_RT_LIB_NAME "libxpurt.so")
“yuguo”'s avatar
2.5  
“yuguo” committed
23
24
25
26
27
28
29
30
31
32
33
set(XPU_XFT_LIB_NAME "libxft.so")
set(XPU_XPTI_LIB_NAME "libxpti.so")

if(NOT DEFINED XPU_BASE_DATE)
  set(XPU_BASE_DATE "20230810")
endif()
set(XPU_XCCL_BASE_VERSION "1.0.53.6")
if(NOT DEFINED XPU_XFT_BASE_VERSION)
  set(XPU_XFT_BASE_VERSION "20230602")
endif()
set(XPU_XPTI_BASE_VERSION "0.0.1")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
34
35
36
37

if(NOT DEFINED XPU_BASE_URL)
  set(XPU_BASE_URL_WITHOUT_DATE
      "https://baidu-kunlun-product.su.bcebos.com/KL-SDK/klsdk-dev")
“yuguo”'s avatar
2.5  
“yuguo” committed
38
  set(XPU_BASE_URL "${XPU_BASE_URL_WITHOUT_DATE}/${XPU_BASE_DATE}")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
39
40
41
42
else()
  set(XPU_BASE_URL "${XPU_BASE_URL}")
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
43
44
45
46
47
48
49
50
set(XPU_XCCL_BASE_URL
    "https://klx-sdk-release-public.su.bcebos.com/xccl/release/${XPU_XCCL_BASE_VERSION}"
)

if(NOT XPU_XFT_BASE_URL)
  set(XPU_XFT_BASE_URL
      "https://klx-sdk-release-public.su.bcebos.com/xft/dev/${XPU_XFT_BASE_VERSION}"
  )
yuguo960516yuguo's avatar
yuguo960516yuguo committed
51
52
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
53
54
55
56
57
58
59
60
61
set(XPU_XPTI_BASE_URL
    "https://klx-sdk-release-public.su.bcebos.com/xpti/dev/${XPU_XPTI_BASE_VERSION}"
)

if(WITH_XCCL_RDMA)
  set(XPU_XCCL_PREFIX "xccl_rdma")
else()
  set(XPU_XCCL_PREFIX "xccl_socket")
endif()
yuguo960516yuguo's avatar
yuguo960516yuguo committed
62
63
64
65

if(WITH_AARCH64)
  set(XPU_XRE_DIR_NAME "xre-kylin_aarch64")
  set(XPU_XDNN_DIR_NAME "xdnn-kylin_aarch64")
“yuguo”'s avatar
2.5  
“yuguo” committed
66
67
  set(XPU_XCCL_DIR_NAME "${XPU_XCCL_PREFIX}-kylin_aarch64")
  set(XPU_XFT_DIR_NAME "") # TODO: xft has no kylin output at now.
yuguo960516yuguo's avatar
yuguo960516yuguo committed
68
69
70
elseif(WITH_SUNWAY)
  set(XPU_XRE_DIR_NAME "xre-deepin_sw6_64")
  set(XPU_XDNN_DIR_NAME "xdnn-deepin_sw6_64")
“yuguo”'s avatar
2.5  
“yuguo” committed
71
72
  set(XPU_XCCL_DIR_NAME "${XPU_XCCL_PREFIX}-deepin_sw6_64")
  set(XPU_XFT_DIR_NAME "") # TODO: xft has no deepin output at now.
yuguo960516yuguo's avatar
yuguo960516yuguo committed
73
74
75
elseif(WITH_BDCENTOS)
  set(XPU_XRE_DIR_NAME "xre-bdcentos_x86_64")
  set(XPU_XDNN_DIR_NAME "xdnn-bdcentos_x86_64")
“yuguo”'s avatar
2.5  
“yuguo” committed
76
77
  set(XPU_XCCL_DIR_NAME "${XPU_XCCL_PREFIX}-bdcentos_x86_64")
  set(XPU_XFT_DIR_NAME "xft_bdcentos6u3_x86_64_gcc82")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
78
79
80
elseif(WITH_UBUNTU)
  set(XPU_XRE_DIR_NAME "xre-ubuntu_x86_64")
  set(XPU_XDNN_DIR_NAME "xdnn-ubuntu_x86_64")
“yuguo”'s avatar
2.5  
“yuguo” committed
81
82
  set(XPU_XCCL_DIR_NAME "${XPU_XCCL_PREFIX}-ubuntu_x86_64")
  set(XPU_XFT_DIR_NAME "xft_ubuntu1604_x86_64")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
83
84
elseif(WITH_CENTOS)
  set(XPU_XRE_DIR_NAME "xre-centos7_x86_64")
“yuguo”'s avatar
2.5  
“yuguo” committed
85
86
87
  set(XPU_XDNN_DIR_NAME "xdnn-centos7_x86_64")
  set(XPU_XCCL_DIR_NAME "${XPU_XCCL_PREFIX}-bdcentos_x86_64")
  set(XPU_XFT_DIR_NAME "xft_bdcentos6u3_x86_64_gcc82")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
88
89
90
else()
  set(XPU_XRE_DIR_NAME "xre-ubuntu_x86_64")
  set(XPU_XDNN_DIR_NAME "xdnn-ubuntu_x86_64")
“yuguo”'s avatar
2.5  
“yuguo” committed
91
92
  set(XPU_XCCL_DIR_NAME "${XPU_XCCL_PREFIX}-ubuntu_x86_64")
  set(XPU_XFT_DIR_NAME "xft_ubuntu1604_x86_64")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
93
endif()
“yuguo”'s avatar
2.5  
“yuguo” committed
94
set(XPU_XPTI_DIR_NAME "xpti")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
95
96
97
98

set(XPU_XRE_URL
    "${XPU_BASE_URL}/${XPU_XRE_DIR_NAME}.tar.gz"
    CACHE STRING "" FORCE)
“yuguo”'s avatar
2.5  
“yuguo” committed
99
100
101
set(XPU_XDNN_URL
    "${XPU_BASE_URL}/${XPU_XDNN_DIR_NAME}.tar.gz"
    CACHE STRING "" FORCE)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
102
103
104
set(XPU_XCCL_URL
    "${XPU_XCCL_BASE_URL}/${XPU_XCCL_DIR_NAME}.tar.gz"
    CACHE STRING "" FORCE)
“yuguo”'s avatar
2.5  
“yuguo” committed
105
106
107
108
109
110
set(XPU_XFT_URL "${XPU_XFT_BASE_URL}/${XPU_XFT_DIR_NAME}.tar.gz")
set(XPU_XPTI_URL
    "${XPU_XPTI_BASE_URL}/${XPU_XPTI_DIR_NAME}.tar.gz"
    CACHE STRING "" FORCE)
set(XPU_XFT_GET_DEPENCE_URL
    "https://baidu-kunlun-public.su.bcebos.com/paddle_depence/get_xft_dependence.sh"
yuguo960516yuguo's avatar
yuguo960516yuguo committed
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
    CACHE STRING "" FORCE)

set(SNAPPY_PREFIX_DIR "${THIRD_PARTY_PATH}/xpu")
set(XPU_DOWNLOAD_DIR "${SNAPPY_PREFIX_DIR}/src/${XPU_PROJECT}")
set(XPU_INSTALL_DIR "${THIRD_PARTY_PATH}/install/xpu")
set(XPU_INC_DIR "${THIRD_PARTY_PATH}/install/xpu/include")
set(XPU_LIB_DIR "${THIRD_PARTY_PATH}/install/xpu/lib")

set(XPU_API_LIB "${XPU_LIB_DIR}/${XPU_API_LIB_NAME}")
set(XPU_RT_LIB "${XPU_LIB_DIR}/${XPU_RT_LIB_NAME}")

set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}" "${XPU_INSTALL_DIR}/lib")

file(
  WRITE ${XPU_DOWNLOAD_DIR}/CMakeLists.txt
  "PROJECT(XPU)\n" "cmake_minimum_required(VERSION 3.0)\n"
  "install(DIRECTORY xpu/include xpu/lib \n"
  "        DESTINATION ${XPU_INSTALL_DIR})\n")

“yuguo”'s avatar
2.5  
“yuguo” committed
130
131
132
133
134
135
136
137
138
139
if(WITH_XPU_BKCL)
  message(STATUS "Compile with XPU BKCL!")
  add_definitions(-DPADDLE_WITH_XPU_BKCL)

  set(XPU_BKCL_LIB_NAME "libbkcl.so")
  set(XPU_BKCL_LIB "${XPU_LIB_DIR}/${XPU_BKCL_LIB_NAME}")
  set(XPU_BKCL_INC_DIR "${THIRD_PARTY_PATH}/install/xpu/include")
  include_directories(${XPU_BKCL_INC_DIR})
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
140
141
142
143
144
145
ExternalProject_Add(
  ${XPU_PROJECT}
  ${EXTERNAL_PROJECT_LOG_ARGS}
  PREFIX ${SNAPPY_PREFIX_DIR}
  DOWNLOAD_DIR ${XPU_DOWNLOAD_DIR}
  DOWNLOAD_COMMAND
“yuguo”'s avatar
2.5  
“yuguo” committed
146
147
148
    bash ${CMAKE_SOURCE_DIR}/tools/xpu/check_xpu_dependence.sh ${XPU_BASE_URL}
    ${XPU_XCCL_BASE_URL} && bash
    ${CMAKE_SOURCE_DIR}/tools/xpu/pack_paddle_depence.sh ${XPU_XRE_URL}
yuguo960516yuguo's avatar
yuguo960516yuguo committed
149
    ${XPU_XRE_DIR_NAME} ${XPU_XDNN_URL} ${XPU_XDNN_DIR_NAME} ${XPU_XCCL_URL}
“yuguo”'s avatar
2.5  
“yuguo” committed
150
151
152
153
154
    ${XPU_XCCL_DIR_NAME} && wget ${XPU_XFT_GET_DEPENCE_URL} && bash
    get_xft_dependence.sh ${XPU_XFT_URL} ${XPU_XFT_DIR_NAME} &&
    WITH_XPTI=${WITH_XPTI} bash
    ${CMAKE_SOURCE_DIR}/tools/xpu/get_xpti_dependence.sh ${XPU_XPTI_URL}
    ${XPU_XPTI_DIR_NAME}
yuguo960516yuguo's avatar
yuguo960516yuguo committed
155
156
157
158
159
  DOWNLOAD_NO_PROGRESS 1
  UPDATE_COMMAND ""
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${XPU_INSTALL_ROOT}
  CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${XPU_INSTALL_ROOT}
  BUILD_BYPRODUCTS ${XPU_API_LIB}
“yuguo”'s avatar
2.5  
“yuguo” committed
160
161
  BUILD_BYPRODUCTS ${XPU_RT_LIB}
  BUILD_BYPRODUCTS ${XPU_BKCL_LIB})
yuguo960516yuguo's avatar
yuguo960516yuguo committed
162
163
164
165
166
167
168
169
170
171
172

include_directories(${XPU_INC_DIR})
add_library(shared_xpuapi SHARED IMPORTED GLOBAL)
set_property(TARGET shared_xpuapi PROPERTY IMPORTED_LOCATION "${XPU_API_LIB}")

# generate a static dummy target to track xpulib dependencies
# for cc_library(xxx SRCS xxx.c DEPS xpulib)
generate_dummy_static_lib(LIB_NAME "xpulib" GENERATOR "xpu.cmake")

target_link_libraries(xpulib ${XPU_API_LIB} ${XPU_RT_LIB})

“yuguo”'s avatar
2.5  
“yuguo” committed
173
174
175
if(WITH_XPU_XFT)
  message(STATUS "Compile with XPU XFT!")
  add_definitions(-DPADDLE_WITH_XPU_XFT)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
176

“yuguo”'s avatar
2.5  
“yuguo” committed
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
  set(XPU_XFT_INC_DIR "${XPU_INC_DIR}/xft")
  include_directories(${XPU_XFT_INC_DIR})
  set(XPU_XFT_LIB "${XPU_LIB_DIR}/${XPU_XFT_LIB_NAME}")
endif()

if(WITH_XPTI)
  message(STATUS "Compile with XPU XPTI!")
  add_definitions(-DPADDLE_WITH_XPTI)
  set(XPU_XPTI_LIB "${XPU_LIB_DIR}/${XPU_XPTI_LIB_NAME}")
endif()

if(WITH_XPU_PLUGIN)
  message(STATUS "Compile with XPU PLUGIN!")
  add_definitions(-DPADDLE_WITH_XPU_PLUGIN)
  include_directories(${CMAKE_SOURCE_DIR}/paddle/phi/kernels/xpu/plugin/include)
endif()

if(WITH_XPU_BKCL AND WITH_XPU_XFT)
  target_link_libraries(xpulib ${XPU_API_LIB} ${XPU_RT_LIB} ${XPU_BKCL_LIB}
                        ${XPU_XFT_LIB})
elseif(WITH_XPU_BKCL)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
198
  target_link_libraries(xpulib ${XPU_API_LIB} ${XPU_RT_LIB} ${XPU_BKCL_LIB})
“yuguo”'s avatar
2.5  
“yuguo” committed
199
200
elseif(WITH_XPU_XFT)
  target_link_libraries(xpulib ${XPU_API_LIB} ${XPU_RT_LIB} ${XPU_XFT_LIB})
yuguo960516yuguo's avatar
yuguo960516yuguo committed
201
202
203
204
else()
  target_link_libraries(xpulib ${XPU_API_LIB} ${XPU_RT_LIB})
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
205
206
207
208
if(WITH_XPTI)
  target_link_libraries(xpulib ${XPU_XPTI_LIB})
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
209
210
211
212
213
214
215
216
217
218
219
add_dependencies(xpulib ${XPU_PROJECT})

# Ensure that xpu/api.h can be included without dependency errors.
file(
  GENERATE
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/.xpu_headers_dummy.cc
  CONTENT "")
add_library(xpu_headers_dummy STATIC
            ${CMAKE_CURRENT_BINARY_DIR}/.xpu_headers_dummy.cc)
add_dependencies(xpu_headers_dummy extern_xpu)
link_libraries(xpu_headers_dummy)