Skip to content

Commit

Permalink
Fix Whisper.net.Runtime.NoAvx package. (#240)
Browse files Browse the repository at this point in the history
* Tried to fix noavx issue

* Added noavx

* Tried to fix avx support
  • Loading branch information
sandrohanea authored Oct 30, 2024
1 parent 3f2e75d commit 5ddb2c7
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 22 deletions.
40 changes: 21 additions & 19 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
BUILD_TYPE=Release
CMAKE_PARAMETERS=-DCMAKE_BUILD_TYPE=$(BUILD_TYPE)
COREML_SUPPORT=$(CMAKE_PARAMETERS) -DWHISPER_COREML=ON -DWHISPER_COREML_ALLOW_FALLBACK=ON
AVX_SUPPORT=-DGGML_AVX=ON -DGGML_AVX2=ON -DGGML_FMA=ON
NOAVX_SUPPORT=-DGGML_AVX=OFF -DGGML_AVX2=OFF -DGGML_FMA=OFF
NDK := $(if $(strip $(NDK_PATH)),$(NDK_PATH),$(shell test -d $(HOME)/Library/Developer/Xamarin/android-sdk-macosx/ndk-bundle && echo $(HOME)/Library/Developer/Xamarin/android-sdk-macosx/ndk-bundle || echo ""))

nuget:
Expand Down Expand Up @@ -52,63 +54,63 @@ wasm:

linux_x64:
rm -rf build/linux-x64
cmake -S . -B build/linux-x64 -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=x86_64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DGGML_NATIVE=ON
cmake -S . -B build/linux-x64 -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=x86_64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=x86_64 $(AVX_SUPPORT)
cmake --build build/linux-x64 --config $(BUILD_TYPE)
mkdir -p runtimes/Whisper.net.Runtime/linux-x64
cp build/linux-x64/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime/linux-x64/libwhisper.so
cp build/linux-x64/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime/linux-x64/libggml.so

linux_arm64:
rm -rf build/linux-arm64
cmake -S . -B build/linux-arm64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DGGML_NATIVE=ON
cmake -S . -B build/linux-arm64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 $(AVX_SUPPORT)
cmake --build build/linux-arm64 --config $(BUILD_TYPE)
mkdir -p runtimes/Whisper.net.Runtime/linux-arm64
cp build/linux-arm64/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime/linux-arm64/libwhisper.so
cp build/linux-arm64/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime/linux-arm64/libggml.so

linux_arm:
rm -rf build/linux-arm
cmake -S . -B build/linux-arm -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm -DGGML_NATIVE=ON
cmake -S . -B build/linux-arm -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm $(AVX_SUPPORT)
cmake --build build/linux-arm --config $(BUILD_TYPE)
mkdir -p runtimes/Whisper.net.Runtime/linux-arm
cp build/linux-arm/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime/linux-arm/libwhisper.so
cp build/linux-arm/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime/linux-arm/libggml.so

linux_x64_cuda:
rm -rf build/linux-x64-cuda
cmake -S . -B build/linux-x64-cuda -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=x86_64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DGGML_CUDA=ON -DGGML_NATIVE=ON
cmake -S . -B build/linux-x64-cuda -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=x86_64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DGGML_CUDA=ON $(AVX_SUPPORT)
cmake --build build/linux-x64-cuda --config $(BUILD_TYPE)
mkdir -p runtimes/Whisper.net.Runtime.Cuda.Linux/linux-x64
cp build/linux-x64-cuda/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime.Cuda.Linux/linux-x64/libwhisper.so
cp build/linux-x64-cuda/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime.Cuda.Linux/linux-x64/libggml.so

linux_x64_noavx:
rm -rf build/linux-x64-noavx
cmake -S . -B build/linux-x64-noavx -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=x86_64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DGGML_AVX=OFF -DGGML_AVX2=OFF
cmake -S . -B build/linux-x64-noavx -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=x86_64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=x86_64 $(NOAVX_SUPPORT)
cmake --build build/linux-x64-noavx --config $(BUILD_TYPE)
mkdir -p runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-x64-noavx
cp build/linux-x64-noavx/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-x64-noavx/libwhisper.so
cp build/linux-x64-noavx/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-x64-noavx/libggml.so
mkdir -p runtimes/Whisper.net.Runtime.NoAvx/linux-x64
cp build/linux-x64-noavx/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime.NoAvx/linux-x64/libwhisper.so
cp build/linux-x64-noavx/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime.NoAvx/linux-x64/libggml.so

linux_arm64_noavx:
rm -rf build/linux-arm64-noavx
cmake -S . -B build/linux-arm64-noavx -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DGGML_AVX=OFF -DGGML_AVX2=OFF
cmake -S . -B build/linux-arm64-noavx -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 $(NOAVX_SUPPORT)
cmake --build build/linux-arm64-noavx --config $(BUILD_TYPE)
mkdir -p runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-arm64-noavx
cp build/linux-arm64-noavx/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-arm64-noavx/libwhisper.so
cp build/linux-arm64-noavx/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-arm64-noavx/libggml.so
mkdir -p runtimes/Whisper.net.Runtime.NoAvx/linux-arm64
cp build/linux-arm64-noavx/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime.NoAvx/linux-arm64/libwhisper.so
cp build/linux-arm64-noavx/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime.NoAvx/linux-arm64/libggml.so

linux_arm_noavx:
rm -rf build/linux-arm-noavx
cmake -S . -B build/linux-arm-noavx -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm -DGGML_AVX=OFF -DGGML_AVX2=OFF
cmake -S . -B build/linux-arm-noavx -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm $(NOAVX_SUPPORT)
cmake --build build/linux-arm-noavx --config $(BUILD_TYPE)
mkdir -p runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-arm-noavx
cp build/linux-arm-noavx/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-arm-noavx/libwhisper.so
cp build/linux-arm-noavx/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime.NoAvx.Linux/linux-arm-noavx/libggml.so
mkdir -p runtimes/Whisper.net.Runtime.NoAvx/linux-arm
cp build/linux-arm-noavx/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime.NoAvx/linux-arm/libwhisper.so
cp build/linux-arm-noavx/whisper.cpp/ggml/src/libggml.so ./runtimes/Whisper.net.Runtime.NoAvx/linux-arm/libggml.so

linux_x64_openvino:
rm -rf build/linux-x64-openvino
cmake -S . -B build/linux-x64-openvino -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=x86_64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DWHISPER_OPENVINO=ON -DGGML_NATIVE=ON
cmake -S . -B build/linux-x64-openvino -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=x86_64-linux-gnu-g++ -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DWHISPER_OPENVINO=ON $(AVX_SUPPORT)
cmake --build build/linux-x64-openvino --config $(BUILD_TYPE)
mkdir -p runtimes/Whisper.net.Runtime.OpenVino/linux-x64
cp build/linux-x64-openvino/whisper.cpp/src/libwhisper.so ./runtimes/Whisper.net.Runtime.OpenVino/linux-x64/libwhisper.so
Expand Down Expand Up @@ -167,15 +169,15 @@ ios_coreml:

maccatalyst_arm64:
rm -rf build/maccatalyst_arm64
cmake $(CMAKE_PARAMETERS) -S . -B build/maccatalyst_arm64 -DCMAKE_SYSTEM_PROCESSOR=arm -DCMAKE_HOST_SYSTEM_PROCESSOR=arm64 -DGGML_METAL=OFF -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_ARCHITECTURES="arm64" -DCMAKE_CXX_FLAGS="-target arm64-apple-ios13.1-macabi" -DCMAKE_C_FLAGS="-target arm64-apple-ios13.1-macabi" -DGGML_NATIVE=ON
cmake $(CMAKE_PARAMETERS) -S . -B build/maccatalyst_arm64 -DCMAKE_SYSTEM_PROCESSOR=arm -DCMAKE_HOST_SYSTEM_PROCESSOR=arm64 -DGGML_METAL=OFF -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_ARCHITECTURES="arm64" -DCMAKE_CXX_FLAGS="-target arm64-apple-ios13.1-macabi" -DCMAKE_C_FLAGS="-target arm64-apple-ios13.1-macabi"
cmake --build build/maccatalyst_arm64
mkdir -p runtimes/Whisper.net.Runtime/maccatalyst
cp build/maccatalyst_arm64/whisper.cpp/src/libwhisper.dylib runtimes/Whisper.net.Runtime/maccatalyst/libwhisper.dylib
cp build/maccatalyst_arm64/whisper.cpp/ggml/src/libggml.dylib runtimes/Whisper.net.Runtime/maccatalyst/libggml.dylib

maccatalyst_arm64_coreml:
rm -rf build/maccatalyst-arm64-coreml
cmake $(COREML_SUPPORT) -S . -B build/maccatalyst-arm64-coreml -DCMAKE_SYSTEM_PROCESSOR=arm -DCMAKE_HOST_SYSTEM_PROCESSOR=arm64 -DGGML_METAL=OFF -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_ARCHITECTURES="arm64" -DCMAKE_CXX_FLAGS="-target arm64-apple-ios13.1-macabi" -DCMAKE_C_FLAGS="-target arm64-apple-ios13.1-macabi" -DGGML_NATIVE=ON
cmake $(COREML_SUPPORT) -S . -B build/maccatalyst-arm64-coreml -DCMAKE_SYSTEM_PROCESSOR=arm -DCMAKE_HOST_SYSTEM_PROCESSOR=arm64 -DGGML_METAL=OFF -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_ARCHITECTURES="arm64" -DCMAKE_CXX_FLAGS="-target arm64-apple-ios13.1-macabi" -DCMAKE_C_FLAGS="-target arm64-apple-ios13.1-macabi"
cmake --build build/maccatalyst-arm64-coreml
mkdir -p runtimes/Whisper.net.Runtime.CoreML/maccatalyst
cp build/maccatalyst-arm64-coreml/whisper.cpp/src/libwhisper.coreml.dylib runtimes/Whisper.net.Runtime.CoreML/maccatalyst/libwhisper.coreml.dylib
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<!-- Start Linux -->
<None Visible="false" Include="$(MSBuildThisFileDirectory)linux-arm64\libwhisper.so">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
Expand Down Expand Up @@ -37,6 +38,44 @@
<TargetPath>runtimes/noavx/linux-arm/libggml.so</TargetPath>
</None>
<!-- End Linux -->
<!-- Start Windows -->
<None Visible="false" Include="$(MSBuildThisFileDirectory)win-arm64\whisper.dll">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>runtimes/noavx/win-arm64/whisper.dll</TargetPath>
</None>
<None Visible="false" Include="$(MSBuildThisFileDirectory)win-arm64\ggml.dll">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>runtimes/noavx/win-arm64/ggml.dll</TargetPath>
</None>
<None Visible="false" Include="$(MSBuildThisFileDirectory)win-x64\whisper.dll">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>runtimes/noavx/win-x64/whisper.dll</TargetPath>
</None>
<None Visible="false" Include="$(MSBuildThisFileDirectory)win-x64\ggml.dll">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>runtimes/noavx/win-x64/ggml.dll</TargetPath>
</None>
<None Visible="false" Include="$(MSBuildThisFileDirectory)win-x86\whisper.dll">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>runtimes/noavx/win-x86/whisper.ggml</TargetPath>
</None>
<None Visible="false" Include="$(MSBuildThisFileDirectory)win-x86\ggml.dll">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>runtimes/noavx/win-x86/ggml.dll</TargetPath>
</None>
<!-- End Windows -->
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion whisper.cpp
Submodule whisper.cpp updated 38 files
+75 −0 .github/workflows/bindings-ruby.yml
+0 −23 .github/workflows/bindings-ruby.yml.disabled
+32 −6 Makefile
+39 −22 README.md
+3 −0 bindings/ruby/.gitignore
+111 −0 bindings/ruby/README.md
+57 −10 bindings/ruby/Rakefile
+27 −1 bindings/ruby/ext/.gitignore
+216 −18 bindings/ruby/ext/extconf.rb
+0 −141 bindings/ruby/ext/ggml-backend-impl.h
+0 −2,095 bindings/ruby/ext/ggml-backend.c
+0 −233 bindings/ruby/ext/ggml-backend.h
+0 −1,853 bindings/ruby/ext/ggml-common.h
+0 −43 bindings/ruby/ext/ggml-cuda.h
+0 −272 bindings/ruby/ext/ggml-impl.h
+0 −46 bindings/ruby/ext/ggml-kompute.h
+0 −66 bindings/ruby/ext/ggml-metal.h
+0 −36 bindings/ruby/ext/ggml-opencl.h
+0 −12,678 bindings/ruby/ext/ggml-quants.c
+0 −133 bindings/ruby/ext/ggml-quants.h
+0 −49 bindings/ruby/ext/ggml-sycl.h
+0 −29 bindings/ruby/ext/ggml-vulkan.h
+14 −0 bindings/ruby/ext/metal-embed.mk
+875 −3 bindings/ruby/ext/ruby_whisper.cpp
+10 −0 bindings/ruby/ext/ruby_whisper.h
+29 −0 bindings/ruby/extsources.yaml
+163 −0 bindings/ruby/tests/test_callback.rb
+31 −0 bindings/ruby/tests/test_package.rb
+155 −0 bindings/ruby/tests/test_params.rb
+87 −0 bindings/ruby/tests/test_segment.rb
+70 −102 bindings/ruby/tests/test_whisper.rb
+11 −3 bindings/ruby/whispercpp.gemspec
+1 −0 examples/main/main.cpp
+1 −0 include/whisper.h
+5 −1 models/convert-h5-to-ggml.py
+1 −1 scripts/bench-all.sh
+11 −4 src/whisper.cpp
+1 −1 tests/run-tests.sh
6 changes: 4 additions & 2 deletions windows-scripts.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ function BuildWindows() {
}

$buildDirectory = "build/win-$Arch"
$options = @("-S", ".")
$options = @("-S", ".", "-DGGML_NATIVE=OFF");
$avxOptions = @("-DGGML_AVX=ON", "-DGGML_AVX2=ON", "-DGGML_FMA=ON");

$runtimePath = "./runtimes/Whisper.net.Runtime"

Expand All @@ -77,7 +78,7 @@ function BuildWindows() {
}

if ($NoAvx) {
$options += "-DGGML_AVX=OFF -DGGML_AVX2=OFF"
$avxOptions = @("-DGGML_AVX=OFF", "-DGGML_AVX2=OFF", "-DGGML_FMA=OFF");
$buildDirectory += "-noavx"
$runtimePath += ".NoAvx"
}
Expand All @@ -86,6 +87,7 @@ function BuildWindows() {
$options += $buildDirectory
$options += "-A"
$options += $platform
$options += $avxOptions

if ((Test-Path $buildDirectory)) {
Write-Host "Deleting old build files for $buildDirectory";
Expand Down

0 comments on commit 5ddb2c7

Please sign in to comment.