最近终于有时间看大模型相关的教程,由于huggingface国内访问受阻,因此探索了一下阿里的modelscope,并记录常用的组件和模块供以后学习工作复查。
0、准备篇
看了一段时间的教程,关于大模型的使用主要涉及到以下的点:
1、用什么框架加载大模型(modelscope, huggingface);
2、如何训练大模型以使大模型能够根据特定的场景/问题回答给出答案(涉及比较专业的数据);
3、如何准备高质量训练数据及训练数据的类型有什么;
4、如何训练大模型,用什么方法对大模型进行训练,训练的本质是什么;
5、如何评估模型:怎样才知道训练好的模型是否按预期输出;
6、大模型训练、部署及成本评估
- 安装modelscope库
pip install modelscope
#gpt-3的模型下载需要用到这个
pip install megatron_util -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
1、模型加载
- 以chatGLM2-6b为例:不问为什么,就只有这个模型跑得顺利
from modelscope.models import Model
model = Model.from_pretrained('ZhipuAI/chatglm2-6b', device_map='auto', revision='v1.0.12')
2、数据加载
使用的modelscope模块是MsDataset
加载本地数据集、加载huggingface hub的数据集,加载modelscope的数据集等,官方目前支持的文件格式有:csv、txt、json、jsonl、pickle、png、jpeg
下面的代码全部来自官方文档
#加载本地数据集
dataset_en = MsDataset.load("/path/to/data")
#批量加载数据集
ds = MsDataset.load('csv', data_files=[my_csv_1, my_csv_2])
# 加载modelscope上的数据集
# 以cats_and_dogs数据集为例,数据集链接: https://modelscope.cn/datasets/tany0699/cats_and_dogs/summary
ds = MsDataset.load('cats_and_dogs', namespace='tany0699', split='train')
print(next(iter(ds)))
#加载huggingface_hub的数据集
#可以通过split参数加载部分数据集,也可以将split参数去掉加载全部数据集
#加载指定数据集
ds_train = MsDataset.load('glue', subset_name='sst2', split='train', hub='huggingface')
#加载全部数据集
ds_train = MsDataset.load('glue', subset_name='sst2', hub='huggingface')
print(next(iter(ds_train))
3、pipeline推理(模型预测)
- 什么是推理任务: 在深度学习中指的是模型预测这一行为,模型在ModelScope里面指的是一系列的任务,包括数据加载,数据预处理和模型推导任务等
from modelscope.pipelines import pipeline
#推理
word_segmentation = pipeline('word-segmentation',
model=word_seg_model, preprocessor=tokenizer)
#批量推理
word_segmentation = pipeline('word-segmentation',
model=word_seg_model, preprocessor=tokenizer, batch_size=2)
inputs = "XXX,XXX"
print(word_segmentation(inputs))
4、模型训练
框架:
SWIFT
, 这个框架里面包含了LoRA训练法等等,根据Modelscope的官方说法就是一行代码实现"XXXX"方法的训练,下面知乎的文档中有少许过时,下面贴出截止到2023年10月18号版本的代码。原来的两个参数改变了:replace_modules-->target_modules, rank-->merge_weights
。另外swift的utils模块中也取消了show_freeze_layers的功能安装相关的库
pip install ms-swift -U
- Swift框架下的LoRA训练代码
LORA_TARGET_MODULES = ['query_key_value']
LORA_RANK = 8
LORA_ALPHA = 32
LORA_DROPOUT_P = 0.1
lora_config = LoRAConfig(
target_modules=LORA_TARGET_MODULES,
merge_weights=LORA_RANK,
lora_alpha=LORA_ALPHA,
lora_dropout=LORA_DROPOUT_P
)
logger.info(f'lora_config: {lora_config}')
Swift.prepare_model(model, lora_config) #加载配置
- ps:官方的手册非常详细且说人话,更多功能参考官方文档。Learning through making对于我来说真的非常必要,边学边做才能真正学会。
- 吐槽:官方在知乎8月份挂的代码是跑不通的,小白心塞,建议直接到github看