Skip to content

Commit 6446516

Browse files
authored
Merge branch 'sgl-project:main' into main
2 parents 614ebcd + 187ebdf commit 6446516

32 files changed

+1453
-139
lines changed

.github/workflows/pr-test-npu.yml

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
name: PR Test for SGL-KERNEL-NPU (Ascend NPU)
2+
3+
on:
4+
pull_request:
5+
branches: [ main ]
6+
paths:
7+
- "build.sh"
8+
- "cmake/**"
9+
- "python/**"
10+
- "csrc/**"
11+
- "test/**"
12+
- ".github/workflows/pr-test-npu.yml"
13+
workflow_dispatch:
14+
15+
concurrency:
16+
group: pr-test-npu-${{ github.ref }}
17+
cancel-in-progress: true
18+
19+
jobs:
20+
test-low-latency:
21+
if: (github.repository == 'sgl-project/sgl-kernel-npu' || github.event_name == 'pull_request') &&
22+
github.event.pull_request.draft == false
23+
runs-on: linux-aarch64-a3-node0
24+
steps:
25+
- name: Clean git config
26+
run: |
27+
CONFIG_KEY='http.https://gh-proxy.test.osinfra.cn/.extraheader'
28+
git config --global --unset "$CONFIG_KEY" || true
29+
30+
- name: Clean workspace
31+
run: |
32+
sudo rm -rf --one-file-system "$GITHUB_WORKSPACE"/* "$GITHUB_WORKSPACE"/.* 2>/dev/null || true
33+
34+
- name: Checkout code
35+
uses: actions/checkout@v4
36+
with:
37+
clean: true
38+
39+
- name: Start CI container
40+
run: bash scripts/npu_ci_a3_start_container.sh
41+
42+
- name: Run test
43+
timeout-minutes: 10
44+
run: |
45+
bash scripts/npu_ci_exec.sh bash $GITHUB_WORKSPACE/tests/python/deepep/run_test.sh
46+
47+
- name: Stop and remove container
48+
run: bash scripts/npu_ci_a3_stop_container.sh
49+
50+
test-intranode:
51+
if: (github.repository == 'sgl-project/sgl-kernel-npu' || github.event_name == 'pull_request') &&
52+
github.event.pull_request.draft == false
53+
runs-on: linux-aarch64-a3-node0
54+
steps:
55+
- name: Clean git config
56+
run: |
57+
CONFIG_KEY='http.https://gh-proxy.test.osinfra.cn/.extraheader'
58+
git config --global --unset "$CONFIG_KEY" || true
59+
60+
- name: Clean workspace
61+
run: |
62+
sudo rm -rf --one-file-system "$GITHUB_WORKSPACE"/* "$GITHUB_WORKSPACE"/.* 2>/dev/null || true
63+
64+
- name: Checkout code
65+
uses: actions/checkout@v4
66+
with:
67+
clean: true
68+
69+
- name: Start CI container
70+
run: bash scripts/npu_ci_a3_start_container.sh
71+
72+
- name: Run test
73+
timeout-minutes: 10
74+
run: |
75+
bash scripts/npu_ci_exec.sh python3 $GITHUB_WORKSPACE/tests/python/test_intranode.py
76+
77+
- name: Stop and remove container
78+
run: bash scripts/npu_ci_a3_stop_container.sh
79+
80+
finish:
81+
if: always()
82+
needs:
83+
- test-low-latency
84+
- test-intranode
85+
runs-on: ubuntu-latest
86+
steps:
87+
- name: Check all dependent job statuses
88+
run: |
89+
results=(${{ join(needs.*.result, ' ') }})
90+
for result in "${results[@]}"; do
91+
if [ "$result" = "failure" ] || [ "$result" = "cancelled" ]; then
92+
echo "Job failed with result: $result"
93+
exit 1
94+
fi
95+
done
96+
echo "All jobs completed successfully"
97+
exit 0

CMakeLists.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
2+
project(sgl-kernel-npu LANGUAGES CXX)
3+
4+
option(BUILD_PYTHON "build python SDK" ON)
5+
option(BUILD_TESTS "build test or not" OFF)
6+
7+
set(CMAKE_CXX_STANDARD 17)
8+
#set(CMAKE_VERBOSE_MAKEFILE ON)
9+
10+
if(NOT CMAKE_BUILD_TYPE)
11+
set(CMAKE_BUILD_TYPE RELEASE)
12+
endif()
13+
14+
add_compile_options(-hno-unused-parameter -lno-unused-function -Wunused-variable -Wunused-value -Wcast-align)
15+
add_compile_options(-Wcast-qual -Winvalid-pch -Wwrite-strings -Wsign-compare -Wextra)
16+
17+
if (${CMAKE_BUILD_TYPE} MATCHES "RELEASE")
18+
add_compile_options(-O3)
19+
add_compile_options(-fvisibility=hidden -fvisibility-inlines-hidden)
20+
add_compile_options(-fstack-protector-strong)
21+
add_compile_options(-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -fPIE -fPIC -ftrapv -s)
22+
message(STATUS "build type set to RELEASE")
23+
else ()
24+
add_compile_options(-g -rdynamic)
25+
endif ()
26+
27+
set(PROJECT_OP_SRC_BASE ${PROJECT_SOURCE_DIR}/csrc)
28+
set(PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/build)
29+
set(PROJECT_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/output)
30+
31+
include(cmake/config_git_last_commit.cmake)
32+
include(cmake/config_envs.cmake)
33+
include(cmake/config_ascend.cmake)
34+
35+
add_subdirectory(csrc)
36+
add_subdirectory(csrc/deepep)

build.sh

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/bin/bash
22
set -e
33

4+
SOC_VERSION="${1:-Ascend910_9382}"
5+
46
if [ -n "$ASCEND_HOME_PATH" ]; then
57
_ASCEND_INSTALL_PATH=$ASCEND_HOME_PATH
68
else
@@ -20,31 +22,24 @@ echo "outpath: ${OUTPUT_DIR}"
2022

2123
COMPILE_OPTIONS=""
2224

23-
function build_deepep()
25+
function build_kernels()
2426
{
25-
CMAKE_DIR="csrc"
27+
CMAKE_DIR=""
2628
BUILD_DIR="build"
2729

2830
cd "$CMAKE_DIR" || exit
2931

3032
rm -rf $BUILD_DIR
3133
mkdir -p $BUILD_DIR
3234

33-
cmake $COMPILE_OPTIONS -DCMAKE_INSTALL_PREFIX="$OUTPUT_DIR" -DASCEND_HOME_PATH=$ASCEND_HOME_PATH -B "$BUILD_DIR" -S .
35+
cmake $COMPILE_OPTIONS -DCMAKE_INSTALL_PREFIX="$OUTPUT_DIR" -DASCEND_HOME_PATH=$ASCEND_HOME_PATH -DSOC_VERSION=$SOC_VERSION -B "$BUILD_DIR" -S .
3436
cmake --build "$BUILD_DIR" -j8 && cmake --build "$BUILD_DIR" --target install
3537
cd -
3638
}
3739

3840
function make_deepep_package()
3941
{
40-
if pip3 show wheel;then
41-
echo "wheel has been installed"
42-
else
43-
pip3 install wheel
44-
fi
45-
46-
PYTHON_DIR="python"
47-
cd "$PYTHON_DIR"/deep_ep || exit
42+
cd python/deep_ep || exit
4843

4944
cp -v ${OUTPUT_DIR}/lib/* "$CURRENT_DIR"/python/deep_ep/deep_ep/
5045
rm -rf "$CURRENT_DIR"/python/deep_ep/dist
@@ -54,10 +49,29 @@ function make_deepep_package()
5449
cd -
5550
}
5651

52+
function make_sgl_kernel_npu_package()
53+
{
54+
cd python/sgl_kernel_npu || exit
55+
56+
rm -rf "$CURRENT_DIR"/python/sgl_kernel_npu/dist
57+
python3 setup.py clean --all
58+
python3 setup.py bdist_wheel
59+
mv -v "$CURRENT_DIR"/python/sgl_kernel_npu/dist/sgl_kernel_npu*.whl ${OUTPUT_DIR}/
60+
rm -rf "$CURRENT_DIR"/python/sgl_kernel_npu/dist
61+
cd -
62+
}
63+
5764
function main()
5865
{
59-
build_deepep
66+
build_kernels
67+
68+
if pip3 show wheel;then
69+
echo "wheel has been installed"
70+
else
71+
pip3 install wheel
72+
fi
6073
make_deepep_package
74+
make_sgl_kernel_npu_package
6175
}
6276

6377
main

cmake/config.cmake

Whitespace-only changes.

cmake/config_ascend.cmake

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
if(DEFINED ASCEND_HOME_PATH)
3+
elseif(DEFINED ENV{ASCEND_HOME_PATH})
4+
set(ASCEND_HOME_PATH "$ENV{ASCEND_HOME_PATH}" CACHE PATH "ASCEND CANN package installation directory" FORCE)
5+
endif()
6+
7+
set(ASCEND_CANN_PACKAGE_PATH ${ASCEND_HOME_PATH})
8+
9+
if(EXISTS ${ASCEND_HOME_PATH}/tools/tikcpp/ascendc_kernel_cmake)
10+
set(ASCENDC_CMAKE_DIR ${ASCEND_HOME_PATH}/tools/tikcpp/ascendc_kernel_cmake)
11+
elseif(EXISTS ${ASCEND_HOME_PATH}/compiler/tikcpp/ascendc_kernel_cmake)
12+
set(ASCENDC_CMAKE_DIR ${ASCEND_HOME_PATH}/compiler/tikcpp/ascendc_kernel_cmake)
13+
elseif(EXISTS ${ASCEND_HOME_PATH}/ascendc_devkit/tikcpp/samples/cmake)
14+
set(ASCENDC_CMAKE_DIR ${ASCEND_HOME_PATH}/ascendc_devkit/tikcpp/samples/cmake)
15+
else()
16+
message(FATAL_ERROR "ascendc_kernel_cmake does not exist, please check whether the cann package is installed.")
17+
endif()
18+
19+
include(${ASCENDC_CMAKE_DIR}/ascendc.cmake)
20+
21+
22+
message(STATUS "ASCEND_CANN_PACKAGE_PATH = ${ASCEND_CANN_PACKAGE_PATH}")
23+
message(STATUS "ASCEND_HOME_PATH = ${ASCEND_HOME_PATH}")

cmake/config_envs.cmake

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# find python binary
2+
find_program(PYTHON_EXECUTABLE NAMES python3)
3+
4+
if (NOT EXISTS ${PYTHON_EXECUTABLE})
5+
message(FATAL_ERROR "python3 is not found, install python firstly")
6+
endif ()
7+
8+
# get torch path, torch npu path, pybind11 path via python script
9+
execute_process(
10+
COMMAND ${PYTHON_EXECUTABLE} "-c"
11+
"import torch; import torch_npu; import os; import pybind11;
12+
torch_dir = os.path.realpath(os.path.dirname(torch.__file__));
13+
torch_npu_dir = os.path.realpath(os.path.dirname(torch_npu.__file__));
14+
pybind11_dir = os.path.realpath(os.path.dirname(pybind11.__file__));
15+
abi_enabled=torch.compiled_with_cxx11_abi();
16+
print(torch_dir, torch_npu_dir, pybind11_dir, abi_enabled, end='');
17+
quit(0)
18+
"
19+
RESULT_VARIABLE EXEC_RESULT
20+
OUTPUT_VARIABLE OUTPUT_ENV_DEFINES)
21+
22+
# if failed to run the python script
23+
if (NOT ${EXEC_RESULT} EQUAL 0)
24+
message(FATAL_ERROR "failed to get run python script to get ENVS like TORCH_DIR etc")
25+
else ()
26+
message(STATUS "run python script successfully, output string is [${OUTPUT_ENV_DEFINES}]")
27+
endif ()
28+
29+
# extract TORCH_DIR and set it
30+
execute_process(
31+
COMMAND sh -c "echo \"${OUTPUT_ENV_DEFINES}\" | awk '{print $1}'"
32+
OUTPUT_VARIABLE TORCH_DIR
33+
RESULT_VARIABLE EXEC_RESULT
34+
OUTPUT_STRIP_TRAILING_WHITESPACE
35+
)
36+
37+
# extract TORCH_NPU_DIR and set it
38+
execute_process(
39+
COMMAND sh -c "echo \"${OUTPUT_ENV_DEFINES}\" | awk '{print $2}'"
40+
OUTPUT_VARIABLE TORCH_NPU_DIR
41+
RESULT_VARIABLE EXEC_RESULT
42+
OUTPUT_STRIP_TRAILING_WHITESPACE
43+
)
44+
45+
# extract PYBIND11_DIR and set it
46+
execute_process(
47+
COMMAND sh -c "echo \"${OUTPUT_ENV_DEFINES}\" | awk '{print $3}'"
48+
OUTPUT_VARIABLE PYBIND11_DIR
49+
RESULT_VARIABLE EXEC_RESULT
50+
OUTPUT_STRIP_TRAILING_WHITESPACE
51+
)
52+
53+
# extract PYTROCH_ABI and set it
54+
execute_process(
55+
COMMAND sh -c "echo \"${OUTPUT_ENV_DEFINES}\" | awk '{print $4}'"
56+
OUTPUT_VARIABLE TORCH_API_ENABLED
57+
RESULT_VARIABLE EXEC_RESULT
58+
OUTPUT_STRIP_TRAILING_WHITESPACE
59+
)
60+
61+
message(STATUS "SOC_VERSION=${SOC_VERSION}")
62+
message(STATUS "TORCH_DIR=${TORCH_DIR}")
63+
message(STATUS "TORCH_NPU_DIR=${TORCH_NPU_DIR}")
64+
message(STATUS "PYBIND11_DIR=${PYBIND11_DIR}")
65+
66+
# set _GLIBCXX_USE_CXX11_ABI
67+
if (${TORCH_API_ENABLED} STREQUAL "True")
68+
add_compile_options(-D_GLIBCXX_USE_CXX11_ABI=1)
69+
message(STATUS "_GLIBCXX_USE_CXX11_ABI=1")
70+
else ()
71+
add_compile_options(-D_GLIBCXX_USE_CXX11_ABI=0)
72+
message(STATUS "_GLIBCXX_USE_CXX11_ABI=0")
73+
endif ()

cmake/config_git_last_commit.cmake

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
find_program(GIT_EXECUTABLE NAMES git)
2+
3+
if (EXISTS ${GIT_EXECUTABLE})
4+
execute_process(
5+
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
6+
RESULT_VARIABLE GIT_COMMIT_RESULT
7+
OUTPUT_VARIABLE GIT_COMMIT_ID
8+
OUTPUT_STRIP_TRAILING_WHITESPACE)
9+
10+
if (GIT_COMMIT_RESULT EQUAL 0)
11+
add_compile_definitions(GIT_LAST_COMMIT=${GIT_COMMIT_ID})
12+
message(STATUS "set GIT_LAST_COMMIT to ${GIT_LAST_COMMIT} as compile definition")
13+
else()
14+
message(STATUS "Failed to git last commit with git")
15+
endif()
16+
17+
else()
18+
message(STATUS "Failed to find git command, not GIT_LAST_COMMIT will be set")
19+
endif()

0 commit comments

Comments
 (0)