mirror of
https://github.com/mudler/LocalAI.git
synced 2025-12-27 00:19:25 -05:00
feat: reduce images size and stop bundling sources Do not copy sources anymore, and reduce packages of the base images by not using builder images. If needed to rebuild, just build the container image from scratch by following the docs. We will slowly try to migrate all backends to the gallery to keep the core small. This PR is a breaking change, it also sets the base folders to /models and /backends instead of /build/models and /build/backends. Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Signed-off-by: Ettore Di Giacinto <mudler@users.noreply.github.com>
139 lines
4.5 KiB
Bash
Executable File
139 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
echo "===> LocalAI All-in-One (AIO) container starting..."
|
|
|
|
GPU_ACCELERATION=false
|
|
GPU_VENDOR=""
|
|
|
|
function check_intel() {
|
|
if lspci | grep -E 'VGA|3D' | grep -iq intel; then
|
|
echo "Intel GPU detected"
|
|
if [ -d /opt/intel ]; then
|
|
GPU_ACCELERATION=true
|
|
GPU_VENDOR=intel
|
|
else
|
|
echo "Intel GPU detected, but Intel GPU drivers are not installed. GPU acceleration will not be available."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function check_nvidia_wsl() {
|
|
if lspci | grep -E 'VGA|3D' | grep -iq "Microsoft Corporation Device 008e"; then
|
|
# We make the assumption this WSL2 cars is NVIDIA, then check for nvidia-smi
|
|
# Make sure the container was run with `--gpus all` as the only required parameter
|
|
echo "NVIDIA GPU detected via WSL2"
|
|
# nvidia-smi should be installed in the container
|
|
if nvidia-smi; then
|
|
GPU_ACCELERATION=true
|
|
GPU_VENDOR=nvidia
|
|
else
|
|
echo "NVIDIA GPU detected via WSL2, but nvidia-smi is not installed. GPU acceleration will not be available."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function check_amd() {
|
|
if lspci | grep -E 'VGA|3D' | grep -iq amd; then
|
|
echo "AMD GPU detected"
|
|
# Check if ROCm is installed
|
|
if [ -d /opt/rocm ]; then
|
|
GPU_ACCELERATION=true
|
|
GPU_VENDOR=amd
|
|
else
|
|
echo "AMD GPU detected, but ROCm is not installed. GPU acceleration will not be available."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function check_nvidia() {
|
|
if lspci | grep -E 'VGA|3D' | grep -iq nvidia; then
|
|
echo "NVIDIA GPU detected"
|
|
# nvidia-smi should be installed in the container
|
|
if nvidia-smi; then
|
|
GPU_ACCELERATION=true
|
|
GPU_VENDOR=nvidia
|
|
else
|
|
echo "NVIDIA GPU detected, but nvidia-smi is not installed. GPU acceleration will not be available."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function check_metal() {
|
|
if system_profiler SPDisplaysDataType | grep -iq 'Metal'; then
|
|
echo "Apple Metal supported GPU detected"
|
|
GPU_ACCELERATION=true
|
|
GPU_VENDOR=apple
|
|
fi
|
|
}
|
|
|
|
function detect_gpu() {
|
|
case "$(uname -s)" in
|
|
Linux)
|
|
check_nvidia
|
|
check_amd
|
|
check_intel
|
|
check_nvidia_wsl
|
|
;;
|
|
Darwin)
|
|
check_metal
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function detect_gpu_size() {
|
|
# Attempting to find GPU memory size for NVIDIA GPUs
|
|
if [ "$GPU_ACCELERATION" = true ] && [ "$GPU_VENDOR" = "nvidia" ]; then
|
|
echo "NVIDIA GPU detected. Attempting to find memory size..."
|
|
# Using head -n 1 to get the total memory of the 1st NVIDIA GPU detected.
|
|
# If handling multiple GPUs is required in the future, this is the place to do it
|
|
nvidia_sm=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits | head -n 1)
|
|
if [ ! -z "$nvidia_sm" ]; then
|
|
echo "Total GPU Memory: $nvidia_sm MiB"
|
|
# if bigger than 8GB, use 16GB
|
|
#if [ "$nvidia_sm" -gt 8192 ]; then
|
|
# GPU_SIZE=gpu-16g
|
|
#else
|
|
GPU_SIZE=gpu-8g
|
|
#fi
|
|
else
|
|
echo "Unable to determine NVIDIA GPU memory size. Falling back to CPU."
|
|
GPU_SIZE=gpu-8g
|
|
fi
|
|
elif [ "$GPU_ACCELERATION" = true ] && [ "$GPU_VENDOR" = "intel" ]; then
|
|
GPU_SIZE=intel
|
|
# Default to a generic GPU size until we implement GPU size detection for non NVIDIA GPUs
|
|
elif [ "$GPU_ACCELERATION" = true ]; then
|
|
echo "Non-NVIDIA GPU detected. Specific GPU memory size detection is not implemented."
|
|
GPU_SIZE=gpu-8g
|
|
|
|
# default to cpu if GPU_SIZE is not set
|
|
else
|
|
echo "GPU acceleration is not enabled or supported. Defaulting to CPU."
|
|
GPU_SIZE=cpu
|
|
fi
|
|
}
|
|
|
|
function check_vars() {
|
|
if [ -z "$MODELS" ]; then
|
|
echo "MODELS environment variable is not set. Please set it to a comma-separated list of model YAML files to load."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$PROFILE" ]; then
|
|
echo "PROFILE environment variable is not set. Please set it to one of the following: cpu, gpu-8g, gpu-16g, apple"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
detect_gpu
|
|
detect_gpu_size
|
|
|
|
PROFILE="${PROFILE:-$GPU_SIZE}" # default to cpu
|
|
export MODELS="${MODELS:-/aio/${PROFILE}/embeddings.yaml,/aio/${PROFILE}/rerank.yaml,/aio/${PROFILE}/text-to-speech.yaml,/aio/${PROFILE}/image-gen.yaml,/aio/${PROFILE}/text-to-text.yaml,/aio/${PROFILE}/speech-to-text.yaml,/aio/${PROFILE}/vad.yaml,/aio/${PROFILE}/vision.yaml}"
|
|
|
|
check_vars
|
|
|
|
echo "===> Starting LocalAI[$PROFILE] with the following models: $MODELS"
|
|
|
|
exec /entrypoint.sh "$@"
|