@@ -80,12 +80,20 @@ if(WITH_ROCM)
8080else ()
8181
8282 add_definitions (-DPADDLE_WITH_FLASHATTN)
83+ option (FA_BUILD_WITH_CACHE "Download cache so files from bos" ON )
8384
8485 set (FLASHATTN_PREFIX_DIR ${THIRD_PARTY_PATH} /flashattn)
8586 set (FLASHATTN_SOURCE_SUBDIR csrc)
8687 set (FLASHATTN_INSTALL_DIR ${THIRD_PARTY_PATH} /install /flashattn)
8788 set (SOURCE_DIR ${PADDLE_SOURCE_DIR} /third_party/flashattn)
88- set (FLASHATTN_TAG 5fc132ac11e78d26471ca09e5ba0cd817c3424d8)
89+
90+ # get FA git commit
91+ execute_process (
92+ COMMAND git rev-parse HEAD
93+ WORKING_DIRECTORY ${SOURCE_DIR}
94+ OUTPUT_VARIABLE FLASHATTN_TAG
95+ OUTPUT_STRIP_TRAILING_WHITESPACE)
96+ message (STATUS "flashattn git commit: ${FLASHATTN_TAG} " )
8997
9098 set (FLASHATTN_INCLUDE_DIR
9199 "${FLASHATTN_INSTALL_DIR} /include"
@@ -166,6 +174,99 @@ else()
166174 endif ()
167175 endforeach ()
168176
177+ set (BASE_URL
178+ "https://xly-devops.bj.bcebos.com/gpups/flash-attention/cu${FA_NVCC_ARCH_BIN} "
179+ )
180+ set (TAR_FILE_NAME "flashattn_libs_${FLASHATTN_TAG} .tar" )
181+ set (TAR_FILE_URL "${BASE_URL} /${TAR_FILE_NAME} " )
182+ set (FA_BUILD_DIR "${FLASHATTN_PREFIX_DIR} /src/extern_flashattn-build/" )
183+ set (CACHE_TAR_PATH "${FA_BUILD_DIR} /${TAR_FILE_NAME} " )
184+ set (CACHE_TAR_DIR "${FA_BUILD_DIR} /flashattn_libs_${FLASHATTN_TAG} " )
185+
186+ set (SKIP_BUILD_FA OFF )
187+ if (FA_BUILD_WITH_CACHE)
188+
189+ message (STATUS "Downloading ${TAR_FILE_URL} to ${CACHE_TAR_PATH} " )
190+ file (
191+ DOWNLOAD "${TAR_FILE_URL} " "${CACHE_TAR_PATH} "
192+ STATUS DOWNLOAD_STATUS
193+ LOG DOWNLOAD_LOG)
194+ list (GET DOWNLOAD_STATUS 0 DOWNLOAD_RESULT)
195+
196+ if (DOWNLOAD_RESULT EQUAL 0)
197+ message (STATUS "Download Successful" )
198+
199+ file (MAKE_DIRECTORY ${FA_BUILD_DIR} )
200+
201+ execute_process (
202+ COMMAND ${CMAKE_COMMAND} -E tar xf ${CACHE_TAR_PATH}
203+ WORKING_DIRECTORY ${FA_BUILD_DIR}
204+ RESULT_VARIABLE TAR_RESULT)
205+
206+ if (NOT TAR_RESULT EQUAL 0)
207+ message (FATAL_ERROR "Failed to extract ${CACHE_TAR_PATH} " )
208+ endif ()
209+
210+ file (STRINGS ${CACHE_TAR_DIR} /MD5.txt FILE_MD5)
211+
212+ # Strip any leading or trailing whitespace
213+ string (STRIP ${FILE_MD5} FILE_MD5)
214+
215+ file (MD5 ${CACHE_TAR_DIR} /fa_libs.tar FILE_MD5_ACTUAL)
216+
217+ message (STATUS "Expected MD5: ${FILE_MD5} " )
218+ message (STATUS "Actual MD5: ${FILE_MD5_ACTUAL} " )
219+
220+ if (NOT "${FILE_MD5} " STREQUAL "${FILE_MD5_ACTUAL} " )
221+ message (
222+ FATAL_ERROR "MD5 checksum mismatch! The download may be corrupted." )
223+ else ()
224+ message (STATUS "MD5 checksum verified successfully." )
225+ endif ()
226+
227+ execute_process (
228+ COMMAND ${CMAKE_COMMAND} -E tar xf ${CACHE_TAR_DIR} /fa_libs.tar
229+ WORKING_DIRECTORY ${CACHE_TAR_DIR}
230+ RESULT_VARIABLE TAR_RESULT)
231+
232+ if (NOT TAR_RESULT EQUAL 0)
233+ message (FATAL_ERROR "Failed to extract ${CACHE_TAR_PATH} /fa_libs.tar" )
234+ endif ()
235+
236+ file (GLOB_RECURSE SO_FILES "${CACHE_TAR_DIR} /fa_libs/*.so" )
237+ foreach (so_file ${SO_FILES} )
238+ message (STATUS "Copy ${so_file} to ${FA_BUILD_DIR} " )
239+ message (STATUS "Copy ${so_file} to ${FLASHATTN_LIB_DIR} " )
240+ file (COPY "${so_file} " DESTINATION "${FA_BUILD_DIR} " )
241+ file (COPY "${so_file} " DESTINATION "${FLASHATTN_LIB_DIR} " )
242+ endforeach ()
243+
244+ file (REMOVE_RECURSE ${CACHE_TAR_DIR} )
245+ message (STATUS "Extraction completed in ${FA_BUILD_DIR} " )
246+
247+ set (SKIP_BUILD_FA ON )
248+
249+ elseif (DOWNLOAD_RESULT EQUAL 6)
250+ message (
251+ STATUS
252+ "Could not resolve host. The given remote host was not resolvable." )
253+ elseif (DOWNLOAD_RESULT EQUAL 7)
254+ message (STATUS "Failed to connect to host." )
255+ elseif (DOWNLOAD_RESULT EQUAL 22)
256+ message (
257+ STATUS
258+ "HTTP page not retrieved. The requested URL was not found or a server returned a 4xx (client error) or 5xx (server error) response."
259+ )
260+ elseif (DOWNLOAD_RESULT EQUAL 28)
261+ message (
262+ STATUS
263+ "Operation timeout. The specified time-out period was reached according to the conditions."
264+ )
265+ else ()
266+ message (STATUS "An error occurred. Error code: ${DOWNLOAD_RESULT} " )
267+ endif ()
268+ endif ()
269+
169270 ExternalProject_Add(
170271 extern_flashattn
171272 ${EXTERNAL_PROJECT_LOG_ARGS}
@@ -196,13 +297,13 @@ else()
196297 -DCMAKE_JOB_POOLS:STRING =compile=${FA_JOB_POOLS_COMPILE}
197298 -DNVCC_ARCH_BIN=${FA_NVCC_ARCH_BIN}
198299 -DWITH_FLASHATTN_V3=${WITH_FLASHATTN_V3}
300+ -DSKIP_BUILD_FA=${SKIP_BUILD_FA}
199301 ${EXTERNAL_OPTIONAL_ARGS}
200302 CMAKE_CACHE_ARGS
201303 -DCMAKE_BUILD_TYPE:STRING =${THIRD_PARTY_BUILD_TYPE}
202304 -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL =ON
203305 -DCMAKE_INSTALL_PREFIX:PATH =${FLASHATTN_INSTALL_DIR}
204306 BUILD_BYPRODUCTS ${BUILD_BYPRODUCTS_LIST} )
205-
206307endif ()
207308
208309message (STATUS "flash-attn library: ${FLASHATTN_LIBRARIES} " )
0 commit comments