无需云端!国产开源大语言模型llama.cpp本地实战

作者:高瑞冬

注:

文章是2023年底写的。代码和运行方式虽有些旧,但基本原理一样。现在出来ollama,vllm等工具框架用来本地部署大模型,顺便更新一下。

@[TOC](最后有彩蛋)

背景

上海人工智能实验室与商汤科技联合香港中文大学和复旦大学正式推出书生·浦语200亿参数模型版本 InternLM-20B ,InternLM-20B 在超过 2.3T Tokens 包含高质量英文、中文和代码的数据上进行预训练,其中 Chat 版本还经过了 SFT 和 RLHF 训练,使其能够更好、更安全地满足用户的需求。

根据以上官方提供的描述和性能指标,这款新模型还是值得期待的。

根据相关文献,大语言模型在处理复杂任务时需要其大参数规模加持,才能够出色的完成任务。这个问题相信大家使用中也有体会。7B乃至13B在普通聊天任务中可能胜任。但是在比较复杂的任务中,比如使用react框架做推理时往往表现差强人意。所以,我们往往需要选择13B以上的参数规模的模型以便圆满完成这些任务。但是这种规模的模型的运行需要内存和gpu资源对于普通开发环境来说都是很高的要求。那么如何在16GB内存的开发机器上完成这样的开发工作呢?

通过研读internLM开源的代码,发现internLM可能也是llama架构的模型。这让我想到了llama.cpp的框架。根据llama.cpp文档经过模型转换和试验成功将20b运行在一个openai rest api的后端。试验结果表明,gpu加速下运行的速度非常惊艳。我使用的是苹果的m2 ultra。以下是具体步骤,希望对其他小伙伴有所帮助:

见证奇迹的过程

下载internLM 20b模型:

git clone https://www.modelscope.cn/Shanghai_AI_Laboratory/internlm-chat-20b

下载llama.cpp源码并准备环境

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

cd llama.cpp

#检出稳定版本,成文时这个是最新的:

git chechout b1204

#编译c++代码:

make

#安装python需要的组件

Pip3 install -r requirement.txt

转换模型

#转换20b模型到ggml fp16格式,会在模型路径下生成ggml-model-f16.gguf:

python3 convert.py ../internlm-chat-20b

#以q4_0方式量化模型:

./quantize ../internlm-chat-20b/ggml-model-f16.gguf ../internlm-chat-20b/internlm-chat-20b-ggml-q4_0.gguf q4_0

这个过程会消耗70GB空间,确保你的磁盘空间足够。

如果不想麻烦自己,可以这里下载量化好的模型文件:

https://www.modelscope.cn/models/ruidong/internLM-20b-chat-gguf/summary

运行模型推断

#运行llama.cpp的web服务端点:

./server -m ../internlm-chat-20b/internlm-chat-20b-ggml-q4_0.gguf -a internLM-20b -c 8192 -ngl 60

#注意:如果没有gpu可用,需要使用-ngl 0,否则报错。

#在本机8081运行符合openai规格的rest api端点:

Python ./example/server/api_like_OAI.py

#注意:这个需要参考模型的文档给出相应的提示模板。比如对于AquilaChat2-34B-16K 模型,需要如下参数指定提示模板:

nohup python3 examples/server/api_like_++++OAI++++.py --user-name 'Human:' --ai-name 'Assistant:' --system-name 'System:' --chat-prompt 'A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human questions.' &

#不然会出现奇怪的回答。

此时对于AI应用开发的小伙伴,可以在需要配置openai地址的地方设置127.0.0.1:8081/v1,开始你的探索开发之路了。

开启体验

一切正常的话,可以这样试验一下部署的符合openai规格的本地AI服务:

curl -X POST http://localhost:8081/v1/chat/completions -H 'Content-Type: application/json' -d'{"model": "internLM","messages": [{"role": "user", "content": "who are you"}]}'

正常情况下返回如下:

{"choices":[{"finish_reason":"stop","index":0,"message":{"content":" I am an AI Assistant designed to provide assistance for various tasks and answer questions. How can I assist you today?","role":"assistant"}}],"created":1698217685,"id":"chatcmpl","model":"LLaMA_CPP","object":"chat.completion","truncated":false,"usage":{"completion_tokens":23,"prompt_tokens":36,"total_tokens":59}}

另外一款大模型BAAI/AquilaChat2-34B-16K,可以使用同样的方法运行。只是在运行convert时使用一个参数指定字典类型:

python3 convert.py ../AquilaChat2-34B-16K --vocabtype bpe

其他都一样。

实际测试下来,计算全部offload到gpu上的推断速度非常感人(26 token/s)

如果不想麻烦自己,可以这里下载量化好的模型文件:

https://www.modelscope.cn/models/ruidong/AquilaChat2-34B-16K-QU/summary

花絮:划重点

为什么一定要用 llama.cpp 框架?

1,性能好;2,生态好;3,最大瓶颈价格通过内存显存一体化技术突破

4万多,拥有(192g)超大显存的模型训练和推理本地环境(Mac Studio M2 Ultra)

2万多,拥有(64g)显存的模型训练和推理本地环境(Mac Studio M2 Max)

而NVIDIA H100 80GB PCIe显卡 30,000 - 40,000,约216,000 - 288,000元

价格只有1/5,但最重要的显存容量确是2.4倍,想训练什么大模型都可以

相关推荐
澪-sl6 分钟前
基于CNN的人脸关键点检测
人工智能·深度学习·神经网络·计算机视觉·cnn·视觉检测·卷积神经网络
羊小猪~~21 分钟前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
摸爬滚打李上进39 分钟前
重生学AI第十六集:线性层nn.Linear
人工智能·pytorch·python·神经网络·机器学习
HuashuiMu花水木40 分钟前
PyTorch笔记1----------Tensor(张量):基本概念、创建、属性、算数运算
人工智能·pytorch·笔记
lishaoan771 小时前
使用tensorflow的线性回归的例子(四)
人工智能·tensorflow·线性回归
AI让世界更懂你1 小时前
【ACL系列论文写作指北15-如何进行reveiw】-公平、公正、公开
人工智能·自然语言处理
asyxchenchong8881 小时前
ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模
机器学习·语言模型·chatgpt
牛客企业服务2 小时前
2025年AI面试推荐榜单,数字化招聘转型优选
人工智能·python·算法·面试·职场和发展·金融·求职招聘
视觉语言导航2 小时前
RAL-2025 | 清华大学数字孪生驱动的机器人视觉导航!VR-Robo:面向视觉机器人导航与运动的现实-模拟-现实框架
人工智能·深度学习·机器人·具身智能
**梯度已爆炸**3 小时前
自然语言处理入门
人工智能·自然语言处理