飞桨 (PaddlePaddle) 是百度自研的深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体,对标国外的 Pytorch 和 Tensorflow。
由于飞桨各个模块组件更偏底层,为了方便 AI 学习者和开发者在线使用、训练、部署各种模型,基于飞桨平台百度又推出了 AI Studio(https://aistudio.baidu.com/index)。AI Studio 是一个集教学资源、算力、开发工具和社区生态于一体的在线 AI 模型开发平台,对标国外的 HuggingFace,其实国内也有类似的社区平台 modelscope(https://www.modelscope.cn/home)。顺带一提,百度还有一个历史悠久的千帆平台,也可以满足大模型在线训练和使用。
进到 AI Studio 首页之后,最重要的是要点击右上角的小电脑图标,它显示了你拥有的算力信息,选择预训练模型时,也要注意算力和 Paddle 版本的对应关系,比如选用 Tesla V100 显卡,算力只有 7.0,支持不了最新版 Paddle 的一些底层函数,建议选择 A / H100 以上的显卡。
数据准备 ERNIE 支持 alpaca 和 erniekit 两种数据集格式。alpaca 格式是 HuggingFace 社区流行的一种对话式监督数据格式,采用 JSON 行格式,强调 instruction(指令)+ input + output。ERNIEKit 格式是百度 PaddlePaddle 社区用于训练 ERNIE 模型的格式,更注重内部结构化字段。
本次微调我们使用 erniekit 格式,源数据来自百度 2025LIC 赛事的示例数据(https://aistudio.baidu.com/datasetdetail/345031),经过清洗之后,格式如下图所示。
数据准备好之后,我们就可以开始下一步微调(finetune)大模型了,我们这次选用的预训练模型是文心大模型 4.5 开源系列中最小的大模型 ERNIE-4.5-0.3B,总大小 700M 左右。
如何微调一个模型 首先,安装适配 CUDA 12.6 的 PaddlePaddle GPU 版本(3.1.0),并使用中国镜像源以加速下载。如果你还不确定你电脑的 CUDA 版本,可以使用nvidia-smi查看。
!python -m pip install paddlepaddle-gpu==3.1.0-i https://www.paddlepaddle.org.cn/packages/stable/cu126/ # 检验是否安装成功 !python -c"import paddle;paddle.utils.run_check()"ERNIE 是百度在 PaddlePaddle 上开发的一个中文为主的预训练语言模型,文心一言后面的大模型就是 ERNIE。
!git clone https://github.com/PaddlePaddle/ERNIE.git %cd ERNIE-develop !python -m pip install -r requirements/gpu/requirements.txt !python -m pip install -e .FastDeploy 是百度开发的一个模型部署工具,可以快速启动一个带有大模型后端的 Web 服务。
!python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/stable/fastdeploy-gpu-80_90/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple接着需要下载 ERNIE-4.5-0.3B 模型。这里需要额外安装aistudio-sdkPython 包,这个下载服务并未集成在 ERNIE 的安装包中,这一点确实有些令人费解。
!pip install --upgrade aistudio-sdk # 使用aistudio cli下载模型(推荐) !aistudio download --model PaddlePaddle/ERNIE-4.5-0.3B-Paddle --local_dir baidu/ERNIE-4.5-0.3B-Paddle修改配置文件,使用官方的模版就行,改一下参数train_dataset_path和eval_dataset_path,其他保持不变。
### data train_dataset_type:"erniekit" eval_dataset_type:"erniekit" train_dataset_path:"./examples/data/finetune_train_dataset.jsonl" train_dataset_prob:"1.0" eval_dataset_path:"./examples/data/finetune_eval_dataset.jsonl" eval_dataset_prob:"1.0" max_seq_len:8192 num_samples_each_epoch:6000000 ### model model_name_or_path:baidu/ERNIE-4.5-0.3B-Paddle fine_tuning oRA fuse_rope:True use_sparse_head_and_loss_fn:True ### finetuning # base stage:SFT seed:23 do_train:True do_eval:True distributed_dataloader:False dataloader_num_workers:1 batch_size:1 num_train_epochs:1 max_steps:100 max_evaluate_steps:10000 eval_steps:10000 evaluation_strategy:steps save_steps:10000000 save_total_limit:5 save_strategy:steps logging_steps:1 release_grads:True gradient_accumulation_steps:8 logging_dir:./vdl_log output_dir:./output disable_tqdm:True # train warmup_steps:20 learning_rate:1.0e-5 lr_scheduler_type:cosine min_lr:1.0e-6 layerwise_lr_decay_bound:1.0 # optimizer weight_decay:0.1 adam_epsilon:1.0e-8 adam_beta1:0.9 adam_beta2:0.95 offload_optim:True # performance tensor_parallel_degree:1 pipeline_parallel_degree:1 sharding_parallel_degree:1 sharding:stage1 sequence_parallel:True pipeline_parallel_config:enable_delay_scale_lossenable_release_gradsdisable_partial_send_recv recompute:False recompute_use_reentrant:True compute_type:bf16 fp16_opt_level:O2 disable_ckpt_quant:True amp_master_grad:True amp_custom_white_list: -lookup_table -lookup_table_v2 -flash_attn -matmul -matmul_v2 -fused_gemm_epilogue amp_custom_black_list: -reduce_sum -softmax_with_cross_entropy -c_softmax_with_cross_entropy -elementwise_div -sin -cos unified_checkpoint:True unified_checkpoint_config:async_save微调的方法有很多,这里我们使用 LoRA(低秩适配),主要因为这次训练使用的训练集比较少。
实际结果跑下来,一共 2629 条训练数据,花了大概 3 分钟就训练完了
!erniekit train examples/configs/ERNIE-4.5-0.3B/sft/run_sft_lora_8k.yaml !erniekit export examples/configs/ERNIE-4.5-0.3B/run_export.yaml lora=True模型微调并导出后,即可进行部署。
!erniekit server examples/configs/ERNIE-4.5-0.3B/run_chat.yaml !erniekit chat examples/configs/ERNIE-4.5-0.3B/run_chat.yaml微调效果展示 微调前,模型在回答医疗相关问题时显得有些冗长。经过训练后,面对同样的问题,模型的回答风格变得更加简洁干脆。当然,也有一些问题的回答仍有待提升。
使用体验 在 AI Studio 平台进行开发时,建议选择在线VS Code开发模式 。如果使用在线 Notebook,可能会频繁遇到文件找不到等服务不稳定的情况。
尽管平台提供了在线学习资源,但许多教程内容过于简化,甚至有些项目不兼容 macOS 系统(例如 PP - ASR),部分视频资源的音量也忽大忽小,整体使用体验不尽如人意。
不过,抛开这些产品体验,具体函数的执行效果上,还是不错的。百度似乎仍在坚持 “技术狂奔,产品拉胯” 的发展路径。