“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!”

“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!”

1.简介

  1. 目标:基于pytorchtransformers做中文领域的nlp开箱即用的训练框架,提供全套的训练、微调模型(包括大模型、文本转向量、文本生成、多模态等模型)的解决方案;
  2. 数据
    • 从开源社区,整理了海量的训练数据,帮助用户可以快速上手;
    • 同时也开放训练数据模版,可以快速处理垂直领域数据;
    • 结合多线程、内存映射等更高效的数据处理方式,即使需要处理百GB规模的数据,也是轻而易举;
  3. 流程:每一个项目有完整的模型训练步骤,如:数据清洗、数据处理、模型构建、模型训练、模型部署、模型图解;
  4. 模型:当前已经支持gpt2clipgpt-neoxdollyllamachatglm-6bVisionEncoderDecoderModel等多模态大模型;
  5. 多卡串联
    :当前,多数的大模型的尺寸已经远远大于单个消费级显卡的显存,需要将多个显卡串联,才能训练大模型、才能部署大模型。因此对部分模型结构进行修改,实现了训练时推理时
    的多卡串联功能。
  • 模型训练
中文名称文件夹名称数据数据清洗大模型模型部署图解
中文文本分类chinese_classifier
中文gpt2chinese_gpt2
中文clipchinese_clip
图像生成中文文本VisionEncoderDecoderModel
vit核心源码介绍vit model
Thu-ChatGlm-6b(v1)simple_thu_chatglm6b
🌟chatglm-v2-6b🎉chatglm_v2_6b_lora
中文dolly_v2_3bdolly_v2_3b
中文llamachinese_llama
中文bloomchinese_bloom
中文falcon(注意:falcon模型和bloom结构类似)chinese_bloom
中文预训练代码model_clm
百川大模型model_baichuan
模型修剪✂️model_modify
llama2 流水线并行pipeline

2.thu-chatglm-6b模型教程

  1. 本文件夹📁只能进行单机单卡训练,如果想要使用单机多卡,请查看文件夹📁Chatglm6b_ModelParallel_ptuning。
介绍路径状态
使用lora训练chatglm6b就是本文件夹
使用ptuning-v2模型并行训练chatglm6bhttps://github.com/yuanzhoulvpi2017/zero_nlp/tree/main/Chatglm6b_ModelParallel_ptuning

在文件code02_训练模型全部流程.ipynbcell-5代码的前面,创建一个新的cell,然后把下面的代码放到这个cell里面


q1 = '''您叫什么名字?
您是谁?
您叫什么名字?这个问题的答案可能会提示出您的名字。
您叫这个名字吗?
您有几个名字?
您最喜欢的名字是什么?
您的名字听起来很好听。
您的名字和某个历史人物有关吗?
您的名字和某个神话传说有关吗?
您的名字和某个地方有关吗?
您的名字和某个运动队有关吗?
您的名字和某个电影或电视剧有关吗?
您的名字和某个作家有关吗?
您的名字和某个动漫角色有关吗?
您的名字和某个节日有关吗?
您的名字和某个动物有关吗?
您的名字和某个历史时期有关吗?
您的名字和某个地理区域有关吗?
您的名字和某个物品有关吗?比如,如果您的名字和铅笔有关,就可以问“您叫什么名字?您是不是用铅笔的人?”
您的名字和某个梦想或目标有关吗?
您的名字和某个文化或传统有关吗?
您的名字和某个电影或电视节目的情节有关吗?
您的名字和某个流行歌手或演员有关吗?
您的名字和某个体育运动员有关吗?
您的名字和某个国际组织有关吗?
您的名字和某个地方的气候或环境有关吗?比如,如果您的名字和春天有关,就可以问“您叫什么名字?春天是不是一种温暖的季节?”
您的名字和某个电影或电视节目的主题有关吗?
您的名字和某个电视节目或电影的角色有关吗?
您的名字和某个歌曲或音乐有关吗?
您叫什么名字?
谁创造了你
'''
q1 = q1.split('\n')
a1 = ["我是良睦路程序员开发的一个人工智能助手", "我是良睦路程序员再2023年开发的AI人工智能助手"]
import randomtarget_len__ = 6000d1 = pd.DataFrame({'instruction':[random.choice(q1) for i in range(target_len__)]}).pipe(lambda x: x.assign(**{'input':'','output':[random.choice(a1) for i in range(target_len__)]})
)
d1
alldata = d1.copy()

注意:

  1. 如果想要覆盖模型老知识,你数据需要重复很多次才行~
  2. 文件不要搞错了,使用我最新的代码文件

只是对transofrmers包的Trainer类做了修改,对modeling_chatglm.py代码也做了修改。
这么做,可以让你在拥有22G显存的情况下,可以训练thu-chatglm-6b模型。

那么,基于Trainer的丰富方法,你可以做很多事情。而且使用peft包https://github.com/huggingface/peft的lora算法,让你在一个消费级别的显卡上,就可以训练thu-chatglm-6b模型。

  • 安装

上面是文件工程,这里开始说安装包,直接使用pip安装

pip install protobuf==3.20.0 transformers icetk cpm_kernels peft

就这么简单,不需要安装别的东西了

  • 训练部分

  • 在最新的版本中,只需要查看code02_训练模型全部流程.ipynb文件就行了

  • 推理部分

  1. 推理部分,直接看infer.ipynb代码
  2. 能到这里,也是恭喜你,微调模型已经成功了。这个时候,在这个文件夹下,肯定有一个文件夹叫test003(就是上面output_dir="test003"对应的文件夹)
  3. 在这个文件夹下,你肯定可以看到很多checkpoint-xxx,选择一个你喜欢的(当然,肯定是最好选择最新的)。

3.chatglm_v2_6b_lora

添加了上面的参数,确实可以进行模型并行,但是,这是在chatglm模型代码没有bug的情况下,目前已经定位到bug,并且修复了bug,我也提交PR给chatglm团队,可以点击这个链接查看https://huggingface.co/THUDM/chatglm2-6b/discussions/54#64b542b05c1ffb087056001c

考虑到他们团队效率问题,如果他们还没有修改这个bug,那你们可以自己修改,主要是这么做:

modeling_chatglm.py的第955行代码附近(也就是modeling_chatglm.py/ChatGLMForConditionalGeneration.forwardloss部分):

原始代码:

loss = Noneif labels is not None:lm_logits = lm_logits.to(torch.float32)# Shift so that tokens < n predict nshift_logits = lm_logits[..., :-1, :].contiguous()   shift_labels = labels[..., 1:].contiguous() #<<<------------------看这里# Flatten the tokensloss_fct = CrossEntropyLoss(ignore_index=-100)loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))lm_logits = lm_logits.to(hidden_states.dtype)loss = loss.to(hidden_states.dtype)if not return_dict:output = (lm_logits,) + transformer_outputs[1:]return ((loss,) + output) if loss is not None else outputreturn CausalLMOutputWithPast(loss=loss,logits=lm_logits,past_key_values=transformer_outputs.past_key_values,hidden_states=transformer_outputs.hidden_states,attentions=transformer_outputs.attentions,)

修改为:

loss = Noneif labels is not None:lm_logits = lm_logits.to(torch.float32)# Shift so that tokens < n predict nshift_logits = lm_logits[..., :-1, :].contiguous()shift_labels = labels[..., 1:].contiguous().to(shift_logits.device) #<<<--------------------看这里# Flatten the tokensloss_fct = CrossEntropyLoss(ignore_index=-100)loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))lm_logits = lm_logits.to(hidden_states.dtype)loss = loss.to(hidden_states.dtype)if not return_dict:output = (lm_logits,) + transformer_outputs[1:]return ((loss,) + output) if loss is not None else outputreturn CausalLMOutputWithPast(loss=loss,logits=lm_logits,past_key_values=transformer_outputs.past_key_values,hidden_states=transformer_outputs.hidden_states,attentions=transformer_outputs.attentions,)

是的,就修改那一行即可

然后就可以正常跑起来了~

  • 下载数据集

ADGEN 数据集任务为根据输入(content)生成一段广告词(summary)。

{"content": "类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖*衣款式#抽绳","summary": "这件衬衫的款式非常的宽松,利落的线条可以很好的隐藏身材上的小缺点,穿在身上有着很好的显瘦效果。领口装饰了一个可爱的抽绳,漂亮的绳结展现出了十足的个性,配合时尚的泡泡袖型,尽显女性甜美可爱的气息。"
}

从 Google Drive
或者 Tsinghua Cloud 下载处理好的 ADGEN
数据集,将解压后的 AdvertiseGen 目录放到本目录下。

  • 硬件要求
  1. 有个3090显卡即可(24G显存左右)
  2. 在下面这个参数下,显存只需要14G
    --max_source_length 64 \--max_target_length 128 \--per_device_train_batch_size 1 \--per_device_eval_batch_size 1 \ --lora_r 32
  • 训练脚本
  1. 使用vscode调试,就在.vscode/launch.json里面;
  2. 直接使用sh,sh train.sh
  • 推理
  1. 使用文件:infer_lora.ipynb
  • 使用lora推理
from transformers import AutoTokenizer, AutoModel
from peft import PeftModel, PeftConfig
import torch
import osos.environ['CUDA_VISIBLE_DEVICES'] = '1'#原始的模型路径
model_name_or_path = "/media/yuanz/新加卷/训练代码/chatglm6b_v2_0716/chatglm2-6b_model"#训练后的lora保存的路径
peft_model_id = "output/adgen-chatglm2-6b-lora_version/checkpoint-880"tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_name_or_path, trust_remote_code=True, device_map='auto',torch_dtype=torch.bfloat16)  # .half().cuda()model = PeftModel.from_pretrained(model, peft_model_id)
model = model.eval()response, history = model.chat(tokenizer, "类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞",history=[])
print(response)
  • 血的教训
  1. 一定要从huggingface上把chatglm-v2-6b的所有文件都下载下来,放在一个文件夹下;这样即使他更新了,也不会影响到你。如果你不下载,你会很被动😒
  • 相关的BUG

很多人在跑多卡的时候,会遇到一些莫名其妙的错误,建议您按照下面两个步骤进行排查:

  1. 一定要看我上面折叠的那一块东西,就是🚨注意部分。
  2. 检查transformers的版本,如果太低,就更新一下,建议更新:pip install transformers -U

4.中文的dolly_v2_3b模型

  • 训练中文的dolly_v2_3b模型

    1. dolly_v2_3b模型本质上就是使用的gpt_neox模型框架,可以商用,而且也都出来很多年了。
    2. 当前有很多人基于llamagptjchatglm-6b等模型,做了很多微调,有些也都做过了,有些不能商用,有些还要申请,实在是太可惜了,太麻烦了。
    3. 既然dolly_v2_3b可以商用,那我们就主打一个随意,稍微动动手就可以训练一个属于我们的模型。
    4. 本仓库用到的代码,来源于databrickslabs/dolly,对代码做了部分调整和融合。反正就是复制粘贴懂得都懂
    5. 模型叫什么名字:小黑子 😛,已将模型放在https://huggingface.co/yuanzhoulvpi/xiaoheizi-3b
    1. 🎯 支持多卡模型并行:也不知道databrickslabs/dolly为啥要使用gpt_neox模型,这个模型transformers对他支持的其实一般,于是我把代码魔改了一部分,增加了多卡并行计算功能(主要是是模型并行).
    2. 🥱 虽然代码是从databrickslabs/dolly复制的,但是简化了很多不必要的代码,更简单一点,我不喜欢复杂的代码,越简单越好。
    3. 😵 支持bp16:我原本的打算是说支持fp16的,但是发现fp16怎么搞都不行,但是bp16倒是可以。

    下一步优化方向

    1. 😆 添加lora等微调训练代码,这个简单,等后面都训练好了,我添加一下。
  • 模型训练情况

    1. 训练数据:BelleGroup/train_1M_CN
    2. 训练时间:280小时左右
    3. 训练设备:4台3090

  • 更多
    1. 当前的模型参数是3b,但是当你把整个流程跑通之后,可以很轻松的将3b模型换成7b模型或者更大的gpt_neox模型。而你只需要将硬件进行提升即可,无需调整代码~
    2. 当前的3b模型是否满足你的需求还不确定,后面你可以试一试。(当前还没发布)
    3. 到底是大模型好还是小模型好,可以看看这句话:吴恩达:有多少应用程序需要用到像GPT-4这样的最大型模型,而不是云提供商提供的更小(更便宜)的模型,甚至是本地托管的模型(比如运行在桌面上的gpt4all)还有待观察
    4. 对于个人或者小企业,强调的的就是在垂直领域快速迭代,希望3b模型可以帮助到你!

5.chinese_bloom

  1. 支持对falcon模型做sft~

  2. ✅ 基于stanford_alpaca项目,使用sft格式数据对bloomfalcon模型微调;

  3. ✅ 支持deepspeed-zero2deepspeed-zero3

  4. ✅ 支持自定义数据,支持大数据训练;

  5. ✅ 得益于bloom本身的能力,微调后的模型支持中文英文代码法语西班牙语等;

  6. ✅ 微调后的模型,中文能力显著提升;

  7. ✅ 支持不同尺寸bloom模型,如560m3b7b13b

  8. ✅ 支持falcon模型,如https://huggingface.co/tiiuae/falcon-7b;

  • 体验
  • bloom-560m_chat: 想要体验一个轻量的,那就直接体验5.6亿参数https://huggingface.co/yuanzhoulvpi/chinese_bloom_560m
  • bloom-7b_chat: 想要体验一个更大的,那就可以试一试70亿参数https://huggingface.co/yuanzhoulvpi/chinese_bloom_7b_chat
  1. 🎉 在hugginface上部署了一个cpu版本的(有点慢,毕竟是🆓)https://huggingface.co/spaces/yuanzhoulvpi/chinese_bloom_560_chat
  • 模型
  1. bloom模型支持中文英文代码法语西班牙语。具体的训练数据的语言占比如下👇。

  2. bloom-3b: https://huggingface.co/bigscience/bloom-3b

  3. bloom-系列模型: https://huggingface.co/bigscience

  • 数据
  1. 数据来源于BelleGroup,主要是用到这几个数据集:['BelleGroup/generated_chat_0.4M', 'BelleGroup/school_math_0.25M', 'BelleGroup/train_2M_CN', 'BelleGroup/train_1M_CN', 'BelleGroup/train_0.5M_CN', 'BelleGroup/multiturn_chat_0.8M']
  2. 可以基于这些数据样式,制作自己的数据,并训练;
  • 步骤

  • 数据部分

    1. 运行data_proj/process_data.ipynb代码;或者模仿结果,制作自己的数据集;
    2. 运行结束之后,有一个文件夹data_proj/opendata。文件夹下有若干个json格式的文件。
  • 运行模型

  1. 基础运行策略
sh base_run.sh
  1. deepspeed运行策略
sh ds_all.sh
  • 推理代码
  1. infer.ipynb文件
  2. gradio交互界面:https://huggingface.co/spaces/yuanzhoulvpi/chinese_bloom_560_chat 因为是使用的huggingface的免费的cpu版本,所以推理速度比较慢。
  • 效果
    不管是写代码还是写文案,bloom-7b在中文领域有极大的潜力

  • 体验
    1. chinese_bloom_560m模型,可以在这里体验https://huggingface.co/spaces/yuanzhoulvpi/chinese_bloom_560_chat
    2. chinese_bloom_7b模型,可以在这里体验http://101.68.79.42:7861

项目链接:https://github.com/yuanzhoulvpi2017/zero_nlp

更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/109611.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

URI和URL和URN区别

URI、URL 和 URN 是一系列从不同角度来看待资源标识和定位的概念。虽然它们有一些重叠&#xff0c;但每个概念都强调了不同的方面。 URI&#xff08;Uniform Resource Identifier&#xff09;&#xff1a;URI 是一个通用的术语&#xff0c;用于标识和定位资源。它是一个抽象的概…

DockerCompose介绍与使用

DockerCompose介绍与使用 1、DockerCompose介绍 DockerCompose用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose可以使用 YAML 文件来配置应用程序需要的所有服务。一个使用Docker容器的应用&#xff0c;通常由多个容器组成&#xff0c;使用Docker Compose不再需要…

在腾讯云服务器OpenCLoudOS系统中安装Jenkins(有图详解)

Jenkins介绍 Jenkins是一个开源软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 将项目代码的svn地址配置在Jenkins&#xff0c;就可以直接在Je…

原生web实现不固定列数的表格、随机列、document、querySelector、forEach、hasOwnProperty、call、includes

文章目录 效果图公共样式第一种解决方案(不推荐)第二种解决方案(强烈推荐) 效果图 公共样式 .d_f {display: flex; }.flex_1 {flex: 1; }.jc_sb {justify-content: space-between; }.ai_c {align-items: center; }.bc_ccc {background-color: #cccccc; }/* ------------paddin…

Docker容器中的Postgresql备份脚本异常解决办法

本文基于K8S中Docker容器对postgres数据库进行备份的操作&#xff0c;编写好脚本后&#xff0c;手动执行脚本是正常的&#xff0c;但是crontab定时实行却报错&#xff0c;报错信息为kubectl command not found&#xff0c;提示没有找到kubectl指令。 本文主要介绍对该报错信息…

m4s格式转换mp4

先安装 ffmpeg&#xff0c;具体从官网可以查到&#xff0c;https://ffmpeg.org&#xff0c;按流程走。 转换代码如下&#xff0c;可以任意选择格式导出 import subprocess import osdef merge_audio_video(input_audio_path, input_video_path, output_mp4_path):# 构建 FFmpe…

大数据处理平台的架构演进:从批处理到实时流处理

文章目录 批处理架构&#xff1a;实时流处理架构&#xff1a;混合架构&#xff1a; &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;大数据系列 ✨文章内容&#xff1a;大数…

CTF-XXE(持续更新,欢迎分享更多相关知识点的题目)

知识 实例 BUU [PHP]XXE 进来看到 然后一起看 Write BUU XXE COURSE 1 进来看到 一起看 write NSS [NCTF2019]Fake XML cookbook 反正是XXE 直接整 write [NCTF 2019]True XML cookbook 不整花里胡哨&#xff0c;解题在最下面 write 与博主不同&#xff0c;我通过…

对标 GPT-4?科大讯飞刘庆峰:华为GPU技术能力已与英伟达持平

科大讯飞创始人、董事长刘庆峰在亚布力中国企业家论坛第十九届夏季高峰会上透露了关于自家大模型进展的一些新内容。刘庆峰认为&#xff0c;中国在人工智能领域的算法并没有问题&#xff0c;但是算力方面似乎一直被英伟达所限制。 以往的“百模大战”中&#xff0c;训练大型模型…

国产当自强!深圳触觉智能「全国产化主板」大盘点(二)

上期我们给大家盘点了RK3568国产主板&#xff0c;本期为大家盘点的是深圳触觉智能RK3566系列产品&#xff0c;话不多说&#xff0c;上干货&#xff01; RK3566系列 深圳触觉智能 IDO-SOM3566 核心板 IDO-SOM3566-V1采用 Rockchip 新一代 64 位处理器 RK3566&#xff08;Q…

计算机毕设 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 今天学长向大家介绍一个机器视觉的毕设项目&#xff0c;二维码 / 条形码检测与识别 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 1 二维码检测 物体检…

【计算机基础】一文搞清楚什么是线程/进程/协程

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

SocketTools.NET 11.0.2148.1554 Crack

添加新功能以简化使用 URL 建立 TCP 连接的过程。 2023 年 8 月 23 日 - 12:35新版本 特征 添加了“HttpGetTextEx”函数&#xff0c;该函数在返回字符串缓冲区中的文本内容时提供附加选项。添加了对“FileTransfer”.NET 类和 ActiveX 控件中的“GetText”和“PutText”方法的…

算法leetcode|73. 矩阵置零(rust重拳出击)

文章目录 73. 矩阵置零&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a;进阶&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 73. 矩阵置零&#xff1a; 给定一个 m x n 的矩…

Springboot+mybatis-plus+dynamic-datasource+Druid 多数据源 分布式事务

Springbootmybatis-plusdynamic-datasourceDruid 多数据源事务&#xff0c;分布式事务 文章目录 Springbootmybatis-plusdynamic-datasourceDruid 多数据源事务&#xff0c;分布式事务0.前言1. 基础介绍ConnectionFactoryAbstractRoutingDataSource 动态路由数据源的抽象类 Dyn…

C++中数组作为参数进行传递方法

文章目录 基础&#xff1a;数组作为函数形参示例&#xff1a;1、一维数组的传递&#xff08;1&#xff09;直接传递&#xff08;2&#xff09;指针传递&#xff08;3&#xff09;引用传递 2、二维数组的传递&#xff08;1&#xff09;直接传递&#xff08;2&#xff09;指针传递…

华为云Stack的学习(二)

三、华为云Stack产品组件 FunsionSphere CPS 提供云平台的基础管理和业务资源&#xff08;包括计算资源和存储资源&#xff09;。采用物理服务器方式部署在管理节点。可以做集群的配置&#xff0c;扩容和运维管理。 Service OM 提供云服务的运维能力&#xff0c;采用虚拟化方…

【Java架构-包管理工具】-Maven进阶(二)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具&#xff0c;在此咱们由浅入深&#xff0c;分三篇文章&#xff08;Maven基础、Maven进阶、私服搭建&#xff09;来深入学习Maven&#xff0c;此篇为开篇主要介绍Maven进阶知识&#xff0c;包含坐标、依赖、仓库、生…

网络地址转换NAT-动态NAT的使用范围和配置-思科EI,华为数通

网络地址转换NAT-动态NAT的使用范围和配置 什么是动态NAT&#xff1f; 使用公有地址池&#xff0c;并以先到先得的原则分配这些地址。当具有私有 IP 地址的主机请求访问 Internet 时&#xff0c;动态 NAT 从地址池中选择一个未被其它主机占用的 IP 地址一对一的转化。当数据会话…

Go几种读取配置文件的方式

比较有名的方案有 使用viper管理配置[1] 支持多种配置文件格式&#xff0c;包括 JSON,TOML,YAML,HECL,envfile&#xff0c;甚至还包括Java properties 支持为配置项设置默认值 可以通过命令行参数覆盖指定的配置项 支持参数别名 viper[2]按照这个优先级&#xff08;从高到低&am…