243 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			243 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
## Usage #############################
 | 
						|
# source ipex-llm-init
 | 
						|
# Example:
 | 
						|
# source ipex-llm-init
 | 
						|
######################################
 | 
						|
 | 
						|
function enable_iomp {
 | 
						|
    ENABLE_IOMP=1
 | 
						|
}
 | 
						|
 | 
						|
function disable_iomp {
 | 
						|
    ENABLE_IOMP=0
 | 
						|
}
 | 
						|
 | 
						|
function enable_jemalloc {
 | 
						|
    ENABLE_JEMALLOC=1
 | 
						|
    ENABLE_TCMALLOC=0
 | 
						|
}
 | 
						|
 | 
						|
function disable_jemalloc {
 | 
						|
    ENABLE_JEMALLOC=0
 | 
						|
}
 | 
						|
 | 
						|
function enable_tcmalloc {
 | 
						|
    ENABLE_TCMALLOC=1
 | 
						|
    ENABLE_JEMALLOC=0
 | 
						|
}
 | 
						|
 | 
						|
function disable_tcmalloc {
 | 
						|
    ENABLE_TCMALLOC=0
 | 
						|
}
 | 
						|
 | 
						|
function enable_gpu {
 | 
						|
    ENABLE_GPU=1
 | 
						|
}
 | 
						|
 | 
						|
function disable_gpu {
 | 
						|
    ENABLE_GPU=0
 | 
						|
}
 | 
						|
 | 
						|
function display-var {
 | 
						|
    echo "Internal:"
 | 
						|
    echo "    ENABLE_IOMP     = ${ENABLE_IOMP}"
 | 
						|
    echo "    ENABLE_JEMALLOC = ${ENABLE_JEMALLOC}"
 | 
						|
    echo "    ENABLE_TCMALLOC = ${ENABLE_TCMALLOC}"
 | 
						|
    echo "    ENABLE_GPU = ${ENABLE_GPU}"
 | 
						|
    echo "    LIB_DIR    = ${LIB_DIR}"
 | 
						|
    echo "    BIN_DIR    = ${BIN_DIR}"
 | 
						|
    echo "    LLM_DIR    = ${LLM_DIR}"
 | 
						|
    echo ""
 | 
						|
    echo "Exported:"
 | 
						|
    echo "    LD_PRELOAD        = ${LD_PRELOAD}"
 | 
						|
    echo "    OMP_NUM_THREADS   = ${OMP_NUM_THREADS}"
 | 
						|
    echo "    MALLOC_CONF       = ${MALLOC_CONF}"
 | 
						|
    echo "    USE_XETLA         = ${USE_XETLA}"
 | 
						|
    echo "    ENABLE_SDP_FUSION = ${ENABLE_SDP_FUSION}"
 | 
						|
    echo "    SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS = ${SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS}"
 | 
						|
}
 | 
						|
 | 
						|
function display-help {
 | 
						|
    echo "Usage: source ipex-llm-init [-o] [--option]"
 | 
						|
    echo ""
 | 
						|
    echo "ipex-llm-init is a tool to automatically configure and run the subcommand under"
 | 
						|
    echo "environment variables for accelerating IPEX-LLM."
 | 
						|
    echo ""
 | 
						|
    echo "Optional options:"
 | 
						|
    echo "    -h, --help                Display this help message and exit."
 | 
						|
    echo "    -o, --gomp                Disable intel-openmp and use default openmp (i.e. gomp)"
 | 
						|
    echo "    -j, --jemalloc            Use jemalloc as allocator"
 | 
						|
    echo "    -t, --tcmalloc            Use tcmalloc as allocator"
 | 
						|
    echo "    -c, --disable-allocator   Use the system default allocator"
 | 
						|
    echo "    -g, --gpu                 Enable OneAPI and other settings for GPU support"
 | 
						|
    echo "    -d, --debug               Print all internal and exported variables (for debug)"
 | 
						|
}
 | 
						|
 | 
						|
function display-error {
 | 
						|
    echo "Invalid Option: -$1" 1>&2
 | 
						|
    echo ""
 | 
						|
    display-help
 | 
						|
}
 | 
						|
 | 
						|
enable_iomp
 | 
						|
disable_gpu
 | 
						|
disable_jemalloc
 | 
						|
disable_tcmalloc
 | 
						|
LD_PRELOAD=""
 | 
						|
 | 
						|
OPTIND=1
 | 
						|
 | 
						|
while getopts "hojtcgd:-:" opt; do
 | 
						|
    case ${opt} in
 | 
						|
        - )
 | 
						|
            case "${OPTARG}" in
 | 
						|
                help)
 | 
						|
                    display-help
 | 
						|
                    return 0
 | 
						|
                    ;;
 | 
						|
                gomp)
 | 
						|
                    disable_iomp
 | 
						|
                    ;;
 | 
						|
                jemalloc)
 | 
						|
                    enable_jemalloc
 | 
						|
                    ;;
 | 
						|
                tcmalloc)
 | 
						|
                    enable_tcmalloc
 | 
						|
                    ;;
 | 
						|
                disable-allocator)
 | 
						|
                    disable_jemalloc
 | 
						|
                    disable_tcmalloc
 | 
						|
                    ;;
 | 
						|
                gpu)
 | 
						|
                    enable_gpu
 | 
						|
                    ;;
 | 
						|
                debug)
 | 
						|
                    display-var
 | 
						|
                    return 0
 | 
						|
                    ;;
 | 
						|
                *)
 | 
						|
                    display-error $OPTARG
 | 
						|
                    return 1
 | 
						|
                    ;;
 | 
						|
            esac
 | 
						|
            ;;
 | 
						|
 | 
						|
        h )
 | 
						|
            display-help
 | 
						|
            return 0
 | 
						|
            ;;
 | 
						|
        o )
 | 
						|
            disable_iomp
 | 
						|
            ;;
 | 
						|
        j )
 | 
						|
            enable_jemalloc
 | 
						|
            ;;
 | 
						|
        t )
 | 
						|
            enable_tcmalloc
 | 
						|
            ;;
 | 
						|
        c )
 | 
						|
            disable_jemalloc
 | 
						|
            disable_tcmalloc
 | 
						|
            ;;
 | 
						|
        g )
 | 
						|
            enable_gpu
 | 
						|
            ;;
 | 
						|
        d )
 | 
						|
            display-var
 | 
						|
            return 0
 | 
						|
            ;;
 | 
						|
        \? )
 | 
						|
            display-error $OPTARG
 | 
						|
            return 1
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
shift $((OPTIND -1))
 | 
						|
 | 
						|
# Find ipex-llm-init dir
 | 
						|
if [ ! -z $BASH_SOURCE ]; then
 | 
						|
    # using bash
 | 
						|
    if [ "$BASH_SOURCE" = "$0" ]; then
 | 
						|
        echo "Error: Incorrect usage: ipex-llm-init must be sourced."
 | 
						|
        exit 1
 | 
						|
    fi
 | 
						|
    BIN_DIR="$(dirname $BASH_SOURCE)"
 | 
						|
else
 | 
						|
    # using zsh
 | 
						|
    if [ "$zsh_eval_context" = "toplevel" ]; then
 | 
						|
        echo "Error: Incorrect usage: ipex-llm-init must be sourced."
 | 
						|
        exit 1
 | 
						|
    fi
 | 
						|
    BIN_DIR="$(dirname ${(%):-%N})"
 | 
						|
fi
 | 
						|
 | 
						|
LIB_DIR=$(dirname ${BIN_DIR})/lib
 | 
						|
LLM_DIR=$(dirname $(python3 -c "import ipex_llm; print(ipex_llm.__file__)"))
 | 
						|
 | 
						|
if [ "${ENABLE_IOMP}" -eq 1 ]; then
 | 
						|
    file="${LIB_DIR}/libiomp5.so"
 | 
						|
    if [ -f ${file} ]; then
 | 
						|
        echo "found intel-openmp in ${file}"
 | 
						|
        LD_PRELOAD=$(echo ${LD_PRELOAD} ${file})
 | 
						|
        export OMP_NUM_THREADS=`cat /proc/cpuinfo | grep "cpu cores" | uniq | awk '{print $4}'`
 | 
						|
    fi
 | 
						|
else
 | 
						|
    unset OMP_NUM_THREADS
 | 
						|
fi
 | 
						|
 | 
						|
if [ "${ENABLE_JEMALLOC}" -eq 1 ]; then
 | 
						|
    file="${LLM_DIR}/libs/libjemalloc.so"
 | 
						|
    if [ -f ${file} ]; then
 | 
						|
        echo "found jemalloc in ${file}"
 | 
						|
        LD_PRELOAD=$(echo ${LD_PRELOAD} ${file})
 | 
						|
        export MALLOC_CONF="oversize_threshold:1,background_thread:false,metadata_thp:always,dirty_decay_ms:-1,muzzy_decay_ms:-1"
 | 
						|
    fi
 | 
						|
else
 | 
						|
    unset MALLOC_CONF
 | 
						|
fi
 | 
						|
 | 
						|
if [ "${ENABLE_TCMALLOC}" -eq 1 ]; then
 | 
						|
    file="${LLM_DIR}/libs/libtcmalloc.so"
 | 
						|
    if [ -f ${file} ]; then
 | 
						|
        echo "found tcmalloc in ${file}"
 | 
						|
        LD_PRELOAD=$(echo ${LD_PRELOAD} ${file})
 | 
						|
    fi
 | 
						|
fi
 | 
						|
 | 
						|
if [ "${ENABLE_GPU}" -eq 1 ]; then
 | 
						|
    for file in {"~","/opt"}"/intel/oneapi/setvars.sh"; do
 | 
						|
        if [ -f ${file} ]; then
 | 
						|
            echo "found oneapi in ${file}"
 | 
						|
            source ${file}
 | 
						|
            export USE_XETLA=OFF
 | 
						|
            export ENABLE_SDP_FUSION=1
 | 
						|
            export SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1
 | 
						|
            break
 | 
						|
        fi
 | 
						|
    done
 | 
						|
else
 | 
						|
    unset USE_XETLA
 | 
						|
    unset ENABLE_SDP_FUSION
 | 
						|
    unset SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS
 | 
						|
fi
 | 
						|
 | 
						|
export LD_PRELOAD=${LD_PRELOAD}
 | 
						|
 | 
						|
echo "+++++ Env Variables +++++"
 | 
						|
echo "LD_PRELOAD            = ${LD_PRELOAD}"
 | 
						|
if [ "${ENABLE_IOMP}" -eq 1 ]; then
 | 
						|
    echo "OMP_NUM_THREADS       = ${OMP_NUM_THREADS}"
 | 
						|
fi
 | 
						|
if [ "${ENABLE_JEMALLOC}" -eq 1 ]; then
 | 
						|
    echo "MALLOC_CONF           = ${MALLOC_CONF}"
 | 
						|
fi
 | 
						|
if [ "${ENABLE_GPU}" -eq 1 ]; then
 | 
						|
    echo "USE_XETLA             = ${USE_XETLA}"
 | 
						|
    echo "ENABLE_SDP_FUSION     = ${ENABLE_SDP_FUSION}"
 | 
						|
    echo "SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS = ${SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS}"
 | 
						|
fi
 | 
						|
echo "+++++++++++++++++++++++++"
 | 
						|
echo "Complete."
 |