当前位置: 首页 > article >正文

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


http://www.kler.cn/a/393618.html

相关文章:

  • react 中 useContext Hook 作用
  • 【数据结构与算法】第12课—数据结构之归并排序
  • 【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
  • WebAssembly在现代Web开发中的应用
  • 【大数据测试HBase数据库 — 详细教程(含实例与监控调优)】
  • 利用阿里云下载 WebRTC 源码
  • mysql时间时区修改、set global、配置文件-default-time-zone
  • Prettier - Code formatter插件使用(前端美化插件)
  • 数据中心的拥塞控制
  • 在 Linux 系统上部署 Apache Solr
  • 基于Python的网上银行综合管理系统
  • 大数据新视界 -- 大数据大厂之 Impala 性能飞跃:动态分区调整的策略与方法(上)(21 / 30)
  • WebSocket和HTTP协议的性能比较与选择
  • 第四十四章 Vue之actions/mapActions/getters
  • 数据结构练习题和答案
  • 想要监控办公电脑,好用的监控软件怎么选择
  • cache中block(cache line)和frame概念
  • python各种方法总结
  • 【Linux】ISCSI实验
  • 使用git安装Django-micro,limit使用
  • Mysql 5.7.6以上版本怎样关闭GTID(由GTID改为基于file,position方式)
  • python习题练习
  • WebGIS四大地图框架:Leaflet、OpenLayers、Mapbox、Cesium
  • 【插件】多断言 插件pytest-assume
  • 2024年8个最佳在线websocket调试工具选择
  • 30.超市管理系统(基于springboot和Vue的Java项目)