| ARG RELEASE |
| ARG LAUNCHPAD_BUILD_ARCH |
| LABEL org.opencontainers.image.ref.name=ubuntu |
| LABEL org.opencontainers.image.version=24.04 |
| ADD file:3f78aa860931e0853077f09eb31eddbeeef8a9dd70977305b4876aa176770721 in / |
| CMD ["/bin/bash"] |
| ARG BASE_IMAGE=ubuntu:24.04 |
| SHELL [/bin/bash -c] |
| COPY /uv /bin/uv # buildkit |
| RUN |1 BASE_IMAGE=ubuntu:24.04 /bin/bash -c set -ux; n=0; until [ "$n" -ge 5 ]; do if DEBIAN_FRONTEND=noninteractive apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends python3 python3-pip python3-dev libfftw3-double3=3.3.10-1ubuntu3 libfftw3-dev libyaml-0-2=0.2.5-1build1 libyaml-dev libsamplerate0=0.2.2-4build1 libsamplerate0-dev libsndfile1=1.2.2-1ubuntu5.24.04.1 libsndfile1-dev libopenblas-dev liblapack-dev=3.12.0-3build1.1 libpq-dev postgresql-client ffmpeg wget curl supervisor procps gcc g++ git vim redis-tools strace iputils-ping "$(if [[ "$BASE_IMAGE" =~ ^nvidia/cuda:([0-9]+)\.([0-9]+).+$ ]]; then echo "cuda-compiler-${BASH_REMATCH[1]}-${BASH_REMATCH[2]}"; fi)"; then break; fi; n=$((n+1)); echo "apt-get attempt $n failed — retrying in $((n*n))s"; sleep $((n*n)); done; rm -rf /var/lib/apt/lists/* && apt-get remove -y python3-numpy || true && apt-get autoremove -y || true && rm -f /usr/lib/python3.*/EXTERNALLY-MANAGED # buildkit |
| ENV LANG=C.UTF-8 PYTHONUNBUFFERED=1 DEBIAN_FRONTEND=noninteractive TZ=UTC HF_HOME=/app/.cache/huggingface HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 |
| WORKDIR /app |
| RUN |1 BASE_IMAGE=ubuntu:24.04 /bin/bash -c set -eux; apt-get update && apt-get install -y --no-install-recommends tzdata && rm -rf /var/lib/apt/lists/* # buildkit |
| COPY /usr/local/lib/python3.12/dist-packages/ /usr/local/lib/python3.12/dist-packages/ # buildkit |
| COPY /usr/local/bin/ /usr/local/bin/ # buildkit |
| COPY /app/.cache/huggingface/ /app/.cache/huggingface/ # buildkit |
| COPY /usr/local/bin/ /usr/local/bin/ # buildkit |
| RUN |1 BASE_IMAGE=ubuntu:24.04 /bin/bash -c ls -lah /app/.cache/huggingface/ && echo "HuggingFace cache contents:" && du -sh /app/.cache/huggingface/* || echo "Cache directory empty!" # buildkit |
| COPY /app/model/*.onnx /app/model/ # buildkit |
| RUN |1 BASE_IMAGE=ubuntu:24.04 /bin/bash -c set -eux; dclap_url="https://github.com/NeptuneHub/AudioMuse-AI-DCLAP/releases/download/v1"; text_url="https://github.com/NeptuneHub/AudioMuse-AI/releases/download/v4.0.0-model"; arch=$(uname -m); echo "Architecture detected: $arch - Downloading CLAP ONNX models..."; n=0; until [ "$n" -ge 5 ]; do if wget --no-verbose --tries=3 --retry-connrefused --waitretry=10 --header="User-Agent: AudioMuse-Docker/1.0 (+https://github.com/NeptuneHub/AudioMuse-AI)" -O "/app/model/model_epoch_36.onnx" "$dclap_url/model_epoch_36.onnx"; then echo "✓ DCLAP audio model downloaded"; break; fi; n=$((n+1)); echo "Download attempt $n for DCLAP audio model failed — retrying in $((n*n))s"; sleep $((n*n)); done; if [ "$n" -ge 5 ]; then echo "ERROR: Failed to download DCLAP audio model after 5 attempts"; exit 1; fi; n=0; until [ "$n" -ge 5 ]; do if wget --no-verbose --tries=3 --retry-connrefused --waitretry=10 --header="User-Agent: AudioMuse-Docker/1.0 (+https://github.com/NeptuneHub/AudioMuse-AI)" -O "/app/model/model_epoch_36.onnx.data" "$dclap_url/model_epoch_36.onnx.data"; then echo "✓ DCLAP audio model data downloaded"; break; fi; n=$((n+1)); echo "Download attempt $n for DCLAP audio data failed — retrying in $((n*n))s"; sleep $((n*n)); done; if [ "$n" -ge 5 ]; then echo "ERROR: Failed to download DCLAP audio model data after 5 attempts"; exit 1; fi; text_model="clap_text_model.onnx"; n=0; until [ "$n" -ge 5 ]; do if wget --no-verbose --tries=3 --retry-connrefused --waitretry=10 --header="User-Agent: AudioMuse-Docker/1.0 (+https://github.com/NeptuneHub/AudioMuse-AI)" -O "/app/model/$text_model" "$text_url/$text_model"; then echo "✓ CLAP text model downloaded"; break; fi; n=$((n+1)); echo "Download attempt $n for text model failed — retrying in $((n*n))s"; sleep $((n*n)); done; if [ "$n" -ge 5 ]; then echo "ERROR: Failed to download CLAP text model after 5 attempts"; exit 1; fi; if [ ! -f "/app/model/model_epoch_36.onnx" ]; then echo "ERROR: DCLAP audio model file not created"; exit 1; fi; if [ ! -f "/app/model/model_epoch_36.onnx.data" ]; then echo "ERROR: DCLAP audio model data file not created"; exit 1; fi; if [ ! -f "/app/model/$text_model" ]; then echo "ERROR: CLAP text model file not created"; exit 1; fi; file_size=$(stat -c%s "/app/model/$text_model" 2>/dev/null || stat -f%z "/app/model/$text_model" 2>/dev/null || echo "0"); if [ "$file_size" -lt 450000000 ]; then echo "ERROR: CLAP text model file is too small (expected ~478MB, got $file_size bytes)"; exit 1; fi; echo "✓ CLAP models downloaded successfully (arch: $arch)"; ls -lh /app/model/model_epoch_36.onnx /app/model/model_epoch_36.onnx.data "/app/model/$text_model" # buildkit |
| RUN |1 BASE_IMAGE=ubuntu:24.04 /bin/bash -c set -eux; if false; then base_url="https://github.com/NeptuneHub/AudioMuse-AI/releases/download/v3.0.0-model"; mulan_dir="/app/model/mulan"; mkdir -p "$mulan_dir"; files=( "mulan_audio_encoder.onnx" "mulan_audio_encoder.onnx.data" "mulan_text_encoder.onnx" "mulan_text_encoder.onnx.data" "mulan_tokenizer.tar.gz" ); echo "Downloading MuQ-MuLan ONNX models (~2.5GB total)..."; for f in "${files[@]}"; do n=0; until [ "$n" -ge 5 ]; do if wget --no-verbose --tries=3 --retry-connrefused --waitretry=10 --header="User-Agent: AudioMuse-Docker/1.0 (+https://github.com/NeptuneHub/AudioMuse-AI)" -O "$mulan_dir/$f" "$base_url/$f"; then echo "✓ Downloaded: $f"; break; fi; n=$((n+1)); echo "Download attempt $n for $f failed — retrying in $((n*n))s"; sleep $((n*n)); done; if [ "$n" -ge 5 ]; then echo "ERROR: Failed to download $f after 5 attempts"; exit 1; fi; done; echo "Extracting MuLan tokenizer..."; tar -xzf "$mulan_dir/mulan_tokenizer.tar.gz" -C "$mulan_dir"; rm "$mulan_dir/mulan_tokenizer.tar.gz"; for f in mulan_audio_encoder.onnx mulan_audio_encoder.onnx.data mulan_text_encoder.onnx mulan_text_encoder.onnx.data sentencepiece.bpe.model tokenizer_config.json special_tokens_map.json; do if [ ! -f "$mulan_dir/$f" ]; then echo "ERROR: Missing file: $f"; exit 1; fi; done; echo "✓ MuQ-MuLan ONNX models ready"; ls -lh "$mulan_dir"; fi # buildkit |
| COPY . /app # buildkit |
| COPY deployment/supervisord.conf /etc/supervisor/conf.d/supervisord.conf # buildkit |
| ENV ONEDNN_DEFAULT_FPMATH_MODE=STRICT |
| ENV ORT_DISABLE_ALL_OPTIMIZATIONS=1 ORT_ENABLE_CPU_FP16_OPS=0 |
| ENV ORT_DISABLE_AVX512=1 ORT_FORCE_SHARED_PROVIDER=1 |
| ENV MKL_ENABLE_INSTRUCTIONS=AVX2 MKL_DYNAMIC=FALSE |
| ENV ORT_DISABLE_MEMORY_PATTERN_OPTIMIZATION=1 |
| ENV PYTHONPATH=/usr/local/lib/python3/dist-packages:/app |
| EXPOSE [8000/tcp] |
| WORKDIR /workspace |
| CMD ["bash" "-c" "if [ -n \"$TZ\" ] && [ -f \"/usr/share/zoneinfo/$TZ\" ]; then ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone; elif [ -n \"$TZ\" ]; then echo \"Warning: timezone '$TZ' not found in /usr/share/zoneinfo\" >&2; fi; if [ \"$SERVICE_TYPE\" = \"worker\" ]; then echo 'Starting worker processes via supervisord...' && /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf; else echo 'Starting web service...' && gunicorn --bind 0.0.0.0:8000 --workers 1 --timeout 300 app:app; fi"] |