diff --git a/ct/localai.sh b/ct/localai.sh index 20ecfabaf..2bb39f514 100644 --- a/ct/localai.sh +++ b/ct/localai.sh @@ -37,6 +37,15 @@ function update_script() { exit fi + # Older installs have no CPU pin; on a host with a GPU but no driver in the + # container every model then ends in "backend not found". + if ! grep -q '^LOCALAI_FORCE_META_BACKEND_CAPABILITY=' /opt/localai.env 2>/dev/null && + ! ldconfig -p 2>/dev/null | grep -qE 'libcuda[.]so|libamdhip64[.]so|libze_intel_gpu[.]so|libze_loader[.]so'; then + echo "LOCALAI_FORCE_META_BACKEND_CAPABILITY=default" >>/opt/localai.env + systemctl restart localai + msg_ok "Pinned LocalAI to the CPU backends (no GPU runtime in the container)" + fi + if check_for_gh_release "localai" "mudler/LocalAI"; then msg_info "Stopping Service" systemctl stop localai diff --git a/install/localai-install.sh b/install/localai-install.sh index 2171e2c1e..c5c1ecd53 100644 --- a/install/localai-install.sh +++ b/install/localai-install.sh @@ -39,6 +39,12 @@ LOCALAI_MODELS_PATH=/opt/localai_data/models LOCALAI_BACKENDS_PATH=/opt/localai_data/backends LOCALAI_LOG_LEVEL=info EOF +# LocalAI picks the backend variant from the GPU it sees in sysfs, which is the +# host's card even when no driver was installed in here, and a CUDA/ROCm/SYCL +# backend then never starts. Pin the CPU variants unless a runtime is present. +if ! ldconfig -p 2>/dev/null | grep -qE 'libcuda[.]so|libamdhip64[.]so|libze_intel_gpu[.]so|libze_loader[.]so'; then + echo "LOCALAI_FORCE_META_BACKEND_CAPABILITY=default" >>/opt/localai.env +fi # LocalAI refuses to start on a wildcard bind with nothing to identify callers, # and binding the wildcard is what makes the container reachable at all. if [[ "$var_auth" == "yes" ]]; then