# Wariant pod NVIDIĘ — do transkrypcji na maszynie z kartą. # # Osobny plik, a nie przełącznik w Dockerfile, bo różnią się obrazy bazowe obu # etapów: whisper.cpp trzeba zbudować przy toolkicie CUDA, a obraz uruchomieniowy # musi nieść biblioteki CUDA i dopiero do nich dołożyć JRE. Wciśnięcie tego w # jeden plik dałoby więcej warunków niż treści. # # Budowanie i uruchomienie (wymaga NVIDIA Container Toolkit po stronie hosta; # na Windowsie: Docker Desktop z WSL2): # docker build -f Dockerfile.cuda -t rex-catalog:cuda . # docker run --rm --gpus all -v D:\Reksio:/media:ro -v katalog:/data \ # -v D:\modele:/models:ro -e WHISPER_MODEL=/models/ggml-medium.bin \ # rex-catalog:cuda transcribe # # Po przeniesieniu bazy z innej maszyny najpierw przypnij ją do kolekcji: # docker run --rm -v D:\Reksio:/media:ro -v katalog:/data rex-catalog:cuda relocate /media FROM eclipse-temurin:21-jdk AS build WORKDIR /src COPY gradlew settings.gradle build.gradle gradle.properties ./ COPY gradle ./gradle COPY vendor ./vendor RUN ./gradlew --no-daemon dependencies --configuration runtimeClasspath > /dev/null 2>&1 || true COPY src ./src RUN ./gradlew --no-daemon installDist \ && grep '^coreVersion=' gradle.properties | cut -d= -f2 > /src/core-version # CMAKE_CUDA_ARCHITECTURES=86 to Ampere z GeForce RTX 30 (3060 ma 8.6). # Budowanie pod wszystkie architektury trwa wielokrotnie dłużej i puchnie, # a i tak nie przyda się na innej karcie bez przebudowy. FROM nvidia/cuda:12.6.2-devel-ubuntu24.04 AS whisper ARG CUDA_ARCH=86 RUN apt-get update \ && apt-get install -y --no-install-recommends git cmake build-essential ca-certificates \ && git clone --depth 1 --branch v1.9.2 https://github.com/ggerganov/whisper.cpp /src \ && cmake -S /src -B /src/build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON \ -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=${CUDA_ARCH} \ -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_EXAMPLES=ON \ && cmake --build /src/build --target whisper-cli -j "$(nproc)" \ && 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 nvidia/cuda:12.6.2-runtime-ubuntu24.04 WORKDIR /app VOLUME ["/data"] ENV CATALOG_DATA=/data ENV WHISPER_BIN=/usr/local/bin/whisper-cli # JRE z repozytoriów, bo obraz bazowy niesie CUDA, a nie Javę; ffmpeg do # przepróbkowania nagrań na 16 kHz mono, których whisper.cpp wymaga RUN apt-get update \ && apt-get install -y --no-install-recommends openjdk-21-jre-headless ffmpeg \ && rm -rf /var/lib/apt/lists/* COPY --from=whisper /out/bin/whisper-cli /usr/local/bin/whisper-cli COPY --from=whisper /out/lib/ /usr/local/lib/ RUN ldconfig COPY --from=build /src/build/install/rex-catalog /app COPY --from=build /src/core-version /app/core-version COPY docker-entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh \ && useradd --uid 10001 --create-home katalog \ && mkdir -p /data /media \ && chown katalog:katalog /data USER katalog EXPOSE 8765 ENTRYPOINT ["/app/entrypoint.sh"] CMD ["serve", "--host", "0.0.0.0"]