【深度学习:MPT-30B】提高开源基础模型的标准

news2024/11/25 0:41:54

在这里插入图片描述

【深度学习:MPT-30B】提高开源基础模型的标准

    • MPT-30B家族
      • MPT-30B (Base)
      • MPT-30B-Instruct
      • MPT-30B-Chat
      • 使用 MosaicML Inference 部署 MPT-30B 模型
      • 通过 MosaicML 培训定制 MPT-30B
        • LLM Foundry
      • 下一步是什么?
    • 附录
      • 致谢
      • 数据
        • MPT-30B 8k 上下文窗口微调数据
        • MPT-30B-指令微调数据
        • MPT-30B-聊天微调数据
    • 评估
      • Falcon 代码评估免责声明

隆重推出 MPT-30B,它是我们开源模型基础系列中功能更强大的新成员,在 NVIDIA H100 Tensor Core GPU 上使用 8k 上下文长度进行训练。

在这里尝试 HuggingFace 上的 MPT-30B-Chat!

自 5 月份推出 MPT-7B 以来,ML 社区热切地接受开源 MosaicML 基础系列模型。 MPT-7B 基础、-Instruct、-Chat 和 -StoryWriter 模型的总下载量已超过 300 万次!

我们对社区使用 MPT-7B 构建的内容感到不知所措。强调几个:LLaVA-MPT 为 MPT 添加了视觉理解,GGML 在 Apple Silicon 和 CPU 上优化 MPT,GPT4All 允许您使用 MPT 作为后端模型在笔记本电脑上运行类似 GPT4 的聊天机器人。

今天,我们很高兴通过 MPT-30B 扩展 MosaicML 基础系列,MPT-30B 是一种获得商业用途许可的新型开源模型,其功能明显比 MPT-7B 更强大,并且性能优于原始的 GPT-3。此外,我们还发布了两个经过微调的变体:MPT-30B-Instruct 和 MPT-30B-Chat,它们构建在 MPT-30B 之上,分别擅长单轮指令跟踪和多轮对话。

所有 MPT-30B 模型都具有与其他 LLM 不同的特殊功能,包括训练时的 8k 令牌上下文窗口、通过 ALiBi 支持更长的上下文,以及通过 FlashAttention 实现高效的推理 + 训练性能。由于其预训练数据混合,MPT-30B 系列还具有强大的编码能力。该模型已扩展到 NVIDIA H100 GPU 上的 8k 上下文窗口,使其(据我们所知)成为第一个在 H100 GPU 上训练的法学硕士,现在可供 MosaicML 客户使用!

MPT-30B 的尺寸也经过专门选择,以便轻松部署在单个 GPU 上 - 1x NVIDIA A100-80GB(16 位精度)或 1x NVIDIA A100-40GB(8 位精度)。其他类似的 LLM(例如 Falcon-40B)具有更大的参数数量,并且无法在单个数据中心 GPU 上提供服务(目前);这需要 2 个以上的 GPU,从而增加了最低推理系统成本。

如果您想开始在生产中使用 MPT-30B,可以通过多种方法使用 MosaicML 平台对其进行自定义和部署。

  • MosaicML 培训。 通过微调、特定领域预训练或从头开始训练,使用您的私人数据定制 MPT-30B。您始终拥有最终模型权重,并且您的数据永远不会存储在我们的平台上。定价按 GPU 分钟计算。

  • MosaicML 推理。 使用我们的 Python API 与我们托管的 MPT-30B-Instruct(和 MPT-7B-Instruct)端点进行对话,并按每 1K 代币的标准定价。

我们很高兴看到我们的社区和客户接下来使用 MPT-30B 构建什么。要了解有关模型以及如何使用 MosaicML 平台自定义模型的更多信息,请继续阅读!

MPT-30B家族

Mosaic Pretrained Transformer (MPT) 模型是 GPT 风格的仅解码器变压器,具有多项改进,包括更高的速度、更高的稳定性和更长的上下文长度。得益于这些改进,客户可以有效地训练 MPT 模型 (40-60% MFU),而不会偏离损失峰值,并且可以通过标准 HuggingFace 管道和 FasterTransformer 为 MPT 模型提供服务。

MPT-30B (Base)

MPT-30B是商业Apache 2.0许可的开源基础模型,其质量超过了GPT-3(来自原始论文),并且与LLaMa-30B和Falcon-40B等其他开源模型具有竞争力。

使用我们公开提供的 LLM Foundry 代码库,我们在 2 个月的时间内训练了 MPT-30B,随着硬件可用性的变化在多个不同的 NVIDIA A100 集群之间进行转换,平均 MFU >46%。 6 月中旬,在我们从 CoreWeave 收到第一批 256 个 NVIDIA H100 GPU 后,我们将 MPT-30B 无缝移动到新集群,以恢复平均 MFU >35% 的 H100 训练。据我们所知,MPT-30B 是第一个在 H100 GPU 上(部分)训练的公共模型!我们发现每个 GPU 的吞吐量增加了 2.44 倍,并且我们预计随着 H100 软件的成熟,这种加速也会增加。

如前所述,MPT-30B 使用 8k 个 token 的长上下文窗口进行训练(LLaMa 和 Falcon 为 2k),并且可以通过 ALiBi 或微调处理任意长的上下文窗口。为了有效地在 MPT-30B 中构建 8k 支持,我们首先使用 2k 令牌长的序列对 1T 令牌进行预训练,并使用 8k 令牌长的序列继续训练额外的 50B 令牌。

MPT-30B 预训练使用的数据组合与 MPT-7B 非常相似(有关详细信息,请参阅 MPT-7B 博客文章)。对于 2k 上下文窗口预训练,我们使用来自与 MPT-7B 模型相同的 10 个数据子集的 1T 标记(表 1),但比例略有不同。

在这里插入图片描述

表 1:MPT-30B 预训练的数据组合。我们从 10 个不同的开源文本语料库中收集了 1T 个预训练数据 token。我们使用 EleutherAI GPT-NeoX-20B 分词器对文本进行分词,并根据上述比率进行采样。

对于 8k 上下文窗口微调,我们从用于 2k 上下文窗口预训练的相同 10 个子集创建了两个数据混合(图 1)。第一个 8k 微调组合与 2k 预训练组合类似,但我们将代码的相对比例增加了 2.5 倍。为了创建第二个 8k 微调组合(我们将其称为“长序列”组合),我们从 10 个预训练数据子集中提取了长度≥ 4096 个标记的所有序列。然后我们对这两种数据混合的组合进行微调。有关 8k 上下文窗口微调数据的更多详细信息,请参阅附录。

在这里插入图片描述

图 1:8k 上下文窗口微调的数据子集分布。对于 8k 上下文窗口微调,我们采用每个数据子集并提取具有 ≥ 4096 个标记的所有样本,以创建新的“长序列”数据混合。然后,我们对长序列和原始数据混合的组合进行微调。

图2中,我们测量了这六大核心能力,发现MPT-30B在各个方面都比MPT-7B有显着提升。在图 3 中,我们对类似大小的 MPT、LLaMa 和 Falcon 模型进行了相同的比较。总体而言,我们发现不同系列的 7B 型号非常相似。但 LLaMa-30B 和 Falcon-40B 的文本能力略高于 MPT-30B,这与它们较大的预训练预算是一致的:

  • MPT-30B FLOPs ~= 6 * 30e9 [参数] * 1.05e12 [令牌] = 1.89e23 FLOPs
  • LLaMa-30B FLOPs ~= 6 * 32.5e9 [params] * 1.4e12 [tokens] = 2.73e23 FLOPs (多1.44倍)
  • Falcon-40B FLOPs ~= 6 * 40e9 [参数] * 1e12 [令牌] = 2.40e23 FLOps (1.27 倍以上)

另一方面,我们发现 MPT-30B 在编程方面明显更好,这归功于其包含大量代码的预训练数据混合。我们在表 2 中进一步深入探讨了编程能力,其中我们将 MPT-30B、MPT-30B-Instruct 和 MPT-30B-Chat 的 HumanEval 分数与现有开源模型(包括为代码生成而设计的模型)进行了比较。我们发现 MPT-30B 模型的编程能力非常强,MPT-30B-Chat 的性能优于除 WizardCoder 之外的所有模型。我们希望这种文本和编程功能的结合将使 MPT-30B 模型成为社区的流行选择。

最后,在表 3 中,我们展示了 MPT-30B 如何在原始 GPT-3 论文中提供的较小评估指标集上优于 GPT-3。最初发布后大约 3 年,我们很自豪能够以更小的模型(GPT-3 参数的 17%)和显着更少的训练计算(GPT-3 FLOPs 的 60%)超越这个著名的基线。

如需更详细的评估数据,或者如果您想重现我们的结果,您可以在此处查看我们在 LLM Foundry 评估工具中使用的原始数据和脚本。请注意,我们仍在完善 HumanEval 方法,并将很快通过 Composer 和 LLM-Foundry 发布。

在这里插入图片描述

图 2 -MPT-7B 与 MPT-30B。我们的新 MPT-30B 型号比之前的 MPT-7B 型号有了显着改进

在这里插入图片描述

图 3 - MPT、LLaMa 与 Falcon 模型。左:比较具有 70 亿个参数的模型。右图:比较具有 30 到 400 亿个参数的模型。

在这里插入图片描述

表 2:MPT-30B 模型的零样本精度(pass @ 1)与 HumanEval(Python 编码问题语料库)上的通用和 GPT 蒸馏代码生成模型的比较。我们发现 MPT-30B 模型的性能大幅优于 LLaMa-30B 和 Falcon-40B,甚至优于许多专用编码模型(例如 StarCoder)。有关 Falcon-40B-Instruct 和 Falcon-40B 的免责声明,请参阅附录。外部来源:[1]、[2]、[3]、[4]、[5]

在这里插入图片描述

表 3:MPT-30B 与 GPT-3 在九项情境学习 (ICL) 任务上的零样本准确率。我们发现 MPT-30B 在九个指标中的六个指标上优于 GPT-3。 GPT-3 编号是从原始论文中复制的。

MPT-30B-Instruct

在这里插入图片描述

图 4:MPT-30B-Instruct 的示例指令和完成。

LLM 预训练教导模型根据提供的输入继续生成文本。但在实践中,用户希望法学硕士将输入视为要遵循的说明。指令微调是训练法学硕士遵循指令的过程。通过减少对巧妙提示工程的依赖,指令微调使法学硕士更容易获得、直观且立即可用。指令微调的进展是由 FLAN、P3、Alpaca 和 Dolly-15k 等开源数据集推动的。

我们创建了一个商业可用的、遵循指令的模型变体,称为 MPT-30B-Instruct。我们喜欢 Dolly 的商业许可,但我们想添加更多训练数据,因此我们使用 Anthropic 的 Helpful & Harmless 数据集的子集来增强 Dolly,将数据集大小加倍,同时保留商业 CC-By-SA-3.0 许可。然后,为了利用 MPT-30B 的 8,192 个 token 上下文长度,我们使用一些开源数据集进一步增强了数据:CompetitionMath、GradeSchoolMath、DialogSum、DuoRC、QASPER、QuALITY、SummScreen 和 Spider。

这个新的指令跟踪数据集是对我们用于训练 MPT-7B-Instruct 的数据集的改进,我们计划在不久的将来发布更新的 MPT-7B-Instruct-v2,使其与 MPT-30B 持平-指导。

MPT-30B-Chat

在这里插入图片描述

图 5:与 MPT-30B-Chat 的示例对话。

我们还创建了 MPT-30B-Chat,这是 MPT-30B 的对话版本。 MPT-30B-Chat 已经在大量聊天数据集上进行了微调,确保它为各种对话任务和应用程序做好了准备。组合微调数据集由 15.4 亿个 token 组成,模型训练了 6 个 epoch。数据集采用ChatML格式,提供了一种便捷、标准化的方式将系统消息传递给模型,有助于防止恶意提示注入。

MPT-30B-Chat 是一个研究工件,不适合商业用途,因此我们相应地使用了非商业 CC-By-NC-SA-4.0 许可证。我们发布它是因为它展示了 MPT-30B 与大型、高质量微调数据集结合时的强大功能。

尽管被训练为通用会话模型,MPT-30B-Chat 的编程能力也令人惊讶,在 HumanEval 上得分为 37.2%;这使得它凌驾于WizardCoder 之外的几乎所有开源模型之上。更多详情请参见上表2!

使用 MosaicML Inference 部署 MPT-30B 模型

随着 MosaicML 推理服务的推出,我们为 MPT 和 Llama 等开源模型提供低延迟、高吞吐量的托管。您可以使用我们的推理软件堆栈在 MosaicML 硬件或您自己的私有硬件上为这些模型提供服务。借助 MosaicML Inference,您可以向 MosaicML 托管的端点发送 MPT-7B-Instruct、MPT-30B-Instruct 以及其他开源文本生成和嵌入模型的 API 请求。这些端点按代币定价,并且比相同质量的同类 OpenAI API 便宜得多(见图 6)。 MosaicML Inference 是快速制作人工智能功能原型的绝佳选择。如果可以接受与第三方 API 共享数据,那么它也可能是一个合适的选择。

在这里插入图片描述

图 6:使用 MosaicML Inference 查询 MPT-30B 或 MPT-7B 模型比使用 OpenAI API 便宜 4 倍,并且质量相当。

通过 MosaicML 培训定制 MPT-30B

MPT-30B 具有开箱即用的强大生成能力。但为了在特定任务中获得最佳性能,我们建议对您的私人数据进行微调 MPT-30B。这个过程可以在几个小时内完成,只需几百美元。

对于更高级的用例,例如自定义语言、自定义域(例如 Replit 的代码生成模型)或自定义任务(长文档问答),您可以通过添加特定于域的预训练或从头开始训练自定义模型。

LLM Foundry

为了使自定义语言模型的训练尽可能简单,我们将可用于生产的训练代码开源为 LLM Foundry。这与我们的 NLP 团队用于构建 MPT-7B 和 MPT-30B 的代码库完全相同。该存储库使用 Composer、StreamingDataset 和 FSDP 在任意数量的 GPU 上训练任意大小的自定义模型。它还可以直接从您的私有对象存储流式传输数据,并轻松将模型导出到 HuggingFace、ONNX 或 FasterTransformer。 LLM Foundry 已经在云端 A100 和 H100 上经过了实际考验,我们正在快速增加对更多硬件选项的支持。

LLM Foundry 还包括用于根据标准评估指标和/或自定义数据评估模型的脚本。得益于我们的多 GPU 和 FSDP 支持,评估速度非常快 - 您可以在几分钟内离线测量评估指标,甚至可以在训练期间实时测量评估指标,从而为您提供有关模型性能的即时反馈。

无论您想要进行小型微调运行还是从头开始训练大型模型,LLM Foundry 都能高效处理所有这些工作负载。查看我们的公开训练表现和推理表现表!

作为 MosaicML 的客户,您还可以访问最新的配方,以确保您的训练运行稳定(无损失峰值)以及我们的 MCLI 编排软件。后者可以优雅地处理硬件故障和自动恢复,这样您就不会浪费计算或需要照顾您的运行。

下一步是什么?

准备好试用我们的新型 MPT-30B 系列了吗?请注意,我们的 Foundation 系列模型完全受 MosaicML 平台支持,为您提供工具和专业知识,以便您在选择的安全云上轻松高效地构建、定制和部署。在此处注册演示。请继续关注我们的基础系列中的更多型号!

附录

致谢

我们衷心感谢 OCI 的朋友,他们托管了我们用来完成 MPT-30B 初级训练阶段的 NVIDIA A100 GPU。

我们还要衷心感谢 CoreWeave 的朋友,他们托管了我们用来完成 MPT-30B 8k 上下文训练阶段的 NVIDIA H100 GPU,并在我们加快新 GPU 架构的速度时为我们提供了支持。

我们还衷心感谢 AI2 的朋友,他们在我们开发 MPT 系列模型时分享了非常宝贵的技术专业知识。

数据

MPT-30B 8k 上下文窗口微调数据

对于 8k 上下文窗口微调,我们采用每个数据子集并提取具有至少 4096 个标记的所有样本,以创建新的“长序列”数据混合。然后,我们对长序列和原始数据混合的组合进行微调。

在这里插入图片描述

MPT-30B-指令微调数据

在这里插入图片描述

MPT-30B-聊天微调数据

聊天微调数据。请注意,每个标记出现了 6 次。这些代币计数包括提示及其目标响应,因此并非所有 1.54B 代币都会产生损失。

在这里插入图片描述

评估

在这里插入图片描述
MPT-30B 与我们的代码评估套件上的开源模型。我们在代码提示的 HumanEval 数据集上测试每个模型,使用零样本评估和使用 pass@1 指标的基准测试,或者仅允许生成一个可能的代码延续时模型通过的测试用例的百分比。我们还提供引用的外部值来验证我们内部代码评估套件的可复制性,该套件将在 Composer/LLM-Foundry 的未来版本中作为开源发布。

Falcon 代码评估免责声明

在我们的评估框架中,Falcon-40B 和 Falcon-40B-Instruct 似乎是类似大小模型中的异常值。虽然我们的大多数自我评估分数与外部结果相匹配,但我们的 Falcon-40B-Instruct 通过率明显低于 WizardCoder 中报告的通过率。我们对所有模型使用相同的提示和 LLM Foundry 评估工具。如果您对如何更好地提示/使用Falcon-40B或更多我们可以参考的外部HumanEval分数有建议,请联系我们!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.12作业

程序代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h>//递归实现n! int n(int element) {if(0element)return 1;return element*n(element-1); }//递归实现0-n的和 int sub_sum(int element) {if(0element)return 0;return eleme…

Java的接口

目录 1.接口的概念 2.语法规则 3.接口的使用 4.接口的特性 总结&#xff1a; 5.实现多个接口 6.接口间的继承 1.接口的概念 接口就是公共的行为规范标准&#xff0c;大家在实现时&#xff0c;只要符合规范标准&#xff0c;就可以通用。 在Java中&#xff0c;接口可以看成…

C语言求解猴子分桃子

问题&#xff1a;海滩上有一堆桃子&#xff0c;五只猴子来分。第一只猴子把这堆桃子平均分为五份&#xff0c;多了一个&#xff0c;这只 猴子把多的一个扔入海中&#xff0c;拿走了一份。第二只猴子把剩下的桃子又平均分成五份&#xff0c;又多了 一个&#xff0c;它同样把多的…

【Java】Spring如何扫描自定义的注解?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋…

重温阿里云宝塔面板部署前后端项目

首先祝大家新年快乐啊&#xff01; 回到老家&#xff0c;便打算趁这一段空闲时间提升一下自己&#xff0c;重点是学习实践一下echarts相关内容&#xff0c;很多公司项目都需要实现可视化&#xff0c;所以在bilibili上找了黑马的一个教程开始学习&#xff0c;不同的是&#xff…

每日五道java面试题之java基础篇(五)

第一题. final、finally、finalize 的区别&#xff1f; final ⽤于修饰变量、⽅法和类&#xff1a;final 修饰的类不可被继承&#xff1b;修饰的⽅法不可被重写&#xff1b;修饰的变量不可变。finally 作为异常处理的⼀部分&#xff0c;它只能在 try/catch 语句中&#xff0c;…

Nginx与history路由模式:刷新页面404问题

使用nginx部署前端项目&#xff0c;路由模式采用history模式时&#xff0c;刷新页面之后&#xff0c;显示404。 路由模式 前端路由的基本作用为&#xff1a; ①当浏览器地址变化时&#xff0c;切换页面&#xff1b; ②点击浏览器后退、前进按钮时&#xff0c;更新网页内容&…

【python】网络爬虫与信息提取--requests库

导学 当一个软件想获得数据&#xff0c;那么我们只有把网站当成api就可以 requests库:自动爬取HTML页面&#xff0c;自动网络请求提交 robots协议&#xff1a;网络爬虫排除标准&#xff08;网络爬虫的规则&#xff09; beautiful soup库&#xff1a;解析HTML页面 工具&…

使用Cargo创建、编译与运行Rust项目

在 Rust 开发中&#xff0c;Cargo 是一个非常重要的工具&#xff0c;它负责项目的构建、管理和依赖管理。以下是如何使用 Cargo 创建、编译和运行 Rust 项目的详细步骤。 1. 创建新项目 首先确保你已经在计算机上安装了 Rust 和 Cargo。然后&#xff0c;在命令行中输入以下命…

美比特币ETF持仓跨越20万枚BTC大关,成为华尔街有史以来最受欢迎的ETF!

号外&#xff1a;教链内参2.10《内参&#xff1a;BTC真的存在春节模式吗&#xff1f;》 自SEC在2024年1月份一口气批准了十多支比特币现货ETF之后&#xff0c;机构们“不待扬鞭自奋蹄”&#xff0c;在吸收客户上使出浑身解数&#xff0c;激烈竞争。贝莱德&#xff08;IBIT&…

基于微信小程序的在线课堂的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【Linux】信号保存与信号捕捉处理

信号保存与信号捕捉 一、信号保存1. 信号的发送2. 理解信号保存&#xff08;1&#xff09;信号保存原因&#xff08;2&#xff09;信号保存概念 3. 信号保存系统接口&#xff08;1&#xff09;sigset_t&#xff08;2&#xff09;sigprocmask()&#xff08;3&#xff09;sigpend…

【机器学习】支持向量机(SVM)

支持向量机&#xff08;SVM&#xff09; 1 背景信息 分类算法回顾 决策树 样本的属性非数值 目标函数是离散的 贝叶斯学习 样本的属性可以是数值或非数值目标函数是连续的&#xff08;概率&#xff09; K-近邻 样本是空间&#xff08;例如欧氏空间&#xff09;中的点目标函…

《统计学简易速速上手小册》第9章:统计学在现代科技中的应用(2024 最新版)

文章目录 9.1 统计学与大数据9.1.1 基础知识9.1.2 主要案例&#xff1a;社交媒体情感分析9.1.3 拓展案例 1&#xff1a;电商销售预测9.1.4 拓展案例 2&#xff1a;实时交通流量分析 9.2 统计学在机器学习和人工智能中的应用9.2.1 基础知识9.2.2 主要案例&#xff1a;预测客户流…

CSS基础---新手入门级详解

CSS:层叠样式表 CSS&#xff08;Cascading Style Sheets,层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档添加样式&#xff08;字体、间距和颜色&#xff09;的计算机语言&#xff0c;css扩展名为.css。 实例: <!DOCTYPE html><html> <head><…

自然语言处理(NLP)—— 基本概念

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能和语言学领域的一个分支&#xff0c;它涉及到计算机和人类&#xff08;自然&#xff09;语言之间的相互作用。它的主要目标是让计算机能够理解、解释和生成人类语言的数据。NLP结…

二十、K8S-1-权限管理RBAC详解

目录 k8s RBAC 权限管理详解 一、简介 二、用户分类 1、普通用户 2、ServiceAccount 三、k8s角色&角色绑定 1、授权介绍&#xff1a; 1.1 定义角色&#xff1a; 1.2 绑定角色&#xff1a; 1.3主体&#xff08;subject&#xff09; 2、角色&#xff08;Role和Cluster…

树莓派编程基础与硬件控制

1.编程语言 Python 是一种泛用型的编程语言&#xff0c;可以用于大量场景的程序开发中。根据基于谷歌搜 索指数的 PYPL&#xff08;程序语言流行指数&#xff09;统计&#xff0c;Python 是 2019 年 2 月全球范围内最为流行 的编程语言 相比传统的 C、Java 等编程语言&#x…

文章页的上下篇功能是否有必要?boke112百科取消上下篇功能

也不知道是从什么时候开始&#xff0c;我们很多站长的博客网站文章页都会在文末添加上“上一篇”和“下一篇”功能&#xff0c;目的是进行站内SEO优化和方便用户阅读上下篇文章。 boke112百科不管是以前使用的Three主题还是现在使用的YIA主题&#xff0c;刚开始的文章页都是有…

微信,支付宝在线换钱平台系统源码

探索全新、全开源的在线换钱系统源码&#xff0c;它将以前所未有的方式改变您的支付体验。我们为您精心打造了一个集简单易用与安全高效于一身的优质产品&#xff0c;它采用最新的技术开发&#xff0c;为您带来前所未有的便捷与安心。 这款在线换钱系统源码设计直观&#xff0…