paddle nlp 3.0 全面拥抱开源大模型

首先安装神圣的飞桨自然语言处理框架3.0

pip install --upgrade paddlenlp==3.0.0b0

阿里云通义千问(Qwen2)系列大模型介绍

阿里云通义千问(Qwen2)是阿里云推出的一系列先进的大型语言模型,涵盖了从轻量级到超大规模的各种模型,包括混合专家模型(Mixture-of-Experts, MoE)。Qwen2系列在多个自然语言处理任务上展现了卓越的性能,并且在一些基准测试中表现出了对比前沿开源模型和商业模型的竞争力。以下是Qwen2系列模型的详细介绍:

1. Qwen/Qwen2-0.5B
  • 参数规模:5亿参数
  • 描述:这是Qwen2系列中的小型模型,适用于资源有限的环境。虽然参数量较小,但它依然提供了不错的语言理解和生成能力。
  • 应用:适合轻量级任务,如基础文本生成和分类。
2. Qwen/Qwen2-0.5B-Instruct
  • 参数规模:5亿参数
  • 描述:经过指令优化的Qwen2-0.5B版本,特别适用于需要指令跟随的任务,例如智能客服和对话系统。
  • 应用:适合任务导向的应用场景,能更好地处理自然语言指令。
3. Qwen/Qwen2-1.5B
  • 参数规模:15亿参数
  • 描述:中型模型,具备较强的自然语言处理能力,适合需要较高计算资源的任务。
  • 应用:适合一般的文本生成、翻译和摘要生成等任务。
4. Qwen/Qwen2-1.5B-Instruct
  • 参数规模:15亿参数
  • 描述:指令优化版本,针对任务指令处理进行了微调。
  • 应用:在指令驱动的任务中表现优异,如多步骤任务处理和复杂对话管理。
5. Qwen/Qwen2-7B
  • 参数规模:70亿参数
  • 描述:大型模型,能够处理复杂的自然语言任务,适合大规模的生成任务。
  • 应用:适用于复杂的对话系统、内容创作和多语言支持。
6. Qwen/Qwen2-7B-Instruct
  • 参数规模:70亿参数
  • 描述:指令优化的大型模型,增强了在执行自然语言指令任务中的表现。
  • 应用:复杂指令处理和多任务应用中表现突出。
7. Qwen/Qwen2-72B
  • 参数规模:720亿参数
  • 描述:超大规模模型,提供了极其强大的语言理解和生成能力,适合对精度和复杂度要求极高的任务。
  • 应用:适用于跨领域知识推理、复杂内容创作和多语言支持等高精度应用。
8. Qwen/Qwen2-72B-Instruct
  • 参数规模:720亿参数
  • 描述:经过指令优化的超大规模模型,特别适合需要高精度执行复杂指令的任务。
  • 应用:高精度的指令处理、复杂对话系统、大规模任务管理。

总结

Qwen2系列大模型覆盖了从轻量级到超大规模的各种应用需求,提供了强大的自然语言处理和生成能力。通过混合专家模型(MoE)和指令优化版本,这些模型能够在多种任务中展现出卓越的性能,适用于从基础应用到复杂企业级任务的不同场景。
有很多同学都在问没有微调过得qwen2是干嘛用的。其实这个是为了让一些同学在从零对齐训练任务中有一个基座。我们通过以下的代码来观察Qwen/Qwen2-0.5B的生成结果。

from paddlenlp.transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B", dtype="float16")
input_features = tokenizer("目前全世界的经济都是为一个事情服务的,将有限的自然资源、人力资源和资本资源分配到不同的生产和服务领域,以最大化社会福利和经济效率。", return_tensors="pd")
outputs = model.generate(**input_features, max_length=128)
print(tokenizer.batch_decode(outputs[0]))
['我是一个AI语言模型,我可以回答各种问题,包括但不限于:天气、新闻、历史、文化、科学、教育、娱乐等。请问您有什么需要了解的吗?']

['在这一过程中,政府扮演着重要的角色,其主要任务是提供公共产品和服务,
以满足社会成员的需要。政府的职能包括提供公共产品和服务、提供公共支出、
提供公共财政、提供公共政策、提供公共管理、提供公共法律、提供公共教育、
提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、
提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、
提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、
提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、
提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、
提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、
提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、提供公共法律、
提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、
提供公共服务、提供公共政策、提供公共管理、提供公共法律、提供公共教育、
提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、
提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管理、提供公共法律、提供公共教育、提供公共医疗、提供公共安全、提供公共福利、提供公共基础设施、提供公共服务、提供公共政策、提供公共管

通过这个实验我们可以看出来,没有对齐微调过得qwen2-0.5B是无法进行有效的问答的。那么大一些参数的qwen2-1.5B是否可以进行有效问答呢。无限重复的生成到最大的长度是典型的生成式语言模型的

from paddlenlp.transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-1.5B")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-1.5B", dtype="float16")
input_features = tokenizer("目前全世界的经济都是为一个事情服务的,将有限的自然资源、人力资源和资本资源分配到不同的生产和服务领域,以最大化社会福利和经济效率。", return_tensors="pd")
outputs = model.generate(**input_features, max_length=128)
print(tokenizer.batch_decode(outputs[0]))

['这个事情就是____。\nA. 促进经济增长\nB. 促进社会公平\nC. 促进社会和谐\nD.
促进社会进步\n答案:\nA\n\n下列关于我国古代文学常识的表述,不正确的一项是____。\nA.
《诗经》是我国最早的一部诗歌总集,收录了从西周到春秋时期的诗歌305篇,也称“诗三百”\nB.
《楚辞》是我国第一部浪漫主义诗歌总集,由西汉刘向辑录而成,东汉王逸作《楚辞章句》\nC.
《离骚》是我国古代最长的抒情诗,也是浪漫主义诗歌的代表作,作者屈原是战国时期楚国人\nD.
《古诗十九首》是东汉末年文人五言诗的选辑,是汉乐府民歌中保存最丰富、最有代表性的作品\n答案:\nB\n\n下列关于我国古代文学常识的表述,不正确的一项是____。\nA.
《诗经》是我国最早的一部诗歌总集,收录了从西周到春秋时期的诗歌305篇,也称“诗三百”\nB.
《楚辞》是我国第一部浪漫主义诗歌总集,由西汉刘向辑录而成,东汉王逸作《楚辞章句》\nC.
《离骚》是我国古代最长的抒情诗,也是浪漫主义诗歌的代表作,作者屈原是战国时期楚国人\nD.
《古诗十九首》是东汉末年文人五言诗的选辑,是汉乐府民歌中保存最丰富、最有代表性的作品\n答案:\nB\n\n下列关于我国古代文学常识的表述,不正确的一项是____。\nA.
《诗经》是我国最早的一部诗歌总集,收录了从西周到春秋时期的诗歌305篇,也称“诗三百”\nB.
《楚辞》是我国第一部浪漫主义诗歌总集,由西汉刘向辑录而成,东汉王逸作《楚辞章句》\nC.
《离骚》是我国古代最长的抒情诗,也是浪漫主义诗歌的代表作,作者屈原是战国时期楚国人\nD.
《古诗十九首》是东汉末年文人五言诗的选辑,是汉乐府民歌中保存最丰富、最有代表性的作品\n答案:\nB\n\n下列关于我国古代文学常识的表述,不正确的一项是____。\nA.
《诗经》是我国最早的一部诗歌总集,收录了从西周到春秋时期的诗歌305篇,也称“诗三百”\nB.
《楚辞》是我国第一部浪漫主义诗歌总集,由西汉刘向辑录而成,东汉王逸作《楚辞章句》\nC.
《离骚》是我国古代最长的抒情诗,也是浪漫主义诗歌的代表作,作者屈原是战国时期楚国人\nD.
《古诗十九首》是东汉末年文人五言诗的选辑,是汉乐府民歌中保存最丰富、最有代表性的作品\n答案:\nB\n\n下列关于我国古代文学常识的表述,不正确的一项是____

通过观察我们发现没有进行对齐微调的qwen2-1.5B也是无法正常进行问答的。

from paddlenlp.transformers import AutoTokenizer, AutoModelForCausalLM
from tqdm import tqdm
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-1.5B-Instruct")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-1.5B-Instruct", dtype="float16")
input_features = tokenizer("目前全世界的经济都是为一个事情服务的,将有限的自然资源、人力资源和资本资源分配到不同的生产和服务领域,以最大化社会福利和经济效率。", return_tensors="pd")
for i in tqdm(range(100)):
    outputs = model.generate(**input_features, max_new_tokens=128)
print(tokenizer.batch_decode(outputs[0]))

100条的最大128token的生成输出序列长度总共用时972秒平均每条结果生成用时9.72s。
100%|██████████| 100/100 [16:12<00:00, 9.72s/it]

['而金融市场的核心功能就是资源配置,无论是利率、汇率还是股票价格等金融产品及其价格本身都应当体现资源配置的功能。\n在配置过程中会受到很多因素的影响,其中包括市场上的金融参与者及其行为特征以及国家政府的行为(主要体现在货币政策和财政政策上),而且金融市场中还会包含其他经济主体,这些主体包括居民投资者、商业银行、证券公司以及其他金融机构,它们的行为都会影响金融市场产品的定价以及资源配置的方向,因此金融市场的发展会很大程度地依赖于所有参与者的有效互动,这就使得金融市场具有高度的复杂性。对于金融市场的未来发展而言,其核心问题在于提高市场运行的']
from paddlenlp.transformers import AutoTokenizer, AutoModelForCausalLM
from tqdm import tqdm
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-7B-Instruct")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-7B-Instruct", dtype="float16")
input_features = tokenizer("目前全世界的经济都是为一个事情服务的,将有限的自然资源、人力资源和资本资源分配到不同的生产和服务领域,以最大化社会福利和经济效率。", return_tensors="pd")
for i in tqdm(range(1)):
    outputs = model.generate(**input_features, max_new_tokens=128)
print(tokenizer.batch_decode(outputs[0]))

100%|██████████| 1/1 [00:09<00:00, 9.80s/it]

['在这样一个体系中,我们面临的挑战是如何在满足当前需求的同时,确保未来世代也能享受到可持续的发展。\n1. 优化资源配置:通过技术创新和政策引导,实现资源的高效利用和循环利用,减少浪费和污染。例如,发展清洁能源、推广循环经济、提高能效标准等措施,可以降低对非可再生资源的依赖,同时促进经济的绿色转型。\n2. 可持续发展策略:实施可持续发展战略,注重经济、社会和环境三方面的平衡发展。这包括推动绿色金融、促进公平就业、加强环境保护法规、支持生态农业、发展低碳交通系统等措施']

接下来我们看看生成速度。这里限制了生成条件为输出最大长度为128

for i in tqdm(range(10)):
    outputs = model.generate(**input_features, max_new_tokens=128)
print(tokenizer.batch_decode(outputs[0]))

可以看出生成10条128 token长度的序列的在32GB v100上所需要的时间是97秒,平均生成每条数据用时9.7秒。

100%|██████████| 10/10 [01:37<00:00,  9.72s/it]

['这种分配方式被称为____。\nA. 经济结构\nB. 经济组织\nC. 经济体系\nD. 经济制度\n答案:\n\n经济结构\n\n在以下关于经济结构的论述中,哪一个是正确的?____\nA. 经济结构是指一个国家或地区中所有经济活动的总和。\nB. 经济结构包括劳动力、资本、自然资源、技术和市场等组成部分,它们之间的相互作用决定了经济的整体表现。\nC. 经济结构主要关注的是货币流通速度和通货膨胀率的关系。\nD. 经济结构是一个静态的概念']
for i in tqdm(range(10)):
    outputs = model.generate(**input_features, max_new_tokens=256)
print(tokenizer.batch_decode(outputs[0]))

可以看出生成10条256token长度的序列的在32GB v100上所需要的时间是195秒,平均生成每条数据用时19.5秒。

100%|██████████| 10/10 [03:15<00:00, 19.58s/it]

[‘这个过程被称为资源分配或资源配置。\n资源分配是经济学的核心问题之一,涉及到如何决定将有限的资源用于生产各种商品和服务,以满足人类的需求和欲望。在市场经济中,资源分配通常通过市场机制来实现,即价格信号指导资源流向最能有效利用它们的地方。供给与需求的相互作用决定了商品和服务的价格,进而影响了资源的分配。在供给大于需求的情况下,价格下降,促使资源向其他用途流动;反之,在需求超过供给的情况下,价格上涨,鼓励资源投入更多生产这些商品或服务。\n\n政府也可能通过政策和计划参与资源分配,以实现特定的社会目标,如促进经济增长、减少贫困、保护环境等。这可以通过直接提供公共物品、实施税收政策、补贴、管制以及其他政策措施来实现。\n\n随着技术进步、人口增长、全球化和环境变化等因素的影响,资源分配面临着不断的变化和挑战。例如,技术创新可以提高资源使用效率,但同时也可能引发行业结构的变化和就业市场的调整。全球化的加深使得资源和资本可以在更广泛的地理范围内流动,增加了国际间的经济联系和竞争。环境约束对资源分配提出了新的要求,强调可持续发展和环境保护的重要性。\n\n总之,资源分配是一个动态而复杂的过程,它不仅涉及经济’]

观察生成结果发现生成结果的尾部没有被完整生成出来。所以我们继续加大max_new_tokens。看看模型到底怎么回复这个问题。

outputs = model.generate(**input_features, max_new_tokens=512)
print(tokenizer.batch_decode(outputs[0]))

[‘这个过程被称为资源配置,是经济学的核心概念之一。\n\n资源配置的目的是为了满足人们的需求和欲望,而这些需求和欲望是无限的,但可供满足它们的资源是有限的。因此,如何有效地利用这些有限的资源来满足最大数量的人的最大化需求,成为了资源配置的关键问题。\n\n资源配置的方式主要有两种:计划经济和市场经济。\n\n在计划经济中,政府或中央计划机构决定生产和分配资源。这种模式通常在社会主义国家采用,通过国家规划来指导工业、农业等各个领域的生产活动。然而,由于信息不对称、激励机制不完善等问题,计划经济往往难以实现高效的资源配置。\n\n相比之下,市场经济则通过价格机制来调节资源的分配。在这个体系中,供给和需求决定了商品和服务的价格,而价格的变化又引导着资源在不同行业和企业之间的流动。市场经济的优势在于它能够根据消费者的偏好和市场的变化迅速调整资源分配,实现更高的经济效率。同时,市场竞争也促使企业提高生产效率和产品质量,促进技术创新。\n\n资源配置的有效性还受到许多因素的影响,包括市场结构(如垄断、寡头垄断、竞争)、法律法规、政策环境、技术进步以及社会价值观等。在实践中,不同的经济体可能结合使用计划经济和市场经济的元素,以适应特定的社会经济条件和目标。总之,资源配置是一个复杂且动态的过程,旨在通过合理分配有限资源来最大限度地提高社会的整体福祉。<|im_end|>’]

结尾出现的这个special token属实让人意外。这样的结果可以跟paddlenlp提issue了。

outputs = model.generate(**input_features, max_new_tokens=1024)
print(tokenizer.batch_decode(outputs[0]))
['这种分配方式通常被称为资源配置。\n\n在市场经济中,资源配置主要由供需关系、价格机制和竞争驱动。当商品或服务的需求增加时,价格会上涨,这会激励生产者增加供给,从而调整供给与需求之间的平衡。同样,成本和利润的考量也促使企业在资源分配上做出决策,以实现最大化的经济效益。\n\n在计划经济体系下,资源配置则更多地由政府决定,通过中央计划制定生产计划、分配资源和控制价格。这样的系统旨在实现特定的社会目标,如公平分配资源、保障基本需求等。\n\n无论哪种体系,资源配置的核心目标都是为了提高效率、促进经济增长、满足社会需求以及优化生活质量。然而,不同体系在实现这一目标的过程中可能面临不同的挑战和局限性,包括市场失灵、信息不对称、激励机制设计等。\n\n总之,资源配置是全球经济运行的基础,它关乎如何最有效地利用有限资源来满足人类的需求和欲望,是一个复杂而多维的过程,需要考虑经济、社会、政治等多个层面的因素。<|im_end|>']

最后我们再试一试2048的最大生成序列长度。

outputs = model.generate(**input_features, max_new_tokens=2048)
print(tokenizer.batch_decode(outputs[0]))

[‘然而,在实现这一目标的过程中,我们面临着许多挑战,包括资源浪费、环境污染、收入不平等和社会不公正等。\n为了更好地理解和解决这些问题,经济学作为一门学科,一直在不断发展和创新。传统的经济学理论主要关注于市场机制如何通过供需关系来决定资源的分配,以及政府如何通过政策来调节市场失灵。然而,随着全球化、技术进步和环境问题的加剧,经济学家们开始探索新的理论框架和技术方法,以应对更加复杂多变的经济环境。\n近年来,新兴的经济学领域如行为经济学、发展经济学、环境经济学、数字经济、金融经济学等,都为传统经济学注入了新的活力。这些领域不仅扩展了经济学的研究范围,也提供了更深入的视角来分析和解决现实世界中的经济问题。\n行为经济学结合心理学和社会学研究,探讨了人们在决策过程中的心理偏见和认知限制,从而影响经济行为。例如,人们可能因为害怕损失而避免投资,或者因为追求即时满足而做出短期决策,这些行为可能会导致市场失灵或资源错配。\n发展经济学专注于研究贫困、经济增长、教育、健康与社会发展之间的相互作用。它关注于理解不同国家和地区在经济发展过程中遇到的挑战,并提出政策建议来促进可持续增长和减少不平等。\n环境经济学强调了环境因素对经济活动的影响,以及如何通过市场机制、政策工具和激励措施来促进环境保护和资源可持续利用。它探讨了气候变化、污染、自然资源管理等问题,并提出了绿色经济和循环经济的概念。\n数字经济研究的是信息技术和互联网如何改变商业模式、消费者行为和经济结构。它涉及到大数据、人工智能、区块链等前沿技术的应用,以及它们如何影响就业、隐私保护和数字鸿沟等问题。\n金融经济学则深入研究金融市场、金融机构和金融产品,探讨风险、资产定价、信贷市场和金融危机等问题。它对于理解金融市场波动、金融创新和监管政策具有重要意义。\n总之,经济学作为一个不断发展的学科,通过不断探索新领域、引入跨学科方法和技术创新,为解决全球面临的经济和社会问题提供了更全面和深入的理解。通过合作与创新,经济学能够为构建更加公平、可持续和高效的社会经济体系提供指导和支持。<|im_end|>’]

基于飞桨原生的生成速度确实让人苦恼。大模型作为2024年的核心生产工具,肯定是生成速度越快,有限设备使用效率越高才可以。

飞桨(PaddlePaddle)提供了高性能的大模型推理工具,特别是PaddleNLP库,支持用户在进行大模型推理时获得显著的性能提升。以下是关于飞桨高速大模型推理工具的介绍:

飞桨高速大模型推理工具概述

PaddleNLP不仅提供了常见的模型推理能力,还集成了高性能推理的功能。通过内置的动态插入和全环节算子融合策略,飞桨能够加速并行推理,提升推理速度和效率。这些优化使用户能够在更短的时间内处理更复杂的任务。

环境准备

首先,用户需要将代码克隆到本地并进入到运行目录:

git clone https://github.com/PaddlePaddle/PaddleNLP.git
cd PaddleNLP/llm

在使用高性能推理之前,需要安装相应的开发版本和自定义算子库。对于GPU设备,用户可以按照以下步骤安装:

cd ./paddlenlp/csrc && python setup_cuda.py install

模型推理方式

PaddleNLP支持两种主要的推理方式:动态图推理和静态图推理。动态图推理适用于快速验证模型效果,而静态图推理则适合在生产环境中使用,能够进一步优化性能。

动态图推理

可以通过以下命令进行动态图推理:

python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --data_file ./data/dev.json --dtype float16

如果需要推理LoRA或PrefixTuning模型,可以额外传入对应的路径:

--lora_path ./checkpoints/llama_lora_ckpts
--prefix_path ./checkpoints/llama_prefix_ckpts
静态图推理

静态图推理分为两步:

  1. 首先将模型导出为静态图:

    python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --output_path ./inference --dtype float16
    
  2. 然后使用导出的静态图进行推理:

    python ./predict/predictor.py --model_name_or_path ./inference --data_file ./data/dev.json --dtype float16 --mode static
    

高性能推理功能

飞桨的高性能推理功能包括:

  • 算子融合策略:通过融合计算算子减少计算冗余,提升计算效率。
  • BlockAttention:一种基于PageAttention思想的优化策略,能够动态分配缓存空间以节省显存,提升并行推理的吞吐量。
  • INT8量化推理:支持权重量化(WINT8)和激活量化(PTQ-A8W8),进一步降低计算成本。

用户可以选择关闭或打开BlockAttention功能,分别使用不同的推理命令来调整性能。例如,关闭BlockAttention的推理命令为:

python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16

打开BlockAttention的推理命令为:

python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --block_attn

支持的模型与推理配置

飞桨高性能推理支持多种大模型,如LLaMA1/2、ChatGLM、GPT-3、BaiChuan等。用户可以根据需求选择不同的模型和量化方式进行推理。

结论

通过PaddleNLP提供的高性能大模型推理工具,用户能够在保留高精度的前提下,显著提升推理速度和效率。无论是使用动态图还是静态图推理,飞桨都为用户提供了灵活的配置选项,以满足不同的应用需求。

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值