
首先先介绍一下目前可以实现的效果:
1.Qwen2.5-3B-Instruct:模型及KV均可以加载到显存。使用q6_k量化gguf推理时CPU占用率低。GPU占用约80%,显存占用5GB。推理性能13token/s
2.Qwen2.5-7B-Instruct:KV需要使用-nkvo参数放在系统内存中,不然会Out of Memory。因此推理时CPU使用率很高。i7-9700满载也只能让S80跑50%占用。系统内存使用13GB,显存使用4GB。因为CPU性能不足,推理性能为8token/s
因为摩尔线程官方的文档是使用mthread运行时的Docker去执行预编译好的llama.cpp-musa容器,并没有提及如何编译本机版本,故写此文章。
一.系统准备
1.安装Ubuntu 20.04 amd64(因为MT_Linux_Driver是闭源dkms驱动,因此只能安装在Ubuntu 20.04操作系统中)
2.编译/etc/apt/sources.list,更换任意你喜欢的国内软件源
3.执行sudo apt update和sudo apt upgrade更新到最新版(注意不要不小心点弹出的对话框更新到22.04了)
4.重新启动计算机
二.安装新版gcc
这一步将手动从ubuntu测试源中安装更新版本的gcc11和g++11,用来后续的dkms编译和llama.cpp编译
1.添加测试源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
2.更新软件源缓存
sudo apt-get update
3.安装gcc11和g++11
sudo apt-get install gcc-11 g++-11
4.安装dkms
sudo apt install dkms
5.创建符号链接,让gcc和g++命令指向11版本的二进制程序
sudo ln -s /usr/bin/gcc-11 /usr/bin/gcc
sudo ln -s /usr/bin/g++-11 /usr/bin/g++
如果无法创建符号链接,提示文件已存在,则需要使用rm命令删除已存在的符号链接。例如sudo rm -rf /usr/bin/gcc
6.检查gcc和g++版本
gcc -v
g++ -v
三.安装MUSA_SDK
此步参考官网文档https://docs.mthreads.com/musa-sdk/musa-sdk-doc-online/install_guide/,单卡S70/S80用户只需要安装驱动,MUSA_Toolkit和muDNN即可。
四.克隆并编译llama.cpp
1.克隆最新源码
git clone https://github.com/ggerganov/llama.cpp
2.安装libomp-dev
sudo apt install libomp-dev
3.编译
参考llama.cpp编译手册https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md
make GGML_MUSA=1 GGML_CUDA_ENABLE_UNIFIED_MEMORY=1 GGML_CUDA_FA_ALL_QUANTS=true GGML_CUDA_F16=true -j 8
具体各变量含义可参考编译手册的CUDA章节
编译后可在当前文件夹找到编译出的可执行文件。本例使用llama-server搭建一个web服务端。
五.下载并启动模型
Qwen2.5可以在多个模型网站找到。这里使用huggingface
wget https://huggingface.co/Qwen/Qwen2.5-3B-Instruct-GGUF/resolve/main/qwen2.5-3b-instruct-q6_k.gguf
下载好之后使用如下命令执行
./llama-server -m qwen2.5-3b-instruct-q6_k.gguf --port 8080 --host 0.0.0.0 -ngl 999
更多启动参数可参考llama.cpp手册https://github.com/ggerganov/llama.cpp/blob/master/examples/server/README.md
当看到命令行输出main: server is listening on 0.0.0.0:8080 - starting the main loop后说明已经成功的启动了。此时可以用浏览器访问这台电脑的8080端口使用llama.cpp的webui进行推理了。