Spaces:
Configuration error
Configuration error
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}/vision.yaml}" | |
check_vars | |
echo "===> Starting LocalAI[$PROFILE] with the following models: $MODELS" | |
exec /build/entrypoint.sh "$@" | |