llama 针对 Intel CPU 的优化
安装 Intel oneAPI 工具
下载地址
https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html
下载离线安装包
在 Select options below to download
界面中选择 Linux
和 Offline Installer
在页面的 Command Line Download
下会出现下载地址和安装命令。
这里出现的是:
wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/163da6e4-56eb-4948-aba3-debcec61c064/l_BaseKit_p_2024.0.1.46_offline.sh
sudo sh ./l_BaseKit_p_2024.0.1.46_offline.sh
添加指令支持
如果我们的 CPU 支持 avx_vnni
指令集,这可以增加一下函数(这里对应的 llama 的 tag 号为 b1309):
- 在 llama.cpp/ggml.c 的 21480 行后增加:
int ggml_cpu_has_avx_vnni(void) {
#if defined(__AVXVNNI__)
return 1;
#else
return 0;
#endif
}
- llama.cpp/ggml.h 的 2050 行后增加:
GGML_API int ggml_cpu_has_avx_vnni (void);
- llama.cpp/llama.cpp 的 7615 行后增加:
s += "AVX_VNNI = " + std::to_string(ggml_cpu_has_avx_vnni()) + " | ";
- llama.cpp/common/common.cpp 的 1207 行后增加:
fprintf(stream, "cpu_has_avx_vnni: %s\n", ggml_cpu_has_avx_vnni() ? "true" : "false");
- llama.cpp/spm-headers/ggml.h 的 2050 行后增加:
GGML_API int ggml_cpu_has_avx_vnni (void);
编译 llama.cpp
cd llama.cpp
rm -rf build && mkdir build
cd build
source /opt/intel/oneapi/setvars.sh
cmake .. -DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=Intel10_64lp -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DLLAMA_NATIVE=ON
cmake --build . --config Release
下载模型
将模型放置到 modles/7B
目录下
执行
cd llama.cpp
./build/bin/main -m ./models/7B/ggml-model-q4_K_S.gguf -t <number-of-threads> -b 512 -p "What is Intel OpenVINO"