《大模型实战》- GitHub项目llm-dev(二)
第五章主要讲的是五种国内常见大模型的部署,并且进行了编程验证,代码都在GitHub。项目上面,这里就不贴详细代码了。上面选取了ChatGLM3-6B、Qwen-VL-Chat-Int4、LLama-2-7b-chat、Gemma-2B和Whisper-large-v3模型进行部署。这五个比较典型的大模型分别代表了国产文本类、国产图像类、开源标杆、最新模型和语音识别类。下面是我做的几个我觉得以后学习
第五章 大语言模型安装
第五章主要讲的是五种国内常见大模型的部署,并且进行了编程验证,代码都在GitHub。 项目上面,这里就不贴详细代码了。
上面选取了ChatGLM3-6B、Qwen-VL-Chat-Int4、LLama-2-7b-chat、Gemma-2B和Whisper-large-v3模型进行部署。这五个比较典型的大模型分别代表了国产文本类、国产图像类、开源标杆、最新模型和语音识别类。下面是我做的几个我觉得以后学习需要注意的笔记:
不管github项目的源码如何变更,这个提交点的版本下的源码是保持不变的。Git代码库回退到某个提交点的命令是“git checkout commit_id”(在cmd中cd到本地的项目文件夹下),查询commitid的方式:
git log(查询所有提交的项目的历史)
git rev-parse HEAd(查询最新的commit id)
Python的第三方库使用pip工具安装。由于库与库之间的版本有相互依赖关系,规范的做法是将项目所用到的所有第三方库的名字、版本号写入一个名为requirements.txt的文本文件,安装库时,通过“pip install -r requirements.txt”命令进行批量安装,这里的“-r”是recursion(递归)的意思。
将镜像路径以“-i”参数进行指定,再加到pip命令的尾部。为了确认安全性,还需要增加一个“--trusted-host”参数指向镜像所在的网站域名。本例中,使用中科大发布的pypi镜像安装依赖库,命令如下(需要注意的是,这个命令是针对Linux的。如果在Windows上执行,则要去掉反斜杠“\”和换行符后将代码保持在一行上才能正常运行。)

Gemma的原始模型首先在kaggle.com上发布。并且,Google与Hugging Face合作,将模型集成到了Hugging Face的生态系统中,使原始模型被转化成hf格式供开发者免费下载。Gemma的hf格式模型可以通过Hugging Face的Transformers库装载运行,这与其他模型(如LLaMA2等)在使用方面没有太大区别。对于模型的推理过程,可以使用Transformers库的AutoModelForCausalLM.from_pretrained方法装载模型,再用model.generate方法进行模型推理。装载模型时,用load_in_8bit和load_in_4bit量化模式会非常顺利,占用资源也比较少。
具体模型的部署和简单量化方式书上面写的很详细,主要是llama-2使用text-generation-webui加载验证模型的方法挺有意思的,下面是text-generation-webui的使用部署方法:
安装
# 获取text-generation-webui源码,并将源码固定到指定的版本 git clone https://github.com/oobabooga/text-generation-webui cd text-generation-webui git checkout 1934cb6 # 创建python3.10虚拟环境 conda config --add envs_dirs /nova_compute_data/anaconda3 conda create -n text-generation-webui python=3.10 -y # 编辑requirements.txt,只保留tiktoken及以前的库 # 安装依赖库 conda activate text-generation-webui pip install -r requirements.txt \ -i https://pypi.mirrors.ustc.edu.cn/simple \ --trusted-host=pypi.mirrors.ustc.edu.cn # 校验PyTorch python -c "import torch; print(torch.cuda.is_available())" # 下载模型 # 模型下载脚本从aliendao.cn首页下载 # 链接为 https://aliendao.cn/model_download.py # linux下使用wget命令下载,windows下直接在浏览器打开链接下载 wget https://aliendao.cn/model_download.py # 从aliendao.cn下载Llama-2-7b-chat-hf 模型文件 python model_download.py --e --repo_id NousResearch/Llama-2-7b-chat-hf \ --token YPY8KHDQ2NAHQ2SG # 下载后的文件在./dataroot/models/NousResearch/Llama-2-7b-chat-hf 目录下 # 移动模型 mkdir ./models/Llama-2-7b-chat-hf mv ./dataroot/models/NousResearch/Llama-2-7b-chat-hf/* ./models/Llama-2-7b-chat-hf/ # 运行 python server.py --listen-host 0.0.0.0 --listen
第六章 大语言模型微调
主要讲大模型的微调,笔记如下:
在大语言模型进行微调时,判定微调效果不是靠步数,而是要参考训练过程中的loss值。一般来说,当loss值趋于稳定且不再显著下降时,即可以认为模型已经收敛。判断模型微调效果是否趋于稳定,有一个经验值——0.3。当loss值低于这个值时,说明微调模型基本可用。当然,实际操作中模型不同、参数量不同、任务不同、数据集不同、微调方法不同,不能一味用这个固定的loss值来判断,最好的做法是根据实际情况来测试和评估模型的性能。所以,当进行了3000步微调后,若loss值依然很大或评估发现效果不佳,则还要载入3000步的检查点继续微调,以达到更好的效果。
微调LLaMA2模型可采用alpaca_dataset数据集。alpaca_dataset是一个斯坦福开源数据集,包括用于特定领域模型微调Alpaca的52000组指令数据。其文件内容是一个字典列表,每个字典包含以下字段:instruction(指令)、input(输入)和output(输出)。
• instruction:描述模型应执行的任务。52000组数据中,每一组数据要指定唯一的instruction,不能重复。
• input:任务的可选上下文或输入内容。例如,当instruction为“总结以下文章”时,输入内容就是文章本身。
• output:由text-davinci-003(ChatGPT-3.5背后的大语言模型)生成的答案。
为了将纯文本的原始语料转换成微调所需的JSON格式,以及在需要时方便将此语料转换为其他格式,本例将转换过程分成两步。第一步:原始文本文件转换为简单的JSON格式,如[{“q”:“问1”,“a”:“答1”}, {“q”:“问2”,“a”:“答2”}]。第二步:将简单的JSON格式转成微调要求的语料格式。具体的转化步骤如下。
txt2json.py代码如下:
import json
import argparse
def txt2json(infile, outfile):
with open(infile, 'r', encoding='utf-8') as file:
data = file.read()
lines = data.split('\n')
json_data = []
for i in range(len(lines)):
if (i - 2 >= 0) and ((i - 2) % 3 == 0):
question = lines[i-2]
answer = lines[i-1]
json_data.append({"q": question, "a": answer})
with open(outfile, 'w', encoding='utf-8') as file:
json.dump(json_data, file, indent=4, ensure_ascii=False)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--infile', type=str, required=True)
parser.add_argument('--outfile', type=str, required=True)
args = parser.parse_args()
txt2json(args.infile, args.outfile)
转化成json的命令如下

json转成微调格式的命令如下:
convert_data.py代码如下:
import json
import argparse
def load_data(infile):
with open(infile, 'r', encoding='utf-8') as file:
data = json.load(file)
return data
def convert_data_conversations(original_data, trainfile, devfile):
output_train = []
dev_train = []
train_data_len = round(len(original_data) * 0.7)
i = 0
for item in original_data:
conversation = {
"conversations": [
{
"role": "user",
"content": item["q"]
},
{
"role": "assistant",
"content": item["a"]
}
]
}
i = i + 1
if i < train_data_len:
output_train.append(conversation)
else:
dev_train.append(conversation)
with open(trainfile, 'w', encoding='utf-8') as json_file:
json.dump(output_train, json_file,
ensure_ascii=False, indent=4)
with open(devfile, 'w', encoding='utf-8') as json_file:
json.dump(dev_train, json_file,
ensure_ascii=False, indent=4)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--infile', type=str, required=True)
parser.add_argument('--trainfile', type=str, required=True)
parser.add_argument('--devfile', type=str, required=True)
args = parser.parse_args()
original_data = load_data(args.infile)
convert_data_conversations(original_data,
args.trainfile, args.devfile)
其实,现在常用的微调还是PEFT微调,全参数微调使用的时间和费用成本太高,lora引入的低秩的方法,让微调成本下降了很多,论文链接如下LoRA: Low-Rank Adaptation of Large Language Models
第七章 大语言模型量化
本章主要讲模型的量化(主要讲了llama.cpp和gemma.cpp,这部分模型量化的代码在GitHub上面),模型量化是指将模型中的权重参数或激活值从32位浮点型的高精度转换为4bit或8bit的低精度整数的过程,得到的结果是精度降低、模型变小、计算的复杂度降低,使模型在CPU等低算力条件下也能正常推理。
我一直对模型量化,知识蒸馏有一点模糊,查了一些资料后,现在的理解:模型量化通过降低精度直接压缩模型,适合对计算效率要求高的场景。知识蒸馏通过模仿大模型的行为间接压缩模型,适合对精度要求高的场景。两者都是压缩模型的大小,但是使用方法和实用场景不同,并且两种可以相互结合,进一步优化模型或者进行更高效的压缩。
现在常用的量化方法是llama.cpp和Gemma.cpp,在文章中有具体量化方法。
第八章 多模态模型应用
这章主要介绍stable diffusion,先讲了来源和基本原理,后面说了部署方法,这边其实可以直接去b站看秋叶大神。文章里面介绍的较为简单,对很多提示词和微调方法都没有详细解释(当然,篇幅问题,可以理解)
下面是文章里面对核心原理的解释:
Stable Diffusion的核心运行原理,则是将输入的噪声图像转换为目标图像。这分为前向扩散和稳定化两个关键步骤。
• 前向扩散:利用逐步引入高斯噪声的方式,模拟图像向随机状态演变的过程,将输入的噪声图像与随机噪声混合,使输出图像在保留原始特征的同时又有一些随机化特性。
• 稳定化:为了解决前向扩散过程中的不稳定性和难以控制的问题,Stable Diffusion引入了稳定化步骤。该步骤利用一个判别网络,区分生成的图像是真实图像还是随机噪声,通过使判别网络的输出概率最大化,确保生成的图像更加稳定和可控。
其他的可以看看,但是想要快速上手,这边推荐看b站这几个up🐷:秋葉aaaki Nenly同学 朱尼酱
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐

所有评论(0)