如何微调一个大语言模型

在当今的数字化时代,大语言模型的发展正在以前所未有的速度推动着人工智能领域的进步。大语言模型,也称为大型预训练语言模型,代表了人工智能语言处理领域的一种突破。国外的有OpenAI的ChatGPT,Google的Bard,Anthropic的Claude;国内的有百度的文心一言,智谱AI的智谱清言,讯飞的星火大模型。这些都是闭源的大模型,提供了一个应用程序供使用。 现在,许多公司和研究机构都在落地大语言模型。都在尝试把大语言模型部署到企业内部,让企业内部的数据可以更加智能的利用起来。落地的方式有两种:一种是调用各大公司提供的API接口,快速把大模型的能力接入到企业内部;另外一种方式是部署开源大模型。第一种方式适合无企业敏感数据,迫切希望接入大模型的智能;而第二种针对企业的敏感数据,不希望敏感数据流出企业。 引言 本文针对企业落地大模型的第二种方式,谈一谈如何构建一个可以运行大模型和训练大模型的环境,这是企业落地大模型的第一步。 下面我们以构建一个可以使用**LLaMA-Efficient-Tuning**来微调大语言模型的镜像为例来说明。 如果你服务的企业有足够好的硬件及网络条件,同时在物理机上有安装软件的权限,那么建议你直接在物理机上安装驱动、依赖、下载微调源码,下载模型,然后进行微调。 下面介绍的流程更多的是在网络条件不允许的情况下,把所有东西都放在Docker里面是十分方便的一种做法,只需要企业内部的服务器支持Docker的运行和安装了nvidia驱动的机器即可。 构建镜像 LLaMA-Efficient-Tuning这个开源项目已经集成了非常多的开源模型的微调,比如流行的ChatGLM2,LLaMA-2等待。开箱即用,简直不要太方便。官方还提供了非常多实用的数据集 克隆项目源代码 git clone https://github.com/hiyouga/LLaMA-Efficient-Tuning.git 本文只构建训练用的Docker镜像环境,所以只需要requirements.txt的内容即可,把依赖的模块全部安装上,requirements.txt内容如下: torch>=1.13.1 transformers>=4.30.0 datasets>=2.12.0 accelerate>=0.21.0 peft>=0.4.0 trl>=0.7.1 scipy sentencepiece protobuf tiktoken jieba rouge-chinese nltk gradio>=3.36.0 uvicorn pydantic==1.10.11 fastapi==0.95.1 sse-starlette matplotlib 最好是创建一个目录,把requirements.txt放在创建好的目录下面,从这个目录启动一个docker容器: docker run -it \ --gpus=all \ --name=llm_builder \ -v "`pwd`/requirements.txt:/build/requirements.txt" \ -w "/build" \ pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel \ bash 本文以pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel Docker镜像为基础镜像进行构建,运行完上面的命令,你会进入到容器的/build目录,这个目录下面就可以看到requirements.txt文件。这是一定要加上—-gpus=all 参数。同时还要注意,物理机上必须要安装nvidia的驱动,移步官网下载安装。 然后使用下面的命令安装依赖 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 指定了使用清华的镜像源,安装起来会快很多。 最后,需要把运行的容器保存为镜像: docker commit llm_builder cuda-11.7_pytorch-2.0.1_llm-training-runtime:v1.0 这时我们获得了一个可以运行LLaMA-Efficient-Tuning的Docker镜像了。 微调 什么是微调呢?微调语言模型涉及在较小的、特定于任务的数据集上训练模型,以适应特定的任务或领域。预训练的基础模型充当起点,网络的权重将根据特定于任务的数据进一步优化。微调有助于模型更好地理解它正在微调的任务的特定上下文和语言模式。 本文以微调ChatGLM2-6B为例,介绍如何使用LLaMA-Efficient-Tuning进行预训练、指令监督、奖励模型以及PPO和DPO训练的微调。 ...

September 14, 2023