当前位置: 首页 > news >正文

Axolotl开源大模型微调框架:从LoRA到DPO的实战指南

1. 项目概述:一个开源大语言模型微调框架

如果你正在寻找一个能让你在个人电脑、云端服务器,甚至是多台机器上,轻松、高效地对各种开源大语言模型进行微调的工具,那么Axolotl很可能就是你需要的那个“瑞士军刀”。它不是某个大厂的闭源产品,而是一个由社区驱动的、完全开源的项目。简单来说,Axolotl把大模型微调这个听起来很复杂的过程,封装成了一个高度可配置、开箱即用的框架。你不再需要从零开始写几百行PyTorch代码来处理数据加载、模型转换、训练循环和性能优化,而是通过一个YAML配置文件,就能定义从数据预处理到模型训练、评估,甚至量化的完整流程。

我最初接触Axolotl是因为需要快速在几个不同的开源模型上尝试指令微调。当时手动拼接各种脚本,处理不同模型的结构差异和内存问题,耗费了大量时间。直到用了Axolotl,我才发现原来微调可以如此“傻瓜化”——当然,这里的“傻瓜化”指的是它极大地简化了操作,但其背后提供的功能和灵活性却一点也不简单。它支持从经典的LLaMA、Mistral系列,到最新的Qwen、GLM、Gemma等数十种模型;训练方法上,无论是全参数微调、轻量级的LoRA/QLoRA,还是更复杂的偏好对齐(如DPO、ORPO)、强化学习(如GRPO),甚至是多模态模型的训练,它都提供了现成的支持。对于像我这样需要频繁实验的研究者或开发者来说,这无疑是一个巨大的生产力提升工具。

2. 核心设计思路与架构解析

2.1 为什么是YAML配置驱动?

Axolotl最核心的设计哲学是“配置即代码”。整个微调流水线——包括加载哪个模型、使用什么数据集、采用何种训练方法、设置哪些超参数——全部通过一个YAML文件来定义。这种设计带来了几个显著优势:

第一,可复现性极强。你只需要分享这个YAML配置文件,别人就能完全复现你的整个训练过程,包括数据预处理的方式。这比分享一堆零散的Python脚本和命令行参数要清晰、可靠得多。

第二,降低了学习曲线。用户不需要深入理解框架内部的所有代码,只需熟悉配置项的语法,就能组合出复杂的训练方案。框架负责将配置解析成具体的PyTorch训练逻辑。

第三,便于版本管理和实验对比。你可以为不同的实验(例如,全量微调 vs. LoRA,不同学习率)创建不同的YAML文件,用Git管理起来,轻松回溯和对比不同配置下的结果。

这个YAML文件的结构通常包含几个主要部分:base_model指定基础模型(如meta-llama/Llama-3.2-1B);datasets定义训练和验证数据集的来源与格式;lora_r,lora_alpha等参数控制LoRA的配置;training部分则包含了批量大小、学习率、优化器、调度器等所有训练超参数。

2.2 模块化与可扩展的架构

尽管对用户呈现为一个简单的命令行工具,Axolotl内部的架构是高度模块化的。它基于Hugging Face的transformersdatasetsaccelerate库构建,并在此基础上做了大量封装和增强。

  • 数据加载与处理模块:这是微调的第一步,也是容易出错的一步。Axolotl内置了对多种数据集格式的支持,包括Alpaca格式、ShareGPT对话格式、JSONL行格式等。更重要的是,它实现了多包填充技术。传统上,为了高效利用GPU,我们会将不同长度的样本填充到同一长度,这造成了大量的计算和内存浪费。多包填充允许将多个短样本智能地拼接成一个长序列,最大限度地减少了填充符,显著提升了训练效率,尤其是在处理大量短文本指令数据时。
  • 模型加载与适配模块:该模块负责根据YAML配置,从Hugging Face Hub或本地路径加载预训练模型,并自动为其注入适配器(如LoRA层)。它需要处理不同模型架构的细微差别,确保LoRA矩阵正确添加到对应的线性层上。对于QLoRA,该模块还会协调量化模型的加载和反量化计算。
  • 训练循环与优化器模块:这是框架的引擎。它集成了多种训练策略,并深度优化了训练循环。例如,它原生支持Flash Attention,这是一种通过重新计算注意力机制来大幅减少显存占用并提升速度的算法。对于长上下文训练,它还支持序列并行,将超长的序列切分到多个GPU上计算注意力,从而突破单卡显存对上下文长度的限制。
  • 分布式训练后端集成:为了支持从单卡到多卡、多节点的扩展,Axolotl无缝集成了多种分布式训练后端,包括PyTorch原生的DDP、DeepSpeed以及FSDP。特别是FSDP,它能够将模型参数、梯度和优化器状态进行分片,使得在有限显存的GPU集群上微调超大模型成为可能。Axolotl的配置让你可以轻松切换这些后端。

注意:虽然Axolotl简化了操作,但它并没有隐藏底层细节。高级用户仍然可以通过配置项深入调整几乎每一个环节。例如,你可以指定在模型的哪些层应用LoRA(lora_modules_to_save),或者自定义损失函数。这种在易用性和灵活性之间的平衡,是它深受社区喜爱的原因之一。

3. 从零开始的实战微调指南

纸上得来终觉浅,接下来我将带你完成一次完整的微调实战。我们以使用LoRA方法微调一个较小的Llama 3.2模型为例,目标是让它学会遵循指令。假设你有一台配备至少16GB显存的NVIDIA GPU的Linux/macOS机器或云服务器。

3.1 环境准备与安装

首先,我强烈推荐使用uv这个新兴的Python包管理器和安装器,它比传统的pip更快,并且能更好地处理依赖冲突。这也是Axolotl官方推荐的方式。

# 1. 安装 uv curl -LsSf https://astral.sh/uv/install.sh | sh # 安装完成后,根据提示将uv添加到PATH,或执行: source $HOME/.local/bin/env # 2. 设置PyTorch的CUDA后端环境变量(CUDA 12.8兼容性较好) export UV_TORCH_BACKEND=cu128 # 3. 创建并激活Python 3.12的虚拟环境 uv venv --python 3.12 source .venv/bin/activate # 4. 安装PyTorch基础包(版本需匹配你的CUDA) uv pip install torch==2.10.0 torchvision # 5. 安装Axolotl及其核心依赖(包括DeepSpeed支持) uv pip install --no-build-isolation axolotl[deepspeed] # 6. (推荐)安装Cut Cross Entropy优化,这是一个能提升训练速度的定制化交叉熵损失实现 uv pip install "cut-cross-entropy[transformers] @ git+https://github.com/axolotl-ai-cloud/ml-cross-entropy.git@main" # 7. 获取官方示例配置文件,这是我们学习的起点 axolotl fetch examples

如果遇到网络问题,或者你更习惯使用pip,也可以使用以下命令安装。但请注意,手动管理flash-attn等需要编译的包可能会更复杂。

pip3 install -U packaging==26.0 setuptools==75.8.0 wheel ninja pip3 install --no-build-isolation axolotl[flash-attn,deepspeed] axolotl fetch examples

3.2 准备数据集与配置文件

Axolotl支持多种数据集格式。我们这里使用最简单的“指令-输出”格式,它类似于Alpaca数据集。创建一个名为dataset.jsonl的文件,每行是一个JSON对象:

{"instruction": "解释什么是机器学习。", "output": "机器学习是人工智能的一个分支,它使计算机系统能够从数据中学习并改进性能,而无需进行明确的编程。"} {"instruction": "将以下英文翻译成中文:'The quick brown fox jumps over the lazy dog.'", "output": "敏捷的棕色狐狸跳过了懒惰的狗。"} {"instruction": "写一首关于春天的五言绝句。", "output": "春风吹绿柳,细雨润红花。燕舞晴空里,人间处处家。"} // ... 可以准备几百到几千条这样的数据

接下来,我们需要创建YAML配置文件。进入Axolotl下载的示例目录,找一个Llama 3的LoRA配置作为模板,比如examples/llama-3/lora-1b.yml。我们复制一份并进行修改:

cp examples/llama-3/lora-1b.yml my_first_finetune.yml

用文本编辑器打开my_first_finetune.yml,关键部分修改如下:

# 模型配置 base_model: meta-llama/Llama-3.2-1B-Instruct # 使用1B参数的指令预训练版本,更适合微调 model_type: LlamaForCausalLM # 数据集配置 datasets: - path: ./dataset.jsonl # 你的数据集路径 type: alpaca # 指定数据格式,alpaca格式对应 `instruction`/`output` 字段 ds_type: json # 文件类型 # LoRA配置 adapter: lora lora_model_dir: ./lora-out # LoRA权重输出目录 lora_r: 16 # LoRA的秩,影响参数量和能力,8或16是常见起点 lora_alpha: 32 # LoRA的缩放因子,通常设置为r的两倍 lora_target_modules: # 在哪些模块上应用LoRA - q_proj - v_proj - k_proj - o_proj - gate_proj - up_proj - down_proj # 训练配置 output_dir: ./ft-model # 完整模型输出目录(包含基础模型和适配器) num_epochs: 3 # 训练轮数,根据数据量调整 per_device_train_batch_size: 4 # 每个GPU的批次大小,根据显存调整 gradient_accumulation_steps: 4 # 梯度累积步数,有效批次大小 = batch_size * accumulation_steps * GPU数 learning_rate: 2.0e-4 # 学习率,LoRA通常可以设得比全量微调大一点 lr_scheduler: cosine # 学习率调度器 warmup_steps: 100 # 热身步数 logging_steps: 10 # 每多少步打印一次日志 save_steps: 200 # 每多少步保存一次检查点 eval_steps: 200 # 每多少步在验证集上评估一次 optimizer: adamw_bnb_8bit # 使用8-bit AdamW优化器,节省显存 # 性能优化配置 bf16: true # 使用bfloat16混合精度训练,Ampere架构及以上GPU支持 flash_attention: flash_attention_2 # 启用Flash Attention 2 packing: true # 启用多包填充,提升效率

实操心得:per_device_train_batch_sizegradient_accumulation_steps的乘积决定了有效批次大小,这是影响训练稳定性和效果的关键超参数。对于1B参数的模型,有效批次大小在16-64之间都是常见的。如果显存不足导致batch_size只能设为1或2,可以通过增大gradient_accumulation_steps来达到目标有效批次大小。lora_target_modules通常选择注意力机制(q, k, v, o)和前馈网络(gate, up, down)的所有线性层,这是最通用的设置。

3.3 启动训练与监控

配置文件和数据准备好后,启动训练就一行命令:

axolotl train ./my_first_finetune.yml

训练开始后,终端会输出日志,显示当前的训练步数、损失、学习率等信息。Axolotl会自动处理数据加载、模型转换、训练循环和检查点保存。你可以使用tensorboard来可视化训练过程(如果配置了logging_dir):

tensorboard --logdir ./ft-model/runs

训练完成后,最终的模型(包括基础模型和LoRA适配器)会保存在output_dir指定的目录中。LoRA的权重单独保存在lora_model_dir中。

3.4 模型合并与推理

训练得到的是“基础模型 + LoRA适配器”的形式。有时为了部署方便,我们需要将LoRA权重合并回原模型,得到一个完整的、独立的模型文件。

axolotl merge-lora ./my_first_finetune.yml

合并后的模型会保存在输出目录下的merged文件夹中。之后,你就可以像使用任何其他Hugging Face模型一样加载它进行推理了。这里提供一个简单的推理脚本示例:

from transformers import AutoTokenizer, AutoModelForCausalLM import torch model_path = "./ft-model/merged" # 合并后的模型路径 tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16, device_map="auto") prompt = "解释什么是神经网络。" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate(**inputs, max_new_tokens=200, do_sample=True, temperature=0.7) print(tokenizer.decode(outputs[0], skip_special_tokens=True))

4. 高级特性与性能调优实战

当你掌握了基础微调后,Axolotl提供的一系列高级功能可以帮助你解决更复杂的问题并进一步提升效率。

4.1 使用QLoRA在消费级显卡上微调大模型

QLoRA是LoRA的量化版本,它先将基础模型量化为4-bit精度,再在其上添加可训练的LoRA适配器。这能使得在24GB显存的消费级显卡上微调70B参数的模型成为可能。配置QLoRA非常简单,只需在YAML文件中修改几处:

adapter: qlora # 将 adapter 改为 qlora load_in_4bit: true # 以4-bit精度加载模型 bnb_4bit_compute_dtype: bfloat16 # 4-bit模型计算时使用的数据类型 bnb_4bit_quant_type: nf4 # 量化类型,'nf4' (NormalFloat4) 是推荐选项 # 其他LoRA和训练配置保持不变...

注意事项:QLoRA虽然大幅降低了显存占用,但训练速度会比标准的LoRA慢一些,因为涉及量化和反量化操作。此外,bnb_4bit_compute_dtype设置为bfloat16通常能在精度和速度之间取得较好平衡,确保你的GPU支持bfloat16。

4.2 利用多GPU与FSDP扩展训练规模

当模型太大,单卡显存放不下时(即使是QLoRA),或者你想加快训练速度,就需要使用多GPU。Axolotl通过集成FSDP来简化这个过程。

首先,你需要一个DeepSpeed配置文件。Axolotl提供了多种模板:

axolotl fetch deepspeed_configs

假设我们使用Zero-2阶段的配置(优化器状态分片)。在你的训练YAML配置中,添加或修改以下部分:

# 启用DeepSpeed并指定配置文件 deepspeed: deepspeed_configs/zero2.json # 调整分布式训练相关设置 fsdp: # 启用FSDP(与DeepSpeed配合使用) - full_shard # 完全分片策略,将参数、梯度和优化器状态都分片 sharding_strategy: hybrid_shard # 分片策略,'hybrid_shard' 在节点内分片,适合多节点 fsdp_config: limit_all_gathers: true # 限制全收集操作,有助于提升性能 use_orig_params: true # 保留原始参数结构,兼容性更好 # 计算设置 num_processes: 4 # 指定使用的GPU数量,或由启动器决定

然后,使用accelerate launchtorchrun来启动分布式训练。以下是一个使用accelerate的示例,首先需要配置加速器:

accelerate config # 交互式配置你的分布式环境 accelerate launch axolotl.cli.train ./my_first_finetune.yml

4.3 长上下文训练与序列并行

微调长上下文模型(如处理32K或128K文本)时,最大的挑战是显存。即使模型参数量不变,注意力机制的内存消耗会随序列长度平方增长。Axolotl的序列并行功能可以将一个长序列的注意力计算拆分到多个GPU上。

# 在配置中启用序列并行 sequence_parallel_enabled: true sp_size: 2 # 将序列分到2个GPU上处理 # 同时,你需要配合使用FSDP和Tensor Parallelism (TP) fsdp: - full_shard - enable_tp: true # 启用张量并行 tp_size: 2 # 张量并行度为2,将模型层内的矩阵计算分到2个GPU # 注意:总GPU数需要是 sp_size * tp_size 的倍数(本例中至少需要4卡)

这个配置意味着,对于一个长序列,首先会在2个GPU上进行序列维度的拆分(SP),然后每个GPU上的模型计算又会通过张量并行(TP)再拆分到另外2个GPU上。这种ND并行(多维并行)是训练超大模型和长上下文的关键技术。

4.4 偏好对齐训练:以DPO为例

除了指令微调,让模型输出更符合人类偏好也至关重要。直接偏好优化是一种流行的技术。Axolotl原生支持DPO及其变种(如IPO、KTO、ORPO)。这需要你的数据集包含“已选择”和“已拒绝”的回复对。

数据集格式示例(JSONL):

{"prompt": "写一个关于人工智能的短故事。", "chosen": "在未来的城市,一个具有情感的AI...(精彩的回答)", "rejected": "人工智能就是计算机程序,没什么故事可讲。(糟糕的回答)"}

YAML配置关键部分:

# 指定训练类型为DPO training_type: dpo beta: 0.1 # DPO损失函数中的beta参数,控制偏离参考模型的强度,通常0.1-0.5 datasets: - path: ./dpo_dataset.jsonl type: dpo # 指定数据集格式为dpo ds_type: json # 通常DPO会在一个SFT微调后的模型上进行,所以需要加载基础模型和可能的参考模型 base_model: ./my_sft_model # 你的SFT微调后的模型 reference_model: ./my_sft_model # 参考模型,通常与base_model相同 # 也可以设置为 `null`,让Axolotl自动从base_model加载并冻结

DPO训练会同时优化策略模型(即最终要得到的模型)和参考模型(用于防止模型偏离太远),使得策略模型对“已选择”回复的偏好概率远高于“已拒绝”回复。

5. 常见问题排查与实战技巧实录

在实际使用中,你肯定会遇到各种问题。下面是我和社区成员常遇到的一些坑及其解决方案。

5.1 内存不足问题

这是最常见的问题。错误信息可能类似CUDA out of memory

  • 调整批次大小和梯度累积:首先降低per_device_train_batch_size,甚至降到1。同时增加gradient_accumulation_steps以保持总的有效批次大小。
  • 启用梯度检查点:在YAML中设置gradient_checkpointing: true。这会用计算时间换取显存,在模型中间层保存激活值而非一直保留在显存中。
  • 使用更高效的精度的注意力机制:确保flash_attention已启用(flash_attention_2)。对于非常新的架构,可以尝试flash_attention_3flex_attention
  • 切换到QLoRA:如果以上方法还不够,将adapter: lora改为adapter: qlora,并设置load_in_4bit: true
  • 检查数据格式:意外的长文本会导致序列长度激增。确保你的数据经过了适当的清洗和截断。可以使用max_length参数进行截断。

5.2 训练损失为NaN或不下降

  • 学习率过高:这是首要怀疑对象。尝试将学习率降低一个数量级(例如从2e-4降到2e-5)。对于QLoRA,有时需要比LoRA更小的学习率。
  • 精度问题:确保你的GPU支持bf16。如果不支持,使用fp16,但要注意fp16训练可能更不稳定,可以尝试启用fp16并设置gradient_checkpointing和更保守的学习率。
  • 损失缩放:当使用fp16时,确保fp16模式已开启。Axolotl/Accelerate通常会自动处理损失缩放。如果问题依旧,可以尝试在DeepSpeed配置中显式配置损失缩放。
  • 数据问题:检查数据集中是否有空样本、格式错误的样本或标签。一个坏的样本可能导致梯度爆炸。
  • 权重初始化:LoRA权重默认是随机初始化的。虽然罕见,但极端情况下可能导致问题。可以尝试用lora_init_weights: gaussianlora_init_weights: loftq(如果进行了量化)来改变初始化方式。

5.3 多GPU训练启动失败

  • 端口冲突:使用torchrunaccelerate launch时,确保主节点的端口(默认29500)未被占用,且所有节点间的网络是通的。
  • DeepSpeed配置错误:确保你的deepspeed配置路径正确,并且配置文件中的train_batch_size与YAML中的per_device_train_batch_size*gradient_accumulation_steps*num_processes相匹配。
  • FSDP与模型兼容性:某些非常新的或定制化的模型可能不完全兼容FSDP。如果遇到奇怪的错误,尝试先在不使用FSDP的单卡或DDP模式下运行,以排除模型代码本身的问题。
  • CUDA版本不匹配:确保所有节点上的PyTorch CUDA版本一致。

5.4 模型生成结果不佳

  • 过拟合:如果训练损失持续下降但验证损失上升,或模型开始输出无意义的重复文本,可能是过拟合。尝试增加数据量、减少训练轮数(num_epochs)、或增加正则化(如设置weight_decay)。
  • 数据质量:大模型微调“垃圾进,垃圾出”。仔细检查你的指令和输出数据质量。指令是否清晰多样?输出是否准确、有帮助?
  • 提示模板不匹配:模型在预训练和指令微调时使用了特定的对话模板(如[INST] ... [/INST])。在推理时,你需要使用相同的模板格式包装你的输入,否则模型可能无法理解意图。参考模型源页面(如Meta的Llama页面)获取正确的聊天模板。Axolotl在训练时会自动处理模板,但推理时需要你手动添加。
  • 推理参数:生成时的temperature(温度)和top_p(核采样)参数影响很大。temperature=0是贪婪解码,结果确定但可能枯燥;temperature=0.7-0.9会增加多样性。top_p=0.9通常能产生更连贯的文本。多尝试不同的组合。

5.5 独家避坑技巧

  1. 从小开始,快速迭代:不要一开始就用全量数据和最大模型。用一个小的子数据集(如1000条)和一个小模型(如1B)跑通整个流程,确认数据格式、配置、训练和推理脚本都没问题。这能节省大量调试时间。
  2. 善用--debug模式:在正式训练前,使用axolotl train config.yml --debug命令。这个模式会快速过一遍数据加载、模型准备流程,并在少量数据上跑几个训练步,验证配置是否可行,而不进行长时间训练。
  3. 监控GPU利用率:使用nvidia-smi -l 1gpustat实时监控GPU显存和算力使用情况。如果GPU利用率长期很低(如<30%),可能是数据加载(IO)或CPU预处理成了瓶颈。可以尝试启用packing(多包填充)、使用更快的存储、或增加数据加载的worker数量(dataloader_num_workers)。
  4. 保存与恢复训练:Axolotl会自动保存检查点。如果训练中断,可以直接重新运行相同的axolotl train命令,它会自动从最新的检查点恢复。确保output_dir有足够的空间。
  5. 社区是后盾:遇到奇怪错误时,第一站是去项目的GitHub Issues页面搜索。你遇到的问题很可能别人已经遇到并解决了。如果找不到,可以按照模板清晰地描述你的环境、配置、完整错误日志,然后提交Issue。Discord社区也是一个获得快速帮助的好地方。

Axolotl的强大之处在于它将前沿的微调技术工程化、产品化,让研究者和开发者能更专注于数据和任务本身,而不是底层框架的调试。随着你对它的熟悉,你会发现用它来探索大模型的能力边界,是一件既高效又有趣的事情。

http://www.jsqmd.com/news/732778/

相关文章:

  • AutoSubs:本地AI字幕生成解决方案,彻底告别云端转录依赖
  • 如何永久保存微信聊天记录?WeChatMsg完整使用指南免费开源
  • 工业现场故障率下降63%的关键在哪?MCP 2026边缘-云协同适配框架首次解密,含OPC UA 1.04+TSN双模配置模板
  • 2026年3月优秀的冷却塔散热胶片直销厂家推荐,斯频德冷却塔填料/荏源冷却塔填料,冷却塔散热胶片供应商哪家专业 - 品牌推荐师
  • 基于大语言模型的电商智能客服SaaS平台:架构、部署与实战
  • 基于MCP协议构建Gmail智能助手:原理、部署与实战应用
  • 告别AI问答的‘乱码’:手把手教你用Towxml在uni-app微信小程序里优雅展示Markdown
  • TikTok评论采集终极指南:3分钟掌握零代码数据抓取技巧
  • 告别命令行焦虑!用File Browser给你的CentOS服务器装个Web版“文件资源管理器”
  • 告别虚拟机!用WSL2在Windows上搭建PX4+ROS1无人机仿真环境(附QGC连接教程)
  • NFC Release 15技术解析:通信距离突破与应用前景
  • 原生AI助手:深度系统集成与无缝工作流融合的技术实践
  • 贾子科学理论(Kucius Science Theorem)完整解析
  • 从传输门到D触发器:一个芯片设计新人的手绘笔记与避坑心得
  • 探索使用OpenClaw与Taotoken联动自动化视频项目信息整理流程
  • 英雄联盟玩家必备:LeagueAkari本地自动化工具的终极指南
  • 终极指南:如何快速部署i茅台自动预约系统,告别手动抢购烦恼
  • Synchronous Audio Router:Windows专业音频路由的一站式解决方案
  • 深入解析 Lua 5.1 反编译器:从字节码到可读源码的完整实战指南
  • 【限时解密】Tidyverse 2.0面试官绝不会明说的3个底层机制:AST重写、tidy eval v2迁移、lifecycle::deprecate_warn()触发条件
  • 如何彻底掌控你的RimWorld开局:EdB Prepare Carefully模组完全指南
  • 购物额度换的微信立减金用不掉?米米收帮你变现金 - 米米收
  • RL78系列BootLoader例程详解
  • 别再只盯着模型精度了!用Permutation Importance给你的XGBoost/LightGBM模型做个‘特征体检’
  • 如何用3个步骤解决桌游卡牌批量制作的世纪难题?
  • AI模型在文档表格解析中的典型问题与优化方案
  • 别再用Excel记双色球了!用Python requests+BeautifulSoup自动抓取并存入MySQL数据库(附完整代码)
  • 终极Mac清理神器:Pearcleaner让应用卸载不留痕迹的完整指南
  • 豆包视频怎么去水印?2026 豆包视频去水印方法 + 豆包视频去水印官方规定解读 - 科技热点发布
  • 无监督奖励机制在NLP语言模型训练中的应用与优化