ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FlowerTune LLM Finance:基于 Flower 的金融数据集联邦指令微调实战指南

FlowerTune LLM Finance:基于 Flower 的金融数据集联邦指令微调实战指南 FlowerTune LLM Finance基于 Flower 的金融数据集联邦指令微调实战指南【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower本文以 Flower 官方开源仓库中的flowertune-llm-finance示例应用为主体讲解如何基于预训练 Mistral-7B-v0.3 模型、在 fingpt-sentiment 金融情感数据集上开展联邦指令微调Federated Instruction Tuning。文章覆盖从应用获取、环境配置、模拟运行到模型保存的完整流程并结合仓库源码剖析 LoRA FedAvg 的核心实现原理读完即可在单卡 GPU 上复现金融赛道 LLM 排行榜的基线实验。应用概述面向金融赛道的联邦 LLM 微调基线flowertune-llm-finance是 Flower 生态中 FlowerTune LLM 系列针对Finance金融挑战赛提供的基线应用。它使用预训练的 Mistral-7B-v0.3 因果语言模型在flwrlabs/fingpt-sentiment-train金融情感数据集上进行联邦指令微调使用 Flower Datasets 完成数据集的下载、分区与预处理使用 Flower 的Simulation Engine模拟引擎以联邦方式模拟 LLM 微调全过程让用户可以在单张 GPU上完成训练仓库中应用版本为1.2.12其pyproject.toml中明确描述为 Base App for the Finance challenge in the FlowerTune LLM Leaderboard。应用代码结构清晰全部位于 examples/flowertune-llm-finance/ 目录下flowertune-llm-finance/ ├── flowertune_finance/ │ ├── __init__.py # 包声明 │ ├── client_app.py # 定义 ClientApp本地训练与指标上报 │ ├── dataset.py # 数据集加载、分区与 prompt 格式化 │ ├── models.py # 模型加载、量化与 LoRA 配置 │ ├── server_app.py # 定义 ServerApp聚合与全局检查点保存 │ └── strategy.py # 自定义 FedAvg 策略与通信开销统计 ├── pyproject.toml # 依赖、应用入口与全部运行配置 └── README.md方法论LoRA 参数高效微调 FedAvg 聚合从 README 的 Methodology 一节可知该基线的技术路线为LoRA 参数高效微调使用 PEFT 库对 7B 规模的模型进行低秩适配只训练极少量可训练参数大幅降低显存与通信开销FedAvg 策略聚合各客户端本地训练得到的 LoRA 权重PEFT state dict上传到服务端按 FedAvg 方式加权平均后分发回客户端该基线为Finance 挑战排行榜提供可复现的参照性能。具体到源码实现客户端在 client_app.py 的train()函数中完成一次完整的本地训练循环从context.run_config读取本轮轮次、分区 ID、总轮数等运行配置通过load_data()加载本客户端对应的数据分区调用get_model()加载量化后的 Mistral-7B 并套上 LoRA 适配器使用set_peft_model_state_dict()将服务端下发的全局 PEFT 权重写入模型用 TRL 的SFTTrainer做有监督微调最后通过get_peft_model_state_dict()提取本地 LoRA 权重封装为ArrayRecord连同train_loss、num-examples指标一起返回服务端。服务端则继承自FedAvg的自定义策略FlowerTuneLlm见 strategy.py行为与标准 FedAvg 一致额外增加了通信开销统计CommunicationTracker会累计每轮ArrayRecord的字节数并以 MB 为单位打印 Communication budget 日志一旦累计通信量超过 200,000 MB会输出 WARN 提示因为 LLM 排行榜对通信预算有约束。获取应用与环境安装1. 安装 Flowerpip install flwr2. 拉取应用模板flwr new flwrlabs/flowertune-llm-financeflwr new会从 Flower Hub 拉取并初始化该应用的完整工程骨架。3. 安装项目依赖项目依赖全部声明在 pyproject.toml 中在激活的 Python 环境下执行pip install -e .核心依赖包括版本均以仓库当前锁定为准依赖版本用途flwr[simulation]1.36.0Flower 框架与模拟引擎flwr-datasets0.6.1联邦数据集下载与分区torch2.10.0深度学习框架trl0.8.1SFTTrainer 监督微调peft0.6.2LoRA 参数高效微调transformers4.53.0模型与分词器bitsandbytes0.49.14-bit/8-bit 量化omegaconf2.3.0配置解析sentencepiece/hf_transfer/scipy固定版本分词、下载加速与科学计算实验设置50 个 IID 分区、200 轮联邦训练原文档明确给出了实验的统计设计数据集被划分为50 个 IID独立同分布分区每个分区分配给一个 ClientApp每轮随机采样10%fraction 0.1的节点参与训练总计运行200 轮所有 Flower App 运行参数都定义在pyproject.toml的[tool.flwr.app.config]中。该应用设计为在50 个虚拟 SuperNode支持 GPU 执行 ClientApp上运行。由于 Simulation Runtime 默认只创建 10 个 CPU 节点需要先执行如下命令调整模拟配置flwr federation simulation-config \ --num-supernodes50 \ --client-resources-num-cpus6 \ --client-resources-num-gpus1.0[!IMPORTANT] 若计划参与 LLM 排行榜的公平竞争[tool.flwr.app.config.static]中的配置不允许修改且--num-supernodes必须保持为50。数据分区与预处理的源码细节数据加载与分区实现在 dataset.py 的load_data()中使用flwr_datasets的FederatedDataset配合IidPartitioner(num_partitions50)完成 IID 分区并用模块级全局变量FDS缓存实例避免重复下载。金融任务的数据预处理reformat()会将列output重命名为response对finance任务把instruction与input拼接为一条完整指令formatting()使用标准Alpaca 指令模板构造 promptBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Response: {response}训练时使用 TRL 的DataCollatorForCompletionOnlyLM以\n### Response:的 token 序列作为响应起始标记确保损失只计算在 response 部分指令部分不参与反向传播这与 SFT 指令微调的标准做法一致。运行金融挑战赛第一步获取模型访问权限Mistral-7B-v0.3 是受控模型需要先用 Hugging Face 账号申请访问权限在 HF 官网模型页面直接请求。然后在开发机上登录一次hf auth login第二步启动联邦训练所有配置默认值定义在pyproject.toml的[tool.flwr.app.config]条目中flwr run会自动加载flwr run --stream--stream会将训练日志实时输出到终端。关键配置参数一览以下参数均来自仓库 pyproject.toml是理解与调优该基线的一手依据配置项默认值说明model.namemistralai/Mistral-7B-v0.3基础预训练模型model.quantization44-bit 量化也可设为 8model.gradient-checkpointingtrue梯度检查点节省显存model.lora.peft-lora-r32LoRA 秩model.lora.peft-lora-alpha64LoRA 缩放系数train.seq-length512最大序列长度train.learning-rate-max5e-5余弦退火初始学习率train.learning-rate-min1e-6余弦退火最低学习率train.dynamic-data-seedfalse是否每轮改变数据采样顺序train.save-every-round5每 5 轮保存一次全局检查点train.training-arguments.per-device-train-batch-size16每设备 batch sizetrain.training-arguments.num-train-epochs3本地训练轮数train.training-arguments.max-steps10最大训练步数train.training-arguments.lr-scheduler-typeconstant学习率调度器类型strategy.fraction-train0.1每轮参与训练的客户端比例strategy.fraction-evaluate0.0参与评估的客户端比例num-server-rounds200联邦训练总轮数学习率调度余弦退火与 README 中每轮随机采样 10% 节点、共 200 轮的设置呼应客户端每轮的学习率并非固定值而是由 models.py 中的cosine_annealing()依据当前轮次在5e-5与1e-6之间余弦退火def cosine_annealing(current_round, total_round, lrate_max0.001, lrate_min0.0): cos_inner math.pi * current_round / total_round return lrate_min 0.5 * (lrate_max - lrate_min) * (1 math.cos(cos_inner))该值在 client_app.py 中写入training_arguments.learning_rate实现全局学习率随联邦轮次递减。模型加载4-bit 量化 LoRAmodels.py 的get_model()展示了完整的模型装配流程根据model.quantization构建BitsAndBytesConfig4-bit 或 8-bit仅支持这两种取值否则抛出ValueError以torch.bfloat16精度、low_cpu_mem_usageTrue加载AutoModelForCausalLM调用prepare_model_for_kbit_training()适配量化训练并按配置开启梯度检查点构造LoraConfig(r32, lora_alpha64, lora_dropout0.075, task_typeCAUSAL_LM)并包装为 PEFT 模型若开启梯度检查点则同时设置model.config.use_cache False这是兼容 gradient checkpointing 的必需步骤。VRAM 显存消耗参考应用默认使用4-bit 量化的 Mistral-7B。原文档给出的各挑战每客户端预估显存消耗如下挑战GeneralNLPFinanceMedicalCodeVRAM~25.50 GB~17.30 GB~22.80 GB~17.40 GB也就是说本文的 Finance 基线在 4-bit 量化下每客户端约需17.30 GB显存一张 24 GB 的消费级 GPU 即可承载。可根据自身设备调整分配给每个客户端的 CPU/GPU 资源在 Flower 配置config.toml中的flowertune连接项里通过以下两个键指定options.backend.client-resources.num-cpusoptions.backend.client-resources.num-gpus模型保存每 5 轮落盘一次全局 PEFT 检查点服务端在聚合完成后会定期保存全局 PEFT 模型检查点默认每 5 轮保存一次该间隔由pyproject.toml中train.save-every-round控制。保存逻辑实现在 server_app.py 的get_evaluate_fn()中每次聚合后若server_round满足非第 0 轮且等于总轮数或能被save_every_round整除则触发保存服务端先用get_model()重建模型、用set_peft_model_state_dict()写入聚合后的全局权重再调用model.save_pretrained(f{save_path}/peft_{server_round})保存输出目录为results/{yyyy-MM-dd_HH-mm-ss}/按服务端启动时间戳自动创建因此每个 PeFT 检查点都会出现在results/时间戳/peft_轮次/下。[!NOTE] 若计划提交 LLM 排行榜需要提交最后一个 PEFT 检查点即最终轮次对应的peft_200。从入门到提交完整操作流程回顾将原文档步骤与源码实现串联起来一次完整的 Finance 挑战基线复现流程为pip install flwr安装框架flwr new flwrlabs/flowertune-llm-finance拉取应用pip install -e .安装依赖torch / trl / peft / bitsandbytes / transformers 等版本由pyproject.toml锁定在 HF 申请 Mistral-7B-v0.3 访问权限并执行hf auth login登录一次用flwr federation simulation-config --num-supernodes50 --client-resources-num-cpus6 --client-resources-num-gpus1.0将模拟运行时调整为 50 个 GPU 虚拟节点flwr run --stream启动 200 轮联邦训练每轮随机 10% 的客户端以 4-bit LoRA 方式本地微调服务端 FedAvg 聚合训练过程中每 5 轮自动在results/时间戳/peft_轮次/保存全局 PEFT 检查点最终检查点即为排行榜提交产物。如果需要覆盖式修改实验参数如训练轮数、学习率、batch size可参照上述[tool.flwr.app.config]表通过flwr run --run-config keyvalue ...覆盖或直接编辑pyproject.toml但参与排行榜时请务必遵守[tool.flwr.app.config.static]与 50 节点不可变的公平性约束。【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表