From 68273bdd77694cd4d0e202d02cf10885e1aeb6c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=81=E8=A1=8C?= Date: Fri, 7 Jun 2024 17:42:04 +0800 Subject: [PATCH] [refactor] refactor build script and ci. --- .github/model-test.yml | 79 ----------------------------------- .github/workflows/all.yml | 74 -------------------------------- .github/workflows/linux.yml | 37 +++++----------- .github/workflows/macos.yml | 37 +++++----------- .github/workflows/windows.yml | 38 ++++------------- CMakeLists.txt | 18 +++++--- libs/.gitkeep | 0 script/android_build.sh | 16 +------ script/build.ps1 | 19 +-------- script/build.sh | 19 --------- script/build_gpu.sh | 24 ----------- script/download_model.ps1 | 19 --------- script/download_model.sh | 26 ------------ script/model_test.ps1 | 27 ------------ script/model_test.sh | 28 ------------- script/package.ps1 | 17 -------- script/package.sh | 23 ---------- 17 files changed, 43 insertions(+), 458 deletions(-) delete mode 100644 .github/model-test.yml delete mode 100644 .github/workflows/all.yml delete mode 100644 libs/.gitkeep delete mode 100755 script/build_gpu.sh delete mode 100644 script/download_model.ps1 delete mode 100755 script/download_model.sh delete mode 100644 script/model_test.ps1 delete mode 100755 script/model_test.sh delete mode 100755 script/package.ps1 delete mode 100755 script/package.sh diff --git a/.github/model-test.yml b/.github/model-test.yml deleted file mode 100644 index cf57e454..00000000 --- a/.github/model-test.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: model-test -on: - push: - branches: - - master - - 'feature/**' - paths: - - 'src/**' - - '.github/workflows/model-test.yml' - pull_request: - branches: [master] - paths: - - 'src/**' - - '.github/workflows/model-test.yml' - -jobs: - llm-build: - name: ${{ matrix.os }}-build - env: - PACAGE_DIR: ${{ matrix.os }}-package - PACAGE_FILE: ${{ matrix.os }}-package.zip - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - - steps: - - uses: actions/checkout@v3 - # linux and macos - - name: linux-macos-build-pack - if: matrix.os != 'windows-latest' - run: | - ./script/build.sh - ./script/package.sh $PACAGE_DIR - zip -r $PACAGE_FILE $PACAGE_DIR - # windows - - name: windows-build-pack - if: matrix.os == 'windows-latest' - run: | - .\script\build.ps1 - .\script\package.ps1 windows-package - 7z a -r windows-package.zip windows-package - # upload - - name: upload-zip - uses: actions/upload-artifact@v3 - with: - path: ./*.zip - - model-test: - needs: llm-build - name: ${{ matrix.model }}-${{ matrix.os }}-test - runs-on: ${{ matrix.os }} - env: - PACAGE_DIR: ${{ matrix.os }}-package - PACAGE_FILE: ${{ matrix.os }}-package.zip - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - model: [chatglm-6b, chatglm2-6b, codegeex2-6b, qwen-7b-chat, baichuan2-7b-chat, llama2-7b-chat] - - steps: - - uses: actions/download-artifact@v3 - with: - name: artifact - path: workspace - - name: linux-macos-test - if: matrix.os != 'windows-latest' - run: | - cd workspace - unzip $PACAGE_FILE - cd $PACAGE_DIR - ./script/model_test.sh ${{ matrix.model }} - - name: windows-test - if: matrix.os == 'windows-latest' - run: | - cd workspace - 7z x windows-package.zip - cd windows-package - ./script/model_test.ps1 ${{ matrix.model }} \ No newline at end of file diff --git a/.github/workflows/all.yml b/.github/workflows/all.yml deleted file mode 100644 index 236b8675..00000000 --- a/.github/workflows/all.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: all -on: - push: - tags: - - '*' - -jobs: - all-build: - name: ${{ matrix.os }}-build - env: - PACAGE_DIR: ${{ matrix.os }}-package - PACAGE_FILE: ${{ matrix.os }}-package.zip - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - - steps: - - uses: actions/checkout@v3 - # linux and macos - - name: linux-macos-build-pack - if: matrix.os != 'windows-latest' - run: | - ./script/build.sh - ./script/package.sh $PACAGE_DIR - zip -r $PACAGE_FILE $PACAGE_DIR - # windows - - name: windows-build-pack - if: matrix.os == 'windows-latest' - run: | - .\script\build.ps1 - .\script\package.ps1 windows-package - 7z a -r windows-package.zip windows-package - # upload - - name: upload-zip - uses: actions/upload-artifact@v3 - with: - path: ./*.zip - - all-test: - needs: all-build - name: ${{ matrix.model }}-${{ matrix.os }}-test - runs-on: ${{ matrix.os }} - env: - PACAGE_DIR: ${{ matrix.os }}-package - PACAGE_FILE: ${{ matrix.os }}-package.zip - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - model: [chatglm-6b, chatglm2-6b, chatglm3-6b, codegeex2-6b, qwen-7b-chat, baichuan2-7b-chat, llama2-7b-chat] - - steps: - - uses: actions/download-artifact@v3 - with: - name: artifact - path: workspace - - name: linux-macos-test - if: matrix.os != 'windows-latest' - run: | - cd workspace - unzip $PACAGE_FILE - cd $PACAGE_DIR - ./script/model_test.sh ${{ matrix.model }} - - name: windows-test - if: matrix.os == 'windows-latest' - run: | - cd workspace - 7z x package.zip - cd package - echo ${{ matrix.model }} - ./script/download_model.ps1 ${{ matrix.model }} - cd build - .\Release\cli_demo -m ..\${{ matrix.model }} - Exit 0 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index d878d1f8..57c0d909 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -17,37 +17,20 @@ jobs: build: name: linux-build runs-on: ubuntu-latest - + steps: - uses: actions/checkout@v3 - # build - - name: build-pack + + - name: build run: | ./script/build.sh - ./script/package.sh package - zip -r package.zip package - # upload - - name: upload-zip - uses: actions/upload-artifact@v3 - with: - path: ./*.zip - test: - needs: build - name: ${{ matrix.model }}-linux-test - runs-on: ubuntu-latest - strategy: - matrix: - model: [qwen-1.8b, chatglm-6b, chatglm2-6b, chatglm3-6b, codegeex2-6b, qwen-7b-chat, baichuan2-7b-chat, llama2-7b-chat] + - name: download_mode + run: | + wget -c -nv https://github.com/wangzhaode/mnn-llm/releases/download/qwen1.5-0.5b-chat-mnn/Qwen1.5-0.5B-Chat-MNN.zip + unzip Qwen1.5-0.5B-Chat-MNN.zip - steps: - - uses: actions/download-artifact@v3 - with: - name: artifact - path: workspace - - name: model-test + - name: test_model run: | - cd workspace - unzip package.zip - cd package - ./script/model_test.sh ${{ matrix.model }} + cd build + ./cli_demo ../Qwen1.5-0.5B-Chat-MNN/config.json ../resource/prompt.txt diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 3e3a8f06..8e1b536c 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -17,37 +17,20 @@ jobs: build: name: macos-build runs-on: macos-latest - + steps: - uses: actions/checkout@v3 - # build - - name: build-pack + + - name: build run: | ./script/build.sh - ./script/package.sh package - zip -r package.zip package - # upload - - name: upload-zip - uses: actions/upload-artifact@v3 - with: - path: ./*.zip - test: - needs: build - name: ${{ matrix.model }}-macos-test - runs-on: macos-latest - strategy: - matrix: - model: [qwen-1.8b, chatglm-6b, chatglm2-6b, chatglm3-6b, codegeex2-6b, qwen-7b-chat, baichuan2-7b-chat, llama2-7b-chat] + - name: download_mode + run: | + wget -c -nv https://github.com/wangzhaode/mnn-llm/releases/download/qwen1.5-0.5b-chat-mnn/Qwen1.5-0.5B-Chat-MNN.zip + unzip Qwen1.5-0.5B-Chat-MNN.zip - steps: - - uses: actions/download-artifact@v3 - with: - name: artifact - path: workspace - - name: model-test + - name: test_model run: | - cd workspace - unzip package.zip - cd package - ./script/model_test.sh ${{ matrix.model }} prompt.txt + cd build + ./cli_demo ../Qwen1.5-0.5B-Chat-MNN/config.json ../resource/prompt.txt \ No newline at end of file diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 54c5f2df..d0e82b2d 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -17,41 +17,21 @@ jobs: build: name: windows-build runs-on: windows-latest - + steps: - uses: actions/checkout@v3 - # build - - name: build-pack + + - name: build run: | .\script\build.ps1 - .\script\package.ps1 package - 7z a -r package.zip package - # upload - - name: upload-zip - uses: actions/upload-artifact@v3 - with: - path: ./*.zip - test: - needs: build - name: ${{ matrix.model }}-windows-test - runs-on: windows-latest - strategy: - matrix: - model: [qwen-1.8b, chatglm-6b, chatglm2-6b, chatglm3-6b, codegeex2-6b, qwen-7b-chat, baichuan2-7b-chat, llama2-7b-chat] + - name: download_mode + run: | + Invoke-WebRequest -Uri https://github.com/wangzhaode/mnn-llm/releases/download/qwen1.5-0.5b-chat-mnn/Qwen1.5-0.5B-Chat-MNN.zip -OutFile Qwen1.5-0.5B-Chat-MNN.zip + unzip Qwen1.5-0.5B-Chat-MNN.zip - steps: - - uses: actions/download-artifact@v3 - with: - name: artifact - path: workspace - - name: windows-test + - name: test_model run: | - cd workspace - 7z x package.zip - cd package - echo ${{ matrix.model }} - ./script/download_model.ps1 ${{ matrix.model }} cd build - .\Release\cli_demo ..\${{ matrix.model }} prompt.txt + .\Release\cli_demo ..\Qwen1.5-0.5B-Chat-MNN\config.json ..\resource\prompt.txt Exit 0 \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dda6c4c..e26adad7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,11 +17,17 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") endif() -# include dir -include_directories(${CMAKE_CURRENT_LIST_DIR}/include/) +# compile MNN first +set(MNN_LOW_MEMORY ON CACHE BOOL "Open MNN_LOW_MEMORY" FORCE) +set(MNN_SUPPORT_TRANSFORMER_FUSE ON CACHE BOOL "Open MNN_SUPPORT_TRANSFORMER_FUSE" FORCE) +# set(MNN_ARM82 ON CACHE BOOL "Open MNN_ARM82" FORCE) +add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/MNN) -# libs dir -link_directories(${CMAKE_CURRENT_LIST_DIR}/libs) +# include dir +include_directories(${CMAKE_CURRENT_LIST_DIR}/include/ + ${CMAKE_CURRENT_LIST_DIR}/MNN/include/ + ${CMAKE_CURRENT_LIST_DIR}/MNN/tools/cv/include/cv/ + ) # source files FILE(GLOB SRCS ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) @@ -53,8 +59,8 @@ add_executable(knowledge_demo ${CMAKE_CURRENT_LIST_DIR}/demo/knowledge_demo.cpp) add_executable(pipeline_demo ${CMAKE_CURRENT_LIST_DIR}/demo/pipeline_demo.cpp) if (BUILD_FOR_ANDROID) - add_library(MNN SHARED IMPORTED) - add_library(MNN_Express SHARED IMPORTED) + # add_library(MNN SHARED IMPORTED) + # add_library(MNN_Express SHARED IMPORTED) set_target_properties( MNN PROPERTIES IMPORTED_LOCATION diff --git a/libs/.gitkeep b/libs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/script/android_build.sh b/script/android_build.sh index fab7e63c..10246543 100755 --- a/script/android_build.sh +++ b/script/android_build.sh @@ -1,18 +1,3 @@ -# 1. clone MNN -git clone https://github.com/alibaba/MNN.git --depth=1 - -# 2. build MNN -cd MNN/project/android -mkdir build -cd build -../build_64.sh -DMNN_LOW_MEMORY=ON -cd ../../../.. - -# 3. copy headers and libs -cp -r MNN/include/MNN include -cp MNN/project/android/build/libMNN.so MNN/project/android/build/libMNN_Express.so libs - -# 4. build mnn-llm android mkdir android_build cd android_build cmake .. \ @@ -20,6 +5,7 @@ cmake .. \ -DANDROID_STL=c++_static \ -DANDROID_ABI="arm64-v8a" \ -DANDROID_NATIVE_API_LEVEL=android-21 \ +-DMNN_ARM82=ON \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_FOR_ANDROID=ON make -j4 diff --git a/script/build.ps1 b/script/build.ps1 index 3ab027cd..750ef37c 100644 --- a/script/build.ps1 +++ b/script/build.ps1 @@ -1,26 +1,9 @@ -# 1. clone MNN -git clone https://github.com/alibaba/MNN.git --depth=1 - -# 2. build MNN -cd MNN mkdir build -cd build -cmake -DMNN_LOW_MEMORY=ON -DMNN_WIN_RUNTIME_MT=ON .. -cmake --build . --config Release -j 4 -cd ../.. -# 3. copy headers and libs -cp -r MNN\include\MNN include -cp MNN\build\Release\MNN.lib libs -cp MNN\build\Release\MNN.dll libs - -# 4. copy pthread Expand-Archive .\resource\win_pthreads.zip -cp .\win_pthreads\Pre-built.2\lib\x64\pthreadVC2.lib libs +cp .\win_pthreads\Pre-built.2\lib\x64\pthreadVC2.lib build cp .\win_pthreads\Pre-built.2\include\*.h .\include\ -# 5. build mnn-llm -mkdir build cd build cmake .. cmake --build . --config Release -j 4 diff --git a/script/build.sh b/script/build.sh index b9428088..f5b8c7f4 100755 --- a/script/build.sh +++ b/script/build.sh @@ -1,22 +1,3 @@ -# 1. clone MNN -git clone https://github.com/alibaba/MNN.git --depth=1 - -# 2. build MNN -cd MNN -mkdir build -cd build -cmake -DMNN_LOW_MEMORY=ON .. -make -j4 -cd ../.. - -# 3. copy headers and libs -cp -r MNN/include/MNN include -# linux -cp MNN/build/libMNN.so MNN/build/express/libMNN_Express.so libs 2> /dev/null || : -# macos -cp MNN/build/libMNN.dylib MNN/build/express/libMNN_Express.dylib libs 2> /dev/null || : - -# 4. build mnn-llm mkdir build cd build cmake .. diff --git a/script/build_gpu.sh b/script/build_gpu.sh deleted file mode 100755 index b9428088..00000000 --- a/script/build_gpu.sh +++ /dev/null @@ -1,24 +0,0 @@ -# 1. clone MNN -git clone https://github.com/alibaba/MNN.git --depth=1 - -# 2. build MNN -cd MNN -mkdir build -cd build -cmake -DMNN_LOW_MEMORY=ON .. -make -j4 -cd ../.. - -# 3. copy headers and libs -cp -r MNN/include/MNN include -# linux -cp MNN/build/libMNN.so MNN/build/express/libMNN_Express.so libs 2> /dev/null || : -# macos -cp MNN/build/libMNN.dylib MNN/build/express/libMNN_Express.dylib libs 2> /dev/null || : - -# 4. build mnn-llm -mkdir build -cd build -cmake .. -make -j4 -cd .. \ No newline at end of file diff --git a/script/download_model.ps1 b/script/download_model.ps1 deleted file mode 100644 index 78f72df0..00000000 --- a/script/download_model.ps1 +++ /dev/null @@ -1,19 +0,0 @@ -param( - $model -) -mkdir $model -cd $model -$block_num = 27 -if ($model.Contains('7b')) { - $block_num = 31 -} -if ($model.Contains('1.8b')) { - $block_num = 23 -} -Invoke-WebRequest -Uri https://github.com/wangzhaode/mnn-llm/releases/download/$model-mnn/tokenizer.txt -OutFile tokenizer.txt -Invoke-WebRequest -Uri https://github.com/wangzhaode/mnn-llm/releases/download/$model-mnn/embedding.mnn -OutFile embedding.mnn -Invoke-WebRequest -Uri https://github.com/wangzhaode/mnn-llm/releases/download/$model-mnn/lm.mnn -OutFile lm.mnn -for ($i=0; $i -lt $block_num; $i=$i+1) { - Invoke-WebRequest -Uri https://github.com/wangzhaode/mnn-llm/releases/download/$model-mnn/block_$i.mnn -OutFile block_$i.mnn -} -cd .. diff --git a/script/download_model.sh b/script/download_model.sh deleted file mode 100755 index 82ae78d6..00000000 --- a/script/download_model.sh +++ /dev/null @@ -1,26 +0,0 @@ -if [ $# -lt 1 ]; then - echo 'Usage: ./download_model.sh $model' - exit 1 -fi - -model=$1 -mkdir $model -cd $model -is_7b=`echo $model | grep '7b'` -is_1_8b=`echo $model | grep '1.8b'` -block_num=27 -if [ $is_7b ]; then - block_num=31 -fi -if [ $is_1_8b ]; then - block_num=23 -fi -# download models -wget -c -nv https://github.com/wangzhaode/mnn-llm/releases/download/$model-mnn/tokenizer.txt -wget -c -nv https://github.com/wangzhaode/mnn-llm/releases/download/$model-mnn/embedding.mnn -wget -c -nv https://github.com/wangzhaode/mnn-llm/releases/download/$model-mnn/lm.mnn -for i in `seq 0 $block_num` -do - wget -c -nv https://github.com/wangzhaode/mnn-llm/releases/download/$model-mnn/block_$i.mnn -done -cd .. diff --git a/script/model_test.ps1 b/script/model_test.ps1 deleted file mode 100644 index f983cec1..00000000 --- a/script/model_test.ps1 +++ /dev/null @@ -1,27 +0,0 @@ -Param( - [String]$model -) - -function model_test($model) { - Write-Output "test model : ${model}" - powershell .\script\download_model.ps1 ${model} - cd build - .\Release\cli_demo ..\${model} prompt.txt - cd .. -} - -function test_all() { - model_test chatglm-6b - model_test chatglm2-6b - model_test chatglm3-6b - model_test codegeex2-6b - model_test qwen-7b-chat - model_test baichuan2-7b-chat - model_test llama2-7b-chat -} - -if ($model -eq "all") { - test_all -} else { - model_test $model -} \ No newline at end of file diff --git a/script/model_test.sh b/script/model_test.sh deleted file mode 100755 index 4c43bca3..00000000 --- a/script/model_test.sh +++ /dev/null @@ -1,28 +0,0 @@ -model_test() { - echo 'test model: ' $1 - ./script/download_model.sh $1 - cd build - # linux - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. - # macos - export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:. - ./cli_demo ../$1 prompt.txt - cd .. -} - -test_all() { - model_test qwen-1.8b - model_test chatglm-6b - model_test chatglm2-6b - model_test chatglm3-6b - model_test codegeex2-6b - model_test qwen-7b-chat - model_test baichuan2-7b-chat - model_test llama2-7b-chat -} - -if [ $1 -eq 'all' ]; then - test_all -else - model_test $1 -fi diff --git a/script/package.ps1 b/script/package.ps1 deleted file mode 100755 index b41b7c4f..00000000 --- a/script/package.ps1 +++ /dev/null @@ -1,17 +0,0 @@ -Param( - [String]$package_path -) - -mkdir $package_path -cd $package_path -mkdir resource -mkdir build -cd .. - -# copy file -echo 'copy files ...' -cp -r script $package_path -cp resource\prompt.txt $package_path\build -cp -r build\Release $package_path\build -cp libs\*.dll $package_path\build\Release -cp libs\*.lib $package_path\build\Release diff --git a/script/package.sh b/script/package.sh deleted file mode 100755 index 502e7b48..00000000 --- a/script/package.sh +++ /dev/null @@ -1,23 +0,0 @@ -if [ $# -lt 1 ]; then - echo 'Usage: ./package.sh $package_path' - exit 1 -fi - -package_path=$1 - -# make dir -mkdir -p $package_path -cd $package_path -mkdir resource -mkdir build -cd .. - -# copy file -echo 'copy files ...' -cp -r script $package_path -cp build/*_demo $package_path/build -cp resource/prompt.txt $package_path/build -# linux -cp libs/*.so build/*.so $package_path/build 2> /dev/null || : -# macos -cp libs/*.dylib build/*.dylib $package_path/build 2> /dev/null || :