掘金 人工智能 05月07日 10:03
【AI】附身教学,云服务器端大模型微调全流程
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了大模型微调的整个流程,从硬件和软件准备,到数据集的构建,再到微调的实践,最终完成模型的应用。文章以AutoDL算力云为基础,结合LlamaFactory、EasyDataset、Ollama、HuggingFace和Ngrok等工具,为读者提供了清晰的步骤和详细的指导,帮助用户快速上手大模型微调。

💻 **硬件与软件准备:** 介绍了在AutoDL云服务器上进行大模型微调的硬件配置推荐,并详细讲解了JupyterLab、LlamaFactory、EasyDataset、Ollama、HuggingFace 和 Ngrok 等工具的安装与配置过程,为后续微调工作打下基础。

📚 **数据集构建:** 强调了数据集的重要性,并详细阐述了数据集的准备流程,包括文本格式转换、EasyDataset项目创建、模型配置、任务配置、提示词配置、文本块分割、问题生成、领域分析、问题修改和数据集导出等步骤,确保数据集的质量。

🚀 **微调流程:** 介绍了在LlamaFactory中进行数据集导入和配置,并强调了Ngrok的内网穿透在访问可视化界面中的作用。还提到了配置dataset_info.json文件,为微调做好准备,为用户提供了完整的微调流程,便于实践操作。

大模型微调(Fine-tuning)是指在已经预训练好的大型语言模型(通常称为“基座模型”)基础上,使用特定的数据集进行进一步的训练,让模型适应特定任务或领域。微调使得大模型能够更好地适应不同行业的特定需求,从而推动各行业的应用创新。微调降低了使用大模型的门槛,使得即使没有强大的计算资源和大量的数据,企业也能够利用预训练模型进行定制化开发,从而推动大模型技术在更多行业的普及。

前期准备

服务器

这里使用的是AutoDL AI算力云(非广告),选择的原因价格相对实惠,GPU种类和库存相对丰富。(AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL)

下面是各数据大小的大模型微调对应的硬件配置推荐

模型尺寸精度显存需求 (GB)推荐硬件配置
7BFrenze (FP16)20RTX 4090
LoRA (FP16)16RTX 4090
QLoRA (INT8)10RTX 4080
QLoRA (INT4)6RTX 3060
13BFrenze (FP16)40RTX 4090 / A100 (40GB)
LoRA (FP16)32A100 (40GB)
QLoRA (INT8)20L40 (48GB)
QLoRA (INT4)12RTX 4090
30BFrenze (FP16)80A100 (80GB)
LoRA (FP16)64A100 (80GB)
QLoRA (INT8)40L40 (48GB)
QLoRA (INT4)24RTX 4090
70BFrenze (FP16)200H100 (80GB) * 3
LoRA (FP16)160H100 (80GB) * 2
QLoRA (INT8)80H100 (80GB)
QLoRA (INT4)48L40 (48GB)
130BFrenze (FP16)360H100 (80GB) * 5
LoRA (FP16)240H100 (80GB) * 3
QLoRA (INT8)140H100 (80GB) * 2
QLoRA (INT4)72A100 (24GB) * 3

选择所需要的镜像(需要与使用的大模型微调框架等工具需要的版本对应),可以先按我选择的镜像版本,后期出现版本不匹配的情况可以手动升级至相应版本。

租用好所需要的GPU服务器后,可以在控制台->容器示例中对服务器进行相关操作。

重点关注两个功能

Jupyter Lab

JupyterLabJupyter Notebook 的下一代界面,它是一个更灵活、功能更强大的 Web 应用程序,用于创建 Jupyter Notebook 文档、编写代码、运行代码、可视化数据等。JupyterLab 提供了一个集成的开发环境,它支持多种编程语言,并且可以扩展以支持更多的工具和接口。

打开Jupyter Lab,点选+开启启动页,选择终端,就可以在终端控制台上进行指令调用。

AutoPanel或实例监控

可以在AutoPanel界面中查看现阶段服务器的CPU、GPU、内存等使用情况。

技术选型

本流程使用

LlamaFactory作为大模型微调工具。

[LlamaFactory](hiyouga/LLaMA-Factory: Unified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024))

EasyDataset作为数据集生成处理工具。

[EasyDataset](ConardLi/easy-dataset: A powerful tool for creating fine-tuning datasets for LLM)

OllamaHuggingFace作为大模型下载和运行工具。

Ollama

[HuggingFace](Models - Hugging Face)

Ngrok作为内网穿透工具。

[Ngrok](Kubernetes Operator: Ingress controller, gateway API, & more)

MinerU作为文档解析工具。

MinerU

安装流程和注意事项多查看相关工具文档及询问大模型。

LlamaFactory安装

LLaMA Factory 是一个开源的低代码大型语言模型(LLM)训练与微调框架,主要面向研究人员和开发者,旨在简化大型语言模型的微调、评估和部署过程。

[LlamaFactory](hiyouga/LLaMA-Factory: Unified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024))

下面是LlamaFactory对应的环境软件版本。

必需项
项目至少版本推荐版本
python3.93.10
torch2.0.02.6.0
transformers4.45.04.50.0
datasets2.16.03.2.0
accelerate0.34.01.2.1
peft0.14.00.15.1
trl0.8.60.9.6
可选项
项目至少版本推荐版本
CUDA11.612.2
deepspeed0.10.00.16.4
bitsandbytes0.39.00.43.1
vllm0.4.30.8.2
flash-attn2.5.62.7.2

Jupyter Lab终端控制台中调用下载及安装指令。

#官方提供的下载地址,有时候需要魔法才能下载。git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip install -e ".[torch,metrics]"

如果出现下载相应超时或者下载速度较慢,推荐使用国内镜像。

# 使用国内 Gitee 镜像源git clone --depth 1 https://gitee.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip install -e ".[torch,metrics]"

如果遇到包冲突,pip install --no-deps -e .命令解决。

出现以下画面表示LlamaFactory已下载安装完成。

安装完成后在终端控制台上调用Llama Board可视化指令,打开可视化界面。

llamafactory-cli webui

出现以下画面表示可视化界面已部署且运行,可以通过图中给出的地址在浏览器中进行访问。

注意点:出现运行画面后,当前程序需要后台运行,当前终端控制台不进行操作,新开一个终端控制台进行后续指令操作。

这里有一个坑,因为流程是通过JupyterLab远程调用云端服务器,所以在浏览器上访问http://127.0.0.1:7860 的本地地址是无法访问的,需要Ngrok等内网穿透工具生成访问地址,通过Ngrok提供的访问地址就可以访问服务器上的LLaMA Board可视化界面。(可查看本文中Ngrok安装内容)

Ngrok安装

Ngrok 是一款开源的反向代理工具,主要用于将本地运行的网络服务(如 Web 应用、API 服务等)通过一个安全的隧道暴露到公共网络上,从而方便开发、调试和测试。

[Ngrok](Kubernetes Operator: Ingress controller, gateway API, & more)

图中红框都可以进行Ngrok账号注册(需要使用魔法),如果遇到注册受阻可以使用GitHub账号登录。注册登录完成后在Setup\&Installation选项卡中选择Linux,下方就会出现NgrokLinux上的相关指令。

通过下方指令进行Ngrok的安装。

curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \  | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \  && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \  | sudo tee /etc/apt/sources.list.d/ngrok.list \  && sudo apt update \  && sudo apt install ngrok

出现以下画面表示Ngork安装完成。

通过红框按钮复制指令或者下方指令在Ngrok上配置用户身份令牌。

ngrok config add-authtoken $YOUR_AUTHTOKEN //$YOUR_AUTHTOKEN代指用户自己的身份令牌

配置完成后就可以通过下方指令进行反向代理,指令中的 localhost:8080 可以替换为所需访问的本地地址,例如LlamaFactory的访问地址。

ngrok http http://127.0.0.1:7860

出现以下画面表示方向代理成功,可以在本地浏览器中使用红框内的地址访问所需要访问的地址。代理成功后当前终端控制台后台运行,新开一个终端控制台进行后续指令操作。如需要退出Ngrok操作Ctrl+C

注意点Ngrok免费版一次只能代理一个地址。

使用HuggingFace下载大模型

HuggingFace 是一个提供先进自然语言处理(NLP)和人工智能开源工具的平台,支持Transformer模型的开发和应用,为开发者和研究人员提供了丰富的工具、庞大的模型库和资源,极大降低了AI大模型应用开发的门槛,能够满足从研究到工业应用的各种需求。

[HuggingFace](Models - Hugging Face)(需要魔法)

点击红框的Model选择需要的大模型。下面以DeepSeek-R1-Distill-Qwen-7B为例。

下方红框为大模型ID

下面指令用于安装HuggingFace Hub,HuggingFace官方提供的命令行工具,用于下载大模型。

pip install huggingface_hub

下面指令用于下载模型。

#{huggingface官网上的模型ID}整个替换为模型名称#{想要下载到的目录}整个替换为模型安装位置huggingface-cli download {huggingface官网上的模型ID} --local-dir {想要下载到的目录}

例如:

huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-7B  --local-dir /root/autodl-tmp/Models

如果上面指令相应超时或者下载速度慢,可以先设置为国内镜像,再执行下载模型命令,加速模型下载。

export HF_ENDPOINT="https://hf-mirror.com"source ~/.bashrc

补充:在JupyterLab的文件浏览器中

最外层的文件夹的根目录为/root

数据盘目录为/root/autodl-tmp

系统盘目录为/

查询文件夹地址的方法在文件浏览器选中需要查询的文件夹,右击选择复制路径,粘贴时记得前面添加/root才是完整路径。

出现以下画面表示模型下载成功。

在文件浏览器中可以看到下载好的大模型文件。

EasyDataSet安装

Easy Dataset是一款专门用于简化大型语言模型(LLMs)微调数据集创建的专业应用程序。它提供了一个直观的界面,用于上传特定领域的文件、智能分割内容、生成问题以及生成高质量的训练数据,以用于模型微调。

[EasyDataset](ConardLi/easy-dataset: A powerful tool for creating fine-tuning datasets for LLM)

使用下面指令下载EasyDataSet,并打开easy-dataset文件夹。

git clone https://github.com/ConardLi/easy-dataset.gitcd easy-dataset

安装EasyDataset需要使用npm工具,npm工具又需要node.js,先用下面指令查询设备是否安装node.js和npm,若安装,则确认设备安装的版本是否与EasyDataset需要的一致。

安装node.js和npm的指令需要使用sudo命令行工具,需要使用下面的指令查询。

which sudo

出现下面的情况表是系统内未安装sudo

安装sudo,出现下面情况表示sudo安装完成。

sudo apt updatesudo apt install sudo

同时查看sudo安装目录指令也可以使用也确认安装完成。

which sudo

需求
node -vnpm -v

出现下方情况表示未安装node.jsnpm

为了下载安装指定版本,使用nvm包管理工具下载安装node.jsnpm,由于nvm需要使用curl命令行工具,下面指令用于安装curl

sudo apt updatesudo apt install curl

安装完成后进行版本验证,出现版本号则为安装成功。

curl --version

安装nvm

export NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

安装完成后,重新加载你的Shell配置文件。

source ~/.bashrc

使用 nvm 安装指定版本的 Node.js,例如安装 Node.js 18.17.0(推荐安装版本,与EasyDataSet适配良好)

nvm install 18.17.0nvm use 18.17.0

再次查询版本号,当显示版本号时表示安装成功。

node -vnpm -v

安装好node和npm后就可以正式安装EasyDataSet,使用下面指令安装EasyDataset

需要确保当前控制台在easy-dataset目录下。

cd /root/easy-dataset

在文件浏览器内可以看到easy-dataset文件夹。

此时文件夹已经打开至EasyDataSet,运行EasyDataSet一定要确保在easy-dataset文件夹下,使用下面的指令安装相关环境依赖。

npm install

构建和运行EasyDataSet,显示下方画面表示运行成功,可以通过红框的本地地址访问EasyDataSet,访问方法和LlamaFactory相同,需要使用Ngrok反向代理。

npm run buildnpm run start

显示EasyDataset界面。

Ollama安装

Ollama 是一个开源的本地大语言模型(LLM)运行框架,旨在让用户能够轻松地在本地机器上部署、管理和与大型语言模型进行交互。

Ollama

由于EasyDataset需要使用大模型能力进行数据集的建立,虽然可以调用网络发布的公共大模型,但为了数据安全,选择本地大模型最优。本地部署大模型最简单的就是Ollama,且与EasyDataset适配,毫无疑问选用Ollama

下载安装Ollama的命令如下。

curl -fsSL https://ollama.com/install.sh | sh

但可能会出现连接超时或速度慢的问题,还是优先选择国内镜像进行下载加速。出现当前画面表示下载完成。红色报警为Ollama服务未正常启动。

export OLLAMA_MIRROR="https://ghproxy.cn/https://github.com/ollama/ollama/releases/latest/download"curl -fsSL https://ollama.com/install.sh | sed "s|https://ollama.com/download|$OLLAMA_MIRROR|g" | sh

Ollama下载完成后,需要修改大模型下载保存位置,默认下载位置在系统盘(容量不足),需要调整至数据盘,使用下面的指令创建文件夹用于存放大模型。

创建模型储存目录

sudo mkdir -p /root/autodl-tmp/ollama/models

更改目录权限

sudo chown -R ollama:ollama /root/autodl-tmp/ollama/modelssudo chmod -R 755 /root/autodl-tmp/ollama/models

修改环境配置

使用下面的指令修改配置文件中OLLAMA\_MODELS的地址。

export OLLAMA_MODELS="/root/autodl-tmp/ollama/models"

使用下面指令刷新配置文件。

source ~/.bashrc

在刷新后的终端控制台中使用下面的指令,大模型下载路径是修改后的则修改成功。

echo $OLLAMA_MODELS

由于AutoDL的设备系统未使用systemd服务,需要使用下面的指令启动Ollama服务,出现以下画面表示运行成功,因为Ollama需要持续运行,当前终端控制台后台运行,后续指令需要新开一个终端控制台进行操作。

ollama serve

Ollama运行界面下,使用 Ctrl+c 可以停止当前Ollama服务。

Ollama运行后就可以在Ollama官网找到需要的大模型,并使用Ollama的指令拉取需要的大模型。(用于数据集构建的大模型优先使用非推理模型,可以减少推理所消耗的时间)

下面以Qwen2.5 32B 的大模型下载为例。

先选择需要的数据量大小的模型,右侧复制拉取大模型的指令,在终端控制台运行。

ollama run qwen2.5:32b

下载完成后,大模型会自动运行,可以在控制台中和大模型对话,检查大模型能力。输入/bye可以退出大模型对话。

查看已下载的大模型。

ollama list

补充:

关闭占用端口进程

退出当前正在运行的程序的控制台界面,这不代表关闭了当前程序。当你再一次调用运行指令时,会提示当前程序使用的默认端口被占用,这时需要杀掉正在占用端口的程序才能再次启动该程序。

查询正在占用端口的工具ss,使用下面的指令进行安装。

sudo apt updatesudo apt install iproute2

调用版本查询指令,出现版本号则安装成功。

ss --version

使用下面的代码可以查看正在占用端口的程序的PID号。127.0.0.1为ip地址,11434为端口号。

ss -tuln -p | grep 11434

图中红框内的就是占用11434端口程序的PID号,使用下面的指令可以杀死当前进程。在重新运行程序就正常了。

kill -9 1726

Linux相关指令

打开文件夹指令。

cd 文件夹名称

查看文件夹下文件指令。

 ls

删除空文件夹。

rmdir 文件夹名称

删除非空文件夹指令。

rm -r 文件夹名称

删除文件指令。

rm 文件名称  

至此硬件和软件准备工作均已完成。现后台运行的程序有LlamaFactory、EasyDataset、Nogrk和Ollama,后续将整合这些软件功能进行大模型微调工作。

大模型微调

大模型微调(Fine-tuning)是一种在预训练模型的基础上进行进一步训练的技术,目的是让模型更好地适应特定的任务或领域。

数据集准备

数据集(Large Model Dataset)是指用于训练大型语言模型(LLMs)的海量数据集合。这些数据集通常包含大量的文本数据,用于帮助模型学习语言的结构、语义、语法和上下文信息。

构建大模型数据集是一个复杂的过程,通常包括以下步骤:

1. 文本转换格式

EasyDatasetMarkdown格式的文件兼容性最好,所以需要将用来准备数据集的文件转换为Markdown格式。这里使用MinerU网页版进行处理。

MinerU

教程中准备了一份 民用机场专用设备管理规定.pdf 作为数据集文件,上传至MinerU。

转换为MarkDown格式后,下载至本地。

2. 创建EasyDataset项目

在EasyDataset可视化界面上创建一个新项目。

在项目的模型配置模块中,选择第一个配置本地大模型。为了减少稍后选择模型时的干扰,将其他不需要的模型删除。

任务配置模块中,对文本分割长度进行设置(也就是文本分段)及根据文本的信息密度设置生成问题的最大长度(也就是问题答案所需要的长度)

提示词配置模块中,可以对生成问题提示词和生成答案提示词进行设置(可选)。可以设定大模型的角色、问答风格等。

设置以上配置后,不急于进行数据集生成,先进行大模型的功能测试。在模型测试模块中,进行简单测试,可以得到大模型回复,则表示大模型配置成功。

进入文献处理模块,选择用于处理文件的大模型,上传Markdown文件,点击上传并处理文件,文本块分割好后,全选文本块,点击批量生成问题,对选择的文本块进行问题生成。

选择领域分析模块,可以对文件生成的领域树进行修改。领域树的子树就是文本内容分类后生成的标签,修改自动生成的不正确的标签,新增需要的标签。这些标签在问题管理中用于对生成的问题进行数据标注。

问题生成后,选择问题管理模块,可以看到生成的所有问题。对不正确的问题进行修改或删除。对所有问题修改完成后,全选问题,点击批量构造数据集。

数据集构造完成后,选择数据集管理模块,全选问题后,点击导出数据集。此时可以对导出格式进行配置,数据集一般使用Json文件格式和Alpaca数据集风格。可以根据需要添加系统提示词。最后导出数据集。

这样一个基础的数据集就制作完成了。但是为了让大模型得到更好的训练效果,需要对数据集进行不断的修改和优化,数据集有好坏程度决定了大模型的最终能力。

微调

因为本流程使用免费版ngrok进行反向代理,一次只能代理一个地址。所以需要停用EasyDataset的代理,调整为LlamaFactory代理,端口号调整为7860

数据集导入

JupyterLab的文件浏览器中找到LlamaFactory文件夹,打开子文件夹data,将导出的数据集文件拖拽进去。

导入完成后,还需要在配置文件dataset_info.json中将刚导入的数据集进行配置。右击选择打开方式,使用编辑器打开。

复制下方代码,将名称替换为导入的数据集的名称,文件名替换为导入数据集的完整文件名(需要加上文件扩展名),粘贴至大括号内。

"名称": {    "file_name": "文件名.json"  },

Ctrl+S保存后,关闭编辑器。此时打开dataset_info.json,可以看到导入的数据集,已经配置完成。

LlamaFactory界面

下面介绍常用的几个模块

主界面

Train 训练

各类配置设置完成后,点击开始按钮进行模型训练。中途停止点击中断按钮。

Evaluate & Predict 评估

评估数据集不能和训练数据集内容一样。评估数据集用于评估模型的性能,通常不参与模型的训练,用于测试模型在未见过的数据上的表现。

假设你正在开发一个图像分类模型,目标是识别猫和狗的图片。

Chat 聊天
模型配置后测评

在主界面中配置好模型和模型路径后 ,应先到聊天模块进行对话测试。点击加载模型,如果模型加载失败,说明模型名称和下载的模型不一致或者模型路径错误。

模型训练后测评

在模型训练完成后,也需要到聊天界面进行训练后的模型测试。在主界面中选择最后一次训练的检查点路径,点击加载模型,然后就可以进行模型对话测试了。

Export 导出

在主界面中选择最后一次训练的检查点路径,在导出目录中配置填写导出路径,路径中的文件夹不能不存在,需要提前创建好。最后点击开始导出进行模型导出。

新模型的部署与运行

要在 Ollama 中运行格式为 Safetensors 的模型,需要先将 Safetensors 模型转换为 Ollama 支持的 gguf 格式,然后通过 Ollama 的命令行工具导入和运行。

转换格式需要llama.cpp,使用下面指令安装

git clone https://github.com/ggml-org/llama.cpp.gitcd llama.cpppip install -r requirements.txt

若下载速度慢或链接超时,则推荐使用国内镜像

git clone https://gitee.com/limoncc/llama.cpp.gitcd llama.cpppip install -r requirements.txt

使用下面的指令SafeTensors 到 GGUF

其中,/root/autodl-tmp/Models/Merge/DeepSeek-R1-Distill-Qwen-7BSafeTensors 模型的路径,/root/autodl-tmp/Models/output/model.gguf 是输出的文件路径。指令需要在~/llama.cpp目录下执行

python convert_hf_to_gguf.py /root/autodl-tmp/Models/Merge/DeepSeek-R1-Distill-Qwen-7B --outfile /root/autodl-tmp/Models/output/model.gguf --outtype f16

运行成功后,在/root/autodl-tmp/Models/output/model.gguf目录下则会生成Ollama可运行的gguf格式的大模型文件。

gguf格式大模型文件的同级目录下,创建Modelfile文件

ModelfileOllama 使用的一种配置文件,用于定义如何将模型导入到 Ollama 环境中。它类似于 Docker 的 Dockerfile,通过一系列指令来指定模型的来源、适配器、参数以及其他相关配置。

Modelfile文件中将下面代码复制保存进去,表示从该目录读取大模型文件。

FROM /root/autodl-tmp/Models/output/model.gguf

Modelfile 文件所在的目录下运行以下命令,将模型导入Ollamamy-model为自定义的大模型名称。

ollama create my-model -f Modelfile

最后运行以下指令,使用Ollama运行启动微调后的大模型。

ollama run my-model

Windows同理,需要记得修改Modelfile中的gguf大模型的路径

Ollama导入大模型指令需要Modelfile文件的全路径名。

Ollama运行大模型时,需要先查询加载的模型全程

ollama create my-model -f E:\largeModel\createLargeModelFormdDeepseek-R1-7B.Modelfile
ollama lsit
ollama run my_model:latest

总结

以上为云服务器上微调大模型的全部流程,因为数据集和训练方法的问题,最终得到的大模型没有达到预期的效果。实现行业大模型,还是需要足够优秀的数据集和模型训练方法。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

大模型微调 LlamaFactory EasyDataset Ollama HuggingFace
相关文章