diff --git a/.gitignore b/.gitignore index b445ed0..23a2861 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ out/ # baza i cache pochodnych — generowane, nie wersjonowane data/ + +# modele whisper.cpp montowane do kontenera — kilkaset MB, nie wersjonujemy +models/ diff --git a/Dockerfile b/Dockerfile index 5873f79..c021906 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,14 +16,22 @@ RUN ./gradlew --no-daemon installDist \ && grep '^coreVersion=' gradle.properties | cut -d= -f2 > /src/core-version # whisper.cpp budowany ze źródeł: w repozytoriach Debiana go nie ma, a binarka -# z hosta jest nie do użycia — tam macOS, tu Linux +# z hosta jest nie do użycia — tam macOS, tu Linux. +# +# GGML_NATIVE=OFF, bo domyślnie ggml stroi kod pod procesor maszyny budującej +# (na arm64 przekazuje -mcpu=native+nodotprod..., czego GCC 12 nie rozumie), +# a obraz i tak ma chodzić także na innym sprzęcie niż ten, na którym powstał FROM debian:bookworm-slim AS whisper RUN apt-get update \ && apt-get install -y --no-install-recommends git cmake build-essential ca-certificates \ && git clone --depth 1 --branch v1.7.4 https://github.com/ggerganov/whisper.cpp /src \ && cmake -S /src -B /src/build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON \ + -DGGML_NATIVE=OFF -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_EXAMPLES=ON \ && cmake --build /src/build --target whisper-cli -j "$(nproc)" \ - && cmake --install /src/build \ + && mkdir -p /out/bin /out/lib \ + && cp /src/build/bin/whisper-cli /out/bin/ \ + && find /src/build \( -name 'libwhisper.so*' -o -name 'libggml*.so' \) \ + -exec cp -P {} /out/lib/ \; \ && rm -rf /var/lib/apt/lists/* /src FROM eclipse-temurin:21-jre @@ -40,9 +48,10 @@ VOLUME ["/data"] RUN apt-get update \ && apt-get install -y --no-install-recommends ffmpeg \ && rm -rf /var/lib/apt/lists/* -COPY --from=whisper /usr/local/bin/whisper-cli /usr/local/bin/whisper-cli -COPY --from=whisper /usr/local/lib/libwhisper.so* /usr/local/lib/ -COPY --from=whisper /usr/local/lib/libggml*.so /usr/local/lib/ +# kopiujemy wprost z drzewa budowania: `cmake --install` chciałby zainstalować +# wszystkie przykłady, a budujemy tylko whisper-cli +COPY --from=whisper /out/bin/whisper-cli /usr/local/bin/whisper-cli +COPY --from=whisper /out/lib/ /usr/local/lib/ RUN ldconfig ENV WHISPER_BIN=/usr/local/bin/whisper-cli # file.encoding ustawia entrypoint przez JAVA_OPTS; JAVA_TOOL_OPTIONS robiłoby