AI是什么?他应该是个工具,是一个让你更敢于去闯的工具,而不应该是让人偷懒的工具。
0、缘起
一次偶然的时机,想要试试火爆的Ollama,在本地搭个AI大模子玩玩。于是,随意跑了一下台甫鼎鼎的Llama3.2模子。固然,跑的是1b参数的小版本。效果,执行的效果是这样的。
为什么会这样?到介绍页上看了看。原来llama模子确实没有用中文训练。
连泰语都能支持,中文却没有支持。这能忍?不行。我受不了。说什么也要让Llama见地见地中文。于是,决定要微调一个懂中文的Llama出来。但是,没有机器,不懂Python,更不懂什么调优框架。这事能不能成?
没事,有AI。一点点问AI,一点点调代码,于是有了这一次实验。
一、如何对大模子进行微调
AI大模子的本领来自于他所学习过的数据,市面上的这些AI大模子产品也不例外。因此,在一些特定的业务场景,市面上这些AI大模子产品并没有学习过相干的业务知识,因此也就无法提供高质量的答案。比如Llama,并没有针对中文进行微调,因此,他虽然也能用中文进行问答,但是答复中总是带上一些鸟语。
提升AI大模子特定范畴内的理解本领的方法有两种。一种是RAG。在跟大模子交互时给他提供更多的相干数据。但这种方式就相当于是要让AI大模子回答题目标时候暂时抱佛脚,大部门场景下效果也可以,但是终究治标不治本。另一种直击本质的方法就是微调。一些大型企业,使用海量数据,投入巨大资源,重新开始训练出一些基础模子,成为预训练模子,Pre-Training。而微调就是在这些预训练模子的基础上,再投入少量资源,喂养额外的数据,从而训练出更专业的私有大模子。
说人话,一老外要到长沙来玩,要找个翻译。从Englinsh翻译成中文的专业翻译好找,各种专业院校量大管饱,但是从English翻译发展沙话的个性翻译就没那么好找了。解决方案有两种,一种是就找个专业翻译。每次问他题目时,再给他配个小字典《长沙人的自我修养》,查查普通话怎么翻译成中文。这就是RAG。另一种就是考察一批专业翻译,在这些专业翻译中间挑一个懂长沙话的个性化翻译出来。这就是微调。
微调的方式有许多种。一种是让一个专业的大弟子重新开始学习一遍长沙话。这就相当于全参微调。调解大模子的所有参数。代价自然是很大的。另一种就是找一个专业翻译,让他学学长沙话怎么讲。这样对专业翻译的英语本领不会有多大影响,只是给他叠加了一种新的方言。这样的话,学习的代价就没有那么大。而这就是Lora微调的思绪。
Lora全称是Low-Rank Adaptation,低秩适配。他的焦点思想是不调解原有大模子,只是通过叠加较小的低秩矩阵来对大模子进行微调。
这个过程可以大致的理解为: 对一个m*n(m和n都很大)的原始大模子参数矩阵,叠加一个 m*k的矩阵A和k*n的矩阵B(k可以比较小)。这样矩阵A和矩阵B相乘就可以保持和原有矩阵相同的计算效果。然后大模子在计算时,只需要在原有大模子参数矩阵的基础上,叠加 矩阵A*矩阵B的效果,就可以产生出一个新的大模子参数矩阵的效果。而矩阵A和矩阵B由于k(也就是秩)比较小,所以要调解的参数也就小许多。
这个过程听起来很复杂,不过其实落地到实践层面,已经有许多现成的实现工具了。而且,就算工具不会,只要清楚是在干什么事变,代码让AI来写,也没什么题目。接下来我们就需要使用Lora算法,给之间使用过的Llama3.2:1b大模子喂养一些中文数据,从而让他可以或许更好的理解中文。
二、模子微调实战
0、准备环境
要进行微调,首先需要评估手边的资源够不够。通常,一个简单的经验是使用Lora微调需要大概准备模子大小三倍的显存,这样就可以开始微调了。Llama3.2:1b模子的大小是1.3GB,所以,通常有个4G左右的显存就可以进行微调了。所以这个实验,固然你也可以动手玩玩。
这是最小资源,训练时,固然资源是越多越好。如果模子比较大,本地资源不够,那也可以租借一些公用的计算力平台,比方autodl.网址 https://www.autodl.com/home 。 这是现在比较自制的一个平台。
然后,需要搭建微调的开发环境。现在微调的框架都照旧基于Pytorch这些Python框架,所以,需要搭建Python开发环境。
Python环境搭建建议使用Anaconda工具直接搭建,比较方便。接下来创建Python环境。
- # 创建Python运行环境
- conda create -n llama3_lora python=3.10
- conda activate llama3_lora
- # 使用conda-forge通道 一个社区运营的Conda频道,下载比较快
- conda config --add channels conda-forge
- conda config --set channel_priority strict
- # 如果之前安装过这个环境,可以删除重建
- conda deactivate
- conda env remove -n llama3_lora
- conda create -n llama3_lora python=3.10 -y
- conda activate llama3_lora
- # 安装pytorch
- conda install -c conda-forge pytorch torchvision torchaudio -y
- # 安装其他依赖
- pip install transformers datasets peft accelerate
- pip install bitsandbytes modelscope
- # 确保使用MPS后端
- pip install --upgrade --force-reinstall \
- torch \
- torchvision \
- torchaudio
复制代码 安装完成后,可以先执行一个简单的python代码检测一下环境
- import sys
- import torch
- # 打印详细的系统和torch信息
- print("Python 版本:", sys.version)
- print("Torch 版本:", torch.__version__)
- print("CUDA 是否可用:", torch.cuda.is_available())
- print("MPS 是否可用:", torch.backends.mps.is_available())
复制代码 这里重要是查抄显卡是否支持CUDA。理论上主流的N卡都支持CUDA,这就可以开始训练了。Mac的M系列芯片将内存和显存整合到了一起,需要使用MPS设备进行计算。
1、准备数据
这次微调的数据就采用Huggingface上“臭名昭著”的ruozhiba数据。看看台甫鼎鼎的Llama能不能经得起弱智吧的摧残。
这次采用的是一个包罗1.5K记载的小样本。直接下载到本地即可。
2、模子微调
接下来的微调过程,都是在我手边一台Mac电脑上完成的,所有代码也全是AI写出来的,所以,只负责解读思绪,不包管代码质量。其实所有的模子微调思绪都差不多
第一步、获取基础的预训练模子
这里采用国内的ModelScope社区提供的 LLM-Research/Llama-3.2-1B 模子。
1、对于大模子,通常可以以为参数越大,本领就越强。通常,简单关注一下各个大模子的benchmark基准测试后,就可以根据你手头的资源,选择适合的参数目版本就可以了。
2、ModelScope是一个大模子的大超市,即提供了开源的大模子以及高质量数据集,同时也提供了大模子测试、微调的一系列工具。如果需要更大规模的模子,可以选择Huggingface。不过毕竟是国外的平台,对国内不太友好。
使用ModelScope社区的模子可以通过他提供的工具引入。
然后,就可以将模子下载到本地。
- from modelscope import snapshot_download
- # 从ModelScope下载模型--第一次比较耗时
- model_path = snapshot_download(
-
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |