Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

error: conflicting declaration ‘typedef struct CUevent_st* #1279

Open
binhtranmcs opened this issue Apr 21, 2024 · 7 comments
Open

error: conflicting declaration ‘typedef struct CUevent_st* #1279

binhtranmcs opened this issue Apr 21, 2024 · 7 comments

Comments

@binhtranmcs
Copy link

Currently, I am trying to implement a custom k2 tritonserver backend, but i get this compilation error:

In file included from /usr/local/cuda/include/builtin_types.h:59,
                 from /usr/local/cuda/include/cuda_runtime_api.h:149,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/cmake-build-debug/_deps/repo-backend-src/include/triton/backend/backend_common.h:48,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/src/libk2.cc:16:
/usr/local/cuda/include/driver_types.h:2792:43: error: conflicting declaration ‘typedef enum cudaError cudaError_t’
 2792 | typedef __device_builtin__ enum cudaError cudaError_t;
      |                                           ^~~~~~~~~~~
In file included from /usr/local/include/k2/csrc/context.h:45,
                 from /usr/local/include/k2/csrc/array.h:30,
                 from /usr/local/include/k2/csrc/ragged.h:28,
                 from /usr/local/include/k2/csrc/fsa.h:26,
                 from /usr/local/include/k2/csrc/intersect_dense_pruned.h:25,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/src/libk2.cc:6:
/usr/local/include/k2/csrc/fake_cuda.h:50:7: note: previous declaration as ‘using cudaError_t = int32_t’
   50 | using cudaError_t = int32_t;
      |       ^~~~~~~~~~~
In file included from /usr/local/cuda/include/builtin_types.h:59,
                 from /usr/local/cuda/include/cuda_runtime_api.h:149,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/cmake-build-debug/_deps/repo-backend-src/include/triton/backend/backend_common.h:48,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/src/libk2.cc:16:
/usr/local/cuda/include/driver_types.h:2797:48: error: conflicting declaration ‘typedef struct CUstream_st* cudaStream_t’
 2797 | typedef __device_builtin__ struct CUstream_st *cudaStream_t;
      |                                                ^~~~~~~~~~~~
In file included from /usr/local/include/k2/csrc/context.h:45,
                 from /usr/local/include/k2/csrc/array.h:30,
                 from /usr/local/include/k2/csrc/ragged.h:28,
                 from /usr/local/include/k2/csrc/fsa.h:26,
                 from /usr/local/include/k2/csrc/intersect_dense_pruned.h:25,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/src/libk2.cc:6:
/usr/local/include/k2/csrc/fake_cuda.h:51:7: note: previous declaration as ‘using cudaStream_t = int32_t*’
   51 | using cudaStream_t = int32_t *;
      |       ^~~~~~~~~~~~
In file included from /usr/local/cuda/include/builtin_types.h:59,
                 from /usr/local/cuda/include/cuda_runtime_api.h:149,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/cmake-build-debug/_deps/repo-backend-src/include/triton/backend/backend_common.h:48,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/src/libk2.cc:16:
/usr/local/cuda/include/driver_types.h:2802:47: error: conflicting declaration ‘typedef struct CUevent_st* cudaEvent_t’
 2802 | typedef __device_builtin__ struct CUevent_st *cudaEvent_t;
      |                                               ^~~~~~~~~~~
In file included from /usr/local/include/k2/csrc/context.h:45,
                 from /usr/local/include/k2/csrc/array.h:30,
                 from /usr/local/include/k2/csrc/ragged.h:28,
                 from /usr/local/include/k2/csrc/fsa.h:26,
                 from /usr/local/include/k2/csrc/intersect_dense_pruned.h:25,
                 from /home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/src/libk2.cc:6:
/usr/local/include/k2/csrc/fake_cuda.h:52:7: note: previous declaration as ‘using cudaEvent_t = int32_t*’
   52 | using cudaEvent_t = int32_t *;
      |       ^~~~~~~~~~~
make[3]: *** [CMakeFiles/triton-k2-backend.dir/build.make:79: CMakeFiles/triton-k2-backend.dir/src/libk2.cc.o] Error 1
make[3]: Leaving directory '/home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/cmake-build-debug'
make[2]: *** [CMakeFiles/Makefile2:255: CMakeFiles/triton-k2-backend.dir/all] Error 2
make[2]: Leaving directory '/home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/cmake-build-debug'
make[1]: *** [CMakeFiles/Makefile2:262: CMakeFiles/triton-k2-backend.dir/rule] Error 2
make[1]: Leaving directory '/home/cpu13266/binhtt4/research/asr-end2end-triton/triton_k2/cmake-build-debug'
make: *** [Makefile:172: triton-k2-backend] Error 2

This is the CmakeLists.txt I use:

cmake_minimum_required(VERSION 3.24)

project(tritonk2backend)

set(languages CXX)
set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CUDA_ARCHITECTURES 86)
set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

#### TRITON REPOS ####
set(TRITON_COMMON_REPO_TAG "main" CACHE STRING "Tag for triton-inference-server/common repo")
set(TRITON_CORE_REPO_TAG "main" CACHE STRING "Tag for triton-inference-server/core repo")
set(TRITON_BACKEND_REPO_TAG "main" CACHE STRING "Tag for triton-inference-server/backend repo")

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif()

set(CMAKE_VERBOSE_MAKEFILE ON)
set(CUDA_VERBOSE_BUILD ON)

include(FetchContent)

FetchContent_Declare(
    repo-common
    GIT_REPOSITORY https://github.com/triton-inference-server/common.git
    GIT_TAG ${TRITON_COMMON_REPO_TAG}
    GIT_SHALLOW ON)

FetchContent_Declare(
    repo-core
    GIT_REPOSITORY https://github.com/triton-inference-server/core.git
    GIT_TAG ${TRITON_CORE_REPO_TAG}
    GIT_SHALLOW ON)

FetchContent_Declare(
    repo-backend
    GIT_REPOSITORY https://github.com/triton-inference-server/backend.git
    GIT_TAG ${TRITON_BACKEND_REPO_TAG}
    GIT_SHALLOW ON)

FetchContent_MakeAvailable(repo-common repo-core repo-backend)
########

find_package(Torch REQUIRED)
find_package(k2 REQUIRED)

#### TRITON BACKEND ####
set(K2_SRC src/libk2.cc src/utils.cc)

add_library(triton-k2-backend SHARED ${K2_SRC})

add_library(TritonKaldifeatBackend::triton-k2-backend ALIAS triton-k2-backend)

set_target_properties(triton-k2-backend PROPERTIES
    POSITION_INDEPENDENT_CODE ON
    OUTPUT_NAME triton_k2)
########

#### link libraries ####
target_include_directories(triton-k2-backend PUBLIC ${K2_INCLUDE_DIRS})

target_link_libraries(triton-k2-backend PRIVATE
    TritonCore::triton-core-serverapi    # from repo-core
    TritonCore::triton-core-backendapi   # from repo-core
    TritonCore::triton-core-serverstub   # from repo-core
    TritonBackend::triton-backend-utils  # from repo-backend
    ${TORCH_LIBRARIES}
    ${K2_LIBRARIES}
    )

The problem seems to be that I link the cpu-only version of k2. I wonder what is the proper way to link k2 with cuda to my C++ project using cmake. Please help me with this.

Thanks in advance!

@csukuangfj
Copy link
Collaborator

Please only use
https://github.com/k2-fsa/k2/blob/master/k2/torch/csrc/torch_api.h
the above header file in your project.

All other header files and C++ source files should NOT be used in your project.

You can refer to
https://github.com/k2-fsa/sherpa/blob/master/cmake/k2.cmake
for an example about how to use k2 in another CMake-based project.

@binhtranmcs
Copy link
Author

Please only use https://github.com/k2-fsa/k2/blob/master/k2/torch/csrc/torch_api.h the above header file in your project.

All other header files and C++ source files should NOT be used in your project.

tks a lot @csukuangfj, this fixes the problem.

@binhtranmcs
Copy link
Author

@csukuangfj, k2/torch/csrc/torch_api.h does not expose interfaces k2::SymbolTable, k2::DecodeStateInfo and k2::OnlineDenseIntersecter. I can include k2/torch/csrc/symbol_table.h for the k2::SymbolTable, but the other 2 are not possible. I think k2/torch/csrc/torch_api.h needs updating. Please have a further look.

@binhtranmcs binhtranmcs reopened this Apr 25, 2024
@csukuangfj
Copy link
Collaborator

As I said before, please only use k2/torch/csrc/torch_api.h.

We have examples in k2-fsa/sherpa, please refer to it for examples.

Rembemer that using any other header files from k2 are not supported.

The core functions from k2 have already been added to k2/torch/csrc/torch_api.h.

@binhtranmcs
Copy link
Author

Thanks @csukuangfj, I understand that, but torch_api.h does not expose interfaces for online decoding as well as nbest decoding. And I believe sherpa also does not have examples for those.

@csukuangfj
Copy link
Collaborator

I am unsure whether @pkufool has time to add online decoding to torch_api.h

By the way, we support streaming HLG decoding in sherpa-onnx, though HLG decoding in sherpa-onnx runs only on CPU.

@pkufool
Copy link
Collaborator

pkufool commented Apr 26, 2024

@binhtranmcs I will start this work after the May Day holiday.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants