<span class=“js_title_inner“>vLLM 实战</span>

vLLM 推理引擎性能分析基准测试 本文为 vLLM 推理引擎根据官方提供的数据集进行的性能基准测试,主要测试分析 --enable-chunked-prefill 的启用/禁用以及 --max-num-batched-tokens 参数的调整对性能的影响情况... 阅读详情

引言

随着人工智能技术的飞速发展,以及今年以来 ChatGPT 的爆火,大语言模型 (Large Language Model, LLM) 受到越来越多的关注。

为了实现 LLM 部署时的推理优化,全球各地有众多团队做出了各种优化框架。本文以加州大学伯克利分校开发的 vLLM 框架为例,进行实战探索。

1. 整体介绍

根据公开文档中的实验结果, vLLM 吞吐量比 Hugging Face Transformers 高出 24 倍,比 TGI 高出 3.5 倍。

vLLM 整体框架如下图所示。

其中的关键技术点包括:

  • KVCache 显存优化

  • PagedAttention

  • Continuous Batching

笔者通过实际使用,认为该框架优点如下:

  • 调试方便: 主框架由 Python 实现,便于用户断点调试。

  • 系统设计工整规范: LLMEngine、Scheduler、Worker 结构清晰,初学者可以方便地理清脉络。

  • 推理速度快: 经过理论计算与实测, 8 卡 A100-40G 足以支持千人试用。

2. offline_inference 示例复现分析

(1) 调试环境配置

为方便复现,笔者制作了 dockerfile 用于编译 base 镜像,base 镜像把 vllm 的依赖库都安装好,基于 base 镜像直接再安装 vllm 库即可复现。

docker build -t vllm_ci-benchmark:base -f ci/docker/ci-benchmark-base.dockerfile .

docker build -t vllm_ci-benchmark:v1 -f ci/docker/ci-benchmark.dockerfile .

镜像是基于 nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04 (95d242fe9108) (9.83GB) 制作而来,篇幅所限,此处只展示 ci-benchmark.dockerfile 内容。

FROM vllm_ci-benchmark:base

COPY . /code/vllm

RUN cd /code/vllm && \
    python3 -m pip install -e . && \
    rm -rf ~/.cache

而后基于 vllm_ci-benchmark:v1 镜像创建容器,配置 vscode 断点调试环境,便于跟踪 offline_inference 示例的全流程。

(2) 模型下载与复现

提前从 facebook/opt-125m 下载 pytorch_model.bin 格式的模型和源码文件夹,而后将 offline_inference 中的模型路径改为本地路径,复现结果如下图所示。

(3) offline_inference 流程梳理

(a) Create sampling_params

根据用户设置,创建采样参数类对象 sampling_params,只指定 temperature=0.8, top_p=0.95 的情况下,其他默认值如下所示。

SamplingParams(n=1,
               best_of=1,
               presence_penalty=0.0,
               frequency_penalty=0.0,
               temperature=0.8,
               top_p=0.95,
               top_k=-1,
               use_beam_search=False,
               stop=[],
               ignore_eos=False,
               max_tokens=16,
               logprobs=None)

各参数的取值范围见 vllm/sampling_params.py 里相关 _verify_xxx 函数。

(b) Create an LLM

LLM 类对象的构造函数中,首先创建 EngineArgs 类对象 engine_args 如下。

EngineArgs(model='/bigdata/shared/models/huggingface/opt-125m',
           tokenizer='/bigdata/shared/models/huggingface/opt-125m',
           tokenizer_mode='auto',
           trust_remote_code=False,
           download_dir=None,
           use_np_weights=False,
           use_dummy_weights=False,
           dtype='auto',
           seed=0,
           worker_use_ray=False,
           pipeline_parallel_size=1,
           tensor_parallel_size=1,
           block_size=16,
           swap_space=4,
           gpu_memory_utilization=0.9,
           max_num_batched_tokens=2560,
           max_num_seqs=256,
           disable_log_stats=True,
           quant_mode=None)

然后基于 engine_args ,构造 LLM 类内核心变量 llm_engine ,最后添加一个类内计数器 request_counter。

self.llm_engine = LLMEngine.from_engine_args(engine_args)
self.request_counter = Counter()
(c) Generate

在 LLM.generate 的处理过程中,核心操作分为两步。

第一步是调用 LLM._add_request ,通过 LLM.llm_engine.add_request 将用户传入的请求添加到请求列表中,添加完后,请求列表 LLM.llm_engine.scheduler.waiting 中内容如下。

[ \
    SequenceGroup(request_id=0, sampling_params=SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, temperature=0.8, top_p=0.95, top_k=-1, use_beam_search=False, stop=[], ignore_eos=False, max_tokens=16, logprobs=None), num_seqs=1),
    SequenceGroup(request_id=1, sampling_params=SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, temperature=0.8, top_p=0.95, top_k=-1, use_beam_search=False, stop=[], ignore_eos=False, max_tokens=16, logprobs=None), num_seqs=1),
    SequenceGroup(request_id=2, sampling_params=SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, temperature=0.8, top_p=0.95, top_k=-1, use_beam_search=False, stop=[], ignore_eos=False, max_tokens=16, logprobs=None), num_seqs=1),
    SequenceGroup(request_id=3, sampling_params=SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, temperature=0.8, top_p=0.95, top_k=-1, use_beam_search=False, stop=[], ignore_eos=False, max_tokens=16, logprobs=None), num_seqs=1)
]

第二步是调用 LLM._run_engine,通过 LLM.llm_engine.step(),转到 LLM.llm_engine._run_workers 函数中进行处理。

在 LLM.generate 的处理过程中,LLMEngine, Scheduler, Worker 协作配合,LLMEngine 负责总控,Scheduler 负责调度,Worker 负责执行,脉络清晰,其设计思路很值得学习借鉴。

3. 总结

vLLM 框架通过 PagedAttention 等关键技术,在多 batch 推理时,与传统 Hugging Face Transformers 框架相比,大幅提高了推理速度和吞吐量。

本文针对 vLLM 框架的 offline_inference 示例进行了复现与梳理分析,接下来准备进一步深入探索 PagedAttention 等特性。受限于笔者知识水平,文中可能会存在某些理解身上的偏差,欢迎各位大佬进行交流,共同进步。

只需 24G 显存,用 vllm 跑起来 Yi-34B 中英双语大模型 上次介绍了用 vllm 去部署 mixtral 8x7b 的 GPTQ 量化版本,只是跑了一下 benchmark,这次玩一下 Yi-34b 这个模型的量化版本,看看怎么使用 vllm 直接暴露出来一个 API 服务。 阅读详情

相关推荐

利用vLLM本地安装和配置大语言模型-猎户星空

这次本地安装和配置是通过一系列Dockerfile指令,构建了一个兼容OpenAI接口标准的vLLM推理框架镜像。这意味着用户可以轻松地在自己的电脑上设置并启动大语言模型的推理服务。如果你是第一次使用Docker(一个可以让软件在隔离环境运行的工具),不用担心。你可以去Docker的官方网站,那里有很多教程可以帮助你开始。确保你已经在你的电脑上安装了Docker。

Michael的博客 2880

【vLLM】【基准测试】:vLLM部署大模型的基准测试

从以上基准测试来看,在使用Qwen2___5-Coder-32B-Instruct-GPTQ-Int8和QwQ-32B-Preview模型进行vllm推理时,模型本身就比较大,外加生成的文本质量高就会带来更多的负担,更改为7B级别的chat模型之后,会有比较高的一个正确率,但是相应的文本质量就会降低,综上vllm启动的OpenAI的APi端口,有不错的稳定性,并不会因为大量的请求出现宕机的情况,但是由于本身算力的限制和迫切生成高质量文本的本能,会导致请求的成功率比较低,换言之,即API的并发性不高。模型。

qq_53690996的博客 6349

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

m0_45877477的博客 1631

vLLM 实战

引言随着人工智能技术的飞速发展,以及今年以来 ChatGPT 的爆火,大语言模型 (Large Language Model, LLM) 受到越来越多的关注。为了实现 LLM 部署时的推理优化,全球各地有众多团队做出了各种优化框架。本文以加州大学伯克利分校开发的 vLLM 框架为例,进行实战探索。1. 整体介绍根据公开文档中的实验结果, vLLM 吞吐量比 Hugging Face Transfo...

LF_AI的博客 3081

Ubuntu中snap简单介绍

通过Snap可以安装众多的软件包。需要注意的是,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间 介绍一些常用命令,有点类似docker 1、查看已经通过snap安装的snap包 snap list可以查看 2、可以搜索想要的snap包,例如tomcat snap search tomcat

icanflying的博客 4万+

发那科机器人编程软件fanuc roboguide授权补丁_工业机器人离线编程与应用:ROBOGUIDE V8.3版本的工程文件创建...

欢迎关注我们ROBOGUIDE是发那科机器人公司提供的一个离线编程工具,可模拟现实中的机器人和周边设备的布局,通过虚拟TP示教来模拟机器人的运动轨迹,同时可以验证方案的可行性和准确的周期时间。ROBOGUIDE是一款核心应用软件,具体的还包括搬运、弧焊、喷涂等其他模块。以最新的8.3版本为例进行讲解,对于未注册的版本将有30天的免费使用期限。开始菜单击开始菜单中的HandingPRO启动程序,第一...

weixin_39791446的博客 2924

<span class=“js_title_inner“>使用 vLLM、LMCache 和 Ceph 进行 KV 缓存</span>

我们相信我们的方法可能是最易于访问的,因为它使用标准的 S3 等对象协议、标准的 TCP/IP 网络,适用于来自不同供应商的各种加速器,并且因为 Ceph 对象通过 OpenShift Data Foundation 和 IBM Fusion 普遍部署在 OpenShift 集群中。在我们测试时,vLLM 生产堆栈不支持我们的端到端工作流程,因此我们创建了定制的 vLLM 容器镜像,其中包含了 LMCache 开发版本,包括一个包含了最新 **vllm-gaudi** 开发的用于我们测试的镜像。

NewTyun的博客 75

从原理到落地:监控 SAP OData bgRFC 队列的全景实践指南

摘要(150字) 本文系统讲解SAP Gateway/Backend场景中bgRFC队列的监控方法。内容涵盖:1)监控必要性——确保异步可靠传输,及时识别失败消息;2)两种服务质量(EO/EOIO)对监控策略的影响;3)通过事务码SBGRFCMON和SPRO路径访问监控界面;4)关键授权S_BGRFC的配置要求;5)详细操作指南包括筛选条件和动作选项;6)标准巡检脚本;7)三个典型案例(认证错误、顺序阻塞、调度压力)的诊断与修复方案。全文提供完整的监控方法论和实战指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 284

<span class=“js_title_inner“>面向云原生时代的 LLM 推理|Kthena入局了!!!</span>

Kthena 是一个云原生的高性能系统,专为 Kubernetes 量身打造,用于大型语言模型 (LLM) 推理的路由、编排和调度。通过拓扑感知调度、键值缓存感知路由和预填充解码 (PD) 解耦等特性,Kthena 显著提高了 GPU/NPU 利用率和吞吐量,同时最大限度地降低了延迟。耦合调度限制了优化。作为 Volcano 的一个子项目,Kthena 将 Volcano 的功能扩展到 AI 训练之外,为整个 AI 生命周期创建了一个统一的端到端解决方案。一款高性能多模型路由器,作为所有推理请求的入口点。

u012516914的专栏 718

【中项】案例分析 | 答题技巧 | 备考 

对偏差原因的分析和对项目未来趋势的理解。如果偏差是由一次性事件或特殊原因引起的,那么这种偏差是非典型的,意味着未来的绩效将回归到预期的绩效水平。例如,如果项目初期的CPI小于1,原因是意外的自然灾害导致成本增加,那么这种偏差被认为是非典型的,因为它不太可能在未来重复发生。例如,如果项目初期的CPI小于1,且原因是低效的团队协作,那么这种偏差被认为是典型的,因为它可能在整个项目生命周期中持续存在。在实际应用中,项目经理通常会结合CPI、SPI和偏差趋势图等工具,综合分析偏差的性质,以制定合理的项目控制策略。

静谧、淡雅 1244

yolov11添加P2小目标检测头与添加P6超大目标检测头

本文介绍了YOLO目标检测模型中上下采样的原理及应用。上采样通过插值算法放大特征图,YOLO通常采用最近邻插值;下采样则通过带步长的卷积缩小特征图提取高层语义特征。文章详细阐述了这两种操作在YOLO中的实现方式、结构特点及对称性问题,指出下采样后会使用C3模块进行特征整合,上采样后通过concat抑制分割感。此外,还分析了不同分辨率特征图适合检测不同尺寸目标的原因,并提出添加4倍小目标检测头的方法,即对上采样后的特征进行concat和C3模块处理。最后给出了YOLOv5原模型结构和添加4倍检测头后的结构对比

m0_64661770的博客 820

<span class=“js_title_inner“>KCD 杭州站 x OpenInfra Days China 参会指南</span>

本次会议将深入解读 vLLM、LLM-D 等核心框架在结构化输出、工具调用等生产环境中的关键能力,分享阿里云、DaoCloud 等团队在模型推理优化与云原生部署中的一手实战经验,助力开发者将 AI 应用从“跑通”推向“稳定生产”。多个议题将带你直面算力成本挑战,揭秘基于 Karmada 的多集群调度、Serverless 资源管理等前沿实践,学习头部企业在提升资源利用率、构建成本最优弹性体系方面的创新方案,实现算力资源的高效利用与精细化管理。8:30 - 9:30 签到,9:30 会议正式开始。

k8s 生态 44

热视觉2:使用Python和OpenCV从图像中测量温度

这篇博客将介绍学习热/中远红外视觉的基础知识,gray8 和 gray16 图像(即最常见的热成像格式)之间的差异,学习如何使用Python和OpenCV从热图像中的每个像素点测量温度,并以不同的调色板显示结果。以及如何实时计算视频流和UVC热像仪的每个像素温度。

qq_40985985的博客 6712

<span class=“js_title_inner“>重磅发布!Qwen3:思深行速,全面开源,开启大模型新纪元</span>

在多个权威基准测试中,Qwen3-235B-A22B在代码、数学推理、通用能力等方面,表现出色,直面挑战 DeepSeek-R1、o1、o3-mini、Grok-3、Gemini-2.5-Pro 等顶级大模型。更强的推理能力,更灵活的应用模式,更广泛的多语言覆盖,再加上彻底开放的生态布局,让我们看到了大模型民主化未来的真正可能。这一次,Qwen3不仅在规模、性能和推理灵活性上实现了全方位突破,更以开放的姿态,将多个重量级模型悉数开源,标志着大模型生态迈入一个全新阶段。之间,精准平衡成本与效果。

傲雪滨锋 630

如何做好软件需求分析?

软件需求分析也称为系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。软件开发一般包括:可行性分析、需求分析、软件设计、软件开发、软件测试、软件实施、软件服务等步骤,需求分时软件开发的第一步骤。用户需求分析是指在系统设计之前和设计、开发过程中对用户需求所作的调查与分析,是系统设计、系统完善和系统维护的依据。

qq_41854911的博客 1415

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

<span class=“js_title_inner“>用 RL 做 LLM 后训练:半年踩过的坑与心得</span>

但 Corner Case 的覆盖恰恰是 RL 最大的魅力,相较于 SFT,RL 只需要准备好环境和 Questions,剩下的就无脑交给 GRPO 和 LLM 梭哈,它可以自动处理 OOD 和 Corner Cases。比如通过环境反馈加自然语言反思来合成数据,反思得到的轨迹的 logprob 是在有额外上下文的情况下获得的,和直接用 Question 推理的 logprob 是不一致的,所以重要性采样理论上不能直接用。如果非要很大的输出长度,就要非常小心超长轨迹和离群值,该过滤就过滤。

weixin_40920183的博客 54

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

<span class=“js_title_inner“>从 “对话“ 迈向 “行动“: 利用 FunctionGemma 打造下一代端侧智能体</span>

例如,您可以说 "在最上面一排种向日葵并浇水",模型会将此指令分解为具体的应用函数,比如 "种植作物 (plantCrop)" 或 "给作物浇水 (waterCrop)",并针对特定的网格坐标进行操作。在我们的 "Mobile Actions" 评估中,微调提升了模型的可靠性,将准确率从 58% 的基准线提高到 85%。: 您需要一个轻量级的边缘模型来处理本地操作,使您的系统能够在设备端即时处理常见指令,并且仅在遇到更复杂任务时才会调用更大规模的模型 (如 Gemma 3 27B)。

谷歌开发者 317

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

<span class=“js_title_inner“>AI Agent开发,未来三年必学!</span>

基于Ollama、Higress和vLLM、Ray、llama.cpp等工具,并以DeepSeek模型为例,实现模型的私有化部署方案,不仅解决了企业在引入AI技术时的后顾之忧,也为读者提供了可复用的技术框架。在《关于深入实施“人工智能+”行动的意见》的指引下,我国正加速推进人工智能与经济社会各领域的深度融合,力求通过科技、产业、消费、民生、治理及全球合作等多维度的创新,重塑生产生活范式,催生新质生产力。通过丰富的图示和清晰的逻辑,读者能够迅速建立对AI Agent的全面认知,为后续的学习打下坚实的基础。

idol24的博客 68

<span class=“js_title_inner“>Orval 中存在严重的代码注入漏洞,存在供应链安全风险</span>

安全公告提到,该漏洞的根源在于“x-enum-descriptions”字段,“该漏洞可导致不受信任的OpenAPI规范通过 x-enum-descriptions 字段将任意TypeScript/JavaScript代码注入生成的客户端中,而该字段在getEnumImplementation() 函数中未经适当转义就被嵌入。随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护难度越来越大。为此,我们推出“供应链安全”栏目。

smellycat000的专栏 53

<span class=“js_title_inner“>一键部署!OpenCloudOS 多项开源技术打造 “开箱即用” 的 AI 支撑底座</span>

面对这一挑战,OpenCloudOS 社区确立了“重心在OS,延展至AI”的技术原则,以及“成为' AI时代最好用的OS'” 的目标,聚焦打磨OS内核、调度器、驱动兼容性、安全模块等传统优势领域,为AI工作负载提供独特的OS层价值,通过三大关键举措和多项技术创新,显著降低触及和利用异构算力的门槛,让开发者或企业能更专注于算法与模型的创新。用户在选择 HAI 服务时,可直接选用该镜像,瞬间获得一个稳定、高性能、无需手动配置的 AI-ready 云服务器,极大简化了云上AI应用流程。

腾源会 138

<span class=“js_title_inner“>九坤量化开源IQuest-Coder-V1,代码大模型进入“流式”训练时代</span>

在代码效率评估中,IQuest-Coder-V1-40B-Instruct在Mercury基准上达到83.6分(Pass@1)和95.3分(Beyond@1),表明其不仅能生成正确代码,还能产生运行时间高效的结果;在Text-to-SQL任务中,该模型在Bird基准上达到70.5分,在Spider基准上达到92.2分,显示出卓越的语义解析和查询生成能力。在代理编码任务中,IQuest-Coder-V1-40B-Loop-Instruct在SWE-Bench Verified上达到76.2。

weixin_40920183的博客 109

<span class=“js_title_inner“>字节开源Seed-OSS模型,36B的理想尺寸,但中文好像不行</span>

好起来,这两个月,阿里、腾讯、字节、百度、DeepSeek、智谱、阶跃、百川、小红书、知乎、昆仑万维等等等,你能想到的大模型公司,都开源了。放出非合成数据版本模型,是一个亮点,大家都知道,在预训练阶段加入合成数据、指令数据,核心是为了给Base提点,榜单好看。当然我还没有真正测试中文上的场景,但没有训练应该也不会太好,毕竟数据是12T,也不是太多。昨天晚上,字节也开源了大模型-Seed-OSS,36B大小,有三个模型,Seed-OSS-36B-Base:预训练模型,,交个朋友吧,一起学习,一起进步!

56

<span class=“js_title_inner“>热门包管理器中存在多个漏洞,JavaScript 生态系统易受供应链攻击</span>

在VLT中,tarball 提取操作中的路径遍历可导致在系统上进行任意文件写,而位于 Bun 中的脚本执行白名单仅适用于包名称,而不适用于来源,导致攻击者可伪造包实现RCE。随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护难度越来越大。近年来,针对软件供应链的安全攻击事件一直呈快速增长态势,造成的危害也越来越严重。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的根本性、基础性问题。

smellycat000的专栏 45

<span class=“js_title_inner“>倒计时 3 天!代码通缩时代,AI 正在重塑开源!GOBI 2025 全球开源商业创新大会最新最全日程重磅发布,附参会指南!</span>

圆桌中,来自月之暗面(Kimi)、Dify.AI、Sealos、Zeabur、EezyCollab、觅深科技相关公司与产品负责人将毫无保留地分享,在 AI 的新底座之上,个人与企业如何进化能力、抓住新机。思想的碰撞不应只停留在屏幕和演讲中。从底层的操作系统,到工业、健康、安全、娱乐的垂直应用,这六家顶尖企业与社区,将共同为你呈现一个不再遥远、触手可及的具身智能时代。听声识人的安全卫士:来自得意音通的动态声纹密码锁,见证源自清华的国际领先技术,如何用你独一无二的声音,构筑物理世界的安全防线。

GOSIM2023的博客 68
上一篇: vLLM 实战
下一篇: LLM推理优化综述
Linux基金会AI&Data基金会
博客等级 码龄6年 100粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux基金会AI&Data基金会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值