【AMD平台】编译llama.cpp

目录

■环境准备

[■CPU 版本编译](#■CPU 版本编译)

[■GPU 加速编译(ROCm)](#■GPU 加速编译(ROCm))

[■针对特定 AMD GPU 架构优化](#■针对特定 AMD GPU 架构优化)

[■使用 CMake 的详细配置](#■使用 CMake 的详细配置)

■验证编译结果

■常见问题和解决方案

■运行测试



■环境准备

  • 系统要求

    Ubuntu/Debian 系统依赖

    sudo apt update sudo apt install -y build-essential git cmake wget

    可选:安装 ROCm(如果需要 GPU 加速)

    sudo apt install -y rocm-dev rocm-utils

  • 获取源代码

    克隆官方仓库

    git clone https://github.com/ggerganov/llama.cpp.git

    cd llama.cpp

■CPU 版本编译

  • 基础编译
bash 复制代码
# 创建构建目录

mkdir build cd build


# 配置 CMake

cmake .. -DLLAMA_NATIVE=ON


# 编译

make -j$(nproc)


# 或者使用简化方式

cd ..  # 回到项目根目录

make
  • 高级编译选项
bash 复制代码
# 启用 AVX/AVX2 支持(AMD CPU 通常支持)

make LLAMA_AVX=1 LLAMA_AVX2=1


# 启用 AVX512(如果 CPU 支持)

make LLAMA_AVX=1 LLAMA_AVX2=1 LLAMA_AVX512=1


# 启用 FMA 支持

make LLAMA_FMA=1


# 启用所有优化

make LLAMA_NATIVE=ON

■GPU 加速编译(ROCm)

  • 安装 ROCm 依赖
bash 复制代码
# 确保 ROCm 已正确安装

rocm-smi # 检查 ROCm 状态

# 安装额外依赖

sudo apt install -y hip-devices-rocm miopen-hip-rocm rccl-rocm
  • 编译支持 GPU 的版本
bash 复制代码
# 使用 CMake 配置

mkdir build-gpu cd build-gpu

# 配置 ROCm 支持

cmake .. -DLLAMA_HIPBLAS=ON -DCMAKE_C_COMPILER=hipcc -DCMAKE_CXX_COMPILER=hipcc -DAMDGPU_TARGETS=gfx900,gfx906,gfx908,gfx1030


# 编译

make -j$(nproc)
  • 简化的 GPU 编译方式
bash 复制代码
# 在项目根目录下

make LLAMA_HIPBLAS=1

■针对特定 AMD GPU 架构优化

  • 查询 GPU 架构
bash 复制代码
# 查看 AMD GPU 架构

rocminfo | grep gfx

# 或者使用

rocm-smi --showhw
  • 针对特定架构编译
bash 复制代码
# 针对 RDNA2 架构 (gfx1030)

make LLAMA_HIPBLAS=1 AMDGPU_TARGETS=gfx1030


# 针对 RDNA3 架构 (gfx1100, gfx1101, gfx1102)

make LLAMA_HIPBLAS=1 AMDGPU_TARGETS=gfx1100,gfx1101,gfx1102


# 针对 CDNA 架构 (数据中心 GPU)

make LLAMA_HIPBLAS=1 AMDGPU_TARGETS=gfx908,gfx90a

■使用 CMake 的详细配置

bash 复制代码
# 创建构建目录

mkdir build-amd cd build-amd

# 完整的 CMake 配置示例

cmake .. -DCMAKE_BUILD_TYPE=Release -DLLAMA_NATIVE=ON  -DLLAMA_HIPBLAS=ON -DLLAMA_AVX=ON -DLLAMA_AVX2=ON -DCMAKE_C_COMPILER=hipcc  -DCMAKE_CXX_COMPILER=hipcc  -DAMDGPU_TARGETS=gfx1030,gfx1100,gfx908


# 编译

make -j$(nproc)

如何确认 AMDGPU_TARGETS 值

方法一:使用 rocminfo 命令

bash 复制代码
# 查询 GPU 架构信息

rocminfo | grep gfx

# 更详细的输出

rocminfo | grep -A 5 "Name:"

# 示例输出:

# Name: gfx906

# Name: gfx1030

方法二:使用 rocm-smi 命令

bash 复制代码
# 显示 GPU 硬件信息

rocm-smi --showhw

# 显示更详细的 GPU 信息

rocm-smi -a | grep "GPU Family"

■验证编译结果

  • 检查生成的二进制文件
bash 复制代码
# 查看生成的可执行文件

 ls -la main quantize server

# 检查二进制文件信息

file main

# 查看依赖库

ldd main 
  • 测试 GPU 支持
bash 复制代码
# 检查是否支持 GPU 加速

./main --help | grep -i gpu


# 查看系统信息

./main --list-gpus

■常见问题和解决方案

  • 编译错误处理
bash 复制代码
# 如果遇到 HIP 编译错误

export HIP_PLATFORM=amd

export HCC_AMDGPU_TARGET=gfx1030 # 根据你的 GPU 架构调整

# 如果链接错误

export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH
  • 性能优化设置
bash 复制代码
# 设置 GPU 内存分配策略

export HSA_XNACK=1

export MIOPEN_USER_DB_PATH=/tmp/miopen

■运行测试

  • CPU 推理测试
bash 复制代码
# 下载模型(例如 7B 模型)

wget https://huggingface.co/TheBloke/Llama-2-7B-GGUF/resolve/main/llama-2-7b.Q4_K_M.gguf

# 运行推理

./main -m llama-2-7b.Q4_K_M.gguf -p "Hello, how are you?" -n 128
  • GPU 推理测试
bash 复制代码
# 使用 GPU 运行推理

./main -m llama-2-7b.Q4_K_M.gguf -p "Hello, how are you?" -n 128 -ngl 33

至此,本文的内容就结束了。

相关推荐
漫步企鹅10 天前
【Qt】构建和编译 Qt 程序时如何减少生成的二进制可执行文件的大小
qt·编译·可执行文件·二进制大小
九流下半14 天前
window wsl 环境下编译openharmony,HarmonyOS 三方库 FFmpeg
windows·ffmpeg·harmonyos·编译·openharmony·三方库
阿昌喜欢吃黄桃1 个月前
mac安装mvnd结合idea
java·maven·idea·编译·打包·mvnd·编译打包
Uncertainty!!2 个月前
C++编译/链接模型
c++·链接·编译
时光飞逝的日子2 个月前
linux下编写shell脚本一键编译源码
linux·shell·脚本·编译
斑鸠同学2 个月前
如何获得sqoop-1.4.6.2.3.99.0-195.jar
jar·sqoop·编译·atlas
智驾3 个月前
OpenharmonyOS+RK3568,【编译&烧录】
编译·openharmony·rk3568·烧录
PLUS_WAVE3 个月前
【CUDA 编译 bug】ld: cannot find -lcudart
服务器·c++·bug·环境·编译·cuda·ld
liuluyang5303 个月前
C语言C11支持的结构体嵌套的用法
c语言·开发语言·算法·编译·c11