galileo-llm.png

系统镜像为我基于 galileo-resurrection 项目制作的 Debian 8, 使用 5.10 内核

Galileo 的 Intel Quark SoC X1000 是个 i586 处理器, 一开始我是打算从头构建高版本的 gcc 和 cmake 再编译 llama.cpp, 然后由于默认 gcc 4.9.2 的诸多 bug 导致无法成功编译, 所以最后改成交叉编译

找了一圈最后在毛子的 ALT Linux 上找到了 i586 交叉编译工具链, 但是是 aarch64 的, 好在 DockerHub 上有容器可以直接使用:

# 在 aarch64 上为 i586 交叉编译总感觉怪怪的(?)
docker run -it --rm alt:p10
apt-get update
apt-get install -y \
    cmake build-essential git ftp curl wget htop vim-console gcc-i586-linux-gnu

接着是编译 llama.cpp, 使用版本 b7936, 在 cmake 目录下创建 i586-linux-gnu-gcc.cmake 文件:

# i586-linux-gnu-gcc.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR i586)
set(CMAKE_SYSTEM_VERSION 1)

set(CMAKE_C_COMPILER "/usr/bin/i586-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/i586-linux-gnu-g++")
set(CMAKE_STRIP "/usr/bin/i586-linux-gnu-strip")
set(CMAKE_SYSROOT "/usr/lib/i586-linux-gnu/sys-root")

set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

set(CMAKE_C_FLAGS "-march=i586 -mtune=generic -mno-sse -mno-mmx -mno-sse2 -mno-3dnow ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-march=i586 -mtune=generic -mno-sse -mno-mmx -mno-sse2 -mno-3dnow ${CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -latomic")

然后进行编译:

# 一定要设置 static 参数, 不然运行会报错 glibc 版本不匹配
cmake -B build -DLLAMA_CURL=OFF -DBUILD_SHARED_LIBS=OFF \
    -DGGML_STATIC=ON -DCMAKE_EXE_LINKER_FLAGS="-static" \
    -DCMAKE_TOOLCHAIN_FILE=cmake/i586-linux-gnu-gcc.cmake
cmake --build build --config Release -j $(nproc) \
    --target llama-server llama-cli llama-mtmd-cli llama-bench

编译好的文件拷贝到 Galileo 上即可使用, 运行的模型可以参考此 reddit 帖子

添加新评论