无需云端!国产开源大语言模型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倍,想训练什么大模型都可以

相关推荐
黎燃1 小时前
人工智能在法律文书自动生成中的深度实践:从语言模型到审判逻辑的可解释对齐
人工智能
哔哩哔哩技术4 小时前
TextFlux重磅发布:告别复杂控制信号!多语种高保真场景文本编辑新时代
人工智能
小白狮ww4 小时前
LAMMPS 教程:移动原子演示
人工智能·深度学习·机器学习
聚客AI5 小时前
⭐超越CNN与RNN:为什么Transformer是AI发展的必然选择?
人工智能·llm·掘金·日新计划
快手技术6 小时前
可灵AI数字人来了!快手重磅发布Kling-Avatar,面向多模态指令理解与控制的数字人长视频生成新范式
人工智能
算家计算6 小时前
PDF解析神器——MinerU本地部署教程,一键去除页眉页脚,精准提取公式表格,支持84种语言,让文档转换更简单!
人工智能·开源
逛逛GitHub6 小时前
面壁「小钢炮」最新开源!0.5B 的声音克隆神器。
人工智能·github
后端小肥肠7 小时前
Coze 一键生成 AI 星座漫画,从 0 到 1 拿捏 10w + 流量!,小白可学
人工智能·aigc·coze
canonical_entropy8 小时前
AI的集体反思:我们为什么未能预见到"可逆计算"的演进方向?
人工智能·低代码·aigc