11
11
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.
14
- cmake_minimum_required (VERSION 3.8 FATAL_ERROR )
14
+ cmake_minimum_required (VERSION 3.8 FATAL_ERROR ) # for PyTorch extensions, version should be greater than 3.13
15
15
project (FasterTransformer LANGUAGES CXX CUDA )
16
16
17
17
find_package (CUDA 10.0 REQUIRED )
18
18
19
19
option (BUILD_TRT "Build in TensorRT mode" OFF )
20
20
option (BUILD_TF "Build in TensorFlow mode" OFF )
21
+ option (BUILD_THE "Build in PyTorch eager mode" OFF )
22
+ option (BUILD_THS "Build in TorchScript class mode" OFF )
23
+ option (BUILD_THSOP "Build in TorchScript OP mode" OFF )
24
+
25
+ set (CXX_STD "11" CACHE STRING "C++ standard" )
21
26
22
27
set (CUDA_PATH ${CUDA_TOOLKIT_ROOT_DIR} )
23
28
@@ -53,6 +58,11 @@ set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -gencode=arch=compute_${SM},code=\\\"s
53
58
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWMMA" )
54
59
set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -DWMMA" )
55
60
endif ()
61
+ if (BUILD_THE OR BUILD_THS OR BUILD_THSOP )
62
+ string (SUBSTRING ${SM} 0 1 SM_MAJOR )
63
+ string (SUBSTRING ${SM} 1 1 SM_MINOR )
64
+ set (ENV{TORCH_CUDA_ARCH_LIST} "${SM_MAJOR} .${SM_MINOR} " )
65
+ endif ()
56
66
message ("-- Assign GPU architecture (sm=${SM} )" )
57
67
58
68
else ()
@@ -65,22 +75,21 @@ set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} \
65
75
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWMMA" )
66
76
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWMMA" )
67
77
set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -DWMMA" )
78
+ if (BUILD_THE OR BUILD_THS OR BUILD_THSOP )
79
+ set (ENV{TORCH_CUDA_ARCH_LIST} "6.0;6.1;7.0;7.5" )
80
+ endif ()
68
81
message ("-- Assign GPU architecture (sm=60,61,70,75)" )
69
82
endif ()
70
83
71
84
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -O0" )
72
85
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -O0" )
73
- set (CMAKE_CUDA_FLAGS_DEBUG "${CMAKE_CUDA_FLAGS_DEBUG} -O0 -G -Xcompiler -Wall" )
74
-
86
+ set (CMAKE_CUDA_FLAGS_DEBUG "${CMAKE_CUDA_FLAGS_DEBUG} -O0 -G -Xcompiler -Wall --ptxas-options=-v --resource-usage" )
75
87
76
- set (CMAKE_CXX_STANDARD 11 )
88
+ set (CMAKE_CXX_STANDARD " ${CXX_STD} " )
77
89
set (CMAKE_CXX_STANDARD_REQUIRED ON )
78
-
79
- if (CMAKE_CXX_STANDARD STREQUAL "11" )
80
- set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-extended-lambda" )
81
- set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-relaxed-constexpr" )
82
- set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --std=c++11" )
83
- endif ()
90
+ set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-extended-lambda" )
91
+ set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-relaxed-constexpr" )
92
+ set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --std=c++${CXX_STD} " )
84
93
85
94
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3" )
86
95
set (CMAKE_CUDA_FLAGS_RELEASE "${CMAKE_CUDA_FLAGS_RELEASE} -Xcompiler -O3" )
@@ -108,6 +117,41 @@ if(BUILD_TRT)
108
117
list (APPEND COMMON_LIB_DIRS ${TRT_PATH} /lib )
109
118
endif ()
110
119
120
+ set (PYTHON_PATH "python" CACHE STRING "Python path" )
121
+ if (BUILD_THE OR BUILD_THS OR BUILD_THSOP )
122
+ execute_process (COMMAND ${PYTHON_PATH} "-c" "from __future__ import print_function; import os; import torch;
123
+ print(os.path.dirname(torch.__file__),end='');"
124
+ RESULT_VARIABLE _PYTHON_SUCCESS
125
+ OUTPUT_VARIABLE TORCH_DIR )
126
+ if (NOT _PYTHON_SUCCESS MATCHES 0 )
127
+ message (FATAL_ERROR "Torch config Error." )
128
+ endif ()
129
+ list (APPEND CMAKE_PREFIX_PATH ${TORCH_DIR} )
130
+ find_package (Torch REQUIRED )
131
+
132
+ execute_process (COMMAND ${PYTHON_PATH} "-c" "from __future__ import print_function; from distutils import sysconfig;
133
+ print(sysconfig.get_python_inc());
134
+ print(sysconfig.get_config_var('SO'));"
135
+ RESULT_VARIABLE _PYTHON_SUCCESS
136
+ OUTPUT_VARIABLE _PYTHON_VALUES )
137
+ if (NOT _PYTHON_SUCCESS MATCHES 0 )
138
+ message (FATAL_ERROR "Python config Error." )
139
+ endif ()
140
+ string (REGEX REPLACE ";" "\\\\ ;" _PYTHON_VALUES ${_PYTHON_VALUES} )
141
+ string (REGEX REPLACE "\n " ";" _PYTHON_VALUES ${_PYTHON_VALUES} )
142
+ list (GET _PYTHON_VALUES 0 PY_INCLUDE_DIR )
143
+ list (GET _PYTHON_VALUES 1 PY_SUFFIX )
144
+ list (APPEND COMMON_HEADER_DIRS ${PY_INCLUDE_DIR} )
145
+
146
+ execute_process (COMMAND ${PYTHON_PATH} "-c" "from torch.utils import cpp_extension; print(' '.join(cpp_extension._prepare_ldflags([],True,False)),end='');"
147
+ RESULT_VARIABLE _PYTHON_SUCCESS
148
+ OUTPUT_VARIABLE TORCH_LINK )
149
+ if (NOT _PYTHON_SUCCESS MATCHES 0 )
150
+ message (FATAL_ERROR "PyTorch link config Error." )
151
+ endif ()
152
+ endif ()
153
+
154
+
111
155
include_directories (
112
156
${COMMON_HEADER_DIRS}
113
157
)
@@ -124,10 +168,17 @@ if(BUILD_TF)
124
168
add_custom_target (copy ALL COMMENT "Copying tensorflow test scripts" )
125
169
add_custom_command (TARGET copy
126
170
POST_BUILD
127
- COMMAND cp ${PROJECT_SOURCE_DIR} /sample/tensorflow/*.py ${PROJECT_SOURCE_DIR} /build/
128
- COMMAND cp ${PROJECT_SOURCE_DIR} /sample/tensorflow/utils ${PROJECT_SOURCE_DIR} /build/ -r
129
- COMMAND cp ${PROJECT_SOURCE_DIR} /sample/tensorflow/scripts ${PROJECT_SOURCE_DIR} /build/ -r
130
- COMMAND cp ${PROJECT_SOURCE_DIR} /sample/tensorflow_bert ${PROJECT_SOURCE_DIR} /build/ -r
171
+ COMMAND cp ${PROJECT_SOURCE_DIR} /sample/tensorflow/ ${PROJECT_BINARY_DIR} -r
172
+ COMMAND cp ${PROJECT_SOURCE_DIR} /sample/tensorflow_bert ${PROJECT_BINARY_DIR} /tensorflow -r
131
173
)
132
174
endif ()
133
175
176
+ if (BUILD_THE OR BUILD_THS OR BUILD_THSOP )
177
+ add_custom_target (copy ALL COMMENT "Copying pytorch test scripts" )
178
+ add_custom_command (TARGET copy
179
+ POST_BUILD
180
+ COMMAND cp ${PROJECT_SOURCE_DIR} /sample/pytorch/ ${PROJECT_BINARY_DIR} -r
181
+ COMMAND mkdir -p ${PROJECT_BINARY_DIR} /pytorch/translation/data/
182
+ COMMAND cp ${PROJECT_SOURCE_DIR} /sample/tensorflow/utils/translation/test.* ${PROJECT_BINARY_DIR} /pytorch/translation/data/
183
+ )
184
+ endif ()
0 commit comments