国产大模型部署与基础推理
🌟 事先声明(叠甲:距离作者学习 LLM 不超过四个月,见识浅薄请多包涵。 🙏
🚀本文档使用大模型进行Emojify🚀
本文章包括:
- 🚀为什么要学习使用国产llm?
- 🔍如何寻找国产llm?
- 📚我需要哪些知识?
- 💻我需要哪些设备?
为什么要学习使用国产llm?
- 即使OpenAi在GPT-4上取得了巨大成功,后起的国产llm在中文自然语言处理上能够胜过GPT-4。👍
- 国产llm通常有中文官方文档,学习效率相较于英文文档更高。📖
- 还没想出来🤔
🔍如何寻找国产llm?
以下链接收集了大量的国产llm,内容可能会有点过时,最新的模型还是需要通过搜索引擎查找新闻得到。(不过公司也就那几个,更新的版本在旧仓库也有链接)
中国大模型列表 https://github.com/wgwang/awesome-LLMs-In-China🌐
大部分开源llm都会在Github与Hugging Face上对模型进行开源,其中Github包含模型加载源码而Hugging Face上存储模型文件(国内以Model Scope魔搭社区为主)。
国产LLM也不例外。
Hugging Face https://huggingface.co/🦾
Model Scope https://modelscope.cn/home/🛠️
Github https://github.com/🗂️
📚我需要哪些知识?
想要“用”这个模型其实很简单,拥有基本的python和linux shell使用经验即课。现有的很多平台项目(例如llamaFactory)都提供了部署脚本,在软件中直接使用gui进行操作,但是为了更底层的了解模型是如何使用的,还是推荐使用模型供应商的流程完成一遍部署推理操作。
💻我们先了解一下流程:
- 获取拥有大量显存的Nvidia显卡Linux服务器。30系及以上为佳🖥️
- 下载模型到本地(大小随参数量多少变化,7B一般不到30G)📦
- 加载模型到显存(对显存大小要求极高,7B模型需要20G显存才能进行部署)⚡
- 输入提问,进行推理🔍
服务器可以租用云算力,a100 40G 在 4r/h 左右,4090 24G 在 2.5r/h左右,不进行训练直接租用显存够大的,ampere 或者以后的显卡。☁️
操作流程
这里以阿里的通义千问 7B作为例子
在操作之前
以下教程中的python代码推荐通过使用浏览器远程连接在linux服务器中的jupyter lab或者jupyter notebook中完成,这样有利于持久保持变量。📊
1.下载代码
访问github仓库,获取仓库地址,并在linux中clone一份代码到本地。
git clone https://github.com/QwenLM/Qwen.git
2. 安装依赖
克隆完代码之后会在根目录中找到requriments.txt
pip install -r requriments.txt
除了依赖,官方仓库里的代码往往还包含微调代码、Readme、一键加载模型(在此是cli_demo.py\web_demo.py)等运行脚本和文档。
3.下载模型
访问ModelScope(国内)/Hugging Face(国外)下载模型到本地。
在模型下载/Use in Transformers中获取下载模型代码,并执行。
# ModelScope
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen-7B-Chat',cache_dir='model')
# cache_dir为模型下载到的位置
也可使用git-lfs下载文件,但是速度较慢,还需要额外安装git-lfs包。
4. 加载模型
此时想要运行模型需要加载三个变量:Tokenizer、Model和GenerationConfig
from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True, fp16=True).eval()
model.generation_config = GenerationConfig.from_pretrained(model_dir, trust_remote_code=True) # Generation Config可指定不同的生成长度、top_p等相关超参
如此便成功加载模型,新建一个shell并运行以下代码查看显卡占用情况。
watch -n 1 nvidia-smi
5. 运行推理
当模型加载完成之后,执行以下代码测试运行情况
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
response, history = model.chat(tokenizer, "浙江的省会在哪里?", history=history)
print(response)
response, history = model.chat(tokenizer, "它有什么好玩的景点", history=history)
print(response)
也可以手动运行多轮对话:
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
while True:
response, history = model.chat(tokenizer, "你好", history=history)
print(response)
🎉至此便完成了基础的开源大模型部署与推理。👏
可喜可贺,可喜可贺。