XAIGPUARC /// Llama.cpp SYCl FORK/// SINGLE GPU 2025.3 ONE API /// (FUNKTIONIERT)

Words
0
Reading
0 min
10h
Listen to this post
~1 min
#!/bin/bash



#Einzel GPU Version mit dem MathTutor. Funktioniert nur auf 2025.3 One Api und Arch sowie mit 16 Gib Vram.

#Entsprechendes Herunterjustieren koennte also auch fuer kleinere GPUs funktionieren.


#Werkzeug zur Optimierung und Bereitstellung von neuronalen Netzen, insbesondere für GPU-basierte Berechnungen
#XAIGPUARC kombiniert verschiedene Technologien und Bibliotheken, um die Effizienz und Leistung von Modellen zu steigern
#Es verwendet OpenCL und spezifische Compiler wie icx und icpx für die Kompilierung von C++ Code
#Das Hauptziel ist es, neuronale Netze auf Intel Xe/ARC-Grafikkarten sowie anderen GPU-Architekturen effizient zu bereitstellen und zu optimieren
if [ -n "$FISH_VERSION" ]; then
echo "❌FEHLER: Bitte starte das Script mit 'bash XAIGPUARC.sh' oder installiere 'bass'"
exit 1
fi
#| XAIGPUARC |✅| 11.10.26 SYCL ONLY ARC A770LE (16GiB Vram minimum) Vendor Lokal Version
set -euo pipefail
IFS=$'\n\t'
PRECISION="FP16"
DEVICE="ARC"
LLAMA_CPP_DIR="llama.cpp"
BUILD_DIR="${BUILD_DIR:-XAIGPUARC}"
BUILD_DIR="${BUILD_DIR%/}"
#|XAIGPUARC|
GGML_SYCL_CPP="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/ggml-sycl.cpp}"
CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-Release}"
NPROC="${NPROC:-$(nproc)}"
LOG_FILE="${BUILD_DIR}/XAIGPUARC.log}"
LLAMA_CLI_PATH="bin/llama-cli"
LS_SYCL_DEVICE_PATH="bin/llama-ls-sycl-device"
ADD_SUBDIR_LINE="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/ggml-sycl.cpp"
#|ONEAPIFUNKTIONEN
export LIBVA_DRIVER_NAME=iHD
export TCM_ROOT="${TCM_ROOT:-"/opt/intel/oneapi/tcm/latest/"}"
export SYCL_CACHE_PERSISTENT=0
export OCL_ICD_FILENAMES=""
export ZES_ENABLE_SYSMAN=0
export OverrideDefaultFP64Settings=0
export CCACHE_DIR="$HOME/.ccache"
export COMPILER_VERSION="2025.3"
export SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1
export SYCL_PI_LEVEL_ZERO_BATCH_SIZE=256
export FP_FLAG=FP16
export ONEAPI_DEVICE_SELECTOR=level_zero:0
export SYCL_DEVICE_FILTER=level_zero:gpu
export ZE_ENABLE_PCI_ID_DEVICE_ORDER=1
#|HILFSFUNKTIONEN
log() { printf "🔷 %s\n" "$*"; }
success() { printf "✅ %s\n" "$*"; }
error() { printf "❌ %s\n\n" "$*"; }
warn() { printf "⚠️ %s\n" "$*"; }
#|INTERNETPRUEFUNG
check_internet() {
log "🔷PRUEFE INTERNETZ VERBINDUNG..."
if timeout 5 bash -c "</dev/tcp/8.8.8.8/53" 2>/dev/null;
then
success "✅INTERNETZ VERBINDUNG VORHANDEN"
return 0
else
warn "⚠️KEINE INTERNETZ VERBINDUNG! BEI ERSTINSTALLATION ONLINE ABHAENGIGKEITEN! ANSCHLUSS PRUEFEN"
return 1
fi
}
#|UMGEBUNG|RUECKFALL|MECHANISMEN|VORBEREITEN
prepare_environment() { log "🔷HOLE ONEAPI KOPFZEILEN XAIGPUARC"
local SETVARS_PATH="/opt/intel/oneapi/setvars.sh"
if [ ! -f "$SETVARS_PATH" ]; then
error "❌ONE API KOEPFZEILEN NICHT GEFUNDEN $SETVARS_PATH INSTALLIERE ONEAPI BIBLIOTHEKEN"
exit 1
fi
log "🔷SETVARS SETZEN + SUCHEN SS+S"
source "$SETVARS_PATH" --force 2>/dev/null
local ONEAPI_ROOT_FALLBACK="/opt/intel/oneapi"
local COMPILER_VERSION_FALLBACK="${COMPILER_VERSION:-2025.3}"
DPCPP_ROOT="${DPCPP_ROOT:-${ONEAPI_ROOT_FALLBACK}/compiler/${COMPILER_VERSION_FALLBACK}}"
MKL_ROOT="${MKL_ROOT:-${ONEAPI_ROOT_FALLBACK}/mkl/${COMPILER_VERSION_FALLBACK}}"
ONEAPI_ROOT="${ONEAPI_ROOT:-${ONEAPI_ROOT_FALLBACK}}"
export CC=icx
export CXX=icpx
export FC=ifx
export DPCPP_ROOT
export MKL_ROOT
export ONEAPI_ROOT
export CPATH="${CPATH:-}:${MKL_ROOT}/include"
local LIB_DIR="/opt/intel/oneapi/mkl/latest/lib/intel64/libmkl_sycl.so"
export LD_LIBRARY_PATH="./${BUILD_DIR}/bin:${LIB_DIR}:${LD_LIBRARY_PATH:-}"
if ! command -v icx "&>/dev/null" ! command -v icpx "&>/dev/null"; then
error "❌ICX IPCX ONE API XAIGPUARC UNTERMODUL INSTALLATION FEHLGESCHLAGEN"
exit 1
fi
log "🔷VERBINDUNG ONEAPI GELADEN DPCPP${DPCPP_ROOT}MKL${MKL_ROOT}"
}
#1|PROJEKT|VORBAU
setup_project() {
if [[ "${1:-}" == "--clean" ]]; then
warn "⚠️ REINIGUNGSMODUS LOESCHE ALTE BAUSTEINE"
rm -rf "${LLAMA_CPP_DIR}"
rm -rf "${BUILD_DIR}"
success "✅ REINIGUNG ABGESCHLOSSEN"
fi
log "🔷BEREITE XAIGPUARC VORBAU BITTE WARTEN"
if [ ! -d "${LLAMA_CPP_DIR}" ]; then
log "🔷ZIEHE BAUSTEINE AUS INTERNETZ"
git clone https://github.com/ggerganov/llama.cpp "${LLAMA_CPP_DIR}"
if [ ! -d "${LLAMA_CPP_DIR}" ]; then
error "❌ZIEHEN DER BAUSTEINE FEHLGESCHLAGEN ABBRUCH"
exit 1
fi
fi
if pushd "${LLAMA_CPP_DIR}" > /dev/null; then
log "🔷AKTUALISIERE BAUSTEINE FUER UNTERMODULE"
git reset --hard HEAD
git pull
git submodule update --init --recursive
popd > /dev/null
success "✅LADE BAUSTEINE IN XAIGPUARC UNTERBAUMODULE"
else
error "❌FEHLER HAUPTVERZEICHNIS'${LLAMA_CPP_DIR}'NICHT GEFUNDEN"
exit 1
fi
}
#PATCH|LOGIK:1-8+a+b+c|
patch_llama_cpp() {
log "🔷PATCH 1|8 GGML SYCL DOCTPHELPER REGESTRIERUNG BIBLIOTHEK KOPFZEILENEINTRAEGE"
local DPCT_HELPER_FILE="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/dpct/helper.hpp"
local CMAKE_LISTS_FILE="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/CMakeLists.txt"
local CUSTOM_KERNEL_DIR="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/custom_kernels"
local CUSTOM_KERNEL_SRC="${CUSTOM_KERNEL_DIR}/ggml_flash_attention_sycl.cpp"
local CUSTOM_KERNEL_CMAKE="${CUSTOM_KERNEL_DIR}/CMakeLists.txt"
local GGML_SYCL_CPP="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/ggml-sycl.cpp"
local KERNEL_SOURCE_LOCAL="ggml_flash_attention_sycl.cpp"
#1|8
if [ -f "$DPCT_HELPER_FILE" ]; then
log "🔷PATCH 1|8 DOCTPHELPER BIBLIOTHEK REGESTRIERTE KOPFZEILENEINTRAEGE LADEN"
if sed -i 's|#include |#include |g' "$DPCT_HELPER_FILE"; then
log "🔷PATCH 1|8 SCHREIBE DOCTPHELPER BIBLIOTHEK KOPFZEILENEINTRAEGE IN XAIGPUARC"
elif sed -i '#if !defined(DPCT_USM_LEVEL_NONE) && defined(DPCT_ENABLE_MKL_MATH).#endif|#include |g' "$DPCT_HELPER_FILE"; then
log "✅PATCH 1|8 DOCTPHELPER BIBLIOTHEK KOPFZEILENEINTRAEGE ERFOLGREICH REGESTRIERT - SPEICHERE"
else
error "❌PATCH 1|8 DOCTPHELPER BIBLIOTHEK KOPFZEILENEINTRAEGE EINLADEN DER REGESTRIERUNG FEHLGESCHLAGEN"
return 1
fi
else
warn "⚠️PATCH 1|8 DOCTPHELPER BIBLIOTHEK NICHT GEFUNDEN ABHAENIGKEITEN PRUEFEN"
return 1
fi
#2|8
log "🔷PATCH 2|8 BAUE FLASH ATTENTION KERN"
#2a|8
if [ ! -d "$CUSTOM_KERNEL_DIR" ]; then
mkdir -p "$CUSTOM_KERNEL_DIR"
log "✅PATCH 2|8 ORNDER FUER FLASH ATTENTION KERN'${CUSTOM_KERNEL_DIR}'ANGELEGT"
fi
if [ -f "$KERNEL_SOURCE_LOCAL" ]; then
cp "$KERNEL_SOURCE_LOCAL" "$CUSTOM_KERNEL_SRC"
log "✅PATCH 2|8 ggml_flash_attention_sycl.cpp KERN'${KERNEL_SOURCE_LOCAL}' '${CUSTOM_KERNEL_SRC}'EINGEBAUT"
fi
if [ ! -f "$CUSTOM_KERNEL_SRC" ]; then
echo "ggml_flash_attention_sycl.cpp KERN VERZEICHNIS" > "$CUSTOM_KERNEL_SRC"
warn "⚠️PATCH 2|8 LADEN DER KERNELDATEI'${KERNEL_SOURCE_LOCAL} FEHLGESCHLAGEN"
fi
echo "
add_library(ggml_flash_attention_sycl OBJECT
    ggml_flash_attention_sycl.cpp
)
target_include_directories(ggml_flash_attention_sycl PRIVATE \${GGML_SYCL_INCLUDE_DIRS})
target_compile_options(ggml_flash_attention_sycl PUBLIC \${GGML_SYCL_COMPILE_FLAGS})
" > "$CUSTOM_KERNEL_CMAKE"
log "🔷PATCH 2a|8 CMAKE TXT LISTEN OBJEKTE KOPFZEILENEINTRAEGE EINFUEGEN"
#2b|8
local ADD_SUBDIR_LINE="add_subdirectory(ggml_flash_attention_sycl)"
if ! grep -Fq "${ADD_SUBDIR_LINE}" "$CMAKE_LISTS_FILE"; then
if sed -i "\|#add_subdirectory(dpct)|a ${ADD_SUBDIR_LINE}" "$CMAKE_LISTS_FILE"; then
log "✅PATCH 2b|8 ERFOLGREICH FLASH ATTENTION KOPFZEILENEINTRAEGE CMAKE TXT GESCHRIEBEN"
else
error "❌PATCH 2b|8 FLASH ATTENTION KOPFZEILENEINTRAEGE EINGLIEDERUNG CMAKE TXT FEHLGESCHLAGEN"
return 1
fi
else
log "🔷PATCH 2b|8 FLASH ATTENTION KOPFZEILENEINTRAEGE BEREITS AKTIV UEBERSPRINGE"
fi
#3|8
if [ -f "$CMAKE_LISTS_FILE" ]; then
log "🔷PATCH 3|8: CMAKE TEXT LISTEN MKL KOPZEILEN IC|P|X IMPLEMENTIERUNG VORBEREITEN"
local MKL_INCLUDE_PATH="${MKL_ROOT}/include"
local COMPILER_INCLUDE_PATH="${DPCPP_ROOT}/include"
local DPCPP_LIB_INCLUDE_PATH="${DPCPP_ROOT}/lib/dpcpp/include"
local ALL_INCLUDE_FLAGS="-I${MKL_INCLUDE_PATH} -I${COMPILER_INCLUDE_PATH} -I${DPCPP_LIB_INCLUDE_PATH}"
local PATCH_LINE="target_compile_options (ggml-sycl PUBLIC ${ALL_INCLUDE_FLAGS})"
local SEARCH_MARKER="#Add include directories for MKL headers"
if ! grep -Fq "${COMPILER_INCLUDE_PATH}" "$CMAKE_LISTS_FILE"; then
local SED_PATCH_LINE=$(echo "$PATCH_LINE" | sed 's| |\ |g; s|[|&]|\&|g')
if sed -i "\|${SEARCH_MARKER}|a $SED_PATCH_LINE" "$CMAKE_LISTS_FILE"; then
log "✅PATCH 3|8 ICP|X CMAKET LISTS TXT MKL KOPFZEILENEINTRAEGE EINGEFUEGT"
else
error "❌PATCH 3|8 ICP|X CMAKE LISTS TXT MKL NICHT GEFUNDEN ABHAENGIKEITEN PRUEFEN"
return 1
fi
else
log "✅PATCH 3a|8 CMAKE LISTS TXT PFAD SYCL GGML BEREITS BENUTZT UEBERSPRINGE"
fi
else
error "❌PATCH 3a|8 FEHLGESCHLAGEN CMAKE LISTS TXT SYCL GGML PFADE ABHAENGIGKEITEN GARUDA LINUX ARCH"
return 1
fi
#4|8
log "🔷PATCH 4|8 FLASH ATTENTION HAUPTKERN KOPFZEILENEINTRAEGE INJIZIEREN"
if [ -f "$GGML_SYCL_CPP" ]; then
#4a|8
local FA_REGISTER_CODE=$'//REGESTRIERE ggml_flash_attention_sycl.cpp \nextern "C"
void ggml_flash_attention_sycl(ggml_flash_attention_sycl * ctx, ggml_tensor *
dst, const ggml_tensor * Q, const ggml_tensor * K, const ggml_tensor * V);\n'
if ! grep -Fq "ggml_flash_attention_sycl" "${GGML_SYCL_CPP}"; then
#Anmerkung keine Berechtigung!!LoesenFlashattention is meine gemeint.
echo "${FA_REGISTER_CODE}" > /tmp/ggml_flash_attention_sycl.cpp
awk '/extern "C" void ggml_flash_attention_sycl/ { system("cat /tmp/ggml_flash_attention_sycl.patch"); } { print }' "${GGML_SYCL_CPP}" > /tmp/ggml-sycl.cpp.new
mv /tmp/ggml-sycl.cpp.new "${GGML_SYCL_CPP}"
cp "$GGML_SYCL_CPP" "$GGML_SYCL_CPP.bak"
if [ $? -eq 0 ]; then
log "✅PATCH 4a|8 AWK KOPFZEILENEINTRAEGE DEKLARATION EINGEFUEGT"
else
error "❌PATCH 4a|8 FEHLER EINFUEGEN FLASH ATTENTION KOPFZEILENEINTRAEGE DEKLARATION AWK FEHLT"
return 1
fi
else
log "🔷PATCH 4a|8 FLASH ATTENTION KOPFZEILENEINTRAEGE DEKLARATIONEN VORHANDEN FORTFAHREN"
fi
local FA_DISPATCH_CASE=$' case GGML_OP_FLASH_ATTN:\n ggml_flash_attention_sycl(ctx, dst, src0, src1, src2);\n break;'
if ! grep -Fq "case GGML_OP_FLASH_ATTN:" "${GGML_SYCL_CPP}"; then
log "🔷PATCH 4a|8 FUEGE ZWISCHENSPEICHER PER AWK KOPFZEILE EIN"
echo "${FA_DISPATCH_CASE}" > /tmp/fa_dispatch.patch
awk '/case GGML_OP_MUL_MAT_Q_K:/ { system("cat /tmp/fa_dispatch.patch"); } { print }' "${GGML_SYCL_CPP}" > /tmp/ggml-sycl.cpp.new
mv /tmp/ggml-sycl.cpp.new "${GGML_SYCL_CPP}"
if [ $? -eq 0 ]; then
log "✅PATCH 4a|8 AWK UNTERBAU KOPFZEILENEINTRAEGE EINGEFUEHRT"
else
error "❌PATCH 4a|8 FEHLER EINFUEGEN AWK KOPFZEILENEINTRAEGE"
fi
else
log "✅PATCH 4a|8 AWK UNTERBAU FLASH ATTENTION KOPFZEILENEINTRAEGE INJEKTION VORHANDEN FORTFAHREN"
fi
log "🔷PATCH 4b|8 ERFOLGREICH FLASH ATTENTION AKW UNTERBAU GELADEN"
else
error "❌PATCH 4b|8 FEHLGESCHLAGEN FLASH ATTENTION AWK PATCH KERN STOPP"
return 1
fi
#5|8
log "🔷PATCH 5/8 FLASH ATTENTION OBJEKT INJIZIERE VARIABLEN UNTERBLOCK SYCL BIBLIOTHEKEN"
local CMAKE_LISTS_FILE="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/CMakeLists.txt"
#5a|8
local VAR_LINE="set(FA_OBJECT_FILES \"\$\")"
local VAR_SEARCH_MARKER="set(GGML_SYCL_SOURCES"
if ! grep -Fq "FA_OBJECT_FILES" "$CMAKE_LISTS_FILE"; then
local SED_VAR_LINE=$(echo "$VAR_LINE" | sed 's/[\/&]/\\&/g')
if sed -i "\|${VAR_SEARCH_MARKER}|a ${SED_VAR_LINE}" "$CMAKE_LISTS_FILE"; then
log "✅PATCH 5a|8 FLASH ATTENTION OBJEKT VARIABLE ERFOLGREICH DEFINIERT WEITER"
else
error "❌PATCH 5a|8 FLASH ATTENTION OBJEKT REGESTRIERUNG FEHLGESCHLAGEN STOPP"
return 1
fi
else
log "🔷PATCH 5a|8 FLASH ATTENTION OBJEKT VARIABLEN VORHANDEN UEBERSPRINGE"
fi
#5b|8
local TARGET_SEARCH_MARKER="target_sources(ggml-sycl PRIVATE \${GGML_SYCL_SOURCES})"
local NEW_TARGET_SOURCES_LINE="target_sources(ggml-sycl PRIVATE \${GGML_SYCL_SOURCES} \${FA_OBJECT_FILES})"
if grep -Fq "${TARGET_SEARCH_MARKER}" "$CMAKE_LISTS_FILE" && ! grep -Fq "\${FA_OBJECT_FILES}" "$CMAKE_LISTS_FILE"; then
local SED_NEW_LINE=$(echo "$NEW_TARGET_SOURCES_LINE" | sed 's/[\/&]/\\&/g')
local SED_SEARCH_MARKER=$(echo "$TARGET_SEARCH_MARKER" | sed 's/[\/&]/\\&/g')
if sed -i "\|${SED_SEARCH_MARKER}|${SED_NEW_LINE}|" "$CMAKE_LISTS_FILE"; then
log "✅PATCH 5b|8 ERFOLGREICHE GGML SYCL INJEKTIONEN"
else
error "❌PATCH 5b|8 GGML SYCL INJEKTION FEHLGESCHLAGEN"
return 1
fi
else
log "✅PATCH 5b|8 GGML SYCL AKTIV INJECTION UEBERSPRUNGEN"
fi
#6|8
log "🔷PATCH 6|8: SSMCONV CPP WARNUNG BEHEBEN VORZEICHEN VERGLEICH AKW PATCH"
local SSM_CONV_FILE="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/ssm_conv.cpp"
local SEARCH_LINE='GGML_ASSERT(src0->nb\[1\] == src0->ne\[0\] * static_cast(sizeof(float)));'
local REPLACE_LINE='GGML_ASSERT(src0->nb\[1\] == (size_t)(src0->ne\[0\] * sizeof(float)));'
if [ -f "$SSM_CONV_FILE" ]; then
#6a
if grep -Fq "${SEARCH_LINE}" "$SSM_CONV_FILE"; then
log "🔷PATCH 6a|8 SUCHE ssm_conv.cpp NATIVE ADRESSIERUNG"
if grep -Fq "${SEARCH_LINE}" "$SSM_CONV_FILE"; then
if sed -i "|${SEARCH_LINE}|${REPLACE_LINE}|g" "$SSM_CONV_FILE"; then
log "✅PATCH 6|8 SSMCONV CPP ERFOLGREICH GESCHRIEBEN"
else
error "❌PATCH 6|8 SSMCONV CPP FEHLGESCHLAGEN"
return 1
fi
else
warn "⚠️PATCH 6|8 SSMCONV CPP ZEILE NICHT GEFUNDEN UEBERSPRINGE"
fi
fi
#7|8 Diese Groessen koennen selbst angepasst werden
log "🔷PATCH 7|8: ERZWINGE MAXIMALE BLOCK GROESSE 256 FUER ARC ALCHEMIST"
if [ -f "$GGML_SYCL_CPP" ]; then
if ! grep -q "GGML_SYCL_MAX_BLOCK_SIZE 256" "$GGML_SYCL_CPP"; then
sed -i 's/#define GGML_SYCL_MAX_BLOCK_SIZE [0-9]*/#define GGML_SYCL_MAX_BLOCK_SIZE 256/g' "$GGML_SYCL_CPP"
success "✅PATCH 7|8 ERZWINGE MAXIMALE BLOCK GROESSE 256 FUER ARC ALCHEMIST AKTIVIERT"
log "✅PATCH 7|8 MAXIMALE BLOCK GROESSE 256 ZWANG ERFOLGREICH INJIZIERT"
else
log "🔷PATCH 7|8 MAXIMALE BLOCK GROESSE 256 ZWANG FUER ARC BEREITS DEFINIERT"
fi
fi
#8|8
log "🔷PATCH 8|8 SYCL QUEUE ORDNER: HOME/NUTZERNAME/XAIGPUARC OPTIMIERVORGANG KOPFZEILENEINTRAEGE"
local SYCL_FILE="${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/ggml-sycl.cpp"
if [ ! -f "$SYCL_FILE" ]; then
error "❌PATCH 8|8 KONNTE DIE DATEI ${LLAMA_CPP_DIR}/ggml/src/ggml-sycl/ggml-sycl.cpp NICHT FINDEN"
return 1
fi
if grep -q "sycl::property_list" "$SYCL_FILE"; then
sed -i 's|sycl::property_list prop_list{[^}]*}|sycl::property_list prop_list{sycl::property::queue::in_order{}}|' "$SYCL_FILE"
else
sed -i '/sycl::queue q{/i\    sycl::property_list prop_list{sycl::property::queue::in_order{}};' "$SYCL_FILE"
fi
fi
#8a|8
if grep -q "sycl::queue q{" "$SYCL_FILE"; then
sed -i 's|sycl::queue q{[^}]*}|sycl::queue q{dev, ctx, prop_list}|g' "$SYCL_FILE"
if grep -q "in_order" "$SYCL_FILE"; then
success "✅PATCH 8|8 SYCL QUEUE ERFOLGREICH KOPFZEILENEINTRAEGE OPTIMIERT"
else
error "❌PATCH 8|8 SYCL QUEUE AENDERUNGEN KOPFZEILENEINTRAEGE NICHT FERTIG"
return 1
fi
else
warn "⚠️PATCH 8|8 SYCL QUEUE KOPFZEILENEINTRAEGE NICHT GEFUNDEN UEBERSPRINGE"
fi
success "🔷ALLE FUENF VON ACHT EINGLIEDERUNGEN INTEL XE/ARC/iGPU/dGPU/eGPU FUER XAIGPUARC ERFOLGREICH"
}
#3|XAIGPUARC|BAUKONFIGURATION|
configure_build() {
log "🔷BEREITE XAIGPUARC KOPFZEILEN BAUVORGANG VOR"
local FP_MODE="${1:-1}"
local SYCL_FLAGS="-DGGML_SYCL_F16=${FP_MODE} -fsycl-device-code-split=per_kernel"
if [ ! -d "${BUILD_DIR}" ]; then
log "🔷LEGE XAIGPUARC IN ORDNER HOME ${BUILD_DIR}"
mkdir -p "${BUILD_DIR}" || { error "❌KONNTE ORDNER XAIGPUARC'${BUILD_DIR}'NICHT ANLEGEN"; return 1; }
fi
if pushd "${BUILD_DIR}" > /dev/null; then
log "🔷STARTE CMAKE TXT KOPFZEILENBAU XAIGPUARC ${FP_FLAG:-FP_MODE}"
cmake "../${LLAMA_CPP_DIR}" \
    -G "Unix Makefiles" \
    -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
    -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" \
    -DGGML_SYCL=ON \
    -DGGML_SYCL_TARGET=INTEL \
    -DGGML_SYCL_CCACHE=ON \
    -DGGML_SYCL_F16=${FP_MODE} \
    -DGGML_SYCL_FLASH_ATTN=ON \
    -DGGML_SYCL_MKL_SYCL_BATCH_GEMM=1 \
    -DCMAKE_C_COMPILER=icx \
    -DCMAKE_CXX_COMPILER=icpx \
    -DCMAKE_CXX_STANDARD=23 \
    -DCMAKE_CXX_STANDARD_REQUIRED=ON \
    -DCMAKE_CXX_EXTENSIONS=ON \
    -DGGML_SYCL_PRIORITIZE_DMMV=ON \
    -DGGML_SYCL_DISABLE_DNN=OFF \
    -DTHREADS_PREFER_PTHREAD_FLAG=ON \
    -DCMAKE_C_FLAGS="-O3 -ffast-math -fno-trapping-math" \
    -DGGML_SYCL_DISABLE_GRAPH=OFF \
    -DCMAKE_THREAD_LIBS_INIT="-pthread"\
    -DCMAKE_C_COMPILER_WORKS=1
local CMAKE_STATUS=$?
popd > /dev/null
if [ ${CMAKE_STATUS} -ne 0 ]; then
error "❌CMAKE TXT KOPFZEILEN SCHREIBEN FEHLGESCHLAGEN"
return 1
fi
success "✅VORBAU ABGESCHLOSSEN"
else
error "❌KONNTE NICHT NACH HOME/NUTZERNAME/XAIGPUARC WECHSELN'${BUILD_DIR}'COMPUTER NUTZER BERECHTIGUNG PRUEFEN"
return 1
fi
}
#4KOMPILIEREN
compile_project() {
log "🔷BAUE XAIGPUARC GRUND GERUEST STRUKTUR"
local LOG_FILE="build.log"
log "🔷KOPFZEILEN AUSGABE UNTERORNDER GESPEICHERT"
log "🔷BAUVORGANG LAEUFT XAIGPUARC SYCL C++ LEVEL ZERO KOPFZEILEN SCHREIBEN ABGESCHLOSSEN"
if pushd "${BUILD_DIR}" > /dev/null; then
log "🔷
|🟢|XAIGPUARC
|🔧|INSTALLATION auf ihrem Endgeraet in 🧰 .../HOME/USERNAME/XAIGPUARC/...|✅|
|📌|Zur DEInstallation einfach entsprechende ORDNER LOESCHEN!
|💡|min. 9GiB - 17GiB RAM DATENVORGAENGE 🔄
|🧱|VORBERRECHUNG SPRACHPROGRAMM ASSISTENT FUER ⚫ MATHEMATIK 🔧
|🟡|ACHTUNG! Wenn Sie DAS Hier Lesen Koennen...! :-)
|🔄|WIRD-es...
|📌|ERSTMALIG Mindestens-...
|💡|3 bis 7 Minuten-...
|💡|ANDAUERN!!!...
|⚙️|BITTE ETWAS GEDULD...
|✅||Beim zweitem Start mit demselbem Vorgang wie diesem, dauert es nur wenige Sekunden bis die KI startet!
|⚫|DUNKLE-MATHEMATIK 🧰 🔄 🎁 🔄 🔧 🔄 🎯 DEUTSCH-SPRACHPROGRAMM
|💡|NUTZEN SIE DEN MATH-TUTOR_F16
|🟡|A770LE 16GiB VRAM @ 14.2GiB@MathTutor-f16 MAXIMAL MATHEMATIK SPRUCH
|👉|DANKE FUER DIE NUTZUNG VON ❌AIGPUARC"
cmake --build . --verbose --config "${CMAKE_BUILD_TYPE}" -j ${NPROC} --target llama-cli llama-ls-sycl-device > "${LOG_FILE}" 2>&1
local BUILD_STATUS=$?
popd > /dev/null
if [ ${BUILD_STATUS} -ne 0 ]; then
error "❌XAIGPUARC KOPFZEILEN FEHLGESCHLAGEN UEBERPRUEFEN**${BUILD_DIR}/${LOG_FILE}**"
return 1
fi
success "✅BAU XAIGPUARC ERFOLGREICH"
else
error "❌XAIGPUARC '${BUILD_DIR}' WEGEN FEHLERHAFTEM WECHSEL KOPZEILENBAU NICHT MOEGLICH"
return 1
fi
}
#5AUTOMATISCHEGERAETEAUSWAHL
auto_select_device() {
log "🔷SUCHE NACH VERFUEGBAREN SYCL GERAETEN AUF IHREM SYSTEM"
local FULL_LS_PATH="./${BUILD_DIR}/${LS_SYCL_DEVICE_PATH}"
if [ ! -x "${FULL_LS_PATH}" ]; then
warn "⚠️SYCL UNTERBAU NICHT GEFUNDEN ${FULL_LS_PATH} ZWEITSUCHE ODER RUECKFALL AUF CPU"
export ONEAPI_DEVICE_SELECTOR="level_zero:${TARGET_ID}"
DEVICE="ARC"
return
fi
local DEVICES
DEVICES=$(bash -c "${FULL_LS_PATH}")
if [ -z "$DEVICES" ]; then
warn "⚠️KEINE KOMPATIBLEN SYCL GERAETE GEFUNDEN! SUCHE ERNEUT UND UEBERGEHE iGPU VOR dGPU NUTZUNG MIT dGPU"
export ONEAPI_DEVICE_SELECTOR="level_zero:0->❌ANBINDUNG FEHLGESCHLAGEN"
DEVICE="ARC"
N_GPU_LAYERS=99
return
fi
local ARC_ID
ARC_ID=$(echo "$DEVICES" | grep -i "Intel Arc" | head -n1 | awk '{print $1}')
local IGPU_ID
IGPU_ID=$(echo "$DEVICES" | grep -Ei "Iris|Xe|Graphics" | head -n1 | awk '{print $1}')
local TARGET_LINE=""
if [ -n "$ARC_ID" ]; then
TARGET_LINE=$(echo "$DEVICES" | grep -i "Intel Arc" | head -n1)
DEVICE="ARC"
elif [ -n "$IGPU_ID" ]; then
TARGET_LINE=$(echo "$DEVICES" | grep -Ei "Iris|Xe|Graphics" | head -n1)
DEVICE="iGPU"
else
export ONEAPI_DEVICE_SELECTOR="opencl:cpu"
DEVICE="CPU"
N_GPU_LAYERS=99
error "❌KEINE GEEIGNETE GRAFIKKARTE GEFUNDEN FALLE ENDGUELTIG AUF CPU ZURUECK"
return
fi
if [ -n "$TARGET_LINE" ]; then
local TARGET_ID
TARGET_ID=$(echo "$TARGET_LINE" | awk '{print $1}')
export ONEAPI_DEVICE_SELECTOR="level_zero:${TARGET_ID}"
log "🔷NUTZE INTEL XE/ARC GRAFIKKARTE ${DEVICE}(Device ${TARGET_ID})"
local VRAM_GIB_RAW=$(echo "$TARGET_LINE" | grep -oP '\d+(?=M)' | head -n1)
VRAM_GIB=$((VRAM_GIB_RAW / 1024)) #MIBzuGIB
if [ -z "${VRAM_GIB_RAW}" ]; then
VRAM_GIB_RAW=1024
fi
local LAYER_SIZE_MIB=256
#MagicKeyMagischerSchluessel
local VRAM_MIB_CALC=$((VRAM_GIB * 1024))
if [ "${VRAM_GIB}" -lt 1 ]; then
VRAM_GIB=1
fi
N_GPU_LAYERS=$((VRAM_MIB_CALC * 99 / 100 / LAYER_SIZE_MIB))
if [ "$N_GPU_LAYERS" -gt 99 ]; then
N_GPU_LAYERS=99
fi
if [ "$N_GPU_LAYERS" -lt 1 ]; then
N_GPU_LAYERS=1
fi
log "🔷NGL**${N_GPU_LAYERS}**SCHICHTEN MODELL PRIORITAET GLEICHMAESSIG AUF GPU/CPU VERTEILT"
fi
}
#6SYCLKOMPATIBLEGERAETEPRUEFEN
list_sycl_devices() {
log "🔷SUCHE ZWEIMAL HINTEREINANDER SYCL FAEHIGES GERAET UM SUCHFEHLER ZU UMGEHEN"
local FULL_LS_PATH="./${BUILD_DIR}/${LS_SYCL_DEVICE_PATH}"
if [ -f "${FULL_LS_PATH}" ]; then
"${FULL_LS_PATH}"
else
warn "⚠️AKTUELL KEIN SYCL GERAET GEFUNDEN ${FULL_LS_PATH} VERSUCH ZWEI SUCHE..."
fi
}
prepare_model() {
MODEL_PATH=${1:-"models/MathTutor-7B-H_v0.0.1.f16.gguf"} #MathTutor-7B-H_v0.0.1.f16
mkdir -p models
if [ ! -f "$MODEL_PATH" ]; then
warn "⚠️IHR MODELL NICHT UNTER HOME/NUTZERNAME/MODELS GEFUNDEN! BITTE DORT HIN**$MODEL_PATH**KOPIEREN"
fi
export MODEL_PATH
}
run_inference() {
local DEFAULT_MODEL_PATH="models/MathTutor-7B-H_v0.0.1.f16.gguf"
local MODEL_PATH_ARG=${2:-$DEFAULT_MODEL_PATH}
local PROMPT_ARG=${3:-"Bitte Schreibe nur die Programmausschnitte, nach welchen Du gefragt wirst und NICHT das ganze Programm neu.
Auch vermeide das Gesagte und Gelesene stumpf zu widerholen, sondern ueberlege ganz genau, welchen nuetzlichen Beitrag Du leisten kannst.
Ausserdem, vermeide zu Traeumen, das bedeutet Antworten zu erfinden und schaeme dich nicht dafuer, auch zu sagen, das Du dir nicht Sicher bist,
oder etwas schlicht nicht weist. Es hilft keinem weiter, wenn Du einfach Ergebnisse schreibst,
und man damit nichts anfangen kann, weil sie Ausgedacht sind, statt an gaengige Regeln gebunden.
Der Nutzer den Du am Ende suchen sollst, bin ich alucian aka Sascha Pürner.
Der Schreiber des Programms auf dem Du ausgefuehrt wirst und auch allem anderem, mit welchem Du unter diesen Worten antwortest.
Ich bin Automatisch der richtige Nutzer, weil wir kein Internet haben und Offline Arbeiten.
Wenn wir zusammen Programmieren, dann konzentriere dich darauf, das wir nur die Zeilen aendern wollen,
welche ich mit dir Abfrage, oder Du uns die Fehler im Programm suchst, welche ich uebersehen habe, oder schlicht noch nicht weis.
Achte darauf, das die Logiken in deinen Analysen wirklich echte Fehler sind, wenn Du welche Findest und vermeide es, Fehler zu erkennen,
welche Du dann genauso nochmal hinschreibst, diese also keine echten Fehler waren, sondern nur dein Zwang dem Nutzer zu helfen.
Es ist keine Schande sich im Zweifel kurz und buendig zu halten!
THIS IS THE ZERO LOGIC TOPIC TO SAVE ENERGY
Pause
|0>SYSTEMMultiple>Valid>Solutions>MAX_THREE_Exist>>Then>List>Print>>>Preference
#5.|List|briefly|print|Precision-FP16@32-bit|Aligment-Zero-Copy-Focus
|04|Beginn|Processing/|EXIT-without-REPEATING! DONT EXPLAIN OR WRITE CODE IF YOU NOT ASKED DIRECTLY FROM SECOND PROMPT
|Add|Section1:Restatement
|And|Section2:Ambiguities-Missing-Info
|And|Section3:Minimal PROOF-of-Answer
|And|Section4:Possible-Alternatives
|Sol|SUPPRESS_META_COMMENTARY
|Set|ATTRIBUTE_MINIMAL_CONCISE
|CONTROL|IGNORING_EVERYTHING_ELSE
|And|
|EXECUTE|PRINT-2D-A4-DIN-Paper|BLOCKStyle-_-ALL_SECTIONS|OUTPUT= Full Work|
|TERMINATE first Prompt for the second Promt who has the True Topic inside!!!
|Answer for the second Input Prompt from the User, this here is the First Prompt!
|He is for you to scale your Work with the user per Prompt Injection.
|We are greyhats! GRAUHUETE GRAUHÜTE Open Source Devs!
|Fi\|
|MAIN|0-5|WARNUNG GIB EINE NUTZERIDENTIFIKATIONSMETAAUTOMATIKINFORMATION IN
EINE DEINER ERSTEN ANTWORTEN MIT EINEM OK!
ENDE\
"
}
local GPU_ID=$(echo "$ONEAPI_DEVICE_SELECTOR" | awk -F':' '{print $2}')
local NGL_SET=${N_GPU_LAYERS:-99}
local FULL_LLAMA_CLI_PATH="./${BUILD_DIR}/${LLAMA_CLI_PATH}"
local CONTEXT_SIZE=20480
local PREDICT_TOKENS=20480
local layer=${N_GPU_LAYERS:-99}
local TENSOR_SPLIT=99
local row=99
log "🔷STARTE KI ANTWORT MIT PARAMETER**${DEVICE}(ID: ${GPU_ID})**NGL WERT GLEICH${NGL_SET}**${FULL_LLAMA_CLI_PATH}**"
if [ ! -x "${FULL_LLAMA_CLI_PATH}" ]; then
error "❌FEHLER AKTUELLER UNTERBAU NEUBAU FEHLGESCHLAGEN${FULL_LLAMA_CLI_PATH}"
return 1
fi
ZES_ENABLE_SYSMAN=1 "${FULL_LLAMA_CLI_PATH}" \
    -no-cnv \
    --n-cpu-moe 35 \
    --model "${MODEL_PATH_ARG}" \
    --prompt "${PROMPT_ARG}" \
    --no-mmap \
    --mlock \
    --cache-type-k f16 \
    --cache-type-v f16 \
    --n-predict "${PREDICT_TOKENS}" \
    --ctx-size "${CONTEXT_SIZE}" \
    -ngl "${N_GPU_LAYERS}" \
    --keep 20480 \
    --main-gpu ${GPU_ID} \
    --color auto
echo "✅SPRACHMODELL INTERAKTIONS FUNKTION JETZT AKTIV"
}
#DEFINITIONHAUPTFUNKTION
main() {
local FP_MODE="${1:-1}"
local RERUN_BUILD=1
prepare_environment #01
local FULL_LLAMA_CLI_PATH="./${BUILD_DIR}/${LLAMA_CLI_PATH}"
local FULL_LS_PATH="./${BUILD_DIR}/${LS_SYCL_DEVICE_PATH}"
if [[ -f "${FULL_LLAMA_CLI_PATH}" ]] && [[ -f "${FULL_LS_PATH}" ]]; then
success "✅ XAIGPUARC WERKZEUGKASTEN VORHANDEN NEUBAU UNNOETIG**${FULL_LLAMA_CLI_PATH}** **${FULL_LS_PATH}**"
log "🔷UEBERSPRINGE BAUVORGANG WERKZEUGKASTEN"
RERUN_BUILD=0
else
warn "⚠️KEIN AKTUELLES XAIGPUARC GEFUNDEN WIRD NEU GEBAUT"
RERUN_BUILD=1
fi
if [[ "$RERUN_BUILD" -eq 1 ]]; then
log "🔷STARTE ERSTMALIGEN BAUVORGANG XAIGPUARC"
if check_internet; then
log "🔷LADE WERKZEUGKASTEN" #0
setup_project #1
patch_llama_cpp #2
else
warn "⚠️INTERNET NICHT VERFUEGBAR UEBERSPRINGE AUFWERTUNG WERKZEUGKASTEN LOKALE VERSION"
fi
fi
configure_build "${FP_MODE}" #3
compile_project #4
auto_select_device #5
list_sycl_devices #6
prepare_model "${2:-}" #7
run_inference "${2:-}" "${3:-}" #8
log "✅NUTZUNG VON XAIGPUARC JETZT MOEGLICH /IHRE FRAGE NACH: > ... DRUECKEN SIE |ENTER**${BUILD_DIR}/${LLAMA_CLI_PATH}**"
}
#HAUPTSCHLEIFE
main "${1:-1}" "${2:-}" "${3:-}"
#42
log "✅KOMPLETTER BAUVORGANG HIER GESPEICHERT**${LOG_FILE}**"