MindIE DeepSeek MTP特性定位策略

简介: 最近MindIE开始支持DeepSeek MTP(multi token prediction)特性了,用于推理加速。但是有些开发者打开MTP开关后,没有发现明显的性能提升。这篇文章提供一种定位策略。

最近MindIE开始支持DeepSeek MTP(multi token prediction)特性了,用于推理加速。但是有些开发者打开MTP开关后,没有发现明显的性能提升。这篇文章提供一种定位策略。

原理很简单,就是看一下每次MTP推理后,模型是输出1个token还是多个token。由于MTP的token处理算法是用python实现的,所以可以在镜像的python代码中添加日志,可以在2个地方加日志查看MTP的采信率(也就是verify的成功比例)。

首先可以在MindIE镜像的/usr/local/lib/python3.11/site-packages/mindie_llm/text_generator/plugins/mtp/mtp_plugin.py 路径中找到verify_greedy_one_batch()函数,然后打印相关参数。

    @staticmethod
    def verify_greedy_one_batch(verify_guess_tokens, next_guess_tokens):
        gg = 0
        for eg, guess_tokens in enumerate(verify_guess_tokens):
            correct = next_guess_tokens[eg]
            guess = guess_tokens
            if guess != correct:
                break
            gg += 1

或者在 /usr/local/lib/python3.11/site-packages/mindie_llm/text_generator/plugins/plugin_manager.py里面的init函数和generate_token函数增加如下代码:

from ...utils.log.logging import logger  # 新增
class PluginManager:
    def __init__(...):
        self.all_token_num = 0
        self.all_decode_count = 0
        self.all_prefill_count = 0
        ...
    @timer.track_time_async('generate_token')
    def generate_token(self, input_metadata: InputMetadata):
        ...
        span_end(prof)

        if not input_metadata.is_dummy_batch:
            if not input_metadata.is_prefill:
                for i in range(input_metadata.batch_size):
                    next_tokens = generation_output.token_ids[i]
                    if -1 in next_tokens:
                        first_neg_one_index = np.argmax(next_tokens == -1)
                        next_tokens = next_tokens[:first_neg_one_index]
                    self.all_token_num += len(next_tokens)
                    self.all_decode_count += 1
            logger.error(f"self.all_token_num is {self.all_token_num}, self.all_decode_count is {self.all_decode_count}, self.all_prefill_count is {self.all_prefill_count}. Ratio is {self.all_token_num / self.all_decode_count}")

            if input_metadata.is_prefill:
                for _ in range(input_metadata.batch_size):
                    self.all_prefill_count += 1

        generation_output.trace_ids = trace_ids
目录
相关文章
|
11月前
|
JSON 自然语言处理 Kubernetes
MindIE PD分离部署Q&A
使用mindie进行PD分离部署
564 28
|
11月前
|
Kubernetes 调度 开发者
qwen模型 MindIE PD分离部署问题定位
使用MindIE提供的PD分离特性部署qwen2-7B模型,使用k8s拉起容器,参考这个文档进行部署:https://www.hiascend.com/document/detail/zh/mindie/100/mindieservice/servicedev/mindie_service0060.html,1个Prefill,1个Decode。 最后一步测试推理请求的时候,出现报错:model instance has been finalized or not initialized。
667 1
|
11月前
|
缓存
attention计算过程的一些细节
attention计算的一些细节解释
365 30
|
11月前
|
存储 算法 调度
|
10月前
|
人工智能 算法 PyTorch
MindIE-LLM ATB模型推理全流程解析
最近,有很多小伙伴问我,如果他们想自己基于MindIE镜像中的文件适配新模型,可以怎么做? 为了实现这个目标,首先需要了解MindIE-LLM模型在推理过程中的代码调用流程,然后根据新模型的算法进行适配。
397 1
|
10月前
|
机器学习/深度学习 存储 缓存
大模型推理显存和计算量估计方法
最近做吞吐量调试涉及到输入batch_size的设置,为了把算力和显存用起来,同时不触发out of memory,需要提前估计大模型推理过程中的显存占用
1632 5
|
12月前
|
测试技术 Shell
MindIE LLM场景快速上手实验
MindIE是昇腾自研推理框架,本实验手册可指导小白用户快速掌握MindIE在LLM(large language model)场景的基本功能,包括:大模型推理功能测试、大模型性能测试、大模型精度测试、服务化推理部署、benchmark测试等。
838 3
|
数据可视化 vr&ar
【Eviews实战】——ARIMA模型建模
【Eviews实战】——ARIMA模型建模
|
机器学习/深度学习 存储 缓存
ORCA:基于持续批处理的LLM推理性能优化技术详解
大语言模型(LLMs)的批处理优化面临诸多挑战,尤其是由于推理过程的迭代性导致的资源利用不均问题。ORCA系统通过引入迭代级调度和选择性批处理技术,有效解决了这些问题,大幅提高了GPU资源利用率和系统吞吐量,相比FasterTransformer实现了最高37倍的性能提升。
817 26