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

相关推荐
视觉语言导航3 分钟前
复杂地形越野机器人导航新突破!VERTIFORMER:数据高效多任务Transformer助力越野机器人移动导航
人工智能·深度学习·机器人·transformer·具身智能
kebijuelun4 分钟前
OpenVLA:大语言模型用于机器人操控的经典开源作品
人工智能·语言模型·机器人
掘金安东尼12 分钟前
大模型+Python脚本,打造属于你的“批量生成文档”应用!
人工智能
vocal14 分钟前
谷歌第七版Prompt Engineering—第二部分
人工智能·后端
Blossom.11823 分钟前
量子计算在密码学中的应用与挑战:重塑信息安全的未来
人工智能·深度学习·物联网·算法·密码学·量子计算·量子安全
子燕若水24 分钟前
How do I install OpenCV with gpu support
人工智能·opencv·计算机视觉
明明跟你说过34 分钟前
深度学习常见框架:TensorFlow 与 PyTorch 简介与对比
人工智能·pytorch·python·深度学习·自然语言处理·tensorflow
搏博35 分钟前
专家系统的基本概念解析——基于《人工智能原理与方法》的深度拓展
人工智能·python·深度学习·算法·机器学习·概率论
yzx99101336 分钟前
决策树随机深林
人工智能·python·算法·决策树·机器学习
巷95539 分钟前
卷积神经网络迁移学习:原理与实践指南
人工智能·cnn·迁移学习