当前位置: 首页 > news >正文

【AMD平台】编译llama.cpp

目录

■环境准备

■CPU 版本编译

■GPU 加速编译(ROCm)

■针对特定 AMD GPU 架构优化

■使用 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.gitcd llama.cpp

CPU 版本编译

  • 基础编译
# 创建构建目录mkdir build cd build# 配置 CMakecmake .. -DLLAMA_NATIVE=ON# 编译make -j$(nproc)# 或者使用简化方式cd ..  # 回到项目根目录make
  • 高级编译选项
# 启用 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 依赖
# 确保 ROCm 已正确安装rocm-smi # 检查 ROCm 状态# 安装额外依赖sudo apt install -y hip-devices-rocm miopen-hip-rocm rccl-rocm
  • 编译支持 GPU 的版本
# 使用 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 编译方式
# 在项目根目录下make LLAMA_HIPBLAS=1

针对特定 AMD GPU 架构优化

  • 查询 GPU 架构
# 查看 AMD GPU 架构rocminfo | grep gfx# 或者使用rocm-smi --showhw
  • 针对特定架构编译
# 针对 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 的详细配置

# 创建构建目录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 命令

# 查询 GPU 架构信息rocminfo | grep gfx# 更详细的输出rocminfo | grep -A 5 "Name:"# 示例输出:# Name: gfx906# Name: gfx1030

方法二:使用 rocm-smi 命令

# 显示 GPU 硬件信息rocm-smi --showhw# 显示更详细的 GPU 信息rocm-smi -a | grep "GPU Family"

验证编译结果

  • 检查生成的二进制文件
# 查看生成的可执行文件ls -la main quantize server# 检查二进制文件信息file main# 查看依赖库ldd main 
  • 测试 GPU 支持
# 检查是否支持 GPU 加速./main --help | grep -i gpu# 查看系统信息./main --list-gpus

常见问题和解决方案

  • 编译错误处理
# 如果遇到 HIP 编译错误export HIP_PLATFORM=amdexport HCC_AMDGPU_TARGET=gfx1030 # 根据你的 GPU 架构调整# 如果链接错误export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH
  • 性能优化设置
# 设置 GPU 内存分配策略export HSA_XNACK=1export MIOPEN_USER_DB_PATH=/tmp/miopen

运行测试

  • CPU 推理测试
# 下载模型(例如 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 推理测试
# 使用 GPU 运行推理./main -m llama-2-7b.Q4_K_M.gguf -p "Hello, how are you?" -n 128 -ngl 33

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

http://www.dtcms.com/a/297254.html

相关文章:

  • 【问题集】——RAG项目实战:LangChain 0.3集成 Milvus 2.5向量数据库,构建大模型智能应用
  • GTSuite许可与网络安全
  • 每天算法刷题Day53:7.25:leetcode 栈5道题,用时1h35min
  • 广东省省考备考(第五十六天7.25)——常识:科技常识(听课后强化训练)
  • 输电线路观冰精灵在线监测装置:科技赋能电网安全的新利器
  • 微算法科技(NASDAQ:MLGO)采用分布式哈希表优化区块链索引结构,提高区块链检索效率
  • 在FreeBSD系统下使用llama-cpp运行飞桨开源大模型Ernie4.5 0.3B(失败)
  • C++ atomic与内存顺序 【转】
  • 从双碳到零碳园区:安科瑞微电网系统的应用与价值
  • Javaweb————学习javaweb的预备知识
  • 【数据结构】长幼有序:树、二叉树、堆与TOP-K问题的层次解析(含源码)
  • 【js】Proxy学习笔记
  • 【高等数学】第五章 定积分——第四节 反常积分
  • Colab中如何临时使用udocker(以MinIO为例)
  • 华为云DRS实现Oracle到GaussDB数据库迁移的全流程技术方案
  • Android Studio 自带的官方模拟器,ABI这一列是x86_64,xABI这一列是arm64-v8a
  • 【面试场景题】外卖点餐系统设计思路
  • mysql 和oracle的选择
  • Android Studio 2024 内嵌 Unity 3D 开发示例
  • Oracle转Mysql建表脚本
  • Android studio自带的Android模拟器都是x86架构的吗,需要把arm架构的app翻译成x86指令?
  • 【Android Studio】安装Trae插件后Android Studio 启动崩溃问题处理
  • 瑞萨电子RA-T MCU系列新成员RA2T1——电机控制专家
  • CPU(中央处理器)和GPU(图形处理器)的区别
  • vscode npm run build打包报ELIFECYCLE
  • 一文解析公平锁、非公平锁、悲观锁、乐观锁、可重入锁和锁的升级(含详细代码实例)
  • MJ11032G和MJ11033G是对管由onsemi/安森美公司研发的一款高性能、低功耗的达林顿晶体管
  • 能源管理网页的碳中和视觉语言:数据图表中的环保色彩体系创新
  • 基于51单片机的光照强度检测系统Protues仿真设计
  • 卸油管连接检测误报率↓78%:陌讯多模态融合算法实战解析