伦敦做网站,网页传奇合击,建筑公司取名参考,80端口被封怎么做网站背景#xff1a;
目前#xff0c;大模型的技术应用已经遍地开花。最快的应用方式无非是利用自有垂直领域的数据进行模型微调。chatglm2-6b在国内开源的大模型上#xff0c;效果比较突出。本文章分享的内容是用chatglm2-6b模型在集团EA的P40机器上进行垂直领域的LORA微调。 …背景
目前大模型的技术应用已经遍地开花。最快的应用方式无非是利用自有垂直领域的数据进行模型微调。chatglm2-6b在国内开源的大模型上效果比较突出。本文章分享的内容是用chatglm2-6b模型在集团EA的P40机器上进行垂直领域的LORA微调。
一、chatglm2-6b介绍
github https://github.com/THUDM/ChatGLM2-6B
chatglm2-6b相比于chatglm有几方面的提升
1. 性能提升 相比初代模型升级了 ChatGLM2-6B 的基座模型同时在各项数据集评测上取得了不错的成绩
2. 更长的上下文 我们将基座模型的上下文长度Context Length由 ChatGLM-6B 的 2K 扩展到了 32K并在对话阶段使用 8K 的上下文长度训练
3. 更高效的推理 基于 Multi-Query Attention 技术ChatGLM2-6B 有更高效的推理速度和更低的显存占用在官方的模型实现下推理速度相比初代提升了 42%
4. 更开放的协议ChatGLM2-6B 权重对学术研究完全开放在填写问卷进行登记后亦允许免费商业使用。
二、微调环境介绍
2.1 性能要求
推理这块chatglm2-6b在精度是fp16上只需要14G的显存所以P40是可以cover的。 EA上P40显卡的配置如下 2.2 镜像环境
做微调之前需要编译环境进行配置我这块用的是docker镜像的方式来加载镜像环境具体配置如下
FROM base-clone-mamba-py37-cuda11.0-gpu# mpich
RUN yum install mpich # create my own environment
RUN conda create -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ --override --yes --name py39 python3.9
# display my own environment in Launcher
RUN source activate py39 \ conda install --yes --quiet ipykernel \ python -m ipykernel install --name py39 --display-name py39# install your own requirement package
RUN source activate py39 \ conda install -y -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ \pytorch torchvision torchaudio faiss-gpu \ pip install --no-cache-dir --ignore-installed -i https://pypi.tuna.tsinghua.edu.cn/simple \protobuf \streamlit \transformers4.29.1 \cpm_kernels \mdtex2html \gradio3.28.3 \sentencepiece \accelerate \langchain \pymupdf \unstructured[local-inference] \layoutparser[layoutmodels,tesseract] \nltk~3.8.1 \sentence-transformers \beautifulsoup4 \icetk \fastapi~0.95.0 \uvicorn~0.21.1 \pypinyin~0.48.0 \click~8.1.3 \tabulate \feedparser \azure-core \openai \pydantic~1.10.7 \starlette~0.26.1 \numpy~1.23.5 \tqdm~4.65.0 \requests~2.28.2 \rouge_chinese \jieba \datasets \deepspeed \pdf2image \urllib31.26.15 \tenacity~8.2.2 \autopep8 \paddleocr \mpi4py \tiktoken
如果需要使用deepspeed方式来训练 EA上缺少mpich信息传递工具包需要自己手动安装。
2.3 模型下载
huggingface地址 https://huggingface.co/THUDM/chatglm2-6b/tree/main
三、LORA微调
3.1 LORA介绍
paper https://arxiv.org/pdf/2106.09685.pdf
LORALow-Rank Adaptation of Large Language Models微调方法 冻结预训练好的模型权重参数在冻结原模型参数的情况下通过往模型中加入额外的网络层并只训练这些新增的网络层参数。 LoRA 的思想
在原始 PLM (Pre-trained Language Model) 旁边增加一个旁路做一个降维再升维的操作。训练的时候固定 PLM 的参数只训练降维矩阵A与升维矩B。而模型的输入输出维度不变输出时将BA与 PLM 的参数叠加。用随机高斯分布初始化A用 0 矩阵初始化B保证训练的开始此旁路矩阵依然是 0 矩阵。
3.2 微调
huggingface提供的peft工具可以方便微调PLM模型这里也是采用的peft工具来创建LORA。
peft的github https://gitcode.net/mirrors/huggingface/peft?utm_sourcecsdn_github_accelerator
加载模型和lora微调 # load modeltokenizer AutoTokenizer.from_pretrained(args.model_dir, trust_remote_codeTrue)model AutoModel.from_pretrained(args.model_dir, trust_remote_codeTrue)print(tokenizer:, tokenizer)# get LoRA modelconfig LoraConfig(rargs.lora_r,lora_alpha32,lora_dropout0.1,biasnone,)# 加载lora模型model get_peft_model(model, config)# 半精度方式model model.half().to(device)
这里需要注意的是用huggingface加载本地模型需要创建work文件EA上没有权限在没有在.cache创建这里需要自己先制定work路径。
import os
os.environ[TRANSFORMERS_CACHE] os.path.dirname(os.path.abspath(__file__))/work/
os.environ[HF_MODULES_CACHE] os.path.dirname(os.path.abspath(__file__))/work/
如果需要用deepspeed方式训练选择你需要的zero-stage方式 conf {train_micro_batch_size_per_gpu: args.train_batch_size,gradient_accumulation_steps: args.gradient_accumulation_steps,optimizer: {type: Adam,params: {lr: 1e-5,betas: [0.9,0.95],eps: 1e-8,weight_decay: 5e-4}},fp16: {enabled: True},zero_optimization: {stage: 1,offload_optimizer: {device: cpu,pin_memory: True},allgather_partitions: True,allgather_bucket_size: 2e8,overlap_comm: True,reduce_scatter: True,reduce_bucket_size: 2e8,contiguous_gradients: True},steps_per_print: args.log_steps}
其他都是数据处理处理方面的工作需要关注的就是怎么去构建prompt个人认为在领域内做微调构建prompt非常重要最终对模型的影响也比较大。
四、微调结果
目前模型还在finetune中batch1epoch3已经迭代一轮。 作者京东零售 郑少强 来源京东云开发者社区 转载请注明来源