1.创作日期
2025年6月24日
2.创作目的
记录分享一下llama.cpp的安装和使用经验,没用官方的docker镜像,自己制作了一个llama.cpp的docker镜像并启动使用
3.安装
系统配置:
1.windows下的wsl2(现在安装一般都是wsl2,安装后在cmd直接输入wsl -l -v
可以查看版本),发行版是ubuntu:22.04 LTS,最全最权威的安装方法:wsl安装官方地址
2.显卡是英伟达的3070ti
特别注意: 目前wsl2和linux在使用上基本没差别,因此linux系统可以照着安装,如果没有英伟达显卡,单纯使用cpu也是可以使用的,只不过需要调整文章中涉及nvidia的步骤
前置条件:
1.已经安装了docker,最全最权威的安装方法:docker安装官方地址
2.已经安装了最新的nvidia驱动,wsl只需要windows下安装了就可以了,windows的英伟达驱动一般都是安装好的。最全最权威的安装方法:英伟达驱动安装官方地址
特别注意: wsl安装docker的方法直接找对应的发行版就行;如果linux下使用.run文件安装了旧版本的英伟达驱动需要先删除干净才能安装新的,如果是apt-get、yum、dnf这些包管理工具安装的一般是可以直接升级的,驱动删除和安装后最好重启系统
安装开始:
1、根据我的dockerfile创建一个conda镜像,conda的dockerfile地址,这是我github的仓库文件,公共的都可以访问,dockerfile中基本每一步都有注释,可以自己阅读理解后按步骤直接在linux系统中安装,有些dockerfile的说明在readme中
#1、先创建一个带有conda的镜像,我给它的标签是my-conda:1.0,意思是镜像名字是my-conda,版本是1.0,可以自己修改成想要的
docker build -t my-conda:1.0 -f docker-my-conda .
#2、接着创建一个带有llama.cpp项目的镜像,我给它的标签是my-llama_cpp:1.0,意思是镜像名字是my-llama_cpp,版本是1.0,可以自己修改成想要的,如果conda镜像的标签跟我设置的不一样,my-llama_cpp里面from后面的内容需要修改成修改后的标签
docker build -t my-llama_cpp:1.0 -f docker-my-llama_cpp .
4.使用
1、根据构建好的镜像启动一个容器,并进入容器
#1、使用标签为my-llama_cpp:1.0的镜像启动一个容器,挂载主机/mnt/models目录到容器中,开启自动重启(如果容器意外被关闭会尝试自动重启,docker stop除外),开放主机的12348、12349、12350端口并映射给容器的22、80、8080,开启gpu,容器名字为my-llama_cpp,开始后台运行
docker run -itd --restart=always -p 12348:22 -p 12349:80 -p 12350:8080 --gpus all -v /mnt/models:/mnt/models --name my-llama_cpp my-llama_cpp:1.0 bash
#2、进入容器,可以使用llama.cpp的各个功能
docker exec -it my-llama_cpp bash
#3、如果想要停止和删除已启动的容器可以使用以下两个命令
docker stop my-llama_cpp
docker rm my-llama_cpp
2、下载大模型到本地,一般都是从国内的魔搭社区(modelscope)和国外的huggingface(需要能够连接外网,并且本地使用huggingface-cli login
,粘贴自己的token登录才能下载一些需要授权的模型,如llama系列的模型),手动下载模型然后上传也能用
#1、使用modelscope下载deepseek-ai/DeepSeek-R1-0528-Qwen3-8B模型到/mnt/models/modelscope/DeepSeek-R1-0528-Qwen3-8B,没有这个路径需要自己创建
modelscope download --model deepseek-ai/DeepSeek-R1-0528-Qwen3-8B --local_dir /mnt/models/modelscope/DeepSeek-R1-0528-Qwen3-8B
#2、使用huggingface-cli下载deepseek-ai/DeepSeek-R1-0528-Qwen3-8B模型到/mnt/models/huggingface/DeepSeek-R1-0528-Qwen3-8B,没有这个路径需要自己创建
huggingface-cli download deepseek-ai/DeepSeek-R1-0528-Qwen3-8B --local-dir /mnt/models/huggingface/DeepSeek-R1-0528-Qwen3-8B --local-dir-use-symlinks False
3、使用convert_hf_to_gguf_update.py优化convert_hf_to_gguf.py,原因是现在很多模型分词都是BPE模式,没现成的tokenizer.model可以使用,导致convert_hf_to_gguf.py使用时报错找不到tokenizer模型(FileNotFoundError: File not found: tokenizer.model),使用convert_hf_to_gguf_update.py优化后就可以了。
#直接执行以下命令即可
python convert_hf_to_gguf_update.py
特别注意: 运行convert_hf_to_gguf_update.py需要联网下载一些tokenizer的相关文件到llama.cpp项目下的models/tokenizers目录,huggingface和modelscope下载的同一模型里面的tokenizer文件对应的哈希值不一样,所以执行后面的操作需要注意区分,如果不联网,理论上按下面的方法操作应该也能用:
(1)自己找到convert_hf_to_gguf_update.py中的models =[ {"name": "llama-spm", "tokt": TOKENIZER_TYPE.SPM, "repo": "https://huggingface.co/meta-llama/Llama-2-7b-hf", }...]
部分
(2)清空[]里的内容,再在[]内加上自定义的tokenizers内容{"name": "deepseek-r1-qwen3", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B", }
(3)在models/tokenizers目录下面创建一个deepseek-r1-qwen3
目录,自己将DeepSeek-R1-0528-Qwen3-8B模型下的tokenizer.json、tokenizer_config.json、config.json各拷贝一份到deepseek-r1-qwen3
目录
(4)运行convert_hf_to_gguf_update.py,使用命令:python convert_hf_to_gguf_update.py
4、转换huggingface上下载的模型目录为.gguf文件,目前llama.cpp加载模型只认.gguf文件
#转换DeepSeek-R1-0528-Qwen3-8B,先给出模型所在路径,--outfile指定输出文件,--outtype指定输出模型的精度类型,一般默认是f16,/mnt/models/llamacpp/gguf路径不存在需要自己创建
python convert_hf_to_gguf.py /mnt/models/huggingface/DeepSeek-R1-0528-Qwen3-8B --outfile /mnt/models/llamacpp/gguf/DeepSeek-R1-0528-Qwen3-8B.gguf --outtype f16