在llama.cpp中为高通Adreno GPU 引入新的OpenCL™ GPU后端
发表于 2025-02-27 10:25:10

我们很高兴地宣布目前可以提供适用于llama.cpp的全新OpenCL后端,这是一个得到广泛认可、并专注于大语言模型(LLM)推理的开源项目。该后端针对高通Adreno GPU进行了优化,可支持一系列流行的大型语言模型,包括最新的DeepSeek R1模型。此项成就表明在人工智能社区范围内提高大型语言模型推理llama.cpp项目的性能和灵活性方面迈出了重要的一步。Llama.cpp的Adreno OpenCL后端目前通过Codelinaro正式上传到开源社区

通过此项更新,开发者现在有两种选择可以在高通Adreno GPU上运行大型语言模型推理工作负载:我们的团队一直在积极开发的开源机器学习编译器(MLC)项目,以及llama.cpp项目。如要获得有关利用机器学习编译器运行大型语言模型的更多详细内容,请参阅以下文章:将高通Adreno GPU用于生成式人工智能:开源方法

新的 OpenCL 后端已在其通过 Codelinaro 初步可用后,集成到 llama.cpp 主干中。该后端主要基于OpenCL 3.0标准,具有子群等可选功能,从而能够实现最佳性能。该后端经过充分测试,并针对高端 Adreno GPU 进行了优化,并且很容易将其移植到支持OpenCL 3.0标准的其他供应商GPU上。

OpenCL用于Adreno的益处

由Khronos集团开发的OpenCL(开放计算语言)是一种被广泛采用的行业标准,可允许开发者编写高效且可移植的并行编程代码,这类代码可以在各种设备上运行,包括CPU、GPU、NPU、现场可编程门阵列等,并且不需要深入了解该类设备。尤其是GPU上的OpenCL,使开发者能够利用现代GPU的巨大并行计算能力来实现通用GPU (GPGPU)的各种应用,例如图像/视频/视觉信号处理、以及卷积神经网络(CNN)和大型语言模型(LLM)等人工智能工作。

作为Khronos集团中OpenCL工作组的关键成员,高通技术公司积极参与了OpenCL的标准化工作。

作为最早在移动GPU上采用OpenCL标准的公司之一,高通已经在多种SOC上支持OpenCL,包括高端、中端和低端Android智能手机、物联网设备(例如:无人机)、汽车平台、以及Windows on Snapdragon(WoS)设备。

高通技术公司还提供了一套综合性工具(Snapdragon Profiler)、OpenCL软件开发工具包示例、以及包含最佳实践的OpenCL编程指南,以帮助开发者在Adreno GPU上使用OpenCL。

GPU上的OpenCL为开发者提供了新的途径,使他们能够利用 Snapdragon 设备中 Adreno GPU计算能力。如将lama.cpp等计算密集型任务卸载到GPU中,则可以将CPU的资源释放出来进行其他操作。得益于OpenCL的开放性和可移植性,可以大幅度缩短解决方案的上市时间,从而取得较高的投资回报率(RoI)。

OpenCL后端用于llama.cpp的主要特性和益处

1. 增强性能:全新后端显著提高了llama.cpp在Adreno GPU上的性能,实现了更快的计算和更高效的处理。

2. 更广泛的兼容性:该后端针对Adreno GPU进行了高度优化。但是,该后端可以在所有支持OpenCL 3.0标准并具备子组支持的GPU上运行,从而确保更广泛的兼容性和可访问性。

3. 高度灵活性:用户可以针对不同的GPU修改和优化该后端,因为当前的解决方案采用了所有标准的OpenCL功能。例如,该后端可以使用针对其他GPU供应商的扩展程序。

4. 开源协作:此项更新证明了开源协作的力量。我们与社区密切合作,确保该后端能够满足开发者和用户的需求。

经过测试所支持的模型和平台

我们利用各种大型语言模型对llama.cpp进行了严格测试,以确认其稳健性和性能。该类测试包括:

  • Meta公司的llama模型,包括llama 2系列和3系列模型,参数为70亿(7B)和8B等。
  • Gemma 1&2系列2B模型,Phi3 mini
  • Mistral 7B模型
  • Qwen 1&2系列7B、百川7B等双语模型。
  • DeepSeek R1蒸馏模型

后端已在许多由 Snapdragon SOC 驱动的高端设备上进行了测试:

  • 搭载骁龙X Elite和和骁龙X Plus芯片的Windows 11笔记本电脑
  • 搭载第1代、第2代、第3代骁龙8 Elite处理器驱动的Android智能手机

如何利用 Windows on Snapdragon   Android 和骁龙 X Elite上构建和运行llama.cpp

llama.cpp 的 Adreno OpenCL 后端已在搭载 骁龙8 Gen 1、2、3 和 Elite 移动平台的 Android 设备上进行了良好的优化,同时也适用于运行 Windows 11 的骁龙X Elite 计算平台。以下是如何在这两种平台构建和运行llama.cpp的说明。

针对Android系统的步骤

必备软件(其他版本也可用)和硬件清单

  • Ubuntu 22.04
  • Python3、CMake、Make和Ninja
  • C /C++编译器
  • Android原生开发工具包26.3.11579264版;将其安装到这个路径下/opt/android-sdk/NDK/26.3.11579264/
  • 搭载高通骁龙8 Gen 1、2、3、Elite移动平台的Android设备。

安装原生开发工具包

cd ~ 
wget https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip && \ 
unzip commandlinetools-linux-8512546_latest.zip && \ 
mkdir -p ~/android-sdk/cmdline-tools && \ 
mv cmdline-tools latest && \ 
mv latest ~/android-sdk/cmdline-tools/ && \ 
rm -rf commandlinetools-linux-8512546_latest.zip 
 
yes | ~/android-sdk/cmdline-tools/latest/bin/sdkmanager "ndk;26.3.11579264" 

安装OpenCL头文件和安装类驱动程序加载器

在原生开发工具包发行版中没有直接提供运行OpenCL所需要的文件。用户必须从官方的Khronos® OpenCL代码库免费下载OpenCL头文件和安装类驱动程序加载器。这些文件与Android原生开发工具包一起用于构建llama.cpp可执行文件。

mkdir -p ~/dev/llm 
cd ~/dev/llm 
 
git clone https://github.com/KhronosGroup/OpenCL-Headers && \ 
cd OpenCL-Headers && \ 
cp -r CL ~/android-sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include 
 
cd ~/dev/llm 
 
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader && \ 
cd OpenCL-ICD-Loader && \ 
mkdir build_ndk26 && cd build_ndk26 && \ 
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release \ 
  -DCMAKE_TOOLCHAIN_FILE=$HOME/android-sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake \ 
  -DOPENCL_ICD_LOADER_HEADERS_DIR=$HOME/android-sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include \ 
  -DANDROID_ABI=arm64-v8a \ 
  -DANDROID_PLATFORM=24 \ 
  -DANDROID_STL=c++_shared && \ 
ninja && \ 
cp libOpenCL.so ~/android-sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android 

利用Adreno OpenCL后端构建llama.cpp

cd ~/dev/llm 
 
git clone https://github.com/ggerganov/llama.cpp && \ 
cd llama.cpp && \ 
mkdir build-android && cd build-android 
 
cmake .. -G Ninja \ 
  -DCMAKE_TOOLCHAIN_FILE=$HOME/android-sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake \ 
  -DANDROID_ABI=arm64-v8a \ 
  -DANDROID_PLATFORM=android-28 \ 
  -DBUILD_SHARED_LIBS=OFF \ 
  -DGGML_OPENCL=ON 
 
ninja 

如果成功构建,可执行文件应位于build/bin

针对搭载Windows on Snapdragon的骁龙X Elite 的步骤

必备软件(其他版本也可用)和硬件清单

安装OpenCL头文件和安装类驱动程序加载器

在原生开发工具包发行版中没有直接提供运行OpenCL所需要的文件。用户必须从官方的Khronos® OpenCL代码库免费下载OpenCL头文件和安装类驱动程序加载器。这些文件与Android原生开发工具包一起用于构建llama.cpp可执行文件。

mkdir -p ~/dev/llm 
 
cd ~/dev/llm 
git clone https://github.com/KhronosGroup/OpenCL-Headers && cd OpenCL-Headers 
mkdir build && cd build 
cmake .. -G Ninja ` 
  -DBUILD_TESTING=OFF ` 
  -DOPENCL_HEADERS_BUILD_TESTING=OFF ` 
  -DOPENCL_HEADERS_BUILD_CXX_TESTS=OFF ` 
  -DCMAKE_INSTALL_PREFIX="$HOME/dev/llm/opencl" 
cmake --build . --target install 
 
cd ~/dev/llm 
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader && cd OpenCL-ICD-Loader 
mkdir build && cd build 
cmake .. -G Ninja ` 
  -DCMAKE_BUILD_TYPE=Release ` 
  -DCMAKE_PREFIX_PATH="$HOME/dev/llm/opencl" ` 
  -DCMAKE_INSTALL_PREFIX="$HOME/dev/llm/opencl" 
cmake --build . --target install 

构建llama.cpp

mkdir -p ~/dev/llm 
cd ~/dev/llm 
 
git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp 
mkdir build && cd build 
 
cmake .. -G Ninja ` 
  -DCMAKE_TOOLCHAIN_FILE="$HOME/dev/llm/llama.cpp/cmake/arm64-windows-llvm.cmake" ` 
  -DCMAKE_BUILD_TYPE=Release ` 
  -DCMAKE_PREFIX_PATH="$HOME/dev/llm/opencl" ` 
  -DBUILD_SHARED_LIBS=OFF ` 
  -DGGML_OPENCL=ON 
ninja 

如果成功构建,可执行文件应位于build/bin

启用可执行文件

以下是如何运行llama.cpp可执行文件的一个示例:

./llama-cli -m ggml-model-qwen1.5-7b-chat-Q4_0.gguf -b 128 -ngl 99 -c 2048 -p "Hello" 

请注意,目前 Adreno OpenCL 后端已利用Q4_0量化方案的权重进行了优化。对利用其他方案(例如:FP16和Q6)的权重优化正在进行中,我们将很快进行更新。

未来工作

高通团队正致力于将更多的Adreno特定功能引入到OpenCL后端。Adreno GPU支持各种扩展程序,从而实现更好的性能和功率。例如,我们支持整数点积和片上全局内存等功能(请参考高通开发者社区提供的Adreno软件开发工具包)。

结论

为Adreno GPU添加OpenCL GPU后端是llama.cpp向前迈出的重要一步。我们非常激动,想知道社区如何利用这一增强功能,并期待您的反馈。

是否想要了解更多内容?请加入我们的Discord社区,与高通技术公司的专家交流,与使用本公司技术的其他开发者联系,并随时了解以开发者为中心的最新讯息和产品更新。

在所发布内容中表达的观点仅为原作者的个人观点,并不代表高通技术公司或其子公司(以下简称为“高通技术公司”)的观点。所提供的内容仅供参考之用,而并不意味着高通技术公司或任何其他方的赞同或表述。本网站同样可以提供非高通技术公司网站和资源的链接或参考。高通技术公司对于可能通过本网站引用、访问、或链接的任何非高通技术公司网站或第三方资源并没有做出任何类型的任何声明、保证、或其他承诺。

骁龙和高通品牌产品属于高通技术公司和/或其子公司的产品。

OpenCLOpenCL标识是经Khronos许可使用的苹果公司商标。

关于作者

王洪强

首席工程师/经理

阅读更多

CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
微博关注
【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及文中陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件有任何怀疑或质疑,请立即与CSDN联系,我们将迅速给您回应并做处理。】